{"version":3,"mappings":"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vsE,EAAO,KAAK,GANhCV,EAUX,KAAK68F,GAAgB,eACnB,OAAKQ,GAA4BR,GAAgB,cAAc,EAIxD78F,EACJ,SAAS,CAACs9F,GAAS,UAAW,UAAU,EAAGrwB,GAC1CA,EAAS,IAAI,WAAYvsE,EAAO,KAAK,GAEtC,SAAS,CAAC48F,GAAS,oBAAqB,UAAU,EAAGrwB,GACpDA,EAAS,IAAI,WAAYvsE,EAAO,KAAK,GARhCV,EAWX,QACE,OAAOA,CAAA,CAEb,EC9Ca89F,GAAqB,sBCJrBC,GAAY,CACvB,aACA,UACA,UACA,kBACA,WACA,WACA,aACA,kBACA,mBACA,kBACA,kBACA,kBACA,kBACA,YACA,mBACA,SACA,aACA,WACA,UACA,aACA,YACA,YACA,mBACA,WACA,iBACA,aACA,mBACA,aACA,kBACA,WACA,WACA,WACA,eACA,eACA,eACA,WACA,WACA,mBACA,iBACA,iBACA,iBACA,SACA,WACA,WACA,WACA,WACA,WACA,gBACA,gBACA,gBACA,qBACA,WACA,WACA,YACA,WACA,WACA,WACA,gBACA,WACA,UACA,WACA,SACA,eACA,gBACA,cACA,cACA,gBACA,gBACA,WACA,eACA,SACA,cACA,eACA,YACA,eACA,YACA,sBACA,gBACA,eACA,cACA,eACA,gBACA,eACA,eACA,cACA,cACA,cACA,WACA,YACA,iBACA,aACA,eACA,UACA,kBACA,gBACA,eACA,iBACA,iBACA,gBACA,eACA,oBACA,cACA,cACA,UACA,aACA,gBACA,iBACA,eACA,qBACA,qBACA,YACA,mBACA,gBACA,eACA,gBACA,UACA,eACA,mBACA,iBACA,0BACA,QACA,eACA,eACA,YACA,mBACA,cACA,iBACA,iBACA,cACA,eACA,eACA,kBACA,iBACA,iBACA,iBACA,cACA,YACA,YACA,YACA,iBACA,mBACA,aACA,oBACA,eACA,iBACA,yBACA,eACA,iBACA,mBACA,gBACA,gBACA,UACA,WACA,gBACA,cACA,iBACA,aACA,cACA,cACA,kBACA,mBACA,cACA,cACA,cACA,cACA,eACA,aACA,aACA,YACA,gBACA,kBACA,WACA,gBACA,uBACA,eACA,aACA,gBACA,aACA,aACA,aACA,aACA,kBACA,iBACA,sBACA,gBACA,gBACA,gBACA,wBACA,+BACA,0CACA,sBACA,aACA,mBACA,kBACA,kBACA,gBACA,sBACA,cACA,aACA,aACA,YACA,gBACA,cACA,cACA,oBACA,aACA,YACA,YACA,cACA,cACA,WACA,cACA,kBACA,kBACA,cACA,iBACA,eACA,aACA,aACA,aACA,oBACA,cACA,aACA,YACA,gBACA,gBACA,gBACA,gBACA,gBACA,cACA,cACA,cACA,cACA,cACA,cACA,iBACA,aACA,eACA,cACA,kBACA,mBACA,gBACA,iBACA,kBACA,YACA,kBACA,eACA,eACA,eACA,eACA,eACA,mBACA,yBACA,eACA,eACA,aACA,kBACA,eACA,gBACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,cACA,eACA,gBACA,gBACA,gBACA,YACA,kBACA,eACA,oBACA,oBACA,oBACA,kBACA,kBACA,eACA,eACA,eACA,eACA,gBACA,eACA,eACA,eACA,sBACA,cACA,wBACA,gBACA,aACA,mBACA,iBACA,gBACA,gBACA,mBACA,mBACA,gBACA,qBACA,iBACA,iBACA,iBACA,iBACA,iBACA,cACA,eACA,mBACA,eACA,aACA,cACA,cACA,cACA,cACA,cACA,iBACA,YACA,gBACA,eACA,gBACA,gBACA,cACA,eACA,eACA,eACA,cACA,qBACA,cACA,iBACA,eACA,kBACA,iBACA,YACA,aACA,cACA,cACA,cACA,cACA,eACA,cACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,cACA,iBACA,iBACA,iBACA,6BACA,gBACA,gBACA,+BACA,cACA,cACA,cACA,uBACA,kBACA,mBACA,iBACA,kBACA,kBACA,kBACA,oBACA,mBACA,eACA,kBACA,mBACA,gBACA,iBACA,SACA,aACA,mBACA,mBACA,mBACA,mBACA,oBACA,oBACA,mBACA,oBACA,oBACA,yBACA,YACA,kBACA,UACA,aACA,gBACA,mBACA,aACA,eACA,kBACA,UACA,cACA,YACA,cACA,gBACA,eACA,cACA,cACA,cACA,cACA,cACA,aACA,aACA,aACA,cACA,gBACA,cACA,oBACA,iBACA,cACA,YACA,iBACA,WACA,WACA,iBACA,iBACA,iBACA,iBACA,oBACA,oBACA,oBACA,mBACA,kBACA,0BACA,WACA,eACA,YACA,UACA,cACA,gBACA,cACA,cACA,YACA,iBACA,mBACA,aACA,cACA,cACA,cACA,aACA,iBACA,eACA,eACA,eACA,YACA,YACA,kBACA,kBACA,YACA,UACA,cACA,qBACA,eACA,UACA,eACA,UACA,cACA,cACA,eACA,gBACA,qBACA,YACA,iBACA,gBACA,eACA,YACA,iBACA,iBACA,iBACA,iBACA,cACA,eACA,aACA,eACA,oBACA,SACA,WACA,YACA,UACA,eACA,cACA,kBACA,qBACA,UACA,qBACA,cACA,eACA,cACA,iBACA,gBACA,iBACA,iBACA,cACA,gBACA,cACA,cACA,cACA,cACA,cACA,aACA,gBACA,iBACA,YACA,kBACA,cACA,cACA,cACA,qBACA,aACA,eACA,gBACA,eACA,iBACA,iBACA,gBACA,iBACA,iBACA,gBACA,kBACA,oBACA,kBACA,cACA,cACA,cACA,cACA,cACA,eACA,YACA,YACA,YACA,eACA,kBACA,eACA,gBACA,gBACA,eACA,eACA,iBACA,gBACA,eACA,cACA,gBACA,cACA,gBACA,iBACA,mBACA,gBACA,gBACA,iBACA,gBACA,gBACA,sBACA,oBACA,wBACA,gBACA,SACA,YACA,cACA,oBACA,eACA,mBACA,gBACA,UACA,iBACA,eACA,gBACA,eACA,YACA,cACA,oBACA,aACA,aACA,oBACA,iBACA,gBACA,mBACA,oBACA,mBACA,aACA,aACA,gBACA,qBACA,mBACA,kBACA,gBACA,kBACA,gBACA,cACA,iBACA,qBACA,iBACA,iBACA,iBACA,sBACA,iBACA,eACA,kBACA,kBACA,iBACA,YACA,eACA,gBACA,eACA,eACA,eACA,eACA,cACA,WACA,aACA,aACA,mBACA,mBACA,eACA,gBACA,uBACA,aACA,gBACA,WACA,qBACA,eACA,aACA,eACA,oBACA,oBACA,oBACA,cACA,gBACA,cACA,iBACA,aACA,YACA,iBACA,aACA,eACA,iBACA,kBACA,iBACA,iBACA,YACA,WACA,YACA,uBACA,iBACA,eACA,iBACA,UACA,aACA,kBACA,eACA,yBACA,aACA,UACA,sBACA,YACA,cACA,iBACA,mBACA,YACA,eACA,eACA,cACA,iBACA,eACA,eACA,YACA,UACA,cACA,gCACA,YACA,YACA,YACA,YACA,iBACA,eACA,eACA,UACA,mBACA,8BACA,gBACA,YACA,gBACA,eACA,iBACA,gBACA,6BACA,iBACA,YACA,YACA,YACA,wBACA,aACA,YACA,YACA,YACA,YACA,cACA,WACA,gBACA,iBACA,kBACA,gBACA,aACA,mBACA,eACA,eACA,0BACA,0BACA,mBACA,mBACA,oBACA,kBACA,mBACA,gBACA,cACA,eACA,cACA,gBACA,cACA,kBACA,iBACA,gBACA,eACA,qBACA,eACA,gBACA,eACA,gBACA,gBACA,gBACA,iBACA,cACA,eACA,iBACA,eACA,gBACA,WACA,YACA,iBACA,gBACA,gBACA,mBACA,UACA,UACA,WACA,gBACA,cACA,cACA,cACA,cACA,aACA,cACA,aACA,iBACA,eACA,gCACA,aACA,iBACA,iBACA,eACA,cACA,qBACA,iBACA,iBACA,iBACA,cACA,gBACA,aACA,iBACA,iBACA,iBACA,iBACA,iBACA,cACA,iBACA,gBACA,gBACA,kBACA,iBACA,iBACA,cACA,kBACA,kBACA,kBACA,mBACA,mBACA,qBACA,qBACA,eACA,cACA,gBACA,gBACA,YACA,WACA,gBACA,eACA,aACA,eACA,iBACA,eACA,gBACA,iBACA,qBACA,gBACA,gBACA,cACA,aACA,eACA,aACA,YACA,gBACA,mBACA,kBACA,mBACA,kBACA,kBACA,kBACA,qBACA,eACA,qBACA,iBACA,gBACA,kBACA,gBACA,SACA,cACA,cACA,kBACA,iBACA,oBACA,cACA,eACA,cACA,0BACA,qBACA,gBACA,iBACA,gBACA,kBACA,gBACA,gBACA,gBACA,kBACA,gBACA,cACA,gBACA,mBACA,iBACA,eACA,iBACA,yBACA,qBACA,oBACA,0BACA,qBACA,cACA,cACA,gBACA,oBACA,mBACA,oBACA,2BACA,aACA,4BACA,oBACA,aACA,aACA,WACA,kBACA,YACA,cACA,kBACA,iBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,eACA,gBACA,eACA,eACA,gBACA,gBACA,eACA,kBACA,iBACA,iBACA,aACA,YACA,gBACA,kBACA,eACA,aACA,cACA,qBACA,YACA,eACA,eACA,YACA,YACA,gBACA,cACA,YACA,sBACA,eACA,eACA,oBACA,eACA,cACA,oBACA,oBACA,oBACA,aACA,YACA,aACA,eACA,cACA,eACA,aACA,SACA,oBACA,6BACA,oBACA,oBACA,kBACA,iBACA,mBACA,kBACA,kBACA,qBACA,qBACA,WACA,eACA,eACA,eACA,YACA,qBACA,aACA,eACA,eACA,uBACA,iBACA,WACA,cACA,gBACA,YACA,gBACA,iBACA,oBACA,qBACA,YACA,aACA,aACA,YACA,aACA,WACA,WACA,cACA,aACA,WACA,SACA,aACA,gBACA,cACA,cACA,aACA,aACA,cACA,aACA,4BACA,aACA,SACA,qBACA,cACA,iBACA,YACA,cACA,cACA,cACA,YACA,WACA,cACA,SACF,ECt+BMC,GAAe,uJAERC,GAAet4F,GAAS,CAInC,GAHI,CAACA,GAGD,CAACq4F,GAAa,KAAKr4F,CAAK,EAC1B,MAAO,GAGT,MAAMioB,EAAUjoB,EAAM,MAAM,QAAQ,EACpC,GAAI,CAACioB,GAAW,CAACA,EAAQ,CAAC,EACxB,MAAO,GAET,MAAMk7B,EAASl7B,EAAQ,CAAC,GAAK,KAK7B,MAJI,GAACk7B,GAIDi1C,GAAU,QAAQj1C,CAAM,IAAM,GAKpC,ECzBao1C,GAAe,CAC1B,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,sBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,0CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,yBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,iCACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,oBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,2BACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,0BACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,8CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,qBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,oBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,8BACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gCACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,yCACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,+CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iCACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,yBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,6CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,2BACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,kCACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,+CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,wBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,4BACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,mCACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,wBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,kBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,+CACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,yBACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,YACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,uBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,wCACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,WACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,cACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,OACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,QACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,sBACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,eACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,2BACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,SACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,uBACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,iBACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,gBACN,UAAW,KACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,aACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,OACX,KAAM,MAER,CACE,KAAM,8CACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,UACN,UAAW,MACX,KAAM,MAER,CACE,KAAM,0BACN,UAAW,QACX,KAAM,MAER,CACE,KAAM,uBAC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ACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,OACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,OACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,KACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,IACT,IAAK,MACH,MAAO,MACT,IAAK,M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VCAfC,IAAe,6wECAfC,IAAe,6oBCAfC,IAAe,29BCAfC,IAAe,s9BCAfC,IAAe,iWCAfC,IAAe,oWCAfC,IAAe,qWCAfC,IAAe,itBCAfC,IAAe,0mDCAfC,IAAe,+xBCAfC,IAAe,qgGCAfC,IAAe,0BCAfC,IAAe,qlBCAfC,IAAe,qTCAfC,IAAe,0BCAfC,IAAe,srBCAfC,IAAe,sVCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,yYCAfC,IAAe,2BCAfC,IAAe,0BCAfC,IAAe,qaCAfC,IAAe,0BCAfC,IAAe,s6BCAfC,IAAe,05HCAfC,IAAe,qUCAfC,IAAe,6BCAfC,IAAe,uiBCAfC,IAAe,0BCAfC,IAAe,y0CCAfC,IAAe,m8CCAfC,IAAe,0VCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,04BCAfC,IAAe,suBCAfC,IAAe,wYCAfC,IAAe,gVCAfC,IAAe,kTCAfC,IAAe,8BCAfC,IAAe,0SCAfC,IAAe,8BCAfC,IAAe,skCCAfC,IAAe,m+DCAfC,IAAe,8pDCAfC,IAAe,2XCAfC,IAAe,6tBCAfC,IAAe,uXCAfC,IAAe,0BCAfC,IAAe,mTCAfC,IAAe,unBCAfC,IAAe,qWCAfC,IAAe,0SCAfC,IAAe,0BCAfC,IAAe,y8BCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,2gCCAfC,IAAe,0mBCAfC,IAAe,62BCAfC,IAAe,wjDCAfC,IAAe,00CCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,sZCAfC,IAAe,iWCAfC,IAAe,4OCAfC,IAAe,4ZCAfC,IAAe,s9BCAfC,IAAe,0BCAfC,IAAe,usCCAfC,IAAe,0BCAfC,IAAe,gyDCAfC,IAAe,0BCAfC,IAAe,0oBCAfC,IAAe,wZCAfC,IAAe,0BCAfC,IAAe,2fCAfC,IAAe,6zBCAfC,IAAe,qiBCAfC,IAAe,0tDCAfC,IAAe,wiICAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,6uCCAfC,IAAe,g6BCAfC,IAAe,u6BCAfC,IAAe,2rCCAfC,IAAe,0lBCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,0iBCAfC,IAAe,gzGCAfC,IAAe,sbCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,mzBCAfC,IAAe,i3CCAfC,IAAe,smBCAfC,IAAe,oUCAfC,IAAe,iVCAfC,IAAe,opBCAfC,IAAe,2TCAfC,IAAe,oUCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,0SCAfC,IAAe,8WCAfC,IAAe,o4BCAfC,IAAe,qgBCAfC,IAAe,gVCAfC,IAAe,g1BCAfC,IAAe,+xDCAfC,IAAe,4/DCAfC,IAAe,0BCAfC,IAAe,6SCAfC,IAAe,ukBCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,oYCAfC,IAAe,8WCAfC,IAAe,kqJCAfC,IAAe,0BCAfC,IAAe,woDCAfC,IAAe,o/FCAfC,IAAe,uqCCAfC,IAAe,snDCAfC,IAAe,+VCAfC,IAAe,0BCAfC,IAAe,+TCAfC,IAAe,0BCAfC,IAAe,8dCAfC,IAAe,mbCAfC,IAAe,orCCAfC,IAAe,8vBCAfC,IAAe,giCCAfC,IAAe,0+ECAfC,IAAe,0BCAfC,IAAe,02BCAfC,IAAe,ijJCAfC,IAAe,oPCAfC,IAAe,0BCAfC,IAAe,ijECAfC,IAAe,m1DCAfC,IAAe,s3BCAfC,IAAe,uTCAfC,IAAe,0SCAfC,IAAe,0BCAfC,IAAe,guBCAfC,IAAe,qoBCAfC,IAAe,0BCAfC,IAAe,ijBCAfC,IAAe,0BCAfC,IAAe,8aCAfC,IAAe,wYCAfC,IAAe,2ZCAfC,IAAe,0BCAfC,IAAe,oYCAfC,IAAe,s4BCAfC,IAAe,0BCAfC,IAAe,6lCCAfC,IAAe,oZCAfC,IAAe,4kBCAfC,IAAe,q2BCAfC,IAAe,kkCCAfC,IAAe,6BCAfC,IAAe,6BCAfC,IAAe,6BCAfC,IAAe,6nBCAfC,IAAe,kxGCAfC,IAAe,mZCAfC,IAAe,g4DCAfC,IAAe,iVCAfC,IAAe,0BCAfC,IAAe,2fCAfC,IAAe,0jBCAfC,IAAe,0YCAfC,IAAe,0fCAfC,IAAe,omCCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,yZCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,gVCAfC,IAAe,0yCCAfC,IAAe,y0BCAfC,IAAe,+VCAfC,IAAe,ywECAfC,IAAe,g7BCAfC,IAAe,kuBCAfC,IAAe,0BCAfC,IAAe,2cCAfC,IAAe,gaCAfC,IAAe,qqBCAfC,IAAe,iYCAfC,IAAe,4pDCAfC,IAAe,i3FCAfC,IAAe,qpBCAfC,IAAe,qUCAfC,IAAe,gkJCAfC,IAAe,60BCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,ggECAfC,IAAe,wqDCAfC,IAAe,0BCAfC,IAAe,ihBCAfC,IAAe,o0CCAfC,IAAe,0BCAfC,IAAe,0BCAfC,IAAe,mkBCAfC,IAAe,8+ECAfC,IAAe,0SCAfC,IAAe,s1BCAfC,IAAe,0BCAfC,IAAe,mWCAfC,IAAe,kWCAfC,IAAe,0SCAfC,IAAe,y8BCAfC,IAAe,0BCAfC,IAAe,0BCMTC,IAAc,gCAAA3qG,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,mBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAA85F,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,oBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,kBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,oBAAAC,IAAA,oBAAAC,IAAA,oBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,qBAAAC,IAAA,qBAAAC,IAAA,qBAAAC,IAAA,qBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,oBAAAC,IAAA,oBAAAC,IAAA,oBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,IAAA,iBAAAC,GAAA,GAOdh+E,GAAQ,OAAO,YACnB,OAAO,QAAQi+E,GAAW,EAAE,IAAI,CAAC,CAACt7J,EAAMsvB,CAAG,IAGlC,CADatvB,EAAK,MAAM,sBAAsB,EAAE,CAAC,EACnCsvB,CAAG,CACzB,CACH,EAEA,IAAIisI,GAAO,CAAC,CAAE,UAAA5mI,EAAW,QAAA0rE,EAAS,IAAAm7D,EAAM,GAAI,GAAG9lE,KAAiB,CAE9D,MAAMpsB,EAAevvD,GAAQsmF,CAAO,EAA4B,KAAxBA,EAAQ,cAC1Co7D,EAAUp+E,GAAM/T,CAAW,GAAK+T,GAAM,GAItCq+E,EAAWD,EAAQ,WAAW,OAAO,EAAIA,EAAUtpI,KAAiBspI,EAE1E,aAAQ,OAAI,UAAA9mI,EAAsB,IAAK+mI,EAAU,IAAAF,EAAW,GAAG9lE,EAAY,CAC7E,EAEA6lE,GAAO14E,GAAK04E,EAAI,EAChBA,GAAK,YAAc,OAEnB,MAAAI,GAAeJ,GCVTpyD,IAAS/S,IAAU,CACvB,KAAM,CACJ,cAAe,MACf,OAAQ,IAEV,gBAAiB,CACf,UAAW,GACX,SAAU,GAEZ,MAAO,CACL,IAAK,EACL,KAAM,EACN,SAAU,WACV,UAAW,kCACX,gBAAiB,YAEnB,SAAU,CACR,MAAO,GACP,OAAQ,GACR,YAAaA,EAAM,QAAQ,CAAC,EAC5B,aAAc,GAEhB,cAAe,CACb,SAAU,WACV,IAAK,kBACL,QAAS,OACT,OAAQ,OACR,MAAO,OAEP,SAAU,GACV,WAAY,GAGd,WAAY,CACV,SAAU,WACV,MAAO,IAGT,aAAc,CACZ,MAAO,QAET,kBAAmB,CACjB,QAAS,OACT,WAAY,UAEd,aAAc,CACZ,MAAOA,EAAM,IAAI,OAAO,QACxB,SAAU,GACV,YAAaA,EAAM,QAAQ,EAAG,GAEhC,mBAAoB,CAClB,SAAU,IAEZ,sBAAuB,CACrB,QAAS,OACT,WAAY,SAEhB,GAEMwlE,IAAkB,IAAM,CAC5B,MAAM5pG,EAASmX,GAAA,EAEf,GAAInX,EAAQ,CACV,IAAIsX,EAAcD,GAAwBrX,CAAM,EAEhD,GAAIsX,EAAa,CACf,MAAMuyF,EAAkBv7D,GAAkCh3B,CAAW,EAErE,GAAIuyF,EAEF,MAAO,CACL,eAAgB,GAChB,YAAAvyF,EACA,gBAAAuyF,EACA,YAAaA,EACb,qBAAsBA,EACtB,eAAgB,GAChB,QAAS,GAGf,CACF,CAGA,MAAO,CACL,eAAgB,GAChB,YAAa,KACb,gBAAiB,MACjB,YAAa,MACb,qBAAsB,MACtB,eAAgB,GAChB,QAAS,GAEb,EAEMC,GAA+Br/H,GAC5BA,EAAW,WAAW,GAAG,GAAKA,IAAe,GAAKA,EAAa,IAAIA,CAAU,GAGtF,MAAMs/H,WAAmBttF,EAAM,SAAU,CAAzC,kCAQEtiB,GAAA,gCAA2B,IAE3BA,GAAA,aAAQyvG,IAAA,GA4DRzvG,GAAA,oBAAe,CAAC6vG,EAAkBhkF,IAAa,CAC7C,MAAMqoB,EAAU27D,EAAiB,QAC3B56I,EAAS46I,EAAiB,OAEhC,GAAI37D,EAAS,CACX,MAAM47D,EAAW37D,GAAkCD,CAAO,EAEtD47D,IACFjkF,EAAS,YAAcqoB,EACvBroB,EAAS,gBAAkBikF,EAE/B,CAEA,GAAI76I,IACF42D,EAAS,YAAc52D,EAAO,OAC9B42D,EAAS,eAAiB52D,EAAO,eAE7BA,EAAO,SAAS,CAClB,MAAM66I,EAAW37D,GAAkCl/E,EAAO,OAAO,EAE7D66I,IACFjkF,EAAS,YAAc52D,EAAO,QAC9B42D,EAAS,gBAAkB8jF,GAA6BG,CAAQ,EAEpE,CAGF,KAAK,SAASjkF,EAAU,IAAM,CAC5B,KAAK,MAAM,SAAS,GAAG,KAAK,MAAM,WAAW,EAAE,CACjD,CAAC,CACH,GAEA7rB,GAAA,+BAA0B,CAAC7pD,EAAOgnE,IAAgB,CAChD,GAAIA,IAAgB,KAAK,MAAM,YAAa,OAE5C,MAAMuyF,EAAkBv7D,GAAkCh3B,CAAW,EAE/D4yF,EAA0B,KAAK,MAAM,YAAY,WAAW,KAAK,MAAM,eAAe,EACxF,KAAK,MAAM,YAAY,MAAM,KAAK,MAAM,gBAAgB,MAAM,EAC9D,KAAK,MAAM,eAETC,EAAqBL,GACzB,GAAGD,CAAe,GAAGK,CAAuB,IAExCF,EAAmB38D,GAA2B88D,EAAoB,KAAK,MAAM,WAAW,EAExFC,EAAiBJ,EAAiB,MAClCK,EAAiBL,EAAiB,eAElChkF,EAAW,CACf,GAAG,KAAK,MACR,YAAA1O,EACA,gBAAAuyF,EACA,YAAaO,EAAe,QAAQ,UAAW,EAAE,EACjD,qBAAsBA,EACtB,eAAAC,CAAA,EAGF,KAAK,aAAaL,EAAkBhkF,CAAQ,CAC9C,GAEA7rB,GAAA,yBAAoB7pD,GAAS,CAC3B,KAAK,yBAA2B,GAEhC,MAAMm6B,EAAaq/H,GAA6Bx5J,EAAM,OAAO,KAAK,EAC5D05J,EAAmB38D,GAA2B5iE,EAAY,KAAK,MAAM,WAAW,EAEhF2/H,EAAiBJ,EAAiB,MAClCK,EAAiBL,EAAiB,eAElChkF,EAAW,CACf,GAAG,KAAK,MACR,YAAaokF,EAAe,QAAQ,UAAW,EAAE,EACjD,qBAAsBA,EACtB,eAAAC,EACA,QAAS,IAGX,KAAK,aAAaL,EAAkBhkF,CAAQ,CAC9C,GAEA7rB,GAAA,sBAAiB,IAAM,CACrB,KAAM,CAAE,QAAArzB,EAAS,UAAAnE,EAAW,MAAA8/C,EAAO,SAAA6vC,EAAU,SAAAD,EAAU,eAAAumC,GAAmB,KAAK,MAEzE0R,EAAiB,KAAK,MAAM,SAAW,KAAK,MAAM,MAElDC,EACJ5mE,MAAC6mE,GAAA,CACC,KAAK,oBACL,MAAO,KAAK,MAAM,YAClB,YAAa,IAAM,CACjB,MAAMn8D,EAAUD,GAA0B,KAAK,MAAM,WAAW,EAEhE,OACEzK,MAAC,OAAI,UAAW78D,EAAQ,sBACtB,SAAA68D,MAAC4lE,GAAA,CACC,UAAWziI,EAAQ,SACnB,QAAS,KAAK,MAAM,YACpB,IAAKunE,EAAQ,OAEjB,CAEJ,EACA,iBAAgB,GAChB,UAAW,GACX,SAAU/9F,GAAS,KAAK,wBAAwBA,EAAOA,EAAM,OAAO,KAAK,EACzE,UAAW,CACT,WAAY,CACV,MAAO,CACL,UAAW,OACb,CACF,EAEF,QAAS,CACP,KAAMw2B,EAAQ,oBAEhB,SAAAurF,EAEC,SAAAlkB,GAAA,EAAkB,IAAI,CAAC,CAAE,KAAAjpG,EAAM,UAAAulK,EAAW,KAAApwF,CAAA,IACzC29B,OAAC2hD,GAAA,CAAoB,MAAOt/E,EAC1B,UAAAspB,MAAC4lE,IAAK,UAAWziI,EAAQ,SAAU,QAASuzC,EAAM,IAAKn1E,EAAM,EAC5DA,EAAK,KAELulK,CAAA,GAJYpwF,CAKf,CACD,IAIL,OACEspB,MAAC,OAAI,UAAAhhE,EACH,SAAAghE,MAACub,GAAA,CACC,QAAQ,WACR,GAAG,QACH,KAAK,MACL,MAAAz8B,EACA,UAAW37C,EAAQ,aACnB,SAAUZ,GAAS,KAAK,MAAQA,EAChC,SAAU51B,GAAS,CACjB,KAAK,kBAAkBA,CAAK,CAC9B,EACA,MAAO,KAAK,MAAM,qBAClB,MAAOg6J,EACP,WAAYA,EAAiB,KAAK,MAAM,WAAa,OACrD,YAAa,KAAK,MAAM,YACxB,SAAAj4C,EACA,SAAAC,EACA,WAAY,CACV,eACEta,OAACmH,GAAA,CAAe,SAAS,QAAQ,UAAWr4E,EAAQ,kBACjD,UAAA8xH,EACA2R,CAAA,EACH,EAEJ,GAEJ,CAEJ,GAEApwG,GAAA,sBAAiB,IAAM,CACrB,KAAM,CAAE,QAAArzB,EAAS,UAAAnE,EAAW,MAAA8/C,EAAO,SAAA6vC,EAAU,SAAAD,CAAA,EAAa,KAAK,MAEzDk4C,EACJ5mE,MAAC6mE,GAAA,CACC,KAAK,oBAEL,MAAO,KAAK,MAAM,YAElB,YAAa,IAAM,CACjB,MAAMn8D,EAAUD,GAA0B,KAAK,MAAM,WAAW,EAEhE,OACEzK,MAAC,OAAI,UAAW78D,EAAQ,cACtB,SAAA68D,MAAC4lE,GAAA,CACC,UAAWziI,EAAQ,SACnB,QAAS,KAAK,MAAM,YACpB,IAAKunE,EAAQ,OAEjB,CAEJ,EACA,UAAW,GACX,SAAU/9F,GAAS,KAAK,wBAAwBA,EAAOA,EAAM,OAAO,KAAK,EACzE,UAAW,CACT,WAAY,CACV,MAAO,CACL,UAAW,OACb,CACF,EAEF,QAAS,CACP,KAAMw2B,EAAQ,YAEhB,SAAAurF,EAEC,SAAAlkB,GAAA,EAAkB,IAAI,CAAC,CAAE,KAAAjpG,EAAM,UAAAulK,EAAW,KAAApwF,CAAA,IACzC29B,OAAC2hD,GAAA,CAAoB,MAAOt/E,EAC1B,UAAAspB,MAAC4lE,IAAK,UAAWziI,EAAQ,SAAU,QAASuzC,EAAM,IAAKn1E,EAAM,EAC5DA,EAAK,KAELulK,CAAA,GAJYpwF,CAKf,CACD,IAICiwF,EAAiB,KAAK,MAAM,SAAW,KAAK,MAAM,MAExD,cACG,OACC,UAAAtyD,OAAC6a,IAAY,UAAW3b,GAAKv0E,EAAWmE,EAAQ,IAAI,EAClD,UAAAkxE,OAAC8a,IAAW,QAAQ,QAAQ,UAAWhsF,EAAQ,MAAO,MAAOwjI,EAC1D,UAAA7nF,EACA6vC,EAAW,KAAO,IACrB,EAECi4C,EAED5mE,MAACub,GAAA,CACC,GAAG,QACH,KAAK,MACL,QAAS,CACP,KAAMp4E,EAAQ,iBAEhB,SAAUZ,GAAS,KAAK,MAAQA,EAChC,SAAU51B,GAAS,CACjB,KAAK,kBAAkBA,CAAK,CAC9B,EACA,MAAO,KAAK,MAAM,qBAClB,MAAOg6J,EACP,YAAa,KAAK,MAAM,YACxB,SAAAj4C,EACA,SAAAC,CAAA,EACF,EACF,EACCg4C,GAAkB,CAACviJ,GAAQ,KAAK,MAAM,UAAU,GAC/C47E,MAAC,KAAE,UAAU,uCAAwC,cAAK,MAAM,WAAW,GAE/E,CAEJ,GA3SA,mBAAoB,CAEd,KAAK,MAAM,OACb,KAAK,0BAA0B,KAAK,KAAK,EAKzC,KAAK,MAAM,kBACV,KAAK,MAAM,uCAAyC,CAAC,KAAK,MAAM,iBAEjE,KAAK,wBAAwB,KAAM,KAAK,MAAM,eAAe,CAEjE,CAEA,0BAA0BjnB,EAAW,CAInC,MAAMguF,EAAiBhuF,EAAU,MAE3BiuF,EAAiBn9E,GAAMk9E,CAAc,EAC3C,GAAIC,GAAkBA,EAAe,UAAW,CAC9C,MAAM3kF,EAAW,CACf,GAAG,KAAK,MACR,YAAa2kF,EAAe,OAC5B,eAAgBA,EAAe,eAC/B,qBAAsBA,EAAe,qBAAoB,EAG3D,GAAIA,EAAe,QAAS,CAC1B,MAAMV,EAAW37D,GAAkCq8D,EAAe,OAAO,EAErEV,IACFjkF,EAAS,YAAc2kF,EAAe,QACtC3kF,EAAS,gBAAkB8jF,GAA6BG,CAAQ,EAEpE,CAEA,KAAK,SAASjkF,EAAU,IAAM,CAI5B,GAAI,CAAC15E,EAAM,KAAK,KAAK,EAAG,CACtB,MAAMs+J,EAAiB,KAAK,MAAM,eAClC,WACE,IAAM,KAAK,OAAS,KAAK,MAAM,kBAAkBA,EAAgBA,CAAc,EAC/E,EAEJ,CACF,CAAC,CACH,CACF,CAEA,sBAAsBluF,EAAWlqE,EAAW,CAC1C,MAAO,CAAC8gF,GAAa,KAAK,MAAO5W,CAAS,GAAK,CAAC4W,GAAa,KAAK,MAAO9gF,CAAS,CACpF,CAqPA,QAAS,CACP,GAAI,CACF,OAAO,KAAK,MAAM,UAAY,WAAa,KAAK,iBAAmB,KAAK,gBAC1E,OAASlnB,EAAG,CACV,QAAQ,MAAMA,CAAC,CACjB,CACF,CACF,CA/TE6uE,GADI4vG,GACG,YAAY,CAIjB,MAAOptF,EAAU,MA6TrB,MAAAkuF,IAAe7jE,GAAWmQ,GAAM,EAAE4yD,EAAU,ECratCe,IAAkB1mE,IAAU,CAChC,KAAM,CACJ,MAAOA,EAAM,IAAI,OAAO,QACxB,SAAU,GAEd,GAEM2mE,GAAY/jE,GAAW8jE,GAAe,EAAE,CAAC,CAAE,QAAAhkI,EAAS,KAAMkkI,WAC7D7rD,GAAA,CAAe,SAAS,QACvB,SAAAxb,MAACqnE,EAAA,CAAK,UAAWlkI,EAAQ,KAAM,EACjC,CACD,EAEYmkI,GAAY,CAAC,CAAE,MAAA/+K,EAAO,WAAA0pH,EAAY,SAAAke,EAAU,UAAAzpF,EAAW,GAAGq5D,CAAA,IACrEC,MAACub,GAAA,CACC,QAAQ,WACR,GAAG,uBACH,KAAK,YACL,MAAOnnC,EAAG,4BAA4B,EACtC,UAAU,gCACV,MAAO7rF,GAAS,GAChB,SAAUokB,GAASwjH,EAASxjH,EAAM,OAAO,KAAK,EAC9C,MAAOpkB,IAAU,MAAQ,CAAC67B,GAAQ6tF,EAAW,OAAO,EACpD,WAAY1pH,IAAU,MAAQ0pH,EAAW,QACzC,WAAY,CAAE,UAAAvrE,CAAA,EACd,WAAY,CAAE,qBAAiB0gI,GAAA,CAAU,KAAMG,GAAmB,GACjE,GAAGxnE,CAAA,CACN,EAGWynE,GAAW,CAAC,CAAE,MAAAj/K,EAAO,WAAA0pH,EAAY,SAAAke,EAAU,UAAAzpF,EAAW,GAAGq5D,CAAA,IACpEC,MAACub,GAAA,CACC,QAAQ,WACR,GAAG,sBACH,KAAK,WACL,MAAOnnC,EAAG,2BAA2B,EACrC,UAAU,gCACV,MAAO7rF,GAAS,GAChB,SAAUokB,GAASwjH,EAASxjH,EAAM,OAAO,KAAK,EAC9C,MAAOpkB,IAAU,MAAQ,CAAC67B,GAAQ6tF,EAAW,OAAO,EACpD,WAAY1pH,IAAU,MAAQ0pH,EAAW,QACzC,WAAY,CAAE,UAAAvrE,CAAA,EACd,WAAY,CAAE,qBAAiB0gI,GAAA,CAAU,KAAMG,GAAmB,GACjE,GAAGxnE,CAAA,CACN,EAGW0nE,GAAc,CAAC,CAAE,MAAAl/K,EAAO,WAAA0pH,EAAY,SAAAke,EAAU,UAAAnxF,EAAW,GAAG+gE,CAAA,IACvEC,MAAComE,IAAA,CACC,QAAQ,WACR,GAAG,yBAAwB,KAAK,cAChC,MAAOhyF,EAAG,wBAAwB,EAClC,UAAWm/B,GAAK,gCAAiCv0E,CAAS,EAC1D,MAAOz2C,GAAS,GAChB,SAAU0hH,GAAekmB,EAASlmB,CAAW,EAC7C,MAAO1hH,IAAU,MAAQ,CAAC67B,GAAQ6tF,EAAW,OAAO,EACpD,WAAY1pH,IAAU,MAAQ0pH,EAAW,QACzC,eAAgBjS,MAAConE,GAAA,CAAU,KAAMM,EAAA,CAAmB,EACnD,GAAG3nE,CAAA,CACN,EAGW4nE,GAAU,CAAC,CAAE,MAAAp/K,EAAO,WAAA0pH,EAAY,SAAAke,EAAU,GAAGpwB,KACxDC,MAACub,GAAA,CACC,QAAQ,WACR,GAAG,qBACH,KAAK,UACL,MAAOnnC,EAAG,2BAA2B,EACrC,UAAU,gCACV,MAAO7rF,GAAS,GAChB,SAAUokB,GAASwjH,EAASxjH,EAAM,OAAO,KAAK,EAC9C,MAAOpkB,IAAU,MAAQ,CAAC67B,GAAQ6tF,EAAW,OAAO,EACpD,WAAY1pH,IAAU,MAAQ0pH,EAAW,QACzC,WAAY,CACV,eAAgBjS,MAAConE,GAAA,CAAU,KAAMQ,EAAA,CAA4B,EAC7D,aACE5nE,MAACwb,GAAA,CAAe,SAAS,MACvB,SAAAxb,MAAC6nE,GAAA,CACC,oBAAmB,GACnB,MAAOzzF,EAAG,kCAAkC,EAC5C,UAAU,aAEV,SAAA4rB,MAACi8C,GAAA,CAAY,MAAM,UAAU,GAC/B,CACF,GAGH,GAAGl8C,CAAA,CACN,EAGW+nE,GAAQ,CAAC,CAAE,MAAAv/K,EAAO,WAAA0pH,EAAY,SAAAke,EAAU,UAAAnxF,EAAW,GAAG+gE,CAAA,IACjEC,MAACub,GAAA,CACC,QAAQ,WACR,KAAK,QACL,GAAG,kBACH,KAAK,QACL,MAAOnnC,EAAG,wBAAwB,EAClC,UAAWm/B,GAAK,gCAAiCv0E,CAAS,EAC1D,MAAOz2C,GAAS,GAChB,SAAUokB,GAASwjH,EAASxjH,EAAM,OAAO,KAAK,EAC9C,MAAOpkB,IAAU,MAAQ,CAAC67B,GAAQ6tF,EAAW,OAAO,EACpD,WAAY1pH,IAAU,MAAQ0pH,EAAW,QACzC,WAAY,CAAE,qBAAiBm1D,GAAA,CAAU,KAAMW,GAAiB,GAC/D,GAAGhoE,CAAA,CACN,EAGWioE,GAAW,CAAC,CAAE,MAAAz/K,EAAO,WAAA0pH,EAAY,SAAAke,EAAU,GAAGpwB,KACzDC,MAAC60D,IAAA,CACC,QAAQ,WACR,UAAS,GACT,KAAK,WACL,MAAOzgF,EAAG,2BAA2B,EACrC,UAAU,iDACV,MAAO7rF,GAAS,GAChB,SAAUokB,GAASwjH,EAASxjH,EAAM,OAAO,KAAK,EAC9C,MAAOpkB,IAAU,MAAQ,CAAC67B,GAAQ6tF,EAAW,OAAO,EACpD,WAAY1pH,IAAU,MAAQ0pH,EAAW,QACzC,eAAgBjS,MAAConE,GAAA,CAAU,KAAMa,EAAA,CAAkB,EAClD,GAAGloE,CAAA,CACN,EAgEWmoE,GAAiB,CAAC,CAAE,MAAA3/K,EAAO,SAAA4nI,EAAU,UAAAnxF,EAAW,GAAG+gE,KAC1Dp3F,EAAM0rE,GAAW,gCAAgC,CAAC,EAC7C,KAGL2rB,MAACs3C,GAAA,CACC,MACEt3C,MAACsd,GAAA,CAAiB,KAAK,MACpB,SAAAjpC,GAAW,gCAAgC,EAC9C,EAEF,UAAWk/B,GAAK,gCAAiCv0E,CAAS,EAC1D,QACEghE,MAAC+lB,GAAA,CACC,MAAM,UACN,QAASx9H,EACT,SAAU,CAACokB,EAAOw7J,IAAmBh4C,EAASg4C,CAAc,EAC5D,UAAWx7J,GAAS,CACdA,EAAM,MAAQ,UAChBA,EAAM,iBACNwjH,EAAS,CAAC5nI,CAAK,EAEnB,EACC,GAAGw3G,CAAA,EACN,GC7NJyT,IAAS/S,IAAU,CACvB,kBAAmB,CACjB,MAAOA,EAAM,QAAQ,UAAU,KAEnC,GAEM2nE,IAAgB,CAAC,CAAE,QAAAjlI,EAAS,SAAAo1C,EAAU,WAAA86B,EAAY,sBAAAg1D,EAAuB,SAAAl4C,CAAA,IAC7E9b,OAACv7B,EAAM,SAAN,CACC,UAAAknB,MAAC8nE,GAAA,CACC,MAAOvvF,EAAS,SAChB,SAAUitD,GAAYrV,EAAS,CAAE,GAAG53C,EAAU,SAAAitD,EAAU,EACxD,WAAYnyB,EAAW,SACvB,SAAQ,KAGVrT,MAACgoE,GAAA,CACC,MAAOzvF,EAAS,SAChB,SAAUktD,GAAYtV,EAAS,CAAE,GAAG53C,EAAU,SAAAktD,EAAU,EACxD,WAAYpyB,EAAW,SACvB,SAAQ,GACR,cAAa,KAGfrT,MAAC,OAAI,UAAU,8CACZ,UAACr3F,EAAM0/J,CAAqB,GAAK,CAACjkJ,GAAQikJ,CAAqB,EAC9DroE,MAAC,KACC,UAAW78D,EAAQ,kBACnB,KAAMklI,EACN,OAAO,SACP,IAAI,sBAEH,WAAG,8BAA+B,CACjC,GAAI,wBACJ,QAAS,GACT,KAAM,8BACP,IAGHroE,MAACmG,GAAA,CAAK,GAAIA,GAAK,SAAS,iBAAiB,EAAG,UAAWhjE,EAAQ,kBAC5D,SAAAixC,EAAG,8BAA+B,CACjC,GAAI,wBACJ,QAAS,GACT,KAAM,8BACP,EACH,EAEJ,GACF,EAGFk0F,IAAe/tG,GACb8oC,GAAWmQ,GAAM,EACjBsF,GAASlQ,GAAS,KAAK,CACzB,EAAEw/D,GAAa,ECxDTlvD,IAAU,CACd,SAAU,GACV,SAAU,UACZ,EAEMhB,IAAc,CAClB,SAAU,KACV,SAAU,IACZ,EAEMe,IAAkB,KAAO,CAC7B,SAAU,CACR,CAACrO,GAAUx2B,EAAG,6CAA6C,CAAC,EAC5D,CAACm1B,GAAcn1B,EAAG,4CAA4C,CAAC,GAEjE,SAAU,CAAC,CAAC02B,GAAc,CAAC,EAAG12B,EAAG,8CAA8C,CAAC,CAAC,CACnF,GAEAm0F,IAAevvD,GAAWpQ,GAAS,MAAOqQ,IAAiBf,IAAagB,GAAO,ECdzE1F,IAAS/S,IAAU,CACvB,KAAM,GACN,UAAW,CACT,MAAOA,EAAM,IAAI,OAAO,QAE5B,GAEM+nE,IAAY,CAAC,CACjB,QAAArlI,EACA,eAAAmkG,EACA,mBAAAmnB,EACA,YAAAga,EACA,UAAAC,EACA,cAAAC,EACA,SAAApwF,CACF,IAEIynB,MAAC,OAAI,UAAW78D,EAAQ,KACtB,SAAAkxE,OAAC,QACC,SAAU1nG,GAAS,CACjBA,EAAM,iBACNg8J,EAAcpwF,CAAQ,CACxB,EAGE,WAAC5vE,EACC0rE,GAAW,kBAAkB,GAC3B2rB,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,UAC7C,SAAAkxC,GAAW,kBAAkB,EAChC,GAKN2rB,MAACoU,GAAA,CAAoB,KAAMkzB,GAAkBmnB,CAAA,CAAoB,QAEhE13C,GAAA,CAAW,KAAMA,GAAW,KAAK,SAAU,MAAO2xD,EAAW,QAE7DN,IAAA,EAAc,QAEdt0D,GAAA,CAAO,KAAK,SAAS,UAAU,2BAA2B,SAAU,CAAC20D,EACpE,SAAAzoE,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,4BAA4B,EAClC,EACF,KAEJ,EAIJw0F,IAAeruG,GACb8oC,GAAWmQ,GAAM,EACjBsF,GAASlQ,GAAS,KAAK,CACzB,EAAE4/D,GAAS,ECvDEK,GAAa,CAIxB,MAAO,OAIT,EAMaC,IAAe,KAAO,CACjC,WAAY,CACV,IAAK,YACL,gBAAYxB,GAAA,EAAU,GAExB,UAAW,CACT,IAAK,WACL,gBAAYE,GAAA,EAAS,GAEvB,MAAO,CACL,IAAK,QACL,gBAAYM,GAAA,EAAM,GAEpB,MAAO,CACL,IAAK,QACL,gBAAYL,GAAA,EAAY,GAE1B,SAAU,CACR,IAAK,WACL,UAAWznE,MAACgoE,GAAA,CAAS,cAAa,GAAC,GAErC,SAAU,CACR,IAAK,UACL,gBAAYL,GAAA,EAAQ,GAEtB,wBAAyB,CACvB,IAAK,yBACL,gBAAYO,GAAA,EAAe,EAE/B,GAEaa,GAAW/3D,GAAS83D,IAAA,EAAe93D,CAAK,GAAK,KAE7Cg4D,GAAyB,CACpC,aAAc,OACd,aAAc,KAChB,gDC/DA,IAAIvzF,EAAU3uF,GAAA,EA8Bd,SAAS0b,EAAIxU,EAAQqc,EAAM9hB,EAAO,CAChC,OAAOyF,GAAU,KAAOA,EAASynF,EAAQznF,EAAQqc,EAAM9hB,CAAK,CAC9D,CAEA,OAAA0gL,GAAiBzmK,oCC3BX0mK,GAAM,CAAC,CAAE,MAAApqF,EAAO,MAAAv2F,EAAO,SAAA4nI,CAAA,IAE3BnwB,MAACs3C,GAAA,CACC,UAAU,kBACV,MACE3uI,EAAMm2E,CAAK,EACP1K,EAAG,+BAAgC,CACjC,GAAI,oBACJ,QAAS,GACT,KAAM,kCACP,EACD0K,EAEN,QACEkhB,MAAC+lB,GAAA,CACC,MAAM,UACN,QAASx9H,EACT,SAAU,CAACokB,EAAOw7J,IAAmBh4C,EAASg4C,CAAc,EAC5D,UAAWx7J,GAAS,CACdA,EAAM,MAAQ,UAChBA,EAAM,iBACNwjH,EAAS,CAAC5nI,CAAK,EAEnB,GACF,GCxBA4gL,GAAW,CAAC,CAAE,iBAAAxlB,EAAkB,UAAAylB,CAAA,IACpC/0D,OAACiJ,GAAA,CAAiB,KAAK,MAAM,UAAU,OACpC,UAAAlpC,EAAG,8CAA8C,EAEhDhwD,GAAQu/H,GAAkB,cAAc,MAAM,SAiB7C,QAAK,cAEHvvE,EAAG,+CAA+C,GACrD,EAnBA4rB,MAACs5C,GAAA,CACC,UAAU,IACV,QAAS,CACP,KAAM8vB,CAAA,EAER,QAASzhL,GAAK,CACZA,EAAE,iBACFA,EAAE,kBACF,OAAO,KAAKg8J,EAAiB,aAAa,MAAM,CAClD,EAEA,YAAah8J,GAAKA,EAAE,kBACpB,UAAWA,GAAKA,EAAE,kBAClB,MAAOysF,EAAG,+CAA+C,GAM3D,EAEJ,ECRIi1F,GAAN,MAAMA,WAAyBvwF,EAAM,aAAc,CAMjD,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEX,MAAM07J,EAAa,KAAK,MAAM,aAAa,aAAa,KAAK,OAE7D,KAAK,MAAM,kBAAkB1gE,GAAS,SAAU,CAC9C,OAAQ0gE,CAAA,CACT,CACH,CAEA,0BAA0BvwF,EAAW,CACnC,KAAM,CAAE,cAAAwwF,EAAe,SAAA9pE,EAAU,GAAAI,GAAO9mB,EAGtC,CAAC,KAAK,MAAM,eACZwwF,IACCA,EAAc,OAASP,GAAuB,cAC7CO,EAAc,OAASP,GAAuB,eAEhDvpE,EAAS,CACP,KAAM4pE,GAAiB,MAAM,kBAC7B,YAAaxpE,EAAG,YACjB,CAEL,CAEA,QAAS,CACP,KAAM,CACJ,MAAA2pE,EACA,SAAAjxF,EACA,WAAA86B,EACA,SAAA8c,EACA,SAAAs5C,EACA,GAAA5pE,EACA,kBAAA6pE,EACA,8BAAAC,CAAA,EACE,KAAK,MACHL,EAAa,KAAK,MAAM,aAAa,aAAa,KAAK,OAE7D,GAAI,CAACzpE,EAAG,YAAa,CACnB,MAAM+pE,EAAkB9zC,GAAA,EACpBwzC,GAAcM,GAChBN,EAAW,QAAQO,GAAa,CAC9B,MAAM74D,EAAQ+3D,GAASc,EAAU,IAAI,EACrCrnK,GAAI+1E,EAAUy4B,EAAM,IAAKtkF,GAAIk9I,EAAiB54D,EAAM,GAAG,CAAC,CAC1D,CAAC,EAEHnR,EAAG,YAAc,EACnB,CAKA,OACEwU,OAAC,OAAI,MAAAm1D,EACF,UAAA3pE,EAAG,OAASwpE,GAAiB,MAAM,gBACjCtzB,YAAA,CACE,UAAAuzB,EAAW,IAAIO,GAAa,CAC3B,MAAM74D,EAAQ+3D,GAASc,EAAU,IAAI,EAC/BC,EAAa,CACjB,IAAK94D,EAAM,IACX,MAAOtkF,GAAI6rD,EAAUy4B,EAAM,GAAG,EAC9B,SAAU64D,EAAU,SACpB,YAAmB15C,EAAS3tH,GAAI+1E,EAAUy4B,EAAM,IAAKzoH,CAAK,CAAC,EAC3D,WAAYmkC,GAAI2mF,EAAYrC,EAAM,GAAG,EACrC,UAAW64D,EAAU,WAGvB,OAAIA,EAAU,OAAShB,GAAW,QAChCiB,EAAW,gBACTJ,GAAqBh2F,GAAwBi2F,CAA6B,EAC5EG,EAAW,sCAAwC,IAG9ChxF,EAAM,aAAak4B,EAAM,UAAW84D,CAAU,CACvD,CAAC,EACD9pE,MAACkpE,GAAA,CACC,MAAOO,EACP,MAAOlxF,EAAS,UAChB,SAAUwxF,GAAa55C,EAAS,CAAE,GAAG53C,EAAU,UAAAwxF,EAAW,GAC5D,EACF,EAEDlqE,EAAG,OAASwpE,GAAiB,MAAM,mBAClCrpE,MAACub,GAAA,CACC,UAAS,GACT,MAAOnnC,EAAG,mCAAmC,EAC7C,WAAY,CAAE,UAAW,GACzB,UAAU,gCACV,MAAOmE,EAAS,kBAAoB,GACpC,SAAU5wF,GAAKwoI,EAAS,CAAE,GAAG53C,EAAU,iBAAkB5wF,EAAE,OAAO,MAAO,GAC3E,EAEJ,CAEJ,CACF,EArGE6uE,GADI6yG,GACG,QAAQ,CACb,QAAS,UACT,kBAAmB,sBAHvB,IAAMW,GAANX,GAwGAW,GAAiB,aAAe,CAC9B,SAAU,IACZ,EAEA,MAAMj5E,IAAkBzlF,IAAU,CAChC,aAAc05H,GAAgB15H,CAAK,EACnC,cAAekjJ,GAAiBljJ,CAAK,CACvC,GAEA2+J,IAAe1vG,GACbslC,GAAG,CACD,MAAO,CACL,KAAMmqE,GAAiB,MAAM,QAC7B,YAAa,GACf,CACD,EACDx1E,GACEzD,IACA,CACE,kBAAAmX,EAAA,CACF,EAEF4Q,GAASlQ,GAAS,QAAQ,CAC5B,EAAEohE,EAAgB,ECpIZ9wD,IAAU,CACd,MAAO,GACP,UAAW,OACX,SAAU,MACV,MAAO,eAAe,IAAI,OAAO,YAAY,IAAI,IAAI,OAAO,YAAY,GACxE,SAAU,WACV,UAAW,GACX,UAAW,CACT,aAAc,IAEhB,QAAS,KACT,iBAAkB,IACpB,EAEMhB,IAAc,CAClB,MAAO,KACP,UAAW,KACX,SAAU,KACV,MAAO,KACP,SAAU,KACV,UAAW,GACX,YAAa,KACb,UAAW,CACT,aAAc,IAEhB,QAAS,KACT,iBAAkB,IACpB,EAWMe,IAAkBz2E,GAAW,CACjC,MAAM+uE,EAAQ,CACZ,MAAO,CAAC,CAAChI,GAAcn1B,EAAG,+CAA+C,CAAC,CAAC,EAC3E,MAAO,CAAC,CAAC62B,GAAc72B,EAAG,+CAA+C,CAAC,CAAC,EAC3E,SAAU,CAAC,CAAC02B,GAAc,CAAC,EAAG12B,EAAG,iDAAiD,CAAC,CAAC,EACpF,UAAW,CAAC,CAACy2B,GAAQz2B,EAAG,oDAAoD,CAAC,CAAC,GAGhF,OAAKhwD,GAAQoe,EAAQ,MAAM,GACzBivE,GAAKjvE,EAAQ,OAAQ0nI,GAAe,CAClC,GAAIA,EAAY,SAAU,CACxB,MAAMl5D,EAAQ+3D,GAASmB,EAAY,IAAI,EACvC34D,EAAMP,EAAM,GAAG,EAAI,CACjB,CAACpG,GAAUx2B,EAAG,4CAA4C48B,EAAM,GAAG,EAAE,CAAC,EACtE,GAAIO,EAAMP,EAAM,GAAG,GAAK,EAAC,EAEvBk5D,EAAY,OAASrB,GAAW,QAClCt3D,EAAMP,EAAM,GAAG,EAAI,CACjB,CAAC7G,GAAiB/1B,EAAG,4CAA4C48B,EAAM,GAAG,EAAE,CAAC,EAC7E,GAAIO,EAAMP,EAAM,GAAG,GAAK,EAAC,EAG/B,CACF,CAAC,EAGIO,CACT,EAEA5rB,IAAeqzB,GAAWpQ,GAAS,SAAUqQ,IAAiBf,IAAagB,GAAO,ECvE5E1F,IAAS/S,IAAU,CACvB,KAAM,GACN,UAAW,CACT,MAAOA,EAAM,IAAI,OAAO,SAE1B,eAAgB,CACd,QAASA,EAAM,QAAQ,CAAC,EACxB,UAAW,UAEb,KAAM,CACJ,QAAS,SACT,SAAU,GACV,WAAY,OACZ,UAAW,GAEf,GAEM0pE,IAAe,CAAC,CACpB,QAAAhnI,EACA,mBAAAsrH,EACA,YAAAga,EACA,qBAAA2B,EACA,cAAAb,EACA,eAAAc,EACA,sBAAAC,EACA,SAAA/xF,EACA,iBAAAorE,EACA,WAAAjmB,CACF,IACE19B,MAAC,OAAI,UAAW78D,EAAQ,KACtB,SAAAkxE,OAAC,QACC,SAAU1sH,GAAK,CACbA,EAAE,iBACFyiL,EAAqB7xF,CAAQ,CAC/B,EAEC,WAAC5vE,EAAM0rE,GAAW,qBAAqB,CAAC,GACvC2rB,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,UAC7C,SAAAkxC,GAAW,qBAAqB,EACnC,EAGF2rB,MAACoU,GAAA,CAAoB,KAAMq6C,CAAA,CAAoB,QAE9C13C,GAAA,CAAW,KAAMA,GAAW,KAAK,SAAU,MAAOwyD,EAAe,EAElEvpE,MAACgqE,IAAA,CACC,kBAAmBtsC,GAAY,SAAS,QACxC,8BAA+BimB,GAAkB,UAAU,cAC3D,SAAU3jD,MAACmpE,GAAA,CAAS,iBAAAxlB,EAAoC,UAAWxgH,EAAQ,KAAM,UAGlF2wE,GAAA,CAAO,KAAK,SAAS,UAAU,2BAA2B,SAAU,CAAC20D,EACpE,SAAAzoE,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,8BAA8B,EACpC,EACF,EAECi2F,GACCrqE,MAAC,OAAI,UAAW78D,EAAQ,eACtB,SAAA68D,MAACs5C,GAAA,CACC,UAAU,IACV,QAAS3xJ,GAAK,CACZA,EAAE,kBACF2iL,EAAA,CACF,EACA,MAAOl2F,EAAG,2DAA2D,GACvE,CACF,GAEJ,EACF,EAGFm2F,IAAehwG,GACb8oC,GAAWmQ,GAAM,EACjBsF,GAASlQ,GAAS,QAAQ,CAC5B,EAAEuhE,GAAY,ECjFDtB,GAAa,CAIxB,MAAO,OAGT,EAMaC,IAAe,KAAO,CACjC,WAAY,CACV,IAAK,YACL,gBAAYxB,GAAA,EAAU,GAExB,UAAW,CACT,IAAK,WACL,gBAAYE,GAAA,EAAS,GAEvB,MAAO,CACL,IAAK,QACL,gBAAYM,GAAA,EAAM,GAEpB,MAAO,CACL,IAAK,QACL,gBAAYL,GAAA,EAAY,GAE1B,SAAU,CACR,IAAK,UACL,gBAAYE,GAAA,EAAQ,GAEtB,wBAAyB,CACvB,IAAK,yBACL,gBAAYO,GAAA,EAAe,EAE/B,GAEaa,GAAW/3D,GAAS83D,IAAA,EAAe93D,CAAK,GAAK,KCjC1D,MAAMw5D,WAA0B1xF,EAAM,aAAc,CAClD,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEX,KAAK,MAAM,kBAAkBg7F,GAAS,WAAY,CAChD,OAAQ,KAAK,MAAM,aAAa,eAAe,KAAK,OACrD,CACH,CAEA,QAAS,CACP,KAAM,CACJ,MAAA4gE,EACA,SAAAjxF,EACA,WAAA86B,EACA,SAAA8c,EACA,SAAAs5C,EACA,kBAAAC,EACA,8BAAAC,CAAA,EACE,KAAK,MACHL,EAAa,KAAK,MAAM,aAAa,eAAe,KAAK,OAE/D,OACEtpE,MAAC,OAAI,MAAAwpE,EACH,SAAAn1D,OAAC0hC,YAAA,CACE,UAAAuzB,EAAW,IAAIO,GAAa,CAC3B,MAAM74D,EAAQ+3D,GAASc,EAAU,IAAI,EAC/BC,EAAa,CACjB,IAAK94D,EAAM,IACX,MAAOtkF,GAAI6rD,EAAUy4B,EAAM,GAAG,EAC9B,SAAU64D,EAAU,SACpB,YAAmB15C,EAAS3tH,GAAI+1E,EAAUy4B,EAAM,IAAKzoH,CAAK,CAAC,EAC3D,WAAYmkC,GAAI2mF,EAAYrC,EAAM,GAAG,EACrC,UAAW64D,EAAU,WAGvB,OAAIA,EAAU,OAAShB,GAAW,QAChCiB,EAAW,gBACTJ,GAAqBh2F,GAAwBi2F,CAA6B,EAC5EG,EAAW,sCAAwC,IAG9ChxF,EAAM,aAAak4B,EAAM,UAAW84D,CAAU,CACvD,CAAC,EACD9pE,MAACkpE,GAAA,CACC,MAAOO,EACP,MAAOlxF,EAAS,UAChB,SAAUwxF,GAAa55C,EAAS,CAAE,GAAG53C,EAAU,UAAAwxF,EAAW,GAC5D,EACF,EACF,CAEJ,CACF,CAEAS,GAAkB,aAAe,CAC/B,SAAU,IACZ,EACA,MAAMz5E,IAAkBzlF,IAAU,CAChC,aAAc05H,GAAgB15H,CAAK,EACnC,cAAekjJ,GAAiBljJ,CAAK,CACvC,GAEAm/J,IAAelwG,GACbwzD,GAAA,EACAv5B,GACEzD,IACA,CACE,kBAAAmX,EAAA,CACF,EAEF4Q,GAASlQ,GAAS,UAAU,CAC9B,EAAE4hE,EAAiB,ECrEbtxD,IAAU,CACd,MAAO,GACP,UAAW,OACX,SAAU,MACV,MAAO,KACP,UAAW,GACX,UAAW,CACT,aAAc,IAEhB,QAAS,IACX,EAEMhB,IAAc,CAClB,MAAO,KACP,UAAW,KACX,SAAU,KACV,MAAO,KACP,UAAW,GACX,YAAa,KACb,UAAW,CACT,aAAc,IAEhB,QAAS,IACX,EAWMe,IAAkBz2E,GAAW,CACjC,MAAM+uE,EAAQ,CACZ,MAAO,CAAC,CAAChI,GAAcn1B,EAAG,+CAA+C,CAAC,CAAC,EAC3E,MAAO,CAAC,CAAC62B,GAAc72B,EAAG,+CAA+C,CAAC,CAAC,EAC3E,UAAW,CAAC,CAACy2B,GAAQz2B,EAAG,oDAAoD,CAAC,CAAC,GAGhF,OAAKhwD,GAAQoe,EAAQ,MAAM,GACzBivE,GAAKjvE,EAAQ,OAAQ0nI,GAAe,CAClC,GAAIA,EAAY,SAAU,CACxB,MAAMl5D,EAAQ+3D,GAASmB,EAAY,IAAI,EACvC34D,EAAMP,EAAM,GAAG,EAAI,CACjB,CAACpG,GAAUx2B,EAAG,4CAA4C48B,EAAM,GAAG,EAAE,CAAC,EACtE,GAAIO,EAAMP,EAAM,GAAG,GAAK,EAAC,EAEvBk5D,EAAY,OAASrB,GAAW,QAClCt3D,EAAMP,EAAM,GAAG,EAAI,CACjB,CAAC7G,GAAiB/1B,EAAG,4CAA4C48B,EAAM,GAAG,EAAE,CAAC,EAC7E,GAAIO,EAAMP,EAAM,GAAG,GAAK,EAAC,EAG/B,CACF,CAAC,EAGIO,CACT,EAEAm5D,IAAe1xD,GAAWpQ,GAAS,WAAYqQ,IAAiBf,IAAagB,GAAO,ECnE9E1F,IAAS/S,IAAU,CACvB,KAAM,GACN,UAAW,CACT,MAAOA,EAAM,IAAI,OAAO,SAE1B,eAAgB,CACd,WAAYA,EAAM,QAAQ,CAAC,EAC3B,UAAW,UAEb,mBAAoB,CAClB,eAAgB,aAElB,KAAM,CACJ,QAAS,SACT,SAAU,GACV,WAAY,OACZ,UAAW,IAEb,eAAgB,CACd,QAAS,OACT,cAAe,SACf,MAAOA,EAAM,IAAI,OAAO,SACxB,aAAcA,EAAM,QAAQ,CAAC,GAE/B,aAAc,CACZ,aAAcA,EAAM,QAAQ,CAAC,EAEjC,GAEMkqE,IAAgB,CAAC,CACrB,QAAAxnI,EACA,mBAAAsrH,EACA,YAAAga,EACA,cAAAc,EACA,cAAAZ,EACA,sBAAA2B,EACA,SAAA/xF,EACA,eAAA8xF,EACA,iBAAA1mB,EACA,WAAAjmB,CACF,IAAM,CACJ,MAAMktC,EAAex2F,EAAG,6CAA6C,EAC/Dy2F,EAAcz2F,EAAG,4CAA4C,EAEnE,OACE4rB,MAAC,OAAI,UAAW78D,EAAQ,KACtB,SAAAkxE,OAAC,QACC,SAAU1nG,GAAS,CACjBA,EAAM,iBACNg8J,EAAcpwF,CAAQ,CACxB,EAEC,WAAC5vE,EAAM0rE,GAAW,kBAAkB,CAAC,GACpC2rB,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,UAC7C,SAAAkxC,GAAW,kBAAkB,EAChC,EAGFggC,OAAC,OAAI,UAAWlxE,EAAQ,eACrB,UAAAynI,GACC5qE,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,aAAc,UAAS,GACpE,SAAAynI,CAAA,CACH,EAGDC,GACC7qE,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAutD,CAAA,CACH,GAEJ,EAEA7qE,MAACoU,GAAA,CAAoB,KAAMq6C,CAAA,CAAoB,QAE9C13C,GAAA,CAAW,KAAMA,GAAW,KAAK,SAAU,MAAOwyD,EAAe,EAElEvpE,MAACwqE,IAAA,CACC,kBAAmB9sC,GAAY,SAAS,QACxC,8BAA+BimB,GAAkB,UAAU,cAC3D,SAAU3jD,MAACmpE,GAAA,CAAS,iBAAAxlB,EAAoC,UAAWxgH,EAAQ,KAAM,UAGlF2wE,GAAA,CAAO,KAAK,SAAS,UAAU,2BAA2B,SAAU,CAAC20D,EACpE,SAAAzoE,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,+BAA+B,EACrC,EACF,EAECi2F,GACCrqE,MAAC,OAAI,UAAW78D,EAAQ,eACtB,SAAA68D,MAACs5C,GAAA,CACC,UAAU,IACV,UAAWn2G,EAAQ,mBACnB,QAASx7C,GAAK,CACZA,EAAE,kBACF2iL,EAAA,CACF,EACA,MAAOl2F,EAAG,0DAA0D,GACtE,CACF,KAGN,CAEJ,EAEA02F,IAAevwG,GACb8oC,GAAWmQ,GAAM,EACjBsF,GAASlQ,GAAS,UAAU,CAC9B,EAAE+hE,GAAa,ECxGF7B,IAAe,KAAO,CACjC,WAAY,CACV,IAAK,YACL,gBAAYxB,GAAA,EAAU,GAExB,UAAW,CACT,IAAK,WACL,gBAAYE,GAAA,EAAS,EAEzB,GAEauB,GAAW/3D,GAAS83D,IAAA,EAAe93D,CAAK,GAAK,KCf1D,MAAM+5D,WAA0BjyF,EAAM,aAAc,CAClD,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEX,KAAK,MAAM,kBAAkBg7F,GAAS,UAAW,CAC/C,OAAQ,KAAK,MAAM,aAAa,wBAAwB,KAAK,OAC9D,CACH,CAEA,QAAS,CACP,KAAM,CAAE,MAAA4gE,EAAO,SAAAjxF,EAAU,WAAA86B,EAAY,SAAA8c,EAAU,SAAAs5C,CAAA,EAAa,KAAK,MAC3DH,EAAa,KAAK,MAAM,aAAa,wBAAwB,KAAK,OAExE,OACEtpE,MAAC,OAAI,MAAAwpE,EACH,SAAAn1D,OAAC0hC,YAAA,CACE,UAAAuzB,GAAY,IAAIO,GAAa,CAC5B,MAAM74D,EAAQ+3D,GAASc,EAAU,IAAI,EAErC,OAAO/wF,EAAM,aAAak4B,EAAM,UAAW,CACzC,IAAKA,EAAM,IACX,MAAOtkF,GAAI6rD,EAAUy4B,EAAM,GAAG,EAC9B,SAAU64D,EAAU,SACpB,YAAmB15C,EAAS3tH,GAAI+1E,EAAUy4B,EAAM,IAAKzoH,CAAK,CAAC,EAC3D,WAAYmkC,GAAI2mF,EAAYrC,EAAM,GAAG,EACrC,UAAW64D,EAAU,UACtB,CACH,CAAC,EACD7pE,MAAC,OAAI,UAAU,gBACb,SAAAA,MAACkpE,GAAA,CACC,MAAOO,EACP,MAAOlxF,EAAS,UAChB,SAAUwxF,GAAa55C,EAAS,CAAE,GAAG53C,EAAU,UAAAwxF,EAAW,GAC5D,CACF,GACF,EACF,CAEJ,CACF,CAEAgB,GAAkB,aAAe,CAC/B,SAAU,IACZ,EACA,MAAMh6E,IAAkBzlF,IAAU,CAChC,aAAc05H,GAAgB15H,CAAK,EACnC,cAAekjJ,GAAiBljJ,CAAK,CACvC,GAEA0/J,IAAezwG,GACbwzD,GAAA,EACAv5B,GACEzD,IACA,CACE,kBAAAmX,EAAA,CACF,EAEF4Q,GAASlQ,GAAS,SAAS,CAC7B,EAAEmiE,EAAiB,EC5Db7xD,IAAU,CACd,UAAW,OACX,SAAU,MACV,MAAO,KACP,UAAW,EACb,EAEMhB,IAAc,CAClB,UAAW,KACX,SAAU,KACV,MAAO,KACP,UAAW,GACX,YAAa,IACf,EAWMe,IAAkBz2E,GAAW,CACjC,MAAM+uE,EAAQ,CACZ,MAAO,CAAC,CAACtG,GAAc72B,EAAG,+CAA+C,CAAC,CAAC,EAC3E,UAAW,CAAC,CAACy2B,GAAQz2B,EAAG,oDAAoD,CAAC,CAAC,GAGhF,OAAKhwD,GAAQoe,EAAQ,MAAM,GACzBivE,GAAKjvE,EAAQ,OAAQ0nI,GAAe,CAClC,GAAIA,EAAY,SAAU,CACxB,MAAMl5D,EAAQ+3D,GAASmB,EAAY,IAAI,EACvC34D,EAAMP,EAAM,GAAG,EAAI,CACjB,CAACpG,GAAUx2B,EAAG,4CAA4C48B,EAAM,GAAG,EAAE,CAAC,EACtE,GAAIO,EAAMP,EAAM,GAAG,GAAK,EAAC,CAE7B,CACF,CAAC,EAGIO,CACT,EAEA05D,IAAejyD,GAAWpQ,GAAS,UAAWqQ,IAAiBf,IAAagB,GAAO,EC7C7E1F,IAAS/S,IAAU,CACvB,KAAM,GACN,KAAM,CACJ,QAAS,SACT,SAAU,GACV,WAAY,OACZ,UAAW,IAEb,QAAS,CACP,MAAOA,EAAM,IAAI,OAAO,UAE1B,aAAc,CACZ,aAAcA,EAAM,QAAQ,CAAC,GAE/B,SAAU,CACR,UAAW,SAEf,GAEMyqE,IAAgB,CAAC,CACrB,QAAA/nI,EACA,eAAAmkG,EACA,mBAAAmnB,EACA,UAAAia,EACA,sBAAAyC,EACA,oBAAAC,EACA,iBAAAznB,EACA,YAAA8kB,EACA,SAAAlwF,EACA,SAAA8yF,CACF,IAAM,CACJ,IAAIC,EAAWl3F,EAAG,mDAAmD,EACjEw2F,EAAe,GACfC,EAAc,GAEdQ,IAAa/2C,GAAS,OACxBs2C,EAAex2F,EAAG,kEAAkE,EACpFy2F,EAAcz2F,EAAG,iEAAiE,IAElFw2F,EAAex2F,EAAG,2EAA2E,EAC7Fy2F,EAAcz2F,EAAG,0EAA0E,GAG7F,MAAMm3F,EAAcX,GAAgBC,EAEpC,OACEx2D,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAA68D,MAACoU,GAAA,CAAoB,KAAMkzB,GAAkBmnB,CAAA,CAAoB,EAEhE8c,GACCl3D,OAAC,OAAI,UAAWlxE,EAAQ,QACrB,UAAAynI,GACC5qE,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,aAAc,UAAS,GACpE,SAAAynI,CAAA,CACH,EAEDC,GACC7qE,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAutD,CAAA,CACH,GAEJ,QAGD9zD,GAAA,CAAW,KAAMA,GAAW,KAAK,SAAU,MAAO2xD,EAAW,EAE9Dr0D,OAAC,OAAI,UAAU,kBACb,UAAArU,MAAC+qE,IAAA,CACC,SAAU/qE,MAACmpE,GAAA,CAAS,iBAAAxlB,EAAoC,UAAWxgH,EAAQ,KAAM,IAGnF68D,MAAC8T,GAAA,CACC,SAAU,CAAC20D,EACX,UAAU,4CACV,QAAS9gL,GAAK,CACZA,EAAE,kBACFyjL,EAAoB7yF,CAAQ,CAC9B,EACA,MAAO+yF,EAEP,eAAChuD,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAguD,CAAA,CACH,GACF,EACF,EAECD,IAAa/2C,GAAS,OACrBt0B,MAAA+1C,WAAA,CAEE,eAAC,OAAI,UAAW5yG,EAAQ,SACtB,SAAA68D,MAACs5C,GAAA,CACC,UAAU,IACV,QAAS3xJ,GAAK,CACZA,EAAE,kBACFwjL,EAAA,CACF,EACA,MAAO/2F,EAAG,uCAAuC,IAErD,EACF,GAEJ,CAEJ,EAEAo3F,IAAejxG,GACb8oC,GAAWmQ,GAAM,EACjBsF,GAASlQ,GAAS,SAAS,CAC7B,EAAEsiE,GAAa,ECrFT13D,IAAS,KAAO,CACpB,UAAW,CACT,WAAY,WACZ,WAAY,oCAEhB,GAEA,MAAMi4D,YAAkB3yF,EAAM,SAAU,CACtC,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAgCb4oD,GAAA,kCAA6B+hB,GAAY,CACvC,KAAK,MAAM,kBAAkBA,CAAQ,CACvC,GAEA/hB,GAAA,yBAAoB+hB,GAAY,CAC9B,MAAMmzF,EAAcnzF,EACd,CAAE,SAAAqG,EAAU,aAAAynD,CAAA,EAAiB,KAAK,MAAM,YAE9C,KAAK,MAAM,iBAAiBqlC,EAAY,SAAUA,EAAY,SAAU,CACtE,SAAA9sF,EACA,aAAAynD,CAAA,CACD,CACH,GAEA7vE,GAAA,2BAAsB+hB,GAAY,CAChC,KAAK,MAAM,oBAAoBA,CAAQ,CACzC,GAEA/hB,GAAA,gCAA2B+hB,GAAY,CACrC,KAAM,CAAE,SAAAqG,EAAU,aAAAynD,CAAA,EAAiB,KAAK,MAAM,YAE9C,KAAK,MAAM,aAAa9tD,EAAU,CAChC,SAAAqG,EACA,aAAAynD,CAAA,CACD,CACH,GAEA7vE,GAAA,wBAAmBm1G,GAAW,CAC5B,KAAK,SAAS,CACZ,KAAMA,CAAA,CACP,EACD,OAAO,SAAS,EAAG,CAAC,CACtB,GASAn1G,GAAA,0BAAqB,IAAM,CACzB,KAAM,CAAE,KAAAo1G,GAAS,KAAK,MACtB,GAAIA,IAAS9b,GAAW,OAAS8b,IAAS9b,GAAW,SAAU,CAC7D,MAAM+b,EAAU,SAAS,eAAe,YAAYD,CAAI,EAAE,EACtDC,GACFA,EAAQ,OAEZ,CACF,GAEAr1G,GAAA,6BAAwB,IAAM,KAAK,iBAAiBs5F,GAAW,UAAU,GACzEt5F,GAAA,6BAAwB,IAAM,KAAK,iBAAiBs5F,GAAW,SAAS,GAExEt5F,GAAA,kBAAa,IAAM,CACjB,MAAMjrD,EAAkB,OAAO,SAAS,KACxC,KAAK,MAAM,SACX,WAAW,IAAM,CACf,GAAI,OAAO,SAAS,OAASA,EAAiB,CAC5C,MAAM0uB,EAAcV,GAAc,cAAc,EAC3CnV,GAAQ6V,CAAW,EAGtBw8B,GAAO,MAAM,UAAW,8BAA+B,CAAE,YAAAx8B,EAAa,EAFtE,OAAO,SAAS,KAAOD,GAAeC,EAAaF,GAAgB,gBAAgB,CAIvF,CACF,EAAG,GAAG,CACR,GAhGEuyG,GAAA,EAEA,KAAK,MAAM,SAEX,IAAIs/B,EACA,KAAK,MAAM,YACbA,EAAO,KAAK,MAAM,YACT,KAAK,MAAM,UAAU,eAAe,OAASt3C,GAAS,MAC/Ds3C,EAAO9b,GAAW,WACT,KAAK,MAAM,UAAU,eAAe,OAASx7B,GAAS,eAE3D/6F,GAAc,aAAa,IAAM,OAGnCqyI,EAAO9b,GAAW,MAElB8b,EAAO9b,GAAW,UAKpB8b,EAAO9b,GAAW,MAGpB,KAAK,MAAQ,CACX,KAAA8b,CAAA,CAEJ,CAoCA,mBAAmBzzD,EAAW2zD,EAAW,CAEnCA,EAAU,OAAS,KAAK,MAAM,MAChC,KAAK,oBAET,CA8BA,QAAS,CACP,KAAM,CACJ,UAAApD,EACA,eAAAphC,EACA,cAAAiiC,EACA,mBAAA9a,EACA,2BAAAtK,EACA,iBAAAR,EACA,qBAAA6J,EACA,WAAA9vB,EACA,UAAAn8C,EACA,eAAAwqF,EACA,QAAA5oI,CAAA,EACE,KAAK,MAET,GAAIghH,GAA8BqJ,EAChC,OAAOxtD,MAACk5C,GAAA,CAAY,KAAI,GAAC,EAG3B,MAAMmW,EAAW0c,GAAgB,OAAO,MAAM,MAASruC,GAAcA,EAAW,KAE1EsuC,EAAgB,CAAC1yF,EAAOhV,IAC5B07B,MAACmvD,GAAA,CACC,SAAAE,EACA,aAAcrvD,MAACivD,IAAA,CAAK,cAAY,OAAO,EACvC,eAAgB,GAChB,eAAc,GACd,aAAc,GACd,OAAQ,KAAK,WACb,WACE31E,GACE0mB,MAACsd,GAAA,CAAiB,KAAM,IAAK,UAAU,KAAK,UAAWn6E,EAAQ,UAC5D,SAAAm2C,CAAA,CACH,EAIH,SAAAhV,CAAA,GAIC2nG,EAAyB1qF,EAAU,eAAe,OAAS+yC,GAAS,OAE1E,OACEjgB,OAACv7B,EAAM,SAAN,CACE,eAAK,MAAM,OAASg3E,GAAW,YAC9B9vD,MAACksE,GAAA,CAAY,WAAY,GACtB,SAAAF,EACC53F,EAAG,+BAA+B,EAClC4rB,MAAC2qE,IAAA,CACC,mBAAoBlc,EACpB,cAAA8a,EACA,cAAe,KAAK,2BACpB,sBAAuB,KAAK,sBAC5B,eAAgBhoF,EAAU,eAAe,eACzC,iBAAAoiE,EACA,WAAAjmB,CAAA,EACF,EAEJ,EAGD,KAAK,MAAM,OAASoyB,GAAW,OAC9B9vD,MAACksE,GAAA,CAAY,WAAY,GACtB,SAAAF,EACCC,EAAyB,KAAO73F,EAAG,+BAA+B,EAClEigC,OAACv7B,EAAM,SAAN,CACE,UAAAmzF,SACE/b,GAAA,CAAS,OAAQJ,GAAW,MAAO,SAAU,KAAK,iBAAkB,EAEvE9vD,MAAC,OACE,GAAIisE,EACD,CACE,GAAI,gBACJ,KAAM,WACN,kBAAmB,YAAYnc,GAAW,KAAK,IAEjD,GAEJ,SAAA9vD,MAACwoE,IAAA,CACC,eAAgBlhC,EAChB,mBAAoBmnB,EACpB,UAAAia,EACA,cAAe,KAAK,kBACpB,sBAAuB,KAAK,sBAC5B,eAAgBnnF,EAAU,eAAe,gBAC3C,EACF,EACF,GAEJ,EAGD,KAAK,MAAM,OAASuuE,GAAW,WAC9B9vD,MAACksE,GAAA,CAAY,WAAY,GACtB,SAAAF,EACCzqF,EAAU,eAAe,OAAS+yC,GAAS,eACvClgD,EAAG,oEAAoE,EACvEA,EAAG,+BAA+B,EACtC4rB,MAACkrE,IAAA,CACC,eAAgB5jC,EAChB,mBAAoBmnB,EACpB,UAAAia,EACA,sBAAuB,KAAK,sBAC5B,oBAAqB,KAAK,oBAC1B,iBAAA/kB,EACA,SAAUpiE,EAAU,eAAe,MACrC,EAEJ,EAGD,KAAK,MAAM,OAASuuE,GAAW,UAC9B9vD,MAACksE,GAAA,CAAY,WAAY,GACtB,SAAAF,EACCC,EAAyB,KAAO73F,EAAG,+BAA+B,EAClEigC,OAACv7B,EAAM,SAAN,CACE,UAAAmzF,SACE/b,GAAA,CAAS,OAAQJ,GAAW,SAAU,SAAU,KAAK,iBAAkB,EAE1E9vD,MAAC,OACE,GAAIisE,EACD,CACE,GAAI,gBACJ,KAAM,WACN,kBAAmB,YAAYnc,GAAW,QAAQ,IAEpD,GAEJ,SAAA9vD,MAACmqE,IAAA,CACC,mBAAoB1b,EACpB,cAAA8a,EACA,qBAAsB,KAAK,yBAC3B,sBAAuB,KAAK,sBAC5B,eAAgBhoF,EAAU,eAAe,eACzC,iBAAAoiE,EACA,WAAAjmB,CAAA,EACF,EACF,EACF,EACF,CACF,GAEJ,CAEJ,CACF,CAEA,MAAM3sC,IAAkBzlF,IAAU,CAChC,eAAgBg8H,GAAeh8H,CAAK,EACpC,UAAW87H,GAAa97H,CAAK,EAC7B,mBAAoBmjJ,GAAmBnjJ,CAAK,EAC5C,cAAekjJ,GAAiBljJ,CAAK,EACrC,YAAao5H,GAAep5H,CAAK,CACnC,GAEA6gK,GAAe5xG,GACb2uE,GACAwb,GAAA,EACAmJ,GACAr5D,GAAQzD,IAAiB,CACvB,iBAAAq1C,GACA,kBAAAkoB,IACA,oBAAAD,GACA,aAAAD,IACA,OAAA7nB,GACA,OAAAp2H,EAAA,CACD,EACDkzF,GAAWmQ,GAAM,CACnB,EAAEi4D,GAAS,ECvTEW,GAAuB,CAClC,GAAG36J,GAAoB,sBAAsB,EAC7C,WAAY,YACd,EAEa46J,IAAiB7mC,GAC5Bn0H,GAAoB+6J,GAAsBrmC,GAAQ,mBAAmBP,CAAQ,EAAG,CAC9E,SAAAA,CACF,CAAC,ECXG8mC,GAAUhhK,GAASA,EAAM,SAAS,eAE3BihK,IAAyBhuI,GACpC,CAAE+tI,EAAQ,EACT96J,GAAS,CACR,MAAM/gB,EAAQ+gB,EAAK,IAAI,OAAO,EAC9B,OAAI7I,EAAMlY,CAAK,EACN,KAEFA,EAAM,MACf,CACF,EAEqC8tC,GACnC,CAAE+tI,EAAQ,EACT96J,GAAS,CACR,MAAMyuC,EAAMzuC,EAAK,IAAI,MAAM,EAC3B,OAAI7I,EAAMs3C,CAAG,EACJ,KAEFA,EAAI,MACb,CACF,EAEO,MAAMusH,IAA8BjuI,GACzC,CAAE+tI,EAAQ,EACT96J,GACQA,EAAK,IAAI,YAAY,CAEhC,ECtBMi7J,IAAkCr1G,GACtCg1G,GAAqB,QACrB,CAAC,CAAE,KAAAjgL,EAAM,OAAA6f,KAAa,CACpB,GAAI,CAACyvB,KACH,OAAAtvC,EAAK6f,CAAM,EAEJ7f,EAAKw5G,GAAYtB,GAAS,OAAO,CAAC,CAAC,CAE9C,CACF,EAEaqoE,IAA4B,CAACD,GAA+B,ECXnEE,IAA0BrmK,GAAU,OAAO,CAC/C,WAAY,GACZ,KAAM,KACN,MAAO,IACT,CAAC,EAEYsmK,IAAwB,CAACthK,EAAQqhK,IAAyB3gK,IAAW,CAChF,OAAQA,EAAO,MACb,KAAKswF,GACH,OAAOhxF,EAAM,MAAM,CACjB,MAAO,KACR,EAEH,KAAK8gK,GAAqB,QACxB,OAAO9gK,EAAM,MAAM,CACjB,WAAY,GACZ,KAAM,KACN,MAAO,KACR,EAEH,KAAK8gK,GAAqB,QACxB,OAAO9gK,EAAM,MAAM,CACjB,WAAY,GACZ,KAAM,CACJ,GAAGU,EAAO,SACV,SAAUA,EAAO,KAAK,UAExB,MAAO,KACR,EAEH,KAAKogK,GAAqB,QACxB,OAAO9gK,EAAM,MAAM,CACjB,WAAY,GACZ,KAAM,KACN,MAAOU,EAAO,MACf,EAEH,KAAKogK,GAAqB,WACxB,OAAO9gK,EAAM,MAAM,CACjB,KAAM,KACP,EAEH,QACE,OAAOA,CAAA,CAEb,EC9CMuhK,IAAqB/zD,GAASlQ,GAAS,eAAe,EAAE,CAAC,CAAE,SAAArwB,EAAU,WAAA86B,EAAY,SAAA8c,CAAA,IACrFnwB,MAAC,OACC,SAAAA,MAAC8nE,GAAA,CACC,MAAOvvF,EAAS,SAChB,SAAUitD,GAAYrV,EAAS,CAAE,GAAG53C,EAAU,SAAAitD,EAAU,EACxD,WAAYnyB,EAAW,SACzB,EACF,CACD,ECPK6F,IAAU,CACd,SAAU,EACZ,EAEMhB,IAAc,CAClB,SAAU,IACZ,EAEMe,IAAkB,KAAO,CAC7B,SAAU,CACR,CAACrO,GAAUx2B,EAAG,gDAAgD,CAAC,EAC/D,CAACm1B,GAAcn1B,EAAG,+CAA+C,CAAC,EAEtE,GAEAi4F,IAAerzD,GAAWpQ,GAAS,gBAAiBqQ,IAAiBf,IAAagB,GAAO,ECbnF1F,IAAS/S,IAAU,CACvB,KAAM,CACJ,QAASA,EAAM,QAAQ,CAAC,GAE1B,QAAS,CACP,QAAS,GAAGA,EAAM,QAAQ,CAAC,CAAC,MAAMA,EAAM,QAAQ,CAAC,CAAC,KAClD,aAAcA,EAAM,QAAQ,CAAC,EAEjC,GAEMs8C,IAAO,CAAC,CAAE,QAAA55G,EAAS,WAAAk7E,EAAY,YAAAoqD,EAAa,UAAAqE,EAAW,SAAAp4D,CAAA,IAC3D1U,MAAC,OAAI,UAAW78D,EAAQ,KACtB,SAAAkxE,OAAC,QACC,SAAU1nG,GAAS,CACjBA,EAAM,iBACN+nG,EAAA,CACF,EAEA,UAAA1U,MAACoU,GAAA,CAAoB,KAAMiK,CAAA,CAAY,QAEtCtH,GAAA,CAAW,KAAMA,GAAW,KAAK,SAAU,MAAO+1D,EAAW,EAE9D9sE,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,MAAM,SAAS,UAAWn6E,EAAQ,QACtE,SAAAixC,EAAG,sCAAsC,EAC5C,QAEC24F,IAAA,EAAuB,EAExB/sE,MAAC8T,GAAA,CACC,KAAK,SACL,UAAU,2BACV,SAAU,CAAC20D,GAAepqD,EAE1B,SAAAre,MAACsd,IAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,iBAAiB,EACvB,GACF,EACF,EACF,EAGF44F,IAAe3pE,GAAWmQ,GAAM,EAAEupC,GAAI,ECvCtC,MAAMkwB,YAA2Bn0F,EAAM,SAAU,CAAjD,kCACEtiB,GAAA,oBAAe,IAAM,CACnB,MAAMk1G,EAAc,KAAK,MAAM,SAC/B,KAAK,MAAM,eAAeA,EAAY,QAAQ,CAChD,GAEA,QAAS,CACP,KAAM,CAAE,UAAAoB,EAAW,YAAArE,EAAa,WAAApqD,CAAA,EAAe,KAAK,MAEpD,OACEre,MAACs8C,GAAA,CAAK,MAAOloE,EAAG,oCAAoC,EAClD,SAAA4rB,MAAC+8C,IAAA,CACC,WAAA1+B,EACA,UAAAyuD,EACA,YAAArE,EACA,SAAU,KAAK,eAEnB,CAEJ,CACF,CAEA,MAAM13E,IAAkBzlF,IAAU,CAChC,WAAYkhK,IAA4BlhK,CAAK,EAC7C,UAAWihK,IAAuBjhK,CAAK,CACzC,GAEA4hK,IAAep0D,GAASlQ,GAAS,eAAe,EAC9CpU,GACEzD,IACA,gBACEs7E,GAAA,CACF,EACAY,GAAkB,CACtB,EC3CA,SAAwBE,KAAe,CACrC,OAAOntE,MAACyrE,GAAA,CAAU,YAAa3b,GAAW,SAAU,CACtD,CCPA,MAAMsd,GAAc,CAClB,UAAW,CACT,IAAK,+BACL,QAAS,gCAEX,eAAgB,CACd,QAAS,gCAEX,iBAAkB,CAChB,QAAS,+BAEb,ECPMC,GAAW,CACf,wBAAyB,CAAChrE,EAAcirE,KAAiB,CACvD,KAAM,MACN,OAAQ,CACN,aAAAjrE,EACA,YAAAirE,CAAA,EAEF,MAAO,GACP,SAAUjoC,GAAa,uBACvB,aAAc+nC,GAAY,YAG5B,uBAAwB,CAAC/qE,EAAckrE,KAAgB,CACrD,KAAM,MACN,OAAQ,CACN,aAAAlrE,EACA,WAAAkrE,CAAA,EAEF,MAAO,GACP,SAAUloC,GAAa,iBACvB,aAAc+nC,GAAY,YAG5B,iBAAkB,CAAC/qE,EAAc3rB,KAAU,CACzC,KAAM,MACN,OAAQ,CACN,aAAA2rB,EACA,KAAA3rB,CAAA,EAEF,MAAO,GACP,QAAS,GACT,SAAU2uD,GAAa,eACvB,aAAc+nC,GAAY,iBAG5B,SAAU,CAAC/qE,EAAcD,KAAa,CACpC,KAAM,MACN,OAAQ,CACN,aAAAC,EACA,QAAAD,CAAA,EAEF,MAAO,GACP,SAAUijC,GAAa,UACvB,aAAc+nC,GAAY,YAG5B,eAAgB,CAAC/qE,EAAcmrE,EAAeC,KAAoB,CAChE,KAAM,MACN,OAAQ,CACN,aAAAprE,CAAA,EAEF,KAAM,CACJ,eAAAorE,EACA,cAAAD,CAAA,EAEF,QAAS,GACT,SAAUnoC,GAAa,iBACvB,aAAc+nC,GAAY,kBAE9B,ECzDaM,GAAgCj8J,GAC3C,uCACF,EAKak8J,GAA4B,CAACtrE,EAAcirE,IACtDj8J,GACEq8J,GACAL,GAAS,wBAAwBhrE,EAAcirE,CAAW,EAC1D,CACE,aAAAjrE,EACA,YAAAirE,CAAA,CAEJ,EAMWM,IAAc,CACzB,MAAO,cACT,EAIaC,GAA+Bp8J,GAC1C,uCACF,EAEaq8J,IAA2B,CAACzrE,EAAckrE,IACrDl8J,GACEw8J,GACAR,GAAS,uBAAuBhrE,EAAckrE,CAAU,EACxD,CACE,aAAAlrE,EACA,WAAAkrE,CAAA,CAEJ,EAEWQ,GAAiBt8J,GAAoB,qBAAqB,EAC1Du8J,GAAwBv8J,GAAoB,6BAA6B,EAEzEw8J,IAAa,CAAC5rE,EAAcD,IACvC/wF,GAAoB08J,GAAgBV,GAAS,SAAShrE,EAAcD,CAAO,EAAG,CAC5E,aAAAC,EACA,QAAAD,CACF,CAAC,EAEU8rE,GAAoB,CAAC7rE,EAAcD,EAAS+rE,EAAc,KACrE98J,GAAoB28J,GAAuBX,GAAS,SAAShrE,EAAcD,CAAO,EAAG,CACnF,aAAAC,EACA,QAAAD,EACA,YAAA+rE,CACF,CAAC,EAEUC,GAAyB38J,GAAoB,+BAA+B,EAE5E48J,IAAqB,CAAChsE,EAAc3rB,IAC/CrlE,GAAoB+8J,GAAwBf,GAAS,iBAAiBhrE,EAAc3rB,CAAI,EAAG,CACzF,aAAA2rB,EACA,KAAA3rB,CACF,CAAC,EAEU43F,GAA2B78J,GAAoB,iCAAiC,EClEvF88J,GAAejjK,GAASA,EAAM,SAAS,MACvCkjK,OAAsBD,GAAajjK,CAAK,EAAE,MAAM,CAAC,QAAS,SAAS,CAAC,EAE7DmjK,GAAgBlwI,GAAe,CAACgwI,EAAY,EAAGG,GAAa,CACvE,MAAMj+K,EAAQi+K,EAAU,IAAI,OAAO,EACnC,OAAI/lK,EAAMlY,CAAK,EACN,KAEFA,EAAM,MACf,CAAC,EAEYk+K,GAAkBpwI,GAAe,CAACgwI,EAAY,EAAGG,GAC5DA,EAAU,IAAI,aAAc,EAAK,CACnC,EAEaE,GAAWrwI,GAAe,CAACgwI,EAAY,EAAGG,GAAa,CAClE,MAAM9zC,EAAQ8zC,EAAU,IAAI,OAAO,EAEnC,OAAI/lK,EAAMiyH,CAAK,EACN,KAGFE,GAAYF,EAAM,MAAM,CACjC,CAAC,EAEKi0C,IAAe,CAACvjK,EAAOsC,IAAUA,EAAM,GAEhCkhK,IAAiBvwI,GAAe,CAACiwI,IAAYK,GAAY,EAAG,CAACj/K,EAASmpC,IAAO,CACxF,MAAM6hG,EAAQhrI,EAAQ,KAAK,CAACrH,EAAO2F,IAAQ3F,EAAM,IAAI,IAAI,IAAMwwC,CAAE,EAEjE,OAAIpwB,EAAMiyH,CAAK,EACN,KAGFA,EAAM,MACf,CAAC,ECrBKm0C,GAAa,CACjB,MAAO,KACP,WAAY,GACZ,YAAa,KACb,MAAO,IACT,EAEaC,GAAe,CAAC1jK,EAAQhF,GAAU,OAAOyoK,EAAU,EAAG/iK,IAAW,CAC5E,OAAQA,EAAO,MACb,KAAK4hK,IAAY,MACf,OAAOtiK,EAAM,MACXhF,GAAU,OAAO,CACf,GAAGyoK,EAAA,CACJ,GAGL,KAAKX,GAAuB,QAC5B,KAAKV,GAA8B,QACnC,KAAKG,GAA6B,QAClC,KAAKE,GAAe,QAClB,OAAOziK,EAAM,MAAM,CACjB,MAAO,KACP,WAAY,GACZ,YAAa,KACb,MAAO,KACR,EAEH,KAAK0iK,GAAsB,QAC3B,KAAKM,GAAyB,QAC5B,OAAOhjK,EAAM,MAAM,CACjB,WAAY,GACZ,YAAa,KACb,MAAO,KACR,EAEH,KAAK8iK,GAAuB,QAC5B,KAAKV,GAA8B,QACnC,KAAKG,GAA6B,QAClC,KAAKG,GAAsB,QAC3B,KAAKD,GAAe,QACpB,KAAKO,GAAyB,QAC5B,OAAOhjK,EAAM,MAAM,CACjB,MAAOU,EAAO,SACd,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACR,EAEH,KAAKoiK,GAAuB,QAC5B,KAAKV,GAA8B,QACnC,KAAKG,GAA6B,QAClC,KAAKG,GAAsB,QAC3B,KAAKD,GAAe,QAClB,OAAOziK,EAAM,MAAM,CACjB,MAAO,KACP,WAAY,GACZ,gBAAiB,KACjB,MAAOU,EAAO,MACf,EAEH,KAAKsiK,GAAyB,QAC5B,OAAOhjK,EAAM,MAAM,CACjB,WAAY,GACZ,gBAAiB,KACjB,MAAOU,EAAO,MACf,EAEH,QACE,OAAOV,CAAA,CAEb,EClFM2jK,GAAqB3jK,GAASA,EAAM,SAAS,YAC7C4jK,GAAiB5jK,GAASA,EAAM,SAAS,QACzC6jK,IAAqB7jK,GAASA,EAAM,SAAS,QAAQ,IAAI,aAAa,EACtE8jK,OAAoBF,GAAe5jK,CAAK,EAAE,MAAM,CAAC,UAAW,OAAO,CAAC,EAE7D+jK,GAAa9wI,GAAe,CAAC2wI,EAAc,KACtD1zC,GAAc8zC,EAAY,IAAI,SAAS,EAAE,MAAM,CACjD,EAEMT,IAAe,CAACvjK,EAAOsC,IAAUA,EAAM,GAEhC2hK,IAAgBhxI,GAAe,CAAC6wI,IAAUP,GAAY,EAAG,CAACp8H,EAAO1Z,IAAO,CACnF,MAAMlvB,EAAO4oC,EAAM,IAAI1Z,CAAE,EAEzB,OAAIpwB,EAAMkB,CAAI,EACL,KAGFA,EAAK,MACd,CAAC,EAEY2lK,GAAiBjxI,GAAe,CAAC0wI,EAAkB,EAAGQ,GAAmB,CACpF,MAAMj+J,EAAOi+J,EAAgB,IAAI,MAAM,EAEvC,OAAI9mK,EAAM6I,CAAI,EACL,KAGFA,EAAK,MACd,CAAC,EAEYk+J,IAAiBnxI,GAAe,CAAC4wI,GAAkB,EAAGQ,GAC7DhnK,EAAMgnK,CAAe,EAChB,KAGFl0C,GAAkBk0C,EAAgB,MAAM,CAChD,EAEYC,GAAkBrxI,GAAe,CAAC0wI,EAAkB,EAAGQ,GAAmB,CACrF,MAAMh/K,EAAQg/K,EAAgB,IAAI,OAAO,EAEzC,OAAI9mK,EAAMlY,CAAK,EACN,KAGFA,EAAM,MACf,CAAC,EAEYo/K,IAA4BtxI,GAAe,CAACixI,EAAc,EAAGM,GACjEA,CACR,EAEYC,IAA+BxxI,GAAe,CAAC0wI,EAAkB,EAAGQ,GAC/EA,EAAgB,IAAI,YAAY,CAClC,EAGkC/4G,GAAqBprD,GAASA,EAAM,SAAS,gBAAgB,ECrC/F,MAAM0kK,WAAuBl3F,EAAM,aAAc,CAC/C,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,GAGTjF,EAAMiF,EAAM,KAAK,GACjBA,EAAM,aACL,CAACjF,EAAMiF,EAAM,KAAK,IACfA,EAAM,SAAW,SAASA,EAAM,OAAO,IAAMA,EAAM,MAAM,IACxDA,EAAM,aAAeA,EAAM,cAAgBA,EAAM,MAAM,aACvDA,EAAM,YAAcA,EAAM,aAAeA,EAAM,MAAM,cAE1D,KAAK,UAAUA,EAAO,EAAI,CAE9B,CAEA,0BAA0BmrE,EAAW,CACnC,MAAMnrE,EAAQ,KAAK,OAGfmrE,EAAU,SAAWA,EAAU,UAAYnrE,EAAM,SAChDmrE,EAAU,aAAeA,EAAU,cAAgBnrE,EAAM,aACzDmrE,EAAU,YAAcA,EAAU,aAAenrE,EAAM,YACvDmrE,EAAU,MAAQA,EAAU,OAASnrE,EAAM,QAC7C,CAACA,EAAM,OAASA,EAAM,MAAM,KAE7B,KAAK,UAAUmrE,CAAS,CAE5B,CAEA,UAAUnrE,EAAOm2I,EAAc,GAAO,EAChC,CAACn2I,EAAM,iBAAmBm2I,KACxBn2I,EAAM,WACRA,EAAM,yBAAyBA,EAAM,aAAcA,EAAM,UAAU,EAC1DA,EAAM,YACfA,EAAM,0BAA0BA,EAAM,aAAcA,EAAM,WAAW,EAC5DA,EAAM,QACfA,EAAM,WAAWA,EAAM,aAAcA,EAAM,OAAO,EACzCA,EAAM,KACfA,EAAM,mBAAmBA,EAAM,aAAcA,EAAM,IAAI,EAEvDrd,GAAU,GAAO,oCAAoC,EAG3D,CAEA,QAAS,CACP,KAAM,CACJ,sBAAA0/K,EACA,MAAAr1C,EACA,WAAAs1C,EACA,gBAAAvB,EACA,SAAA9jF,EACA,QAAAuwC,EACA,GAAGr7B,CAAA,EACD,KAAK,MAEHowE,EAAgB,CACpB,MAAAv1C,EACA,WAAAs1C,EACA,YAAa,IAAM,KAAK,UAAU,KAAK,KAAK,EAC5C,gBAAAvB,EACA,QAAAvzC,CAAA,EAGF,OAAIzyH,EAAMsnK,CAAqB,EACtBplF,EAASslF,CAAa,EAGxBnwE,MAACiwE,EAAA,CAAuB,GAAGE,EAAgB,GAAGpwE,CAAA,CAAY,CACnE,CACF,CAEAiwE,GAAe,aAAe,CAC5B,MAAO,KACP,QAAS,KACT,YAAa,KACb,WAAY,KACZ,KAAM,IACR,EAEAA,GAAe,UAAY,CACzB,MAAOh3F,EAAU,MACnB,EAEA,MAAM+X,IAAkBzlF,IAAU,CAChC,MAAOsjK,GAAStjK,CAAK,EACrB,WAAYmjK,GAAcnjK,CAAK,EAC/B,gBAAiBqjK,GAAgBrjK,CAAK,EACtC,QAAS+jK,GAAW/jK,CAAK,CAC3B,GAEA8kK,GAAe57E,GACbzD,IACA,CACE,WAAAk9E,IACA,mBAAAI,IACA,yBAAAP,IACA,0BAAAH,EAAA,CAEJ,EAAEqC,EAAc,EChIVK,GAAgB,CACpB,QAAS,UACT,KAAM,OACN,oBAAqB,sBACrB,SAAU,WACV,OAAQ,OACR,cAAe,eACjB,ECPMC,GAAgB,CAEpB,WAAY,YACd,ECMaC,IAAwBv5H,GAAU,CAC7C,OAAQA,EAAA,CACN,KAAKq5H,GAAc,QACjB,OAAOj8F,EAAG,8BAA8B,EAC1C,KAAKi8F,GAAc,KACjB,OAAOj8F,EAAG,2BAA2B,EACvC,KAAKi8F,GAAc,SACjB,OAAOj8F,EAAG,+BAA+B,EAC3C,KAAKi8F,GAAc,OACjB,OAAOj8F,EAAG,6BAA6B,EACzC,KAAKi8F,GAAc,oBACjB,OAAOj8F,EAAG,0CAA0C,EACtD,QACE,OAAOp9B,CAAA,CAEb,EAaaw5H,IAAuBx5H,GAAU,CAC5C,OAAQA,EAAA,CACN,KAAKq5H,GAAc,QACjB,OAAOrwC,GAAW,OAAO,QAC3B,KAAKqwC,GAAc,KACjB,OAAOrwC,GAAW,OAAO,MAC3B,KAAKqwC,GAAc,SACjB,OAAOrwC,GAAW,OAAO,QAC3B,KAAKqwC,GAAc,OACjB,OAAOrwC,GAAW,OAAO,MAC3B,KAAKqwC,GAAc,oBACjB,OAAOrwC,GAAW,OAAO,QAC3B,QACE,OAAOA,GAAW,OAAO,QAE/B,EAGaywC,GAAwB,CAEnC,YAAa,EAEb,IAAK,CACP,gDC5DA,IAAIpgJ,EAAavpC,GAAA,EACb8pC,EAAe/oB,GAAA,EA8BnB,SAAS6oK,EAAO1iL,EAAQwpB,EAAU,CAChC,OAAOxpB,GAAUqiC,EAAWriC,EAAQ4iC,EAAapZ,CAAQ,CAAC,CAC5D,CAEA,OAAAm5J,GAAiBD,oCC/BXE,IAAqB,CACzB,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,+BACP,EAEMC,GAAoB,CACxB,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCACL,IAAK,gCAIL,IAAK,uCAEL,GAAGD,IACH,QAAS,mCACX,EAEaE,IAAuB,CAClC,GAAGD,GACH,QAAS,sCACX,ECrCME,IAAkB,CAMtB,gBAAiB,CAACC,EAAWxuI,EAAU,GAAIu1C,IAAU,CACnD,IAAIvlC,EAAU,GACd,OAAIhQ,EAAQ,gBACVgQ,EAAQ,cAAgBhQ,EAAQ,eAG3B,CACL,SAAU6iG,GAAa,kBACvB,KAAM,MACN,OAAQ,CACN,UAAA2rC,CAAA,EAEF,MAAO,CACL,MAAAj5F,CAAA,EAEF,QAAAvlC,EACA,aAAcq+H,EAAA,CAElB,CACF,ECrBaI,GAAwBx/J,GAAoB,uBAAuB,EAUnEy/J,GAAkB,CAACF,EAAWxuI,EAAU,GAAIu1C,EAAQ,IAC/D1mE,GACE4/J,GACAF,IAAgB,gBAAgBC,EAAWxuI,EAASu1C,CAAK,EACzD,CACE,UAAAi5F,EACA,GAAGxuI,EAEH,MAAAu1C,CAAA,CAEJ,EC3BWo5F,GAAqC,IACrCC,IAA0C,IAE1CC,IAA4B,CACvC,MACA,KACF,ECEA,SAASC,GAAWC,EAAmB,CAErC,OAAIA,EAAoB,EACf,IAGLA,EAAoB,GACf,IAGLA,EAAoB,GACf,IAGF,GACT,CAMA,MAAMC,IAAyBp6G,GAC7B65G,GAAsB,QACtB,CAAC,CAAE,OAAAjlK,EAAQ,SAAA8wB,EAAU,KAAA3wC,KAAW,CAC9B,GAAI,CAAC6f,EAAO,SAAS,YACnB,kBAAW,IAAM,CACf,MAAM+rE,EAAQ/rE,EAAO,KAAK,MAAQ,EAClC8wB,EAASo0I,GAAgBllK,EAAO,KAAK,UAAWA,EAAO,KAAM+rE,CAAK,CAAC,CACrE,EAAGu5F,GAAWtlK,EAAO,KAAK,KAAK,CAAC,EACzBorD,GAAiB,iBAM1B,MAAMq6G,EAAe,CAACpB,GAAc,OAAQA,GAAc,cAAeA,GAAc,QAAQ,EAC/F,GAAIrkK,EAAO,SAAS,SAAWylK,EAAa,SAASzlK,EAAO,SAAS,QAAQ,MAAM,EAAG,CACpF7f,EAAK6f,CAAM,EAEX,MAAM0lK,EAAe,CACnB,KAAMP,GACN,QAAS,yBACT,iBAAkBN,GAAkBM,EAAkC,EACtE,SAAU,CACR,GAAI,GACJ,OAAQA,EAAA,CACV,EAGIQ,EAAyB3lK,EAAO,SAAS,SAAS,YAAc0lK,EAEtE,OAAA50I,EAAS,CACP,KAAMm0I,GAAsB,QAC5B,KAAMjlK,EAAO,KACb,MAAO,CACL,GAAG2lK,EACH,SAAW3lK,EAAO,SAAS,QAAQ,SAAWqkK,GAAc,SAC9D,CACD,EACMj5G,GAAiB,gBAC1B,CACF,CACF,EAKMw6G,IAAyBx6G,GAC7B65G,GAAsB,QACtB,CAAC,CAAE,OAAAjlK,EAAQ,SAAA8wB,KAAe,CACxB,GAAI9wB,EAAO,OAASqlK,IAA0B,QAAQrlK,EAAO,MAAM,IAAI,GAAK,EAC1E,kBAAW,IAAM,CACf8wB,EAASo0I,GAAgBllK,EAAO,KAAK,UAAWA,EAAO,KAAMA,EAAO,KAAK,MAAQ,CAAC,CAAC,CACrF,EAAGslK,GAAWtlK,EAAO,KAAK,KAAK,CAAC,EACzBorD,GAAiB,gBAE5B,CACF,EAEay6G,IAA0B,CAACL,IAAwBI,GAAsB,ECnFzEE,GAAsC9lK,GACjD0gB,GAAI1gB,EAAQ,wBAAyB,EAAK,IAAMolK,ICF5CW,GAAa,CACjB,IAAKf,IAAc,CACjB,SAAU3rC,GAAa,YACvB,KAAM,MACN,OAAQ,CACN,UAAA2rC,CAAA,EAEF,aAAcH,EAAA,GAGhB,kBAAmBG,IAAc,CAC/B,SAAU3rC,GAAa,qBACvB,KAAM,MACN,OAAQ,CACN,UAAA2rC,CAAA,EAEF,aAAcF,GAAA,GAGhB,kBAAmB,CAACpzC,EAAY9C,EAAOQ,KAAa,CAClD,SAAUiK,GAAa,aACvB,KAAM,OACN,KAAM,CACJ,GAAGjK,EACH,WAAY,CACV,OAAQR,EAAM,mBACd,KAAM,KACN,WAAYQ,EAAQ,WACtB,EAEF,OAAQ,CACN,aAAcsC,EAAW,GACzB,QAAS9C,EAAM,IAEjB,aAAci2C,EAAA,GAGhB,iBAAkB,CAACxuE,EAAc2vE,EAAe52C,EAASR,KAAW,CAClE,SAAUyK,GAAa,aACvB,KAAM,OACN,KAAM,CACJ,GAAGjK,EACH,OAAQ42C,CAAA,EAEV,OAAQ,CACN,aAAA3vE,EACA,QAASu4B,EAAM,IAEjB,WAAY,CAACq3C,EAAMrjH,KAAU,CAC3B,GAAGA,EACH,OAAQojH,EACR,OAAQC,GAAM,KAEhB,aAAcpB,EAAA,GAGhB,iBAAkB,CAACG,EAAWpiH,KAAU,CACtC,SAAUy2E,GAAa,mBACvB,KAAM,OACN,OAAQ,CACN,UAAA2rC,CAAA,EAEF,KAAApiH,EACA,aAAciiH,EAAA,GAGhB,qBAAsB,CAACxuE,EAAc6vE,EAAUC,KAAY,CACzD,SAAU9sC,GAAa,iBACvB,KAAM,MACN,MAAO,CACL,aAAAhjC,EACA,SAAU6vE,EACV,OAAQC,EACR,MAAO,IACT,EAEJ,ECjEaC,GAA0B,CAIrC,IAAK,4BAKL,MAAO,8BAKP,QAAS,+BACX,EAEaC,GAAoB,IAAMx1I,GAAau1I,GAAwB,GAAG,EAClEE,GAAsB,IAAMz1I,GAAau1I,GAAwB,KAAK,EACtEG,GAAwB,IAAM11I,GAAau1I,GAAwB,OAAO,EAM1EI,GAAgB,CAE3B,YAAa,uBACb,MAAO,gBACT,EAEaC,GAAe,IAAM51I,GAAa21I,GAAc,KAAK,EAErDE,IAAaC,GAAQ91I,GAAa21I,GAAc,YAAa,CAAE,KAAAG,EAAM,EAMrEC,GAAqB,CAChC,iBAAkB,mCAClB,iBAAkB,mCAClB,oBAAqB,sCACrB,oBAAqB,qCACvB,EAEaC,IAAkB,IAAMh2I,GAAa+1I,GAAmB,gBAAgB,EACxEE,IAAkB,IAAMj2I,GAAa+1I,GAAmB,gBAAgB,EACxEG,IAAqB,IAAMl2I,GAAa+1I,GAAmB,mBAAmB,EAC9EI,IAAqB,IAAMn2I,GAAa+1I,GAAmB,mBAAmB,EAK9EK,GAAuB,CAClC,SAAU,qBACV,YAAa,wBAEb,kBAAmB,8BACrB,EAEaC,GAAoBnkL,GAAS8tC,GAAao2I,GAAqB,SAAU,CAAE,MAAAlkL,EAAO,EAElFokL,IAAyBpkL,GACpC8tC,GAAao2I,GAAqB,YAAa,CAAE,MAAAlkL,EAAO,EAE7CqkL,IAA4B,CAACrkL,EAAO8a,EAAMwpK,IACrDx2I,GAAao2I,GAAqB,kBAAmB,CAAE,MAAAlkL,EAAO,KAAA8a,EAAM,MAAAwpK,CAAA,CAAO,EAShEC,GAAoB,CAC/B,GAAG7hK,GAAoB,qBAAqB,EAC5C,MAAO,sBACT,EACa8hK,GAAuB9hK,GAAoB,4BAA4B,EACvE+hK,GAA6B/hK,GAAoB,2BAA2B,EAE5EgiK,GAAmB,IAAM52I,GAAay2I,GAAkB,KAAK,EAE7DI,IAAmB,CAC9BrxE,EACA2vE,EACA52C,EACAR,IAEAvpH,GACEiiK,GACAvB,GAAW,iBAAiB1vE,EAAc2vE,EAAe52C,EAASR,CAAK,EACvE,CACE,aAAAv4B,EACA,cAAA2vE,EACA,QAAA52C,EACA,MAAAR,CAAA,CAEJ,EC7EI+4C,IAAQrtK,GAAU,OAAO,CAC7B,mBAAoB,CACtB,CAAC,EAEYstK,GAAkB,KAAO,CACpC,QAAS,GAGT,QAAS,EACT,eAAgB,EAGhB,WAAY,EACZ,kBAAmB,EAGnB,iBAAkB,GAClB,oBAAqB,GACrB,oBAAqB,EACvB,GAEaC,GAAmB,KAAO,CACrC,GAAGD,GAAA,EACH,QAAS,EACT,eAAgB,CAClB,GAEME,GAAU,KAAO,CACrB,KAAMl2C,GAAY,IAClB,OAAQ,EACR,KAAM,EAEN,eAAgBktB,GAAA,EAGhB,MAAO,GAEP,OAAQ,KAGR,MAAO6oB,IAGP,MAAOC,GAAA,EAKP,oBAAqB,EACvB,GAMMG,GAAe,CACnB,QAASD,GAAA,EACT,WAAY,GACZ,YAAa,KACb,MAAO,IACT,EAMME,IAAajlL,IAAU,CAC3B,SAAU,EACV,GAAIA,EAAM,GACV,IAAKA,EAAM,SACX,KAAMA,EAAM,KACZ,UAAWA,EAAM,MAAQA,EAAM,SAC/B,cAAeA,EAAM,MACrB,MAAO,EACP,MAAO8kL,GAAA,CACT,GAEMI,GAAY,CAAC,UAAW,OAAO,EAE/BC,GAAaC,GACV,EAAO,KAAK,KAAKA,EAAa,IAAI,EAAI,OAGzCC,GAAwB,CAACD,EAAYE,IAGlC,KAAK,KAAKF,EAAaE,CAAa,EAAIA,EAI3CC,GAAkB,CAAC,CAAE,MAAA15C,EAAO,MAAAy4C,EAAO,cAAAgB,KAAoB,CAC3D,GAAInjJ,GAAOmiJ,CAAK,EACd,OAAO,KAGTA,EAAM,QAAU,KAAK,IAAIA,EAAM,eAAgBA,EAAM,OAAO,EAC5DA,EAAM,WAAa,KAAK,IAAIA,EAAM,kBAAmBA,EAAM,UAAU,EAGrE,MAAMkB,EAAgBlB,EAAM,QAU5B,GATAA,EAAM,WAAa,KAAK,IAAIkB,EAAelB,EAAM,UAAU,EAG3DA,EAAM,iBAAmBA,EAAM,iBAAmBA,EAAM,QACxDA,EAAM,oBAAsBA,EAAM,oBAAsBA,EAAM,WAC9DA,EAAM,oBAAsBkB,IAAkBlB,EAAM,WAIhDz4C,EAAO,CACTA,EAAM,KAAOA,EAAM,MAAQ,EAC3B,MAAM45C,EAAa55C,EAAM,MAAQA,EAAM,MAAQA,EAAM,KAAO,EACtD65C,EAAsBD,EAAanB,EAAM,QACzCqB,EAA0BL,EAC5BD,GAAsBK,EAAqBJ,CAAa,EACxDH,GAAWO,CAAmB,EAClCpB,EAAM,gBAAkBqB,EAAwB,QAAQ,CAAC,EAGzDrB,EAAM,MAAQmB,CAChB,CAEA,OAAOnB,CACT,EAEMsB,GAAiB,CAACrpK,EAAOspK,IACVtpK,EAAM,MAAM2oK,EAAS,EACf,OAEZW,CAAM,EAGfC,GAAoB,CAACvpK,EAAOvc,IAAU,CAC1C,MAAM+lL,EAAaxpK,EAAM,MAAM2oK,EAAS,EAElCpqK,EADQirK,EAAW,OACN/lL,EAAM,EAAE,GAAKilL,IAAWjlL,CAAK,EAGhD,OAAOuc,EAAM,MAAM2oK,GAAWa,EAAW,IAAI/lL,EAAM,GAAI8a,CAAI,CAAC,CAC9D,EAEMkrK,IAAoB,CAACzpK,EAAOvc,IAAU,CAE1C,IAAI0jD,EADennC,EAAM,MAAM2oK,EAAS,EACjB,OACvB,cAAOxhI,EAAM1jD,EAAM,EAAE,EAEduc,EAAM,MAAM2oK,GAAWxhI,CAAK,CACrC,EAEMuiI,GAAa,CAACnrK,EAAMwqK,KACpBxqK,EAAK,MAAM,SACbA,EAAK,MAAQyqK,GAAgBzqK,CAAI,EACjCA,EAAK,SAAWA,EAAK,MAAM,QAAUA,EAAK,MAAM,WAGhDA,EAAK,MAASA,EAAK,UAAYA,EAAK,IAAOA,EAAK,SAC5CwqK,EACFxqK,EAAK,MAAQuqK,GAAsBvqK,EAAK,MAAOwqK,CAAa,EAE5DxqK,EAAK,MAAQqqK,GAAWrqK,EAAK,KAAK,IAIpCA,EAAK,MAAQ+pK,GAAA,EAEb/pK,EAAK,MAAQA,EAAK,UAAYA,EAAK,UAG9BA,GAGHorK,GAAoB,CAAC3pK,EAAOzB,IAAS,CACzC,MAAMirK,EAAaxpK,EAAM,MAAM2oK,EAAS,EAExC,OAAO3oK,EAAM,MACX2oK,GACAa,EAAW,IAAIjrK,EAAK,GAAImrK,GAAWnrK,EAAMyB,EAAM,MAAM,CAAC,UAAW,eAAe,CAAC,CAAC,CAAC,EAEvF,EAEM4pK,IAAuB,CAAC5pK,EAAOspK,IAAW,CAC9C,MAAM/qK,EAAO8qK,GAAerpK,EAAOspK,CAAM,EAEzC,OAAI/qK,EAAK,MAAM,SAEbA,EAAK,MAAM,QAAU,GACrBA,EAAK,SAAW,GAGhBA,EAAK,WAIHA,EAAK,SAAWA,EAAK,MACvBA,EAAK,SAAW,GAGXorK,GAAkB3pK,EAAOzB,CAAI,CACtC,EAQMsrK,IAAqB/5C,GAAW,CACpC,IAAIg6C,EAAQ,EACZ,OAAQh6C,EAAQ,MACd,KAAKwC,GAAY,QAEf8yC,GAAOt1C,EAAQ,MAAO,CAACvxH,EAAMwrK,IAAY,CACvC,GAAIxrK,EAAK,MAAM,QAAS,CACtB,IAAIyrK,EAAYzrK,EAAK,UAAYA,EAAK,KAAOA,EAAK,MAAM,WAAaA,EAAK,MAAM,SAGhFurK,GAASh6C,EAAQ,cACbg5C,GAAsBkB,EAAWl6C,EAAQ,aAAa,EACtD84C,GAAWoB,CAAS,CAC1B,MACEF,GAASvrK,EAAK,UAAYA,EAAK,GAEnC,CAAC,EAED,MAEF,KAAK+zH,GAAY,MACfxC,EAAQ,MAAQk5C,GAAgBl5C,CAAO,EAIvCA,EAAQ,MAAM,KAAOA,EAAQ,MAAM,MAAQ,EAG3C,MAAMm6C,GADJn6C,EAAQ,OAASA,EAAQ,MAAM,MAAQA,EAAQ,MAAM,MAAQA,EAAQ,MAAM,KAAO,GACnDA,EAAQ,MAAM,QAAWA,EAAQ,MAAM,WACpEA,EAAQ,cACVg6C,EAAQhB,GAAsBmB,EAAYn6C,EAAQ,aAAa,EAE/Dg6C,EAAQlB,GAAWqB,CAAU,EAG/B,MAEF,KAAK33C,GAAY,IAEfw3C,EAAQh6C,EAAQ,MAAM,mBACtB,QAAQ,IAAI,8BAA+Bg6C,CAAK,EAChD,MAEF,QACE,QAAQ,MAAM,oBAAoBh6C,EAAQ,IAAI,EAAE,EAGpD,OAAAA,EAAQ,OAASg6C,EAIjB1E,GAAOt1C,EAAQ,MAAO,CAACvxH,EAAMwrK,IAAY,CACvCj6C,EAAQ,MAAMi6C,CAAO,EAAIL,GAAW,CAAE,GAAGnrK,CAAA,EAAQuxH,EAAQ,aAAa,CACxE,CAAC,EAKDA,EAAQ,eAAiB0vB,GAAA,EAElBxkJ,GAAU,OAAO80H,CAAO,CACjC,EAEMo6C,GAA0BlqK,GAAS,CACvC,MAAM8vH,EAAU9vH,EAAM,IAAI,SAAS,EAAE,OACrC,OAAOA,EAAM,MAAM,CAAC,SAAS,EAAG6pK,IAAmB/5C,CAAO,CAAC,CAC7D,EAEaq6C,GAAiB,CAACnqK,EAAQhF,GAAU,OAAOytK,EAAY,EAAG/nK,IAAW,CAChF,OAAQA,EAAO,MACb,KAAKwmK,GAAc,MACjB,MAAM92C,EAAc,CAClB,OAAQ,OAAOpwH,EAAM,IAAI,SAAS,EAAE,IAAI,QAAQ,CAAC,GAAK,EACtD,KAAMA,EAAM,IAAI,SAAS,EAAE,IAAI,MAAM,GAAKA,EAAM,IAAI,SAAS,EAAE,IAAI,KAAK,GAAK,GAE/E,OAAIowH,EAAY,SAAW,GAAKA,EAAY,OAAS,EAK5CpwH,EAEFA,EAAM,MACXhF,GAAU,OAAO,CACf,GAAGytK,GACH,QAAS,CACP,GAAGD,GAAA,EAEH,cAAexoK,EAAM,IAAI,SAAS,EAAE,IAAI,eAAe,GAKzD,YAAAowH,CAAA,CACD,GAML,KAAKgyC,GAA8B,QACnC,KAAKM,GAAsB,QAC3B,KAAKD,GAAe,QACpB,KAAKK,GAAuB,QAC5B,KAAKE,GAAyB,QAC5B,eAAQ,IAAI,iBAAkBtiK,EAAO,QAAQ,EAC7CV,EAAQA,EAAM,MAAM,CAAC,UAAW,OAAO,EAAGU,EAAO,QAAQ,EAClDwpK,GAAwBlqK,CAAK,EAMtC,KAAK8mK,GAAwB,IAC3B,OAAA9mK,EAAQA,EAAM,QAAQ,CAAC,SAAS,EAAG,CACjC,KAAMsyH,GAAY,IAClB,OAAQtyH,EAAM,MAAM,CAAC,UAAW,QAAS,OAAO,CAAC,EACjD,MAAO,EAAC,CACT,EACMkqK,GAAwBlqK,CAAK,EAEtC,KAAK8mK,GAAwB,MAC3B,OAAA9mK,EAAQA,EAAM,QAAQ,CAAC,SAAS,EAAG,CACjC,KAAMsyH,GAAY,MAClB,MAAO,EAAC,CACT,EACM43C,GAAwBlqK,CAAK,EAEtC,KAAK8mK,GAAwB,QAC3B,OAAA9mK,EAAQA,EAAM,QAAQ,CAAC,SAAS,EAAG,CACjC,KAAMsyH,GAAY,QAClB,MAAOg2C,GAAA,CAAgB,CACxB,EACM4B,GAAwBlqK,CAAK,EAMtC,KAAKknK,GAAc,YACjB,OAAAlnK,EAAQA,EAAM,MAAM,CAAC,UAAW,MAAM,EAAGU,EAAO,IAAI,EAEpDV,EAAQA,EAAM,MAAM,CAAC,UAAW,KAAK,EAAGU,EAAO,IAAI,EAC5CwpK,GAAwBlqK,CAAK,EAMtC,KAAK2nK,GAAqB,SACxB,OAAA3nK,EAAQupK,GAAkBvpK,EAAOU,EAAO,KAAK,EAC7CV,EAAQ4pK,IAAqB5pK,EAAOU,EAAO,MAAM,EAAE,EAC5CwpK,GAAwBlqK,CAAK,EAEtC,KAAK2nK,GAAqB,YACxB,OAAA3nK,EAAQypK,IAAkBzpK,EAAOU,EAAO,KAAK,EACtCwpK,GAAwBlqK,CAAK,EAKtC,KAAK2nK,GAAqB,kBACxB,MAAMyC,EAA0B,CAACpqK,EAAOspK,EAAQvB,IAAU,CACxD,MAAMxpK,EAAO8qK,GAAerpK,EAAOspK,CAAM,EAEzC,OAAA/qK,EAAK,MAAM,QAAUwpK,EAAM,QAC3BxpK,EAAK,MAAM,WAAawpK,EAAM,WAC9BxpK,EAAK,MAAM,QAAU,GACdorK,GAAkB3pK,EAAOzB,CAAI,CACtC,EACA,OAAAyB,EAAQupK,GAAkBvpK,EAAOU,EAAO,KAAK,EAC7CV,EAAQoqK,EAAwBpqK,EAAOU,EAAO,MAAM,GAAIA,EAAO,KAAK,EAC7DwpK,GAAwBlqK,CAAK,EAMtC,KAAKsnK,GAAmB,iBACtB,OAAO4C,GACLlqK,EACG,SAAS,CAAC,UAAW,QAAS,SAAS,EAAG/iB,GAASA,EAAQ,CAAC,EAC5D,MAAM,CAAC,UAAW,QAAS,SAAS,EAAG,EAAI,GAGlD,KAAKqqL,GAAmB,iBACtB,OAAO4C,GACLlqK,EACG,SAAS,CAAC,UAAW,QAAS,SAAS,EAAG/iB,GAASA,EAAQ,CAAC,EAC5D,MAAM,CAAC,UAAW,QAAS,SAAS,EAAG,EAAI,GAGlD,KAAKqqL,GAAmB,oBACtB,OAAO4C,GACLlqK,EACG,SAAS,CAAC,UAAW,QAAS,YAAY,EAAG/iB,GAASA,EAAQ,CAAC,EAC/D,MAAM,CAAC,UAAW,QAAS,SAAS,EAAG,EAAI,GAGlD,KAAKqqL,GAAmB,oBACtB,OAAO4C,GACLlqK,EACG,SAAS,CAAC,UAAW,QAAS,YAAY,EAAG/iB,GAASA,EAAQ,CAAC,EAC/D,MAAM,CAAC,UAAW,QAAS,SAAS,EAAG,EAAK,GAInD,KAAKs/I,GAAmB,QACtB,OAAAv8H,EAAQA,EAAM,MACZ,CAAC,UAAW,eAAe,EAC3BU,EAAO,UAAU,UAAU,OAAO,SAAS,eAEtCwpK,GAAwBlqK,CAAK,EAEtC,QACE,OAAOA,CAAA,CAEb,EAMMqqK,GAAoB,CACxB,KAAM,KACN,WAAY,GACZ,YAAa,KACb,MAAO,IACT,EAEaC,GAAqB,CAACtqK,EAAQhF,GAAU,OAAOqvK,EAAiB,EAAG3pK,IAAW,CACzF,OAAQA,EAAO,MACb,KAAKsnK,GAAkB,MACrB,OAAOhoK,EAAM,MACXhF,GAAU,OAAO,CACf,GAAGqvK,GACH,KAAM,CAEJ,GAAIrqK,EAAM,IAAI,MAAM,GAAG,IAAI,IAAI,EACjC,CACD,GAGL,KAAK2lK,GAAsB,QACzB,OAAO3lK,EAAM,MAAM,CACjB,WAAY,GACb,EAEH,KAAKgoK,GAAkB,QACvB,KAAKC,GAAqB,QAC1B,KAAKC,GAA2B,QAC9B,OAAOloK,EAAM,MAAM,CACjB,KAAM,KACN,WAAY,GACZ,YAAa,KACb,MAAO,KACR,EAEH,KAAKgoK,GAAkB,QACvB,KAAKC,GAAqB,QAC1B,KAAKC,GAA2B,QAC9B,OAAOloK,EAAM,MAAM,CACjB,KAAMU,EAAO,SACb,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACR,EAEH,KAAKilK,GAAsB,QACzB,OAAO3lK,EAAM,MAAM,CACjB,KAAM,CACJ,GAAGU,EAAO,SAAS,cAErB,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACR,EAEH,KAAKilK,GAAsB,QAC3B,KAAKqC,GAAkB,QACvB,KAAKC,GAAqB,QAC1B,KAAKC,GAA2B,QAE9B,OAAI1B,GAAoC9lK,CAAM,EACrCV,EAAM,MAAM,CACjB,KAAMU,EAAO,MAAM,KACnB,WAAY,GACZ,MAAO,KACR,EAEIV,EAAM,MAAM,CACjB,KAAM,KACN,WAAY,GACZ,gBAAiB,KACjB,MAAOU,EAAO,MACf,EAEH,QACE,OAAOV,CAAA,CAEb,EC3hBA,IAAIuqK,GAASjoK,GACXymG,OAACgC,GAAA,CAAS,GAAGzoG,EACX,UAAAoyF,MAAC,QAAK,EAAE,8SAA6S,EACrTA,MAAC,QAAK,EAAE,8KAA6K,EACrLA,MAAC,QAAK,EAAE,qTAAoT,GAC9T,EAEF61E,GAAQ3oF,GAAK2oF,EAAK,EAClBA,GAAM,YAAc,QACpBA,GAAM,QAAU,UAEhB,MAAAC,IAAeD,GCXf,IAAIE,GAAQnoK,GACVymG,OAACgC,GAAA,CACC,KAAK,eACL,SAAS,UACT,OAAO,OACP,QAAQ,YACR,MAAM,OACN,IAAI,GACJ,oBAAoB,gBACpB,UAAU,QACT,GAAGzoG,EAEJ,UAAAoyF,MAAC,QAAK,EAAE,iBAAiB,QAAQ,KAAK,EACtCA,MAAC,QAAK,EAAE,4BAA4B,QAAQ,KAAK,EACjDA,MAAC,QAAK,EAAE,mBAAmB,QAAQ,KAAK,EACxCA,MAAC,QAAK,EAAE,gBAAgB,QAAQ,KAAK,EACrCA,MAAC,QAAK,EAAE,mBAAmB,QAAQ,KAAK,EACxCA,MAAC,QAAK,EAAE,cAAc,GACxB,EAEF+1E,GAAQ7oF,GAAK6oF,EAAK,EAClBA,GAAM,YAAc,QACpBA,GAAM,QAAU,UAEhB,MAAAC,IAAeD,GCxBf,IAAIE,GAAgBroK,GAClBymG,OAACgC,GAAA,CAAS,GAAGzoG,EACX,UAAAoyF,MAAC,QAAK,EAAE,oUAAmU,EAC3UA,MAAC,QAAK,EAAE,gBAAgB,KAAK,OAAM,GACrC,EAGFi2E,GAAe/oF,GAAK+oF,EAAY,EAChCA,GAAa,YAAc,eAC3BA,GAAa,QAAU,UAEvB,MAAAC,IAAeD,GCXf,IAAIE,GAAcvoK,GAChBymG,OAACgC,GAAA,CAAS,GAAGzoG,EACX,UAAAoyF,MAAC,QAAK,EAAE,6HAA4H,EACpIA,MAAC,QAAK,EAAE,gBAAgB,KAAK,OAAM,GACrC,EAGFm2E,GAAajpF,GAAKipF,EAAU,EAC5BA,GAAW,YAAc,aACzBA,GAAW,QAAU,UAErB,MAAAC,GAAeD,GCTT3iE,IAAS/S,IAAU,CACvB,KAAM,CACJ,QAAS,OACT,cAAe,OAEjB,MAAO,CACL,SAAU,SAEZ,GAAI,CACF,SAAU,WACV,IAAK,EACL,OAAQ,EACR,MAAO,OACP,WAAYA,EAAM,IAAI,OAAO,QAC7B,OAAQ,OACR,OAAQA,EAAM,QAAQ,EAAG,CAAC,GAE5B,WAAY,CACV,MAAO,QAET,UAAW,CACT,MAAO,OACP,SAAU,WACV,UAAWA,EAAM,QAAQ,EAAG,EAC5B,WAAYA,EAAM,QAAQ,CAAC,EAC3B,SAAU,QACV,WAAY,IACZ,MAAOA,EAAM,IAAI,OAAO,SAE1B,WAAY,CACV,cAAe,eAEjB,SAAU,CACR,IAAK,GAEP,OAAQ,CACN,cAAe,UAEjB,cAAe,CACb,cAAe,iBAEnB,GAEA,MAAM41E,WAAcv9F,EAAM,SAAU,CAElC,QAAS,CACP,KAAM,CACJ,MAAAvwF,EACA,gBAAA+tL,EACA,WAAAC,EACA,OAAA/pI,EACA,cAAAgqI,EACA,UAAAC,EACA,UAAAz3I,EACA,QAAAmE,CAAA,EACE,KAAK,MAEH9pC,EAAS9Q,EAAM,MAAM,GAAG,EACxBotC,EAAa2gJ,EAAkBG,EAAU,MAAM,GAAG,EAAI,KAE5D,OAAIp9K,EAAO,SAAW,EAElBg7G,OAAC,OAAI,UAAWd,GAAK,mBAAoBv0E,EAAWmE,EAAQ,IAAI,EAC9D,UAAA68D,MAAC,QAAM,SAAAz3G,CAAA,CAAM,EACZ+tL,GAAmBt2E,MAAC,QAAK,UAAW78D,EAAQ,UAAY,SAAAszI,CAAA,CAAU,GACrE,EAIApiE,OAAC,OACC,UAAWd,GAAK,mBAAoBv0E,EAAWmE,EAAQ,KAAM,CAC3D,CAACA,EAAQ,UAAU,EAAGozI,EACtB,CAACpzI,EAAQ,MAAM,EAAGqJ,EAClB,CAACrJ,EAAQ,aAAa,EAAGqzI,CAAA,CAC1B,EAED,UAAAniE,OAAC,OAAI,UAAWlxE,EAAQ,WACtB,UAAA68D,MAAC,QAAM,SAAA3mG,EAAO,CAAC,EAAE,SAChB,QAAK,UAAWk6G,GAAKpwE,EAAQ,KAAK,EAAG,cAAE9pC,EAAO,CAAC,GAAE,GACpD,EACCi9K,GACCjiE,OAAC,OAAI,UAAWlxE,EAAQ,UACtB,UAAA68D,MAAC,QAAM,SAAArqE,EAAW,CAAC,EAAE,SACpB,QAAK,UAAW49E,GAAKpwE,EAAQ,KAAK,EAAG,cAAExN,EAAW,CAAC,GAAE,EACtDqqE,MAAC,MACC,UAAWuT,GAAKpwE,EAAQ,GAAI,CAC1B,CAACA,EAAQ,QAAQ,EAAGqJ,GAAUgqI,CAAA,CAC/B,GACH,EACF,IAKV,CACF,CAEAH,GAAM,aAAe,CACnB,MAAO,SACP,UAAW,SACX,gBAAiB,GACjB,WAAY,GACZ,OAAQ,GACR,cAAe,EACjB,EAEAA,GAAM,UAAY,CAChB,MAAOr9F,EAAU,OAAO,WACxB,gBAAiBA,EAAU,KAC3B,WAAYA,EAAU,KACtB,OAAQA,EAAU,KAClB,cAAeA,EAAU,IAC3B,EAEA,MAAA09F,GAAerzE,GAAWmQ,GAAM,EAAE6iE,EAAK,ECrGjC7iE,IAAS/S,IAAU,CACvB,KAAM,CACJ,MAAO,QAET,MAAO,CACL,MAAO,OACP,WAAYA,EAAM,QAAQ,CAAC,EAC3B,cAAeA,EAAM,QAAQ,CAAC,EAC9B,QAAS,QAEX,eAAgB,CACd,QAAS,OACT,SAAU,WACV,OAAQA,EAAM,QAAQ,CAAC,EACvB,QAAS,GAEX,SAAU,CACR,MAAO,OAEP,MAAO,GACP,WAAY,QAEd,SAAU,CACR,WAAY,IAAIA,EAAM,QAAQ,GAAG,CAAC,MAEpC,cAAe,CACb,KAAM,EACN,WAAY,QAEd,KAAM,CACJ,WAAY,QAEd,qBAAsB,CACpB,MAAO,qBAET,mBAAoB,CAClB,MAAO,sBAET,uBAAwB,CACtB,MAAO,qBACP,OAAQA,EAAM,QAAQ,GAAG,EACzB,UAAWA,EAAM,QAAQ,CAAC,EAM1B,UAAW,CACT,SAAU,SACV,QAAS,cACT,aAAc,WACd,qBAAsB,EACtB,qBAAsB,WACxB,EAEF,aAAc,CACZ,SAAU,WACV,IAAK,GAAKA,EAAM,QAAQ,EAAG,EAC3B,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,WAAY,CACV,OAAQ,WAEV,cAAe,CACb,WAAY,OACZ,OAAQ,OACR,QAAS,EACT,OAAQ,EACR,KAAM,UACN,UAAW,OACX,OAAQ,WAEV,kBAAmB,CACjB,WAAY,OACZ,OAAQ,OACR,QAAS,EACT,OAAQ,EACR,KAAM,UACN,UAAW,OACX,OAAQ,UACR,UAAWA,EAAM,QAAQ,GAAI,GAE/B,MAAO,CAEL,SAAU,IAEZ,YAAa,CAEX,SAAU,KAEZ,eAAgB,CACd,OAAQA,EAAM,QAAQ,GAAG,EACzB,UAAWA,EAAM,QAAQ,GAAG,GAE9B,KAAM,CACJ,MAAOA,EAAM,IAAI,OAAO,QAE1B,iBAAkB,CAChB,MAAO,OACP,WAAYA,EAAM,QAAQ,GAAG,EAC7B,MAAOA,EAAM,QAAQ,QAAQ,KAEjC,GAEMk2E,IAAQ,CAAC,CAAE,MAAA5nL,EAAO,KAAA8a,EAAM,KAAAxd,EAAM,SAAAo5H,EAAU,UAAAmxD,EAAW,aAAAC,EAAc,aAAAC,EAAc,QAAA3zI,KAAc,CACjG,MAAM4zI,EAAc1qL,IAASqzI,GAAK,UAC5Bs3C,EAAaD,EAAc,oBAAoBhoL,EAAM,EAAE,GAAK,KAE5DkoL,EAAe,IAAQxxD,EAA8BoxD,EAAa9nL,CAAK,EAArC6nL,EAAU7nL,CAAK,EAMjDmoL,EAAoBvvL,GAAK,CAC7BA,EAAE,iBACFA,EAAE,kBACFmvL,EAAa/nL,CAAK,CACpB,EAEMu1E,EACJ+vC,OAACv7B,EAAM,SAAN,CACE,UAAAzsF,IAASqzI,GAAK,WACbrrB,OAACiJ,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,SAAU,cAAY,OACnE,UAAAp0C,EAAM,SAAS,IAEhBixG,MAAC,QAAK,UAAW78D,EAAQ,KAAM,aAAC,GAClC,EAED4zI,GACC/2E,MAAC+lB,GAAA,CACC,GAAIixD,EACJ,UAAW7zI,EAAQ,SACnB,MAAM,UACN,QAASsiF,EACT,SAAUwxD,EACV,WAAY,CACV,aAAcloL,EAAM,KACtB,GAGJslH,OAAC,OAAI,UAAWR,GAAW1wE,EAAQ,cAAeA,EAAQ,gBAAgB92C,CAAI,EAAE,CAAC,EAC/E,UAAA2zG,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,KAC7C,WAAM,KACT,EACCsiF,GAAY57G,GAAQ,CAACA,EAAK,MAAM,cAC9B,UAAO,KAAK,SAAS,UAAWs5B,EAAQ,cAAe,QAAS+zI,EAC/D,eAAC55D,GAAA,CAAiB,KAAK,MAAM,UAAU,OAAO,UAAWn6E,EAAQ,aAC9D,SAAAixC,EAAG,0CAA0C,EAChD,EACF,EAEAqxC,GACA57G,GACAA,EAAK,MAAM,SACTwqG,OAAC,UAAO,KAAK,SAAS,UAAWlxE,EAAQ,kBAAmB,QAAS+zI,EACnE,UAAA7iE,OAACiJ,IAAiB,KAAK,MAAM,UAAU,OAAO,UAAU,cAAc,cAClEzzG,EAAK,MAAM,WAAW,IAAEA,EAAK,MAAM,SACvC,EACAm2F,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAU,OAAO,UAAWn6E,EAAQ,iBAC9D,SAAAixC,EAAG,mDAAmD,EACzD,GACF,GAGN,EACC/nF,IAASqzI,GAAK,SACb1/B,MAAClnB,EAAM,SAAN,CACE,SAAA2sC,GAAY57G,GAAQA,EAAK,MAAM,QAC9Bm2F,MAACsd,GAAA,CACC,KAAK,MACL,UAAWzJ,GAAW1wE,EAAQ,MAAOA,EAAQ,QAAQ92C,CAAI,EAAE,EAAG82C,EAAQ,WAAW,EACjF,MAAM,QAEN,SAAA68D,MAACq2E,GAAA,CACC,gBAAe,GACf,cAAa,GACb,UAAWxsK,EAAK,mCAChB,MAAOA,EAAK,2BACZ,QAAS,CACP,KAAM,eACN,UAAWs5B,EAAQ,UACrB,EACF,GAGF68D,MAACsd,GAAA,CACC,KAAK,MACL,UAAWzJ,GAAW1wE,EAAQ,MAAOA,EAAQ,QAAQ92C,CAAI,EAAE,CAAC,EAC5D,MAAM,QAEN,SAAA2zG,MAACq2E,IAAM,MAAOtnL,EAAM,2BAA4B,QAAS,CAAE,KAAM,eAAe,CAAG,GACrF,CAEJ,GAEJ,EAOF,OAAOgoL,EACL/2E,MAAC,SACC,QAASg3E,EACT,UAAWnjE,GAAW1wE,EAAQ,MAAOA,EAAQ,QAAQ92C,CAAI,EAAE,EAAG82C,EAAQ,UAAU,EAE/E,SAAAmhC,CAAA,GAGH07B,MAAC,OAAI,UAAW6T,GAAW1wE,EAAQ,MAAOA,EAAQ,QAAQ92C,CAAI,EAAE,CAAC,EAAI,SAAAi4E,EAAQ,CAEjF,EAMA,MAAM6yG,WAAkBr+F,EAAM,aAAc,CAA5C,kCACEtiB,GAAA,gBAAWznE,GAAS,CAClB,KAAK,MAAM,kBAAkBA,CAAK,CACpC,GAEAynE,GAAA,mBAAcznE,GAAS,CACrB,KAAK,MAAM,uBAAuBA,CAAK,CACzC,GAEAynE,GAAA,uCAAkCznE,GAAS,CACpCiiC,GAAY,KAAK,MAAM,QAAQ,MAAMjiC,EAAM,EAAE,CAAC,GACjD,KAAK,MAAM,gCAAgCA,EAAO,KAAK,MAAM,QAAQ,MAAMA,EAAM,EAAE,CAAC,CAExF,GAEA,QAAS,CACP,KAAM,CAAE,MAAA6rI,EAAO,QAAAQ,EAAS,KAAA/uI,EAAM,QAAA82C,EAAS,GAAG48D,CAAA,EAAe,KAAK,MAE9D,aACG,OAAI,UAAW58D,EAAQ,KAAO,GAAG48D,EAC/B,SAAA66B,GACC56B,MAAClnB,EAAM,SAAN,CACE,SAAA8hD,EAAM,QAAQ,IAAI,CAAC7rI,EAAO7D,IACzB80G,MAAC22E,IAAA,CAEC,MAAA5nL,EACA,SACE,CAAC4Z,EAAMyyH,CAAO,GAAK7iG,GAAc6iG,EAAQ,MAAOvxH,GAAQA,EAAK,KAAO9a,EAAM,EAAE,EAE9E,KAAOqsI,GAAWA,EAAQ,MAAMrsI,EAAM,EAAE,GAAM,KAC9C,KAAA1C,EACA,UAAW,KAAK,SAChB,aAAc,KAAK,YACnB,aAAc,KAAK,gCACnB,QAAA82C,CAAA,EAVKj4C,CAAA,CAYR,EACH,EAEJ,CAEJ,CACF,CAEAisL,GAAU,UAAY,CACpB,QAASn+F,EAAU,MACrB,EAEAm+F,GAAU,aAAe,CACvB,QAAS,IACX,EAEA,MAAMz3C,GAAO,CACX,QAAS,UACT,MAAO,QACP,UAAW,WACb,EAEM3uC,IAAkB,KAAO,IAEzBqmF,GAAqB78G,GACzBi6B,GAAQzD,IAAiB,CACvB,kBAAAmiF,GACA,uBAAAC,IACA,gCAAAjxE,EAAA,CACD,EACDmB,GAAWmQ,GAAM,CACnB,EAAE2jE,EAAS,EAEXC,GAAmB,KAAO13C,GC3R1B,MAAMlsB,IAAS/S,IAAU,CACvB,KAAM,CACJ,SAAU,WACV,QAAS,OACT,cAAe,UAEjB,SAAU,CACR,KAAM,EACN,UAAW,GAEb,aAAc,CACZ,SAAU,QACV,IAAK,EACL,OAAQ,EACR,KAAM,EACN,MAAO,EACP,OAAQA,EAAM,OAAO,MACrB,WAAYA,EAAM,IAAI,OAAO,MAC7B,QAASA,EAAM,QAAQ,CAAC,GAE1B,KAAM,CACJ,SAAU,WACV,QAAS,OACT,cAAe,SACf,SAAU,EACV,WAAY,EACZ,WAAYA,EAAM,IAAI,OAAO,MAC7B,OAAQ,aAAa0kB,GAAK1kB,EAAM,QAAQ,QAAQ,KAAM,GAAI,CAAC,GAC3D,aAAcA,EAAM,QAAQ,CAAC,EAC7B,QAASA,EAAM,QAAQ,CAAC,EACxB,UAAW,kCAEb,SAAU,CACR,KAAM,EACN,UAAW,EACX,WAAY,GAEd,aAAc,CACZ,OAAQ,OACR,OAAQ,OACR,UAAW,QAEb,WAAY,CACV,QAAS,OACT,WAAY,SACZ,WAAY,EACZ,aAAcA,EAAM,QAAQ,CAAC,GAE/B,aAAc,CACZ,OAAQ,EACR,QAAS,EACT,WAAY,OACZ,MAAO,UACP,KAAM,UACN,OAAQ,UACR,UAAW,CACT,QAAS,aAAaA,EAAM,QAAQ,QAAQ,IAAI,GAClD,EAEF,eAAgB,CACd,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAOA,EAAM,QAAQ,CAAC,EACtB,OAAQA,EAAM,QAAQ,CAAC,EACvB,YAAaA,EAAM,QAAQ,CAAC,EAC5B,aAAc,MACd,gBAAiB0kB,GAAK1kB,EAAM,QAAQ,QAAQ,KAAM,EAAG,EACrD,MAAOA,EAAM,QAAQ,QAAQ,KAC7B,QAAS,CACP,MAAO,GACP,OAAQ,GACV,EAEF,SAAU,CACR,KAAM,GAER,kBAAmB,CACjB,UAAWA,EAAM,QAAQ,CAAC,GAE5B,WAAY,CACV,eAAgB,SAChB,UAAW,UAEb,eAAgB,CACd,UAAWA,EAAM,QAAQ,CAAC,GAE5B,aAAc,CACZ,QAAS,OACT,cAAe,SACf,SAAU,YAEZ,qBAAsB,CACpB,KAAM,EACN,UAAW,EACX,SAAU,UAEZ,iBAAkB,CAChB,KAAM,EACN,UAAW,EACX,eAAgB,UAElB,MAAO,CACL,MAAO,OACP,OAAQ,OACR,WAAY,OACZ,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,QAAS,CACP,SAAU,WACV,UAAW,mBACX,UAAW,OACX,UAAW,CACT,QAAS,aAAaA,EAAM,QAAQ,QAAQ,IAAI,GAChD,cAAe,GACjB,EAEF,gBAAiB,CACf,KAAM,EACN,UAAW,EACX,UAAW,OACX,SAAU,QAEZ,YAAa,CACX,KAAM,EACN,UAAW,EACX,UAAW,OACX,UAAW,QAEb,KAAM,CACJ,SAAU,WACV,KAAM,EACN,OAAQ,EACR,MAAO,OACP,OAAQ,EACR,UAAW,qBAAqBA,EAAM,IAAI,OAAO,KAAK,GACtD,WAAYA,EAAM,IAAI,OAAO,MAC7B,QAAS,IAEX,QAAS,CACP,QAAS,OACT,cAAe,SACf,WAAY,EACZ,UAAWA,EAAM,QAAQ,GAAG,GAE9B,YAAa,CACX,MAAO,OACP,aAAcA,EAAM,QAAQ,GAAG,GAEjC,UAAW,CACT,MAAO,QAET,gBAAiB,CACf,gBAAiB,GAAGA,EAAM,QAAQ,QAAQ,IAAI,cAC9C,UAAW,CACT,gBAAiB,GAAG2kB,GAAO3kB,EAAM,QAAQ,QAAQ,KAAM,EAAG,CAAC,cAC7D,EAEF,WAAY,CACV,MAAO,GACP,OAAQ,GACR,YAAaA,EAAM,QAAQ,CAAC,GAE9B,aAAc,CACZ,QAAS,OACT,cAAe,SACf,WAAY,SACZ,UAAW,SACX,QAAS,GAAGA,EAAM,QAAQ,CAAC,CAAC,QAE9B,UAAW,CACT,WAAYA,EAAM,QAAQ,CAAC,EAE/B,GAEM42E,IAA4C,CAAC,CAAE,YAAAC,EAAa,QAAAn0I,KAE9DkxE,OAAA0hC,WAAA,CACE,UAAA/1C,MAACk0D,GAAA,CAAa,KAAM9/E,EAAG,0CAA0C,EAAG,QAAAjxC,EAAkB,EAErFm0I,GACCt3E,MAACk0D,GAAA,CACC,KACEojB,EAAY,aACRljG,EAAG,6CAA8C,CAC/C,KAAMkjG,EAAY,gBAAgB,iBACnC,EACDljG,EAAG,uCAAwC,CACzC,IAAKkjG,EAAY,QACjB,KAAMA,EAAY,gBAAgB,iBACnC,EAEP,QAAAn0I,CAAA,EACF,EAEJ,EAIJ,MAAMo0I,YAAcz+F,EAAM,SAAU,CAClC,QAAS,CACP,KAAM,CACJ,QAAA31C,EACA,WAAAu6F,EACA,SAAA85C,EACA,OAAAC,EACA,YAAAC,EACA,kBAAAC,EACA,oBAAAC,EACA,mBAAAC,EACA,GAAAh4E,EACA,SAAAJ,CAAA,EACE,KAAK,MACH8tE,EAAah0I,GAAc,YAAY,EAOvCu+I,EAAwB,SAASv+I,GAAc,kBAAkB,EAAG,EAAE,EACtEw+I,EAAwBD,EAAwB,EAChDl9C,EAAQm9C,EACV,CACE,GAAI,KAAK,MAAM,MAAQ,KAAK,MAAM,MAAM,GAAK,qBAC7C,QAAS,MAAM,KAAK,CAAE,OAAQD,GAAyB,CAAChoL,EAAG5E,MAAW,CACpE,KAAM,WAAWA,GAAQ,CAAC,GAC1B,SAAU,EACV,2BAA4B,UAC5B,EACF,0BAA2B,IAAI4sL,EAAwB,GAAG,QAAQ,CAAC,EAAE,QAAQ,IAAK,GAAG,CAAC,MAExF,KAAK,MAAM,MAGT5H,EAAa6H,EAAwB,KAAO,KAAK,MAAM,WACvDpJ,EAAkBoJ,EAAwB,GAAQ,KAAK,MAAM,gBAE7DC,EAAep9C,GAASx2G,GAAQw2G,EAAM,OAAO,EAE7Cq9C,EACJ,KAAK,MAAM,YACX,KAAK,MAAM,WAAW,SAAW,WACjC,KAAK,MAAM,WAAW,iBACtB,KAAK,MAAM,WAAW,cAAc,eAAe,SACnD,EACE,KAAK,MAAM,WAAW,cAAc,iBACpC,KAAK,MAAM,gBAAgB,oBAGzBC,EAAYt9C,GAAS,CAACx2G,GAAQw2G,EAAM,OAAO,EAE3Cu9C,EACJH,GAAiB9H,GAAcA,EAAW,OAAS,OAASsH,EACxDY,EAAkB,CAACD,EAEnBE,EAAgBL,EAAe,CAACR,EAAW,CAACA,GAAajK,GAAc,CAAC3yC,EACxE09C,EAAcN,EAAe,GAAO,CAACP,GAAU,CAAC78C,EAChD29C,EAAaV,GAAsB,CAACh4E,EAAG,YAEvC24E,EAAkBN,GAAa,CAACr4E,EAAG,YACnC44E,EAAe,IAAMD,GAAmB/4E,EAAS,CAAE,YAAa,GAAM,EAE5E,OACE4U,OAAC,OACC,UAAWR,GAAW1wE,EAAQ,KAAM,CAClC,CAACA,EAAQ,YAAY,EAAG08D,EAAG,YAC3B,CAAC18D,EAAQ,QAAQ,EAAGo1I,CAAA,CACrB,EAED,UAAAv4E,MAACoU,GAAA,CAAoB,KAAMu6D,CAAA,CAAiB,EAC3C,CAACA,GACAt6D,OAAC0hC,YAAA,CACC,UAAA1hC,OAAC,OACC,UAAWR,GAAW1wE,EAAQ,KAAM,CAClC,CAACA,EAAQ,YAAY,EAAG08D,EAAG,YAC3B,CAAC18D,EAAQ,QAAQ,EAAGo1I,CAAA,CACrB,EACD,QAASE,EAER,UAAAL,GACC/jE,OAAC,OAAI,UAAWlxE,EAAQ,WACtB,UAAA68D,MAAC,OAAI,UAAW78D,EAAQ,eACtB,eAAC4yI,IAAA,CAAM,cAAY,OAAO,EAC5B,EACCyC,EACCx4E,MAAC,UACC,KAAK,SACL,UAAW78D,EAAQ,aACnB,aAAYixC,EAAG,uCAAwC,CACrD,GAAI,mCACJ,QAAS,GACT,KAAM,iDACP,EACD,QAASzsF,GAAK,CACZA,EAAE,kBACF8wL,EAAA,CACF,EAEA,SAAAz4E,MAACsd,IAAiB,KAAK,MAAM,UAAU,OACpC,SAAAlpC,EAAG,qCAAqC,EAC3C,IAGF4rB,MAACsd,GAAA,CAAiB,KAAK,MACpB,SAAAlpC,EAAG,qCAAqC,EAC3C,EAEDyrB,EAAG,aACFG,MAAC2W,GAAA,CACC,UAAWxzE,EAAQ,MACnB,aAAYixC,EAAG,oBAAqB,CAClC,GAAI,SACJ,QAAS,GACT,KAAM,wCACP,EACD,QAASzsF,GAAK,CACZA,EAAE,kBACFA,EAAE,iBACF83G,EAAS,CAAE,YAAa,GAAO,CACjC,EAEA,SAAAO,MAACsW,GAAA,CAAU,cAAY,OAAO,GAChC,EAEJ,EAGFjC,OAAC,OACC,UAAWR,GAAW1wE,EAAQ,aAAc,CAC1C,CAACA,EAAQ,oBAAoB,EAAG08D,EAAG,YACnC,CAAC18D,EAAQ,gBAAgB,EAAGo1I,CAAA,CAC7B,EAEA,UAAArI,GAAc,CAACiI,EACd9jE,OAAC,OAAI,UAAWlxE,EAAQ,SACtB,UAAA68D,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,kBAC7C,SAAA80I,EACCj4E,MAACq3E,IAAA,CACC,YAAa35C,EAAW,cAAc,YACtC,QAAS,CAAE,UAAWv6F,EAAQ,WAAW,GAG3C68D,MAAC+W,GAAA,CACC,MAAOm5D,EACP,KAAMn5D,GAAW,KAAK,OACtB,oBACGm9C,GAAA,CAAa,QAAS,CAAE,UAAW/wH,EAAQ,WAAW,CAAG,IAIlE,EACA68D,MAACs5C,GAAA,CACC,MAAM,UACN,UAAWn2G,EAAQ,eACnB,QACE80I,EACI,IAAM,CACJ,OAAO,SAAS,QAClB,EACAP,EAGN,SAAA13E,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SACGlpC,EADH6jG,EACM,6BACA,mCAD4B,CACO,CAC5C,GACF,EACF,EACEE,EACFn4E,MAAC,OAAI,UAAW78D,EAAQ,aACtB,SAAA68D,MAACk0D,GAAA,CACC,QAAS,CAAE,UAAW/wH,EAAQ,YAC9B,KAAMixC,EAAG,uDAAuD,GAClE,CACF,EAEAwmD,GACE56B,MAAC,OACC,UAAW6T,GAAW1wE,EAAQ,QAAS,CACrC,CAACA,EAAQ,eAAe,EAAG08D,EAAG,YAC9B,CAAC18D,EAAQ,WAAW,EAAGo1I,CAAA,CACxB,EACD,KAAK,SACL,aAAYnkG,EAAG,qCAAqC,EACpD,SAAU,EAEV,SAAA4rB,MAACm3E,GAAA,CACC,MAAAv8C,EACA,KAAMu8C,GAAU,KAAK,QACrB,QAAS,CAAE,KAAMh0I,EAAQ,UAAU,EACrC,GAIL08D,EAAG,aAAeG,MAAC,OAAI,UAAW78D,EAAQ,KAAM,IACnD,IAGD,CAAC08D,EAAG,oBACF,OAAI,UAAW18D,EAAQ,QACrB,UAAAu6F,EAAW,iBACVrpB,OAACP,GAAA,CACC,UAAW3wE,EAAQ,YAGnB,SAAUk1I,EACV,QAASV,EAET,UAAA33E,MAACi2E,IAAA,CAAa,UAAW9yI,EAAQ,WAAY,cAAY,OAAO,QAC/Dm6E,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,MAAM,SAC1C,SAAAsd,GAAS,CAACx2G,GAAQw2G,EAAM,OAAO,EAC5BxmD,EAAG,mDAAmD,EACtDA,EAAG,sCAAsC,EAC/C,KAGHspD,EAAW,mBACVrpB,OAACP,GAAA,CACC,UAAWD,GAAW1wE,EAAQ,UAAW,CACvC,CAACA,EAAQ,eAAe,EAAG,CAACm1I,CAAA,CAC7B,EACD,SAAUA,EACV,QAAS3wL,GAAKiwL,EAAoBjwL,EAAGizI,EAAM,EAAE,EAE7C,UAAA56B,MAACm2E,GAAA,CAAW,UAAWhzI,EAAQ,WAAY,cAAY,OAAO,EAC9D68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,MAAM,SAC1C,SAAAlpC,EAAG,0CAA0C,EAChD,IACF,EAEJ,GAEJ,IAIR,CACF,CAEA,MAAAskG,IAAen+G,GACbslC,GAAG,CACD,MAAO,CACL,YAAa,GACb,eAAgB,KAClB,CACD,EACDwD,GAAWmQ,GAAM,CACnB,EAAE+jE,GAAK,EChdD/jE,IAAS/S,IAAU,CACvB,KAAM,CACJ,MAAOA,EAAM,QAAQ,QAAQ,KAEjC,GAEMk4E,GAAU,CAAC,CAAE,QAAAx1I,EAAS,YAAAmqI,CAAA,UACzB,OAAI,UAAWnqI,EAAQ,KACtB,eAACm6E,GAAA,CAAiB,KAAM,IAAK,UAAS,GACnC,WAAG,gCAAiC,CACnC,OAAQgwD,CACV,CAAC,EACH,EACF,EAGIsL,IAAc,CAAC,CAAE,QAAAz1I,EAAS,MAAAy3F,EAAO,OAAA68C,KAAa,CAClD,GAAIA,GAAU78C,GAAO,YACnB,OAAO56B,MAAC24E,GAAA,CAAQ,QAAAx1I,EAAkB,YAAay3F,EAAM,YAAa,EAGpE,MAAMi+C,EAAUt/I,GAAc,SAAS,EAEvC,OAAOs/I,GAAW74E,MAAC24E,GAAA,CAAQ,QAAAx1I,EAAkB,YAAa01I,EAAS,CACrE,EAEAC,IAAez1E,GAAWmQ,GAAM,EAAEolE,GAAW,ECjBvCplE,IAAS/S,IAAU,CACvB,KAAM,CACJ,WAAYA,EAAM,IAAI,OAAO,eAC7B,OAAQ,OACR,MAAO,QAET,SAAU,CACR,WAAY,WACZ,WAAY,qCAEd,mBAAoB,CAClB,QAAS,OACT,eAAgB,SAChB,UAAWA,EAAM,QAAQ,CAAC,GAE5B,QAAS,CACP,QAAS,OACT,cAAe,UAEjB,YAAa,CACX,SAAU,EACV,UAAW,GAEb,cAAe,CACb,WAAY,EACZ,WAAY,CACV,MAAO,OACT,CAEJ,GAEMs8C,IAAO,CAAC,CACZ,SAAAy6B,EACA,OAAAC,EACA,QAAAt0I,EACA,eAAA4oI,EACA,eAAAgN,EACA,qBAAAvrB,EACA,WAAA9vB,EACA,kBAAAi6C,EACA,oBAAAC,CACF,IAAM,CACJ,MAAMrK,EAAah0I,GAAc,YAAY,EACvCs/I,EAAUt/I,GAAc,SAAS,EACjC81H,EAAW0c,EAAe,MAAM,KAAK,MAASruC,GAAcA,EAAW,KACvE0xB,EAAsB2c,EAAe,MAAM,cAC3Cnc,EAAqB,EAAQR,EAEnC,OACE/6C,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAA68D,MAACoU,GAAA,CAAoB,KAAMo5C,GAAwB,CAAC9vB,CAAA,CAAY,EAE/DA,IAAe6vC,GAAcsL,IAC5B74E,MAACgwE,GAAA,CACC,YAAW,GACX,aAActyC,EAAW,GACzB,WAAA6vC,EACA,YAAasL,EAEZ,UAAC,CAAE,MAAAj+C,EAAO,WAAAs1C,EAAY,gBAAAvB,EAAiB,YAAA+I,KACtC13E,MAACmvD,GAAA,CACC,oBAAAC,EACA,SAAAC,EACA,aAAcrvD,MAAC61E,IAAA,CAAM,cAAY,OAAO,EACxC,oBAAmB,GACnB,kBACG9/B,YAAA,CACC,UAAA/1C,MAACsd,GAAA,CAAiB,KAAM,IAAK,UAAU,KAAK,UAAWn6E,EAAQ,SAC5D,SAAAu6F,EAAW,KACd,EACA19B,MAAC,OAAI,UAAW78D,EAAQ,mBACtB,SAAA68D,MAAC44E,IAAA,CAAY,MAAAh+C,EAAc,OAAA68C,CAAA,CAAgB,EAC7C,GACF,EAGF,SAAAz3E,MAAC,OACC,UAAW6T,GAAW1wE,EAAQ,QAAS,CACrC,CAACA,EAAQ,WAAW,EAAG,CAACysH,CAAA,CACzB,EAEA,SAAC6nB,EAWAz3E,MAACu3E,IAAA,CACC,MAAA38C,EACA,WAAAs1C,EACA,gBAAAvB,EACA,YAAA+I,EACA,WAAAh6C,EACA,SAAA85C,EACA,OAAAC,EACA,mBAAoB,CAAC7nB,EACrB,kBAAA+nB,EACA,oBAAAC,CAAA,GApBF53E,MAAC,OAAI,UAAW78D,EAAQ,cACrB,SAAAu6F,EAAW,iBACV19B,MAAC8T,GAAA,CAAO,SAAU,CAAC0jE,EAAU,QAASG,EACpC,SAAA33E,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,sCAAsC,EAC5C,EACF,EAEJ,CAaA,EAEJ,EACF,EAEJ,EAEJ,CAEJ,EAEA4kG,IAAe31E,GAAWmQ,GAAM,EAAEupC,GAAI,EC3GtC,MAAMk8B,YAAuBngG,EAAM,aAAc,CAC/C,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAab4oD,GAAA,gBAAW,IACT,KAAK,MAAM,YACX,KAAK,MAAM,WAAW,SAAW,WACjC,KAAK,MAAM,WAAW,kBACrB,KAAK,MAAM,WAAW,cAAc,iBACnC,KAAK,MAAM,gBAAgB,qBAC7B,KAAK,MAAM,WAAW,cAAc,eAAe,SACnD,KAAK,qBAEPA,GAAA,cAAS,IACP,KAAK,MAAM,YAAc,KAAK,MAAM,WAAW,mBAAqB,KAAK,qBAE3EA,GAAA,yBAAoB,IAAM,CACxB,MAAM+2G,EAAah0I,GAAc,YAAY,EACvCs/I,EAAUt/I,GAAc,SAAS,EAGvC,OAAO,KAAK,MAAM,mBAAqB,KAAK,MAAM,kBAAkB,oBAC/D,KAAK,MAAM,kBAAkB,oBAAoB,OAChDi9F,GAAyB,cACzB+2C,GACC,KAAK,MAAM,kBAAkB,oBAAoB,OAChD/2C,GAAyB,cACzBqiD,EACJA,CACN,GAEAriH,GAAA,+BAA0B,CAAC7uE,EAAGy6G,IAAY,CACxCz6G,EAAE,kBAEF,KAAK,MAAM,WAAW08G,GAAS,oBAAoB,EAAG,CACpD,aAAc,KAAK,MAAM,WAAW,GACpC,QAAAjC,CAAA,CACD,CACH,GAEA5rC,GAAA,6BAAwB7uE,GAAK,CAC3BA,EAAE,kBAEF,IAAIgyC,EAAMktE,GAAA,EACNpsE,EAAc,CAChB,EAAGg4C,GAAA,CAAoC,EAGzC,MAAMomG,EAAUt/I,GAAc,SAAS,EACnCs/I,IACFp+I,EAAY,YAAco+I,GAG5B,MAAMtL,EAAah0I,GAAc,YAAY,EACzCg0I,IACF9yI,EAAY,WAAa8yI,GAI3B,MAAM2L,EAAK3/I,GAAc,IAAI,EAK7B,GAJI2/I,IACFz+I,EAAY,GAAKy+I,GAGf,CAACvwK,EAAM,KAAK,MAAM,cAAc,GAAK,CAACA,EAAM,KAAK,MAAM,eAAe,QAAQ,EAChFgxB,EAAM,KAAK,MAAM,eAAe,SAE5BA,EAAI,QAAQ,eAAe,EAAI,KACjCA,EAAMA,EAAI,QAAQ,gBAAiB,KAAK,MAAM,YAAY,OAEvD,CAEL,MAAMw/I,EAAY5/I,GAAc,WAAW,EAE3CkB,EAAc,CACZ,GAAGA,EACH,aAAc,KAAK,MAAM,aACzB,YAAaO,GAAA,EACb,KAAM,SACN,WAAY,QACZ,MAAO,MACP,OAAQ,OACR,UAAW,KAAK,MAAM,MAAM,QAAQ,QAAQ,KAAK,UAAU,CAAC,EAC5D,UAAWm+I,GAAwB,QAEvC,CAEA,KAAK,MAAM,mBAAmBx/I,EAAKc,CAAW,CAChD,GA/FO,KAAK,qBACR,KAAK,MAAM,WAAW4pE,GAAS,sBAAsB,EAAG,CACtD,aAAc,KAAK,MAAM,aAC1B,EAIH,KAAK,MAAM,eACX,KAAK,MAAM,kBACb,CAwFA,QAAS,CACP,KAAM,CAAE,qBAAAmpD,EAAsB,WAAA9vB,EAAY,eAAAquC,EAAgB,eAAAgN,CAAA,EAAmB,KAAK,MAElF,OACE/4E,MAACs8C,GAAA,CAAK,WAAY,GAAO,QAAQ,IAC/B,SAAAt8C,MAAC+8C,IAAA,CACC,SAAU,KAAK,WACf,OAAQ,KAAK,SACb,eAAAgvB,EACA,eAAAgN,EACA,qBAAAvrB,EACA,WAAA9vB,EACA,kBAAmB,KAAK,sBACxB,oBAAqB,KAAK,0BAE9B,CAEJ,CACF,CAEA,MAAA07C,IAAe7+G,GACb2uE,GACF2kB,GACEr5D,GACA,KAAO,IACP,CACE,WAAAiR,GACA,mBAAAF,GACA,aAAAktE,GACA,iBAAAgB,EAAA,CACF,CACD,EAAE31D,GAAUm7D,GAAc,CAAC,ECtJtBzlE,IAAS/S,IAAU,CACvB,qBAAsB,CACpB,QAAS,cACT,SAAU,YAEZ,oBAAqB,CACnB,YAAa,CACX,MAAO,oBACT,EAEF,UAAW,CACT,QAAS,SAEX,kBAAmB,CACjB,SAAU,WACV,IAAK,GACL,MAAO,EAEX,GAEM44E,IAAc,CAAC,CACnB,MAAA9wL,EACA,QAAA46C,EACA,UAAAnE,EACA,OAAAlX,EACA,SAAAqoG,EACA,IAAA5+C,EACA,IAAAzxC,EACA,QAAAzrB,EACA,KAAA/lB,EACA,kBAAAgrL,EAAoB,GACpB,aAAAC,EAAe,KACf,GAAGx5E,CACL,IACEsU,OAAC,OACC,UAAWd,GACTpwE,EAAQ,qBACRnE,EACA+gE,EAAW,WAAa,mBAG1B,UAAAC,MAACub,GAAA,CACC,WAAY,CACV,aAAAg+D,EACA,QAASllK,GAAW,OACpB,KAAM/lB,GAAQ,IACd,UAAWilH,GAAKpwE,EAAQ,UAAWrb,GAAUqb,EAAQ,mBAAmB,GAE1E,MAAA56C,EACA,KAAK,SASL,SAAUokB,GAAS,CACjB,IAAIpkB,EAAQokB,EAAM,OAAO,MAAQ,WAAWA,EAAM,OAAO,MAAO,EAAE,EAAI,GACtEpkB,EAAQgpF,IAAQ,MAAQA,EAAMhpF,EAAQgpF,EAAMhpF,EAC5CA,EAAQu3C,IAAQ,MAAQA,EAAMv3C,EAAQu3C,EAAMv3C,EAG5CA,EACE+wL,IAAsB/wL,EAAM,WAAW,MAAM,GAAG,EAAE,CAAC,GAAK,IAAI,OAAS,EACjEA,EAAM,QAAQ+wL,CAAiB,EAC/B/wL,EACN4nI,EAASxjH,EAAOpkB,CAAK,CACvB,EACC,GAAGw3G,CAAA,GAELj4E,GAAUk4E,MAAC,QAAK,UAAW78D,EAAQ,kBAAoB,SAAArb,CAAA,CAAO,GACjE,EAGF0xJ,GAAen2E,GAAWmQ,GAAM,EAAE6lE,GAAW,ECrEvC7lE,IAAS/S,IAAU,CACvB,KAAM,CACJ,QAAS,OACT,cAAe,SACf,KAAM,EACN,WAAY,UAEd,KAAM,CACJ,UAAWA,EAAM,QAAQ,CAAC,EAC1B,QAAS,CACP,SAAU,GACV,UAAW,GACb,EAEF,MAAO,CACL,UAAWA,EAAM,QAAQ,CAAC,EAC1B,aAAcA,EAAM,QAAQ,CAAC,EAC7B,SAAU,IACV,WAAY,YAEd,YAAa,CACX,UAAW,UAEb,QAAS,CACP,UAAWA,EAAM,QAAQ,CAAC,EAC1B,MAAOA,EAAM,IAAI,OAAO,OACxB,SAAU,KAEZ,OAAQ,CACN,MAAO,OACP,SAAU,QACV,OAAQ,EACR,aAAc,GAEhB,kBAAmB,CACjB,MAAOA,EAAM,IAAI,OAAO,MACxB,UAAWA,EAAM,QAAQ,CAAC,GAE5B,WAAY,CACV,eAAgB,SAChB,UAAW,SAEf,GAEMs8C,IAAO,CAAC,CACZ,QAAA55G,EACA,WAAA+sI,EACA,eAAAnE,EACA,gBAAA4C,EACA,WAAAjxC,EACA,YAAA4vC,EACA,SAAA54D,EACA,GAAA7U,EACA,SAAAJ,CACF,IAEI4U,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAA68D,MAACoU,GAAA,CAAoB,KAAMu6D,CAAA,CAAiB,EAC5Ct6D,OAAC,QACC,UAAWlxE,EAAQ,KACnB,SAAUx7C,GAAK,CACbA,EAAE,iBACF+sH,EAAS7U,EAAG,aAAeytE,CAAW,CACxC,EAEA,UAAAttE,MAAC,OAAI,UAAW78D,EAAQ,KACtB,SAAA68D,MAAC,OAAI,IAAK+rE,EAAe,MAAM,KAAK,MAASruC,GAAcA,EAAW,KAAO,IAAI,OAAO,EAC1F,EAEA19B,MAACsd,GAAA,CAAiB,UAAWn6E,EAAQ,MAAO,KAAK,MAAM,MAAM,SAC1D,SAAAixC,EAAG,iCAAiC,EACvC,EAEA4rB,MAACq5E,GAAA,CACC,UAAS,GACT,WAAY,CACV,UAAWl2I,EAAQ,aAErB,MAAO08D,EAAG,aAAeytE,EACzB,YAAal5F,EAAG,uCAAuC,EACvD,SAAU,CAACzsF,EAAG2lL,IAAgB7tE,EAAS,CAAE,YAAA6tE,EAAa,IAGxDttE,MAACsd,IAAiB,UAAWn6E,EAAQ,QAAS,KAAK,MAChD,SAAAixC,EAAG,mCAAmC,EACzC,QAECkpC,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,kBAC9C,SAAA68D,MAAC+W,GAAA,CACC,MAAOm5D,EACP,KAAMn5D,GAAW,KAAK,OACtB,oBAAgBm9C,GAAA,CAAa,QAAS,CAAE,UAAW/wH,EAAQ,WAAW,CAAG,IAE7E,EAEA68D,MAAC8T,IAAO,KAAK,SAAS,UAAW3wE,EAAQ,OAAQ,SAAU,CAAC08D,EAAG,aAAe,CAACytE,EAC7E,SAAAttE,MAACsd,IAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,kCAAkC,EACxC,EACF,IACF,EACF,EAIJqlG,IAAel/G,GACbslC,GAAG,CACD,MAAO,CACL,YAAa,KACf,CACD,EACDwD,GAAWmQ,GAAM,CACnB,EAAEupC,GAAI,ECxGN,MAAM28B,YAAwB5gG,EAAM,aAAc,CAChD,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EA2Bb4oD,GAAA,+BAA0B82G,GAAe,KAAK,UAAUA,CAAW,GAEnE92G,GAAA,iBAAY82G,GAAe,CACzB,KAAK,YAAcA,EACnB,KAAK,MAAM,0BAA0B,KAAK,MAAM,OAAO,aAAcA,CAAW,CAClF,GA9BOlpJ,GAAQxW,EAAM,OAAO,aAAa,GACrC,KAAK,UAAUA,EAAM,OAAO,aAAa,CAE7C,CAEA,0BAA0BmrE,EAAW,CAC/B,KAAK,MAAM,OAAO,cAChB,CAAC,KAAK,MAAM,OAASA,EAAU,OACjC,KAAK,MAAM,WAAWsrB,GAAS,oBAAoB,EAAG,CACpD,aAActrB,EAAU,OAAO,aAC/B,QAASA,EAAU,MAAM,GAC1B,GAGF,CAAC,KAAK,MAAM,OAASA,EAAU,OAC/B,CAAC,KAAK,MAAM,YAAcA,EAAU,aAErC,KAAK,MAAM,WACTsrB,GAAS,YAAY,EACrB,CAAE,aAActrB,EAAU,OAAO,cACjC,CAAE,QAAS,KAAK,YAAY,CAGlC,CASA,QAAS,CACP,aACGujE,GAAA,CACC,SAAAt8C,MAAC+8C,IAAA,CACC,eAAgB,KAAK,MAAM,eAC3B,gBAAiB,KAAK,MAAM,gBAC5B,WAAY,KAAK,MAAM,WACvB,WAAY,KAAK,MAAM,WACvB,YAAa,KAAK,MAAM,OAAO,cAC/B,SAAU,KAAK,0BAEnB,CAEJ,CACF,CAEA,MAAMhsD,IAAkBzlF,IAAU,CAChC,MAAOsjK,GAAStjK,CAAK,EACrB,WAAYmjK,GAAcnjK,CAAK,EAC/B,gBAAiBqjK,GAAgBrjK,CAAK,CACxC,GAEAquK,GAAep/G,GACb2uE,GACA2kB,GACFr5D,GAAQzD,IAAiB,CACvB,0BAAA48E,GACA,WAAAloE,EAAA,CACD,CAAC,EAAEooD,GAAe6rB,GAAe,CAAC,EClFnC,IAAIE,GAAShsK,GACXymG,OAACgC,GAAA,CAAS,GAAGzoG,EACX,UAAAoyF,MAAC,QACC,EAAE,iZACF,GAAG,cACH,QAAQ,gBAEVA,MAAC,QACC,EAAE,mTACF,GAAG,gBAELA,MAAC,QACC,EAAE,0WACF,GAAG,cACH,QAAQ,gBAEVA,MAAC,QACC,EAAE,2VACF,GAAG,cACH,QAAQ,eACV,EACF,EAEF45E,GAAS1sF,GAAK0sF,EAAM,EACpBA,GAAO,YAAc,SACrBA,GAAO,QAAU,UAEjB,MAAAC,IAAeD,GC3Bf,IAAIE,GAAQlsK,GACVymG,OAACgC,GAAA,CAAS,GAAGzoG,EACX,UAAAoyF,MAAC,QACC,EAAE,4dACF,GAAG,iBACH,QAAQ,QAEVA,MAAC,QACC,EAAE,gKACF,GAAG,kBACL,EACF,EAEF85E,GAAQ5sF,GAAK4sF,EAAK,EAClBA,GAAM,YAAc,QACpBA,GAAM,QAAU,UAEhB,MAAAC,IAAeD,GCNTtmE,IAAS/S,IAAU,CACvB,KAAM,CACJ,SAAU,WACV,QAAS,OACT,cAAe,SACf,KAAM,EACN,UAAW,EACX,OAAQ,OACR,WAAYA,EAAM,IAAI,OAAO,eAC7B,QAASA,EAAM,QAAQ,CAAC,GAE1B,SAAU,CACR,SAAU,WACV,KAAM,EACN,UAAW,EACX,QAAS,OACT,cAAe,SACf,WAAYA,EAAM,IAAI,OAAO,MAC7B,OAAQ,aAAa0kB,GAAK1kB,EAAM,QAAQ,QAAQ,KAAM,GAAI,CAAC,GAC3D,aAAcA,EAAM,QAAQ,CAAC,EAC7B,UAAW,iCACX,SAAU,SACV,aAAcA,EAAM,QAAQ,CAAC,GAE/B,UAAW,CACT,KAAM,EACN,UAAW,EACX,UAAW,OACX,QAASA,EAAM,QAAQ,CAAC,EACxB,UAAW,CACT,QAAS,aAAaA,EAAM,QAAQ,QAAQ,IAAI,GAChD,cAAe,GACjB,EAEF,eAAgB,CACd,aAAc,gCACd,eAAgB,CACd,aAAc,OAChB,EAEF,YAAa,CACX,WAAY,EACZ,WAAYA,EAAM,IAAI,OAAO,MAC7B,OAAQ,aAAa0kB,GAAK1kB,EAAM,QAAQ,QAAQ,KAAM,GAAI,CAAC,GAC3D,aAAcA,EAAM,QAAQ,CAAC,EAC7B,UAAW,kCACX,QAASA,EAAM,QAAQ,CAAC,GAE1B,SAAU,CACR,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,cAAeA,EAAM,QAAQ,GAAG,EAChC,aAAcA,EAAM,QAAQ,GAAG,EAC/B,aAAc,aAAaA,EAAM,IAAI,OAAO,MAAM,IAEpD,WAAY,CACV,MAAOA,EAAM,IAAI,OAAO,QAE1B,WAAY,CACV,MAAOA,EAAM,IAAI,OAAO,QAE1B,eAAgB,CACd,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,QAAS,GAAGA,EAAM,QAAQ,GAAG,CAAC,KAC9B,aAAcA,EAAM,QAAQ,GAAG,EAC/B,WAAY0kB,GAAK1kB,EAAM,QAAQ,QAAQ,KAAM,GAAI,EACjD,aAAcA,EAAM,QAAQ,CAAC,GAE/B,iBAAkB,CAChB,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,iBAAkB,CAChB,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,OAAQ,CACN,MAAO,OACP,aAAcA,EAAM,QAAQ,GAAG,EAC/B,eAAgB,CACd,aAAc,EAChB,EAEF,WAAY,CACV,MAAO,GACP,OAAQ,GACR,YAAaA,EAAM,QAAQ,CAAC,EAC5B,MAAOA,EAAM,IAAI,OAAO,MAE5B,GAKMs8C,IAAO,CAAC,CACZ,MAAAniB,EACA,gBAAA+zC,EACA,qBAAAqL,EACA,kBAAAC,EACA,mBAAAC,EACA,QAAA/2I,CACF,IAEIkxE,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAA68D,MAACoU,GAAA,CAAoB,KAAMu6D,CAAA,CAAiB,EAG5C3uE,MAAC,OAAI,UAAW78D,EAAQ,SACtB,SAAA68D,MAACm3E,GAAA,CACC,MAAAv8C,EACA,KAAMu8C,GAAU,KAAK,MACrB,QAAS,CAAE,KAAMh0I,EAAQ,UAAW,MAAOA,EAAQ,gBACnD,KAAK,SACL,aAAYixC,EAAG,qCAAqC,EACpD,SAAU,IAEd,EAEAigC,OAAC,OAAI,UAAWlxE,EAAQ,YACtB,UAAAkxE,OAAC,OAAI,UAAWlxE,EAAQ,SACtB,UAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,WAC7C,SAAAixC,EAAG,gCAAgC,EACtC,EACCwmD,GACC56B,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,WAC9C,SAAA68D,MAACq2E,GAAA,CAAM,MAAOz7C,EAAM,0BAA2B,EACjD,GAEJ,EAEAvmB,OAAC,OAAI,UAAWlxE,EAAQ,eACtB,UAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,iBAC7C,SAAAixC,EAAG,gCAAgC,EACtC,EACCwmD,GACC56B,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,iBAC9C,SAAA68D,MAACq2E,GAAA,CAAM,MAAOz7C,EAAM,4BAA6B,EACnD,GAEJ,EAECA,GAASA,EAAM,mBAAqB,GACnCvmB,OAACv7B,EAAM,SAAN,CACC,UAAAu7B,OAACP,GAAA,CACC,QAASkmE,EACT,UAAW72I,EAAQ,OACnB,SAAUwrI,EAEV,UAAA3uE,MAACm2E,GAAA,CAAW,UAAWhzI,EAAQ,WAAY,cAAY,OAAO,EAC9D68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,MAAM,SAC1C,SAAAlpC,EAAG,6BAA6B,EACnC,KAEFigC,OAAC27B,GAAA,CAAK,UAAS,GAAC,QAAS,EACvB,UAAAhwC,MAACgwC,GAAA,CAAK,KAAI,GAAC,GAAI,EACb,SAAA37B,OAACP,GAAA,CACC,QAASmmE,EACT,UAAW92I,EAAQ,OACnB,SAAUwrI,EAEV,UAAA3uE,MAAC85E,IAAA,CAAM,UAAW32I,EAAQ,WAAY,cAAY,OAAO,EACzD68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,MAAM,SAC1C,SAAAlpC,EAAG,+BAA+B,EACrC,KAEJ,EACA4rB,MAACgwC,GAAA,CAAK,KAAI,GAAC,GAAI,EACb,SAAA37B,OAACP,GAAA,CACC,QAASomE,EACT,UAAW/2I,EAAQ,OACnB,SAAUwrI,EAEV,UAAA3uE,MAAC45E,IAAA,CAAO,UAAWz2I,EAAQ,WAAY,cAAY,OAAO,EAC1D68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,MAAM,SAC1C,SAAAlpC,EAAG,gCAAgC,EACtC,IACF,CACF,GACF,GACF,GAEJ,GACF,EAIJ+lG,IAAe92E,GAAWmQ,GAAM,EAAEupC,GAAI,ECnLtC,MAAMq9B,WAAkBthG,EAAM,SAAU,CAAxC,kCACEtiB,GAAA,gCAA2B,IAAM,CAC/B,KAAK,MAAM,oBACX,KAAK,MAAM,WAAW6tC,GAAS,iBAAiB,EAAG,CACjD,aAAc,KAAK,MAAM,WAAW,GACpC,QAAS,KAAK,MAAM,YAAY,QACjC,CACH,GAEA7tC,GAAA,6BAAwB,IAAM,CAC5B,KAAK,MAAM,sBACX,KAAK,MAAM,WAAW6tC,GAAS,eAAe,EAAG,CAC/C,aAAc,KAAK,MAAM,WAAW,GACpC,QAAS,KAAK,MAAM,YAAY,QACjC,CACH,GAEA7tC,GAAA,8BAAyB,IAAM,CAC7B,KAAK,MAAM,wBACX,KAAK,MAAM,WAAW6tC,GAAS,gBAAgB,EAAG,CAChD,aAAc,KAAK,MAAM,WAAW,GACpC,QAAS,KAAK,MAAM,YAAY,QACjC,CACH,GAEA,QAAS,CACP,KAAM,CAAE,WAAAq5B,EAAY,uBAAA6J,EAAwB,YAAA8yC,EAAa,aAAAh4E,EAAc,WAAAoD,GAAe,KAAK,MAE3F,OACEzF,MAACgwE,GAAA,CACC,aAAcqK,EAAY,aAC1B,QAASA,EAAY,QACrB,YAAW,GAEV,UAAC,CAAE,MAAAz/C,EAAO,gBAAA+zC,CAAA,IACT3uE,MAACs8C,GAAA,CACC,MACG3zI,EAAM+0H,CAAU,EAIb,KAHC/0H,EAAMiyH,CAAK,EAEV8C,EAAW,KADX,GAAGA,EAAW,IAAI,MAAM9C,EAAM,gBAAgB,GAItD,YAAa,IAAMn1B,EAAWpB,GAAS,YAAY,EAAG,CAAE,aAAAhC,EAAc,EAEtE,SAAArC,MAAC+8C,IAAA,CACC,MAAAniB,EACA,gBAAiB+zC,GAAmBpnC,EACpC,qBAAsB,KAAK,yBAC3B,kBAAmB,KAAK,sBACxB,mBAAoB,KAAK,wBAC3B,EACF,EAIR,CACF,CAEA6yC,GAAU,UAAY,GAEtB,MAAMrpF,IAAkB,CAACzlF,EAAOsC,KAAW,CACzC,uBAAwB25H,GAAuBj8H,EAAOsC,CAAK,CAC7D,GAEA0sK,IAAe//G,GACbszF,GACAr5D,GACAzD,IACA,CACE,kBAAAshF,GACA,oBAAAC,GACA,sBAAAC,GACA,WAAA9sE,EAAA,CACF,CACD,EAAE20E,EAAS,ECxFNG,MAAqC3sK,GACzCoyF,MAACgwE,GAAA,CACC,sBAAAC,EACA,aAAcriK,EAAM,YAAcA,EAAM,YAAY,aAAeA,EAAM,aACzE,QAASA,EAAM,YAAcA,EAAM,YAAY,QAAUA,EAAM,QAC/D,YAAaA,EAAM,YAAcA,EAAM,YAAY,QAAUA,EAAM,QACnE,KAAMA,EAAM,YAAcA,EAAM,YAAY,KAAOA,EAAM,KACxD,GAAGA,CAAA,CACN,oECTW,IAAIpmB,EAAEV,GAAA,EAAyBc,EAAEigB,GAAA,EAAiB,SAASxgB,EAAEE,EAAE,CAAC,QAAQE,GAAE,yDAAyDF,EAAED,GAAE,EAAEA,GAAE,UAAU,OAAOA,KAAIG,IAAG,WAAW,mBAAmB,UAAUH,EAAC,CAAC,EAAE,MAAM,yBAAyBC,EAAE,WAAWE,GAAE,gHAAgH,CAC1X,IAAI+mF,EAAe,OAAO,QAApB,YAA4B,OAAO,IAAIgsG,EAAGhsG,EAAE,OAAO,IAAI,cAAc,EAAE,MAAMw/D,EAAEx/D,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAMisG,EAAGjsG,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAMja,EAAGia,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAMliF,EAAEkiF,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAMksG,EAAGlsG,EAAE,OAAO,IAAI,eAAe,EAAE,MAAMmsG,EAAGnsG,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAMosG,EAAGpsG,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAMqsG,EAAErsG,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAMssG,EAAGtsG,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAMusG,EAAGvsG,EAAE,OAAO,IAAI,YAAY,EAAE,MAAMwsG,EAAGxsG,EAAE,OAAO,IAAI,YAAY,EACzgB,MAAMysG,EAAGzsG,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM0sG,EAAG1sG,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM2sG,EAAG3sG,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,SAAS4sG,EAAG7zL,EAAE,CAAC,GAAQA,EAAE,UAAP,GAAe,CAACA,EAAE,QAAQ,EAAE,IAAIE,GAAEF,EAAE,MAAME,GAAEA,GAAC,EAAGF,EAAE,QAAQE,GAAEA,GAAE,KAAK,SAASH,GAAE,CAAKC,EAAE,UAAN,IAAgBD,GAAEA,GAAE,QAAQC,EAAE,QAAQ,EAAEA,EAAE,QAAQD,GAAE,EAAE,SAASA,GAAE,CAAKC,EAAE,UAAN,IAAgBA,EAAE,QAAQ,EAAEA,EAAE,QAAQD,GAAE,CAAC,CAAC,CAAC,CACzU,SAASonJ,EAAEnnJ,EAAE,CAAC,GAASA,GAAN,KAAQ,OAAO,KAAK,GAAgB,OAAOA,GAApB,WAAsB,OAAOA,EAAE,aAAaA,EAAE,MAAM,KAAK,GAAc,OAAOA,GAAlB,SAAoB,OAAOA,EAAE,OAAOA,EAAC,CAAE,KAAKymJ,EAAE,MAAM,WAAW,KAAKwsC,EAAG,MAAM,SAAS,KAAKjmH,EAAG,MAAM,WAAW,KAAKkmH,EAAG,MAAM,aAAa,KAAKI,EAAE,MAAM,WAAW,KAAKC,EAAG,MAAM,cAAc,CAAC,GAAc,OAAOvzL,GAAlB,SAAoB,OAAOA,EAAE,SAAQ,CAAE,KAAKmzL,EAAG,MAAM,mBAAmB,KAAKpuL,EAAE,MAAM,mBAAmB,KAAKsuL,EAAG,IAAInzL,GAAEF,EAAE,OAAO,OAAAE,GAAEA,GAAE,aAAaA,GAAE,MAAM,GAAUF,EAAE,cAAmBE,KAAL,GAAO,cAAcA,GAAE,IAAI,cACnf,KAAKszL,EAAG,OAAOrsC,EAAEnnJ,EAAE,IAAI,EAAE,KAAK0zL,EAAG,OAAOvsC,EAAEnnJ,EAAE,MAAM,EAAE,KAAKyzL,EAAG,GAAGzzL,EAAMA,EAAE,UAAN,EAAcA,EAAE,QAAQ,KAAK,OAAOmnJ,EAAEnnJ,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI+mJ,EAAE1mJ,EAAE,mDAAmD0mJ,EAAE,eAAe,wBAAwB,IAAIA,EAAE,uBAAuB,CAAC,QAAQ,IAAI,GAAGA,EAAE,eAAe,yBAAyB,IAAIA,EAAE,wBAAwB,CAAC,SAAS,IAAI,GAAG,IAAI+sC,EAAG,GAAG,SAAS9sC,EAAEhnJ,EAAEE,GAAE,CAAC,QAAQH,GAAEC,EAAE,aAAa,EAAED,IAAGG,GAAEH,KAAIC,EAAED,EAAC,EAAEC,EAAE,eAAeA,EAAE,aAAaD,GAAE,CAAC,CACtc,SAASg0L,EAAG/zL,EAAEE,GAAEH,GAAEI,GAAE,CAAC,GAAGA,KAAIA,GAAEH,EAAE,YAAuB,OAAOG,IAAlB,UAA4BA,KAAP,MAAU,OAAO6mJ,EAAE7mJ,GAAEJ,EAAC,EAAEI,GAAEJ,EAAC,EAAE,GAAGC,EAAEA,EAAE,aAAa,CAACD,GAAE,GAAG,QAAQT,MAAKU,EAAED,GAAET,EAAC,EAAEY,GAAEZ,EAAC,EAAEY,GAAEH,EAAC,MAAMG,GAAE4zL,EAAG,OAAO5zL,EAAC,CAAC,QAAQ2mJ,EAAE,IAAI,YAAY,EAAE,EAAEmtC,EAAE,EAAE,GAAGA,EAAEA,IAAIntC,EAAEmtC,CAAC,EAAEA,EAAE,EAAEntC,EAAE,EAAE,EAAE,EAClO,IAAIotC,EAAG,8VAA8VC,GAAG,OAAO,UAAU,eAAeC,EAAG,GAAGC,EAAG,GACjZ,SAAS9uK,EAAGtlB,EAAE,CAAC,OAAGk0L,GAAG,KAAKE,EAAGp0L,CAAC,EAAQ,GAAMk0L,GAAG,KAAKC,EAAGn0L,CAAC,KAAci0L,EAAG,KAAKj0L,CAAC,EAASo0L,EAAGp0L,CAAC,EAAE,IAAGm0L,EAAGn0L,CAAC,EAAE,MAAW,CAAC,SAASq0L,EAAGr0L,EAAEE,GAAEH,GAAEI,GAAE,CAAC,GAAUJ,KAAP,MAAcA,GAAE,OAAN,EAAW,SAAS,OAAO,OAAOG,GAAC,CAAE,IAAK,WAAW,IAAK,SAAS,MAAM,GAAG,IAAK,UAAwB,OAAUH,KAAP,KAAe,CAACA,GAAE,iBAAgBC,EAAEA,EAAE,YAAW,EAAG,MAAM,EAAE,CAAC,EAAkBA,IAAV,SAAuBA,IAAV,SAAY,QAAQ,QAAQ,CAAC,CAChX,SAASs0L,EAAGt0L,EAAEE,GAAEH,GAAEI,GAAE,CAAC,GAAUD,KAAP,MAAwB,OAAOA,GAArB,KAAwBm0L,EAAGr0L,EAAEE,GAAEH,EAAG,EAAE,MAAM,GAAiB,GAAUA,KAAP,KAAS,OAAOA,GAAE,KAAI,CAAE,IAAK,GAAE,MAAM,CAACG,GAAE,IAAK,GAAE,OAAWA,KAAL,GAAO,IAAK,GAAE,OAAO,MAAMA,EAAC,EAAE,IAAK,GAAE,OAAO,MAAMA,EAAC,GAAG,EAAEA,EAAC,CAAC,MAAM,EAAE,CAAC,SAASq0L,GAAEv0L,EAAEE,GAAEH,GAAEI,GAAEb,GAAEE,GAAE,CAAC,KAAK,gBAAoBU,KAAJ,GAAWA,KAAJ,GAAWA,KAAJ,EAAM,KAAK,cAAcC,GAAE,KAAK,mBAAmBb,GAAE,KAAK,gBAAgBS,GAAE,KAAK,aAAaC,EAAE,KAAK,KAAKE,GAAE,KAAK,YAAYV,EAAC,CAAC,IAAI+rK,EAAE,GACxZ,uIAAuI,MAAM,GAAG,EAAE,QAAQ,SAASvrK,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,gBAAgB,EAAE,CAAC,YAAY,OAAO,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,YAAY,YAAY,CAAC,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIE,GAAEF,EAAE,CAAC,EAAEurK,EAAErrK,EAAC,EAAE,IAAIq0L,GAAEr0L,GAAE,EAAE,GAAGF,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,kBAAkB,YAAY,aAAa,OAAO,EAAE,QAAQ,SAASA,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,EAAE,CAAC,CAAC,EACle,CAAC,cAAc,4BAA4B,YAAY,eAAe,EAAE,QAAQ,SAASA,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,wNAAwN,MAAM,GAAG,EAAE,QAAQ,SAASA,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,EAAE,CAAC,CAAC,EAC7Z,CAAC,UAAU,WAAW,QAAQ,UAAU,EAAE,QAAQ,SAASA,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,UAAU,EAAE,QAAQ,SAASA,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,OAAO,OAAO,MAAM,EAAE,QAAQ,SAASA,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,OAAO,EAAE,QAAQ,SAASA,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,EAAE,CAAC,CAAC,EAAE,IAAIonJ,GAAE,gBAAgB,SAAS,EAAEpnJ,EAAE,CAAC,OAAOA,EAAE,CAAC,EAAE,YAAW,CAAE,CAC1Y,0jCAA0jC,MAAM,GAAG,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIE,GAAEF,EAAE,QAAQonJ,GACzmC,CAAC,EAAEmkB,EAAErrK,EAAC,EAAE,IAAIq0L,GAAEr0L,GAAE,EAAE,GAAGF,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,2EAA2E,MAAM,GAAG,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIE,GAAEF,EAAE,QAAQonJ,GAAE,CAAC,EAAEmkB,EAAErrK,EAAC,EAAE,IAAIq0L,GAAEr0L,GAAE,EAAE,GAAGF,EAAE,+BAA+B,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,WAAW,WAAW,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIE,GAAEF,EAAE,QAAQonJ,GAAE,CAAC,EAAEmkB,EAAErrK,EAAC,EAAE,IAAIq0L,GAAEr0L,GAAE,EAAE,GAAGF,EAAE,uCAAuC,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,aAAa,EAAE,QAAQ,SAASA,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,cAAc,KAAK,EAAE,CAAC,CAAC,EAClcurK,EAAE,UAAU,IAAIgpB,GAAE,YAAY,EAAE,GAAG,aAAa,+BAA+B,EAAE,EAAE,CAAC,MAAM,OAAO,SAAS,YAAY,EAAE,QAAQ,SAASv0L,EAAE,CAACurK,EAAEvrK,CAAC,EAAE,IAAIu0L,GAAEv0L,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,EAAE,CAAC,CAAC,EAAE,IAAIw0L,EAAG,UAChM,SAAS9tC,EAAE1mJ,EAAE,CAAC,GAAe,OAAOA,GAAnB,WAAiC,OAAOA,GAAlB,SAAoB,MAAM,GAAGA,EAAEA,EAAE,GAAGA,EAAE,IAAIE,GAAEs0L,EAAG,KAAKx0L,CAAC,EAAE,GAAGE,GAAE,CAAC,IAAIH,GAAE,GAAGI,GAAEb,GAAE,EAAE,IAAIa,GAAED,GAAE,MAAMC,GAAEH,EAAE,OAAOG,KAAI,CAAC,OAAOH,EAAE,WAAWG,EAAC,GAAG,IAAK,IAAGD,GAAE,SAAS,MAAM,IAAK,IAAGA,GAAE,QAAQ,MAAM,IAAK,IAAGA,GAAE,SAAS,MAAM,IAAK,IAAGA,GAAE,OAAO,MAAM,IAAK,IAAGA,GAAE,OAAO,MAAM,QAAQ,QAAQ,CAACZ,KAAIa,KAAIJ,IAAGC,EAAE,UAAUV,GAAEa,EAAC,GAAGb,GAAEa,GAAE,EAAEJ,IAAGG,EAAC,CAACF,EAAEV,KAAIa,GAAEJ,GAAEC,EAAE,UAAUV,GAAEa,EAAC,EAAEJ,EAAC,CAAC,OAAOC,CAAC,CAC/X,SAASy0L,GAAGz0L,EAAEE,GAAE,CAAC,IAAIH,GAAEwrK,EAAE,eAAevrK,CAAC,EAAEurK,EAAEvrK,CAAC,EAAE,KAASG,GAA6G,OAAxGA,GAAYH,IAAV,WAAYG,GAASJ,KAAP,KAAaA,GAAE,OAAN,EAAW,IAAE,EAAEC,EAAE,SAAeA,EAAE,CAAC,IAAT,KAAkBA,EAAE,CAAC,IAAT,KAAkBA,EAAE,CAAC,IAAT,KAAkBA,EAAE,CAAC,IAAT,MAAoBG,IAAGm0L,EAAGt0L,EAAEE,GAAEH,EAAI,EAAQ,GAAaA,KAAP,MAAUC,EAAED,GAAE,cAAcI,GAAEJ,GAAE,KAAYI,KAAJ,GAAWA,KAAJ,GAAYD,KAAL,GAAcF,EAAE,OAAMD,GAAE,cAAcG,GAAE,GAAGA,IAAUF,EAAE,MAAM0mJ,EAAExmJ,EAAC,EAAE,OAAYolB,EAAGtlB,CAAC,EAAEA,EAAE,MAAM0mJ,EAAExmJ,EAAC,EAAE,KAAK,EAAE,CAAC,SAASw0L,GAAG10L,EAAEE,GAAE,CAAC,OAAOF,IAAIE,KAAQF,IAAJ,GAAO,EAAEA,IAAI,EAAEE,KAAIF,IAAIA,GAAGE,KAAIA,EAAC,CACna,IAAIy0L,GAAgB,OAAO,OAAO,IAA3B,WAA8B,OAAO,GAAGD,GAAGxtC,GAAE,KAAKJ,GAAE,KAAK8tC,GAAE,KAAKngD,GAAE,GAAGmS,GAAE,GAAGiuC,GAAE,KAAKC,GAAE,EAAE,SAASjpB,IAAG,CAAC,GAAU3kB,KAAP,KAAS,MAAM,MAAMpnJ,EAAE,GAAG,CAAC,EAAE,OAAOonJ,EAAC,CAAC,SAAS6tC,IAAI,CAAC,GAAG,EAAED,GAAE,MAAM,MAAMh1L,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,cAAc,KAAK,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,SAASk1L,IAAI,CAAC,OAAOJ,KAAP,KAAgB9tC,KAAP,MAAUrS,GAAE,GAAGqS,GAAE8tC,GAAEG,GAAE,IAAKtgD,GAAE,GAAGmgD,GAAE9tC,IAAU8tC,GAAE,OAAT,MAAengD,GAAE,GAAGmgD,GAAEA,GAAE,KAAKG,GAAE,IAAKtgD,GAAE,GAAGmgD,GAAEA,GAAE,MAAaA,EAAC,CAAC,SAASK,GAAGj1L,EAAEE,GAAEH,GAAEI,GAAE,CAAC,KAAKymJ,IAAGA,GAAE,GAAGkuC,IAAG,EAAEF,GAAE,KAAK70L,GAAEC,EAAEE,GAAEC,EAAC,EAAE,OAAA2mJ,GAAEI,GAAE,KAAK4tC,GAAE,EAAEF,GAAEC,GAAE,KAAY90L,EAAC,CAAC,SAASm1L,GAAGl1L,EAAEE,GAAE,CAAC,OAAmB,OAAOA,IAApB,WAAsBA,GAAEF,CAAC,EAAEE,EAAC,CAC3e,SAASi1L,GAAGn1L,EAAEE,GAAEH,GAAE,CAAc,GAAbmnJ,GAAE2kB,KAAI+oB,GAAEI,GAAE,EAAMvgD,GAAE,CAAC,IAAIt0I,GAAEy0L,GAAE,MAAmB,GAAb10L,GAAEC,GAAE,SAAmB00L,KAAP,OAAW90L,GAAE80L,GAAE,IAAI10L,EAAC,EAAWJ,KAAT,QAAY,CAAC80L,GAAE,OAAO10L,EAAC,EAAEA,GAAEy0L,GAAE,cAAc,GAAGz0L,GAAEH,EAAEG,GAAEJ,GAAE,MAAM,EAAEA,GAAEA,GAAE,WAAkBA,KAAP,MAAU,OAAA60L,GAAE,cAAcz0L,GAAQ,CAACA,GAAED,EAAC,CAAC,CAAC,MAAM,CAAC00L,GAAE,cAAc10L,EAAC,CAAC,CAAC,OAAAF,EAAEA,IAAIk1L,GAAgB,OAAOh1L,IAApB,WAAsBA,KAAIA,GAAWH,KAAT,OAAWA,GAAEG,EAAC,EAAEA,GAAE00L,GAAE,cAAc50L,EAAEA,EAAE40L,GAAE,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE50L,EAAEA,EAAE,SAASo1L,GAAG,KAAK,KAAKluC,GAAElnJ,CAAC,EAAQ,CAAC40L,GAAE,cAAc50L,CAAC,CAAC,CAC9Y,SAASo1L,GAAGp1L,EAAEE,GAAEH,GAAE,CAAC,GAAG,EAAE,GAAG+0L,IAAG,MAAM,MAAMh1L,EAAE,GAAG,CAAC,EAAE,GAAGE,IAAIknJ,GAAE,GAAGN,GAAE,GAAG5mJ,EAAE,CAAC,OAAOD,GAAE,KAAK,IAAI,EAAS80L,KAAP,OAAWA,GAAE,IAAI,KAAK90L,GAAE80L,GAAE,IAAI30L,EAAC,EAAWH,KAAT,OAAW80L,GAAE,IAAI30L,GAAEF,CAAC,MAAM,CAAC,IAAIE,GAAEH,GAASG,GAAE,OAAT,MAAeA,GAAEA,GAAE,KAAKA,GAAE,KAAKF,CAAC,CAAC,CAAC,SAASq1L,IAAI,EAC7M,IAAIC,GAAE,EAAEC,GAAG,CAAC,YAAY,SAASv1L,EAAE,CAAC,IAAIE,GAAEo1L,GAAE,OAAAtuC,EAAEhnJ,EAAEE,EAAC,EAASF,EAAEE,EAAC,CAAC,EAAE,WAAW,SAASF,EAAE,CAAC6rK,GAAC,EAAG,IAAI3rK,GAAEo1L,GAAE,OAAAtuC,EAAEhnJ,EAAEE,EAAC,EAASF,EAAEE,EAAC,CAAC,EAAE,QAAQ,SAASF,EAAEE,GAAE,CAAkC,GAAjCgnJ,GAAE2kB,GAAC,EAAG+oB,GAAEI,GAAE,EAAG90L,GAAWA,KAAT,OAAW,KAAKA,GAAY00L,KAAP,KAAS,CAAC,IAAI70L,GAAE60L,GAAE,cAAc,GAAU70L,KAAP,MAAiBG,KAAP,KAAS,CAACF,EAAE,CAAC,IAAIG,GAAEJ,GAAE,CAAC,EAAE,GAAUI,KAAP,KAASA,GAAE,OAAO,CAAC,QAAQb,GAAE,EAAEA,GAAEa,GAAE,QAAQb,GAAEY,GAAE,OAAOZ,KAAI,GAAG,CAACq1L,GAAGz0L,GAAEZ,EAAC,EAAEa,GAAEb,EAAC,CAAC,EAAE,CAACa,GAAE,GAAG,MAAMH,CAAC,CAACG,GAAE,EAAE,CAAC,CAAC,GAAGA,GAAE,OAAOJ,GAAE,CAAC,CAAC,CAAC,CAAC,OAAAC,EAAEA,EAAC,EAAG40L,GAAE,cAAc,CAAC50L,EAAEE,EAAC,EAASF,CAAC,EAAE,WAAWm1L,GAAG,OAAO,SAASn1L,EAAE,CAACknJ,GAAE2kB,GAAC,EAAG+oB,GAAEI,GAAE,EAAG,IAAI90L,GAAE00L,GAAE,cAAc,OAAc10L,KAAP,MAAUF,EAAE,CAAC,QAAQA,CAAC,EAAE40L,GAAE,cACtf50L,GAAGE,EAAC,EAAE,SAAS,SAASF,EAAE,CAAC,OAAOm1L,GAAGD,GAAGl1L,CAAC,CAAC,EAAE,gBAAgB,UAAU,GAAG,YAAY,SAASA,EAAE,CAAC,OAAOA,CAAC,EAAE,oBAAoBq1L,GAAG,UAAUA,GAAG,cAAcA,GAAG,aAAa,SAASr1L,EAAEE,GAAE,CAAC,MAAM,CAAC,MAAMA,GAAE,UAAUF,CAAC,CAAC,EAAE,iBAAiB,SAASA,EAAE,CAAC,OAAA6rK,KAAW7rK,CAAC,EAAE,cAAc,UAAU,CAAC,OAAA6rK,GAAC,EAAS,CAAC,SAAS7rK,EAAE,CAACA,EAAC,CAAE,EAAE,EAAE,CAAC,CAAC,EAAEw1L,GAAG,CAAC,KAAK,8BAA2G,EAClb,SAASC,GAAGz1L,EAAE,CAAC,OAAOA,EAAC,CAAE,IAAK,MAAM,MAAM,6BAA6B,IAAK,OAAO,MAAM,qCAAqC,QAAQ,MAAM,8BAA8B,CAAC,CAC3K,IAAI01L,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,EAAE,EAAEC,GAAG11L,EAAE,CAAC,SAAS,EAAE,EAAEy1L,EAAE,EAAEE,GAAE,CAAC,wBAAwB,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,QAAQ,GAAG,aAAa,GAAG,gBAAgB,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,cAAc,GAAG,eAAe,GAC7f,gBAAgB,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,cAAc,GAAG,YAAY,EAAE,EAAEC,GAAG,CAAC,SAAS,KAAK,MAAM,GAAG,EAAE,OAAO,KAAKD,EAAC,EAAE,QAAQ,SAAS51L,EAAE,CAAC61L,GAAG,QAAQ,SAAS31L,GAAE,CAACA,GAAEA,GAAEF,EAAE,OAAO,CAAC,EAAE,YAAW,EAAGA,EAAE,UAAU,CAAC,EAAE41L,GAAE11L,EAAC,EAAE01L,GAAE51L,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5Z,IAAI81L,GAAG,WAAWC,GAAG,OAAOC,GAAE31L,EAAE,SAAS,QAAQ41L,GAAGlvC,EAAE,uBAAuBmvC,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,EAAE,EAAEC,GAAG,8BAA8BC,GAAG,GAAGC,GAAG,GAAG,SAASC,GAAGt2L,EAAE,CAAC,GAAsBA,GAAP,KAAS,OAAOA,EAAE,IAAIE,GAAE,GAAG,OAAAG,EAAE,SAAS,QAAQL,EAAE,SAASA,GAAE,CAAOA,IAAN,OAAUE,IAAGF,GAAE,CAAC,EAASE,EAAC,CAAC,IAAIq2L,GAAG,OAAO,UAAU,eAAeC,GAAG,CAAC,SAAS,KAAK,wBAAwB,KAAK,+BAA+B,KAAK,yBAAyB,IAAI,EAAE,SAASC,GAAGz2L,EAAEE,GAAE,CAAC,GAAYF,IAAT,OAAW,MAAM,MAAMF,EAAE,IAAIqnJ,EAAEjnJ,EAAC,GAAG,WAAW,CAAC,CAAE,CAChf,SAASw2L,GAAG12L,EAAEE,GAAEH,GAAE,CAAC,SAASI,GAAEA,GAAEX,GAAE,CAAC,IAAIY,GAAEZ,GAAE,WAAWA,GAAE,UAAU,iBAAiBF,GAAEy0L,EAAGv0L,GAAEU,GAAEH,GAAEK,EAAC,EAAEqQ,GAAE,GAAG/Q,GAAE,GAAGC,GAAE,CAAC,UAAU,UAAU,CAAC,MAAM,EAAE,EAAE,mBAAmB,UAAU,CAAC,GAAU8Q,KAAP,KAAS,OAAO,IAAI,EAAE,oBAAoB,SAASzQ,GAAED,GAAE,CAACL,GAAE,GAAG+Q,GAAE,CAAC1Q,EAAC,CAAC,EAAE,gBAAgB,SAASC,GAAED,GAAE,CAAC,GAAU0Q,KAAP,KAAS,OAAO,KAAKA,GAAE,KAAK1Q,EAAC,CAAC,CAAC,EAAE,GAAGK,IAAG,GAAGA,GAAE,IAAIZ,GAAEW,GAAE,MAAMb,GAAEK,EAAC,EAAe,OAAOH,GAAE,0BAAtB,WAA+C,CAAC,IAAImnJ,GAAEnnJ,GAAE,yBAAyB,KAAK,KAAKW,GAAE,MAAMC,GAAE,KAAK,EAAQumJ,IAAN,OAAUvmJ,GAAE,MAAMH,EAAE,GAAGG,GAAE,MAAMumJ,EAAC,EAAE,UAAUO,GAAE,GAAG9mJ,GAAEZ,GAAEW,GAAE,MACrfb,GAAEK,EAAC,EAAES,GAAE60L,GAAGz1L,GAAEW,GAAE,MAAMC,GAAEd,EAAC,EAAQc,IAAN,MAAeA,GAAE,QAAR,KAAe,CAACJ,EAAEI,GAAEq2L,GAAGz2L,EAAER,EAAC,EAAE,MAAM,CAAgF,GAA/EY,GAAE,MAAMD,GAAE,MAAMC,GAAE,QAAQd,GAAEc,GAAE,QAAQT,GAAEA,GAAES,GAAE,MAAeT,KAAT,SAAaS,GAAE,MAAMT,GAAE,MAAsB,OAAOS,GAAE,2BAAtB,YAA8D,OAAOA,GAAE,oBAAtB,WAAyC,GAAgB,OAAOA,GAAE,oBAAtB,YAAuD,OAAOZ,GAAE,0BAAtB,YAAgDY,GAAE,mBAAkB,EAAgB,OAAOA,GAAE,2BAAtB,YAA8D,OAAOZ,GAAE,0BAAtB,YAAgDY,GAAE,0BAAyB,EAAGqQ,GAAE,OAAO,CAAC9Q,GAAE8Q,GAAE,IAAIuxF,GACtftiG,GAAc,GAAZ+Q,GAAE,KAAK/Q,GAAE,GAAMsiG,IAAOriG,GAAE,SAAN,EAAaS,GAAE,MAAMT,GAAE,CAAC,MAAM,CAACgnJ,GAAE3kD,GAAEriG,GAAE,CAAC,EAAES,GAAE,MAAM,IAAI+nG,GAAE,GAAG,IAAInG,GAAEA,GAAE,EAAE,EAAEA,GAAEriG,GAAE,OAAOqiG,KAAI,CAAC,IAAIniG,GAAEF,GAAEqiG,EAAC,EAAEniG,GAAe,OAAOA,IAApB,WAAsBA,GAAE,KAAKO,GAAEumJ,GAAExmJ,GAAE,MAAMb,EAAC,EAAEO,GAAQA,IAAN,OAAUsoG,IAAGA,GAAE,GAAGw+C,GAAE1mJ,EAAE,GAAG0mJ,GAAE9mJ,EAAC,GAAGI,EAAE0mJ,GAAE9mJ,EAAC,EAAE,CAACO,GAAE,MAAMumJ,EAAC,CAAC,MAAMl2I,GAAE,KAA0B,GAArBzQ,EAAEI,GAAE,OAAM,EAAGq2L,GAAGz2L,EAAER,EAAC,EAAkB,OAAOY,GAAE,iBAAtB,aAAwCD,GAAEX,GAAE,kBAA6B,OAAOW,IAAlB,UAAqB,CAAC,IAAI8mJ,GAAE7mJ,GAAE,gBAAe,EAAG,QAAQinJ,MAAKJ,GAAE,GAAG,EAAEI,MAAKlnJ,IAAG,MAAM,MAAML,EAAE,IAAIqnJ,EAAE3nJ,EAAC,GAAG,UAAU6nJ,EAAC,CAAC,CAAE,CAACJ,KAAI/mJ,GAAED,EAAE,GAAGC,GAAE+mJ,EAAC,EAAE,CAAC,KAAK5mJ,EAAE,eAAeL,CAAC,GAAG,CAAC,IAAIV,GAAEU,EAAER,GAAEF,GAAE,KAAK,GACxe,OAAOE,IADoe,WACle,MAAMW,GAAEb,GAAEE,EAAC,CAAC,CAAC,MAAM,CAAC,MAAMQ,EAAE,QAAQE,EAAC,CAAC,CAC/C,IAAIy2L,IAAG,UAAU,CAAC,SAAS32L,EAAEA,GAAEE,GAAE,CAACG,EAAE,eAAeL,EAAC,EAAEA,GAAE,OAAOymJ,EAAEzmJ,GAAE,CAACA,EAAC,GAAGA,GAAEA,GAAE,MAAM,SAASA,GAAEK,EAAE,eAAeL,EAAC,EAAE,CAACA,EAAC,EAAEg2L,GAAEh2L,EAAC,GAAGA,GAAEg2L,GAAEh2L,EAAC,EAAEA,GAAE,CAAC,KAAK,KAAK,aAAaw1L,GAAG,KAAK,SAASx1L,GAAE,WAAW,EAAE,QAAQ8zL,EAAG,OAAO,EAAE,EAAE,IAAI/zL,GAAE8mJ,EAAE,CAAC,EAAE,GAAO9mJ,KAAJ,EAAM,CAAC,IAAIP,GAAEqnJ,EAAE9mJ,GAAEP,GAAE,OAAO,IAAIW,GAAE,EAAEJ,GAAE,GAAG,EAAE,OAAOI,IAAG,MAAM,MAAML,EAAE,GAAG,CAAC,EAAE,IAAIJ,GAAE,IAAI,YAAYS,EAAC,EAAwB,IAAtBT,GAAE,IAAIF,EAAC,EAAEqnJ,EAAEnnJ,GAAEmnJ,EAAE,CAAC,EAAE9mJ,GAAE,EAAMP,GAAEO,GAAEP,GAAEW,GAAE,EAAEX,KAAIqnJ,EAAErnJ,EAAC,EAAEA,GAAE,EAAEqnJ,EAAE1mJ,GAAE,CAAC,EAAE,CAAC,MAAM0mJ,EAAE,CAAC,EAAEA,EAAE9mJ,EAAC,EAAE,KAAK,SAASA,GAAE,KAAK,MAAM,CAACC,EAAC,EAAE,KAAK,UAAU,GAAG,KAAK,mBAAmB,KAAK,KAAK,oBAAoB,GAAG,KAAK,iBACxfE,GAAE,KAAK,cAAc,EAAE,KAAK,aAAa,GAAG,KAAK,aAAa,GAAG,KAAK,kBAAkB,EAAE,CAAC,IAAIA,GAAEF,EAAE,UAAU,OAAAE,GAAE,QAAQ,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,UAAU,GAAG,KAAK,eAAc,EAAG,IAAIF,GAAE,KAAK,SAAS6mJ,EAAE7mJ,EAAC,EAAE6mJ,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAE7mJ,EAAC,CAAC,EAAEE,GAAE,aAAa,SAASF,GAAE,CAAC,IAAID,GAAE,EAAE,KAAK,aAAaG,GAAEF,GAAE,KAAK,SAASR,GAAE,KAAK,SAASwnJ,EAAE9mJ,GAAEV,EAAC,EAAE,IAAIiR,GAAEvQ,GAAEV,EAAC,EAAE,KAAK,aAAaO,EAAC,EAAEG,GAAE,KAAK,kBAAkBH,EAAC,EAAE0Q,GAAEvQ,GAAEV,EAAC,EAAEQ,GAAE,MAAM,KAAK,EAAEE,GAAE,YAAY,UAAU,CAAC,IAAIF,GAAE,KAAK,aAAaE,GAAE,KAAK,aAAaF,EAAC,EAAEV,GAAE,KAAK,kBAAkBU,EAAC,EACvf,KAAK,aAAaA,EAAC,EAAE,KAAK,KAAK,kBAAkBA,EAAC,EAAE,KAAK,KAAK,eAAeE,GAAE,KAAK,QAAQ,EAAEZ,EAAC,EAAEY,GAAE,eAAe,UAAU,CAAC,QAAQF,GAAE,KAAK,aAAa,GAAGA,GAAEA,KAAI,KAAK,aAAaA,EAAC,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkBA,EAAC,CAAC,EAAEE,GAAE,KAAK,SAASF,GAAE,CAAC,GAAG,KAAK,UAAU,OAAO,KAAK,IAAIE,GAAEo1L,GAAEA,GAAE,KAAK,SAAS,IAAIv1L,GAAEk2L,GAAG,QAAQA,GAAG,QAAQV,GAAG,GAAG,CAAC,QAAQ/1L,GAAE,CAAC,EAAE,EAAEiR,GAAE,GAAGjR,GAAE,CAAC,EAAE,OAAOQ,IAAG,CAAC,GAAO,KAAK,MAAM,SAAf,EAAsB,CAAC,KAAK,UAAU,GAAG,IAAIN,GAAE,KAAK,SAASmnJ,EAAEnnJ,EAAC,EAAEmnJ,EAAE,CAAC,EAAEA,EAAE,CAAC,EAAEnnJ,GAAE,KAAK,CAAC,IAAIU,GAAE,KAAK,MAAM,KAAK,MAAM,OAAO,CAAC,EAAE,GAAGqQ,IAAGrQ,GAAE,YACtfA,GAAE,SAAS,OAAO,CAAC,IAAIw2L,GAAEx2L,GAAE,OAA8D,GAAlDw2L,KAAL,KAAS,KAAK,oBAAoB,IAAI,KAAK,MAAM,IAAG,EAAiBx2L,GAAE,OAAb,SAAkB,KAAK,mBAAmB,aAAmBA,GAAE,MAAR,MAAoBA,GAAE,KAAK,MAAb,MAAmBA,GAAE,KAAK,KAAK,WAAW2E,EAAE,KAAK,YAAY3E,GAAE,IAAI,UAAUA,GAAE,OAAOkzL,EAAE,CAAC,KAAK,gBAAgB,IAAIuD,GAAEr3L,GAAE,IAAG,EAAG,GAAGiR,GAAE,CAACA,GAAE,GAAG,IAAI7Q,GAAEQ,GAAE,cAAc,GAAG,CAACR,GAAE,MAAM,MAAME,EAAE,GAAG,CAAC,EAAE,KAAK,MAAM,KAAKF,EAAC,EAAEJ,GAAE,KAAK,aAAa,GAAG,YAAkB,QAAQ,MAAMA,GAAE,KAAK,aAAa,GAAGq3L,EAAC,CAACr3L,GAAE,KAAK,aAAa,GAAGo3L,EAAC,KAAK,CAAC,IAAIj3L,GAAES,GAAE,SAASA,GAAE,YAAY,EACxfumJ,GAAE,GAAG,GAAG,CAACA,IAAG,KAAK,OAAOhnJ,GAAES,GAAE,QAAQA,GAAE,YAAY,CAAC,OAAO4hG,GAAE,CAAC,MAASA,IAAN,MAAsB,OAAOA,GAAE,MAAtB,WAAiC,MAAMliG,EAAE,GAAG,CAAC,EAAQkiG,EAAE,CAAUxiG,GAAE,QAAQ,KAAK,eAAeA,GAAE,KAAK,EAAE,EAAEA,GAAE,KAAK,aAAa,GAAGmnJ,EAAC,CAAC,CAAC,OAAOnnJ,GAAE,CAAC,CAAC,QAAC,CAAQy2L,GAAG,QAAQl2L,GAAEu1L,GAAEp1L,EAAC,CAAC,EAAEA,GAAE,OAAO,SAASF,GAAEE,GAAEZ,GAAE,CAAC,GAAc,OAAOU,IAAlB,UAAgC,OAAOA,IAAlB,SAA4B,OAAPV,GAAE,GAAGU,GAAUV,KAAL,GAAa,GAAM,KAAK,iBAAwBonJ,EAAEpnJ,EAAC,EAAK,KAAK,oBAA0B,WAAiBonJ,EAAEpnJ,EAAC,GAAE,KAAK,oBAAoB,GAAUonJ,EAAEpnJ,EAAC,GAC3c,GAD6cY,GAAEw2L,GAAG12L,GAAEE,GAAE,KAAK,QAAQ,EAAEF,GAAEE,GAAE,MACrfA,GAAEA,GAAE,QAAkBF,KAAP,MAAeA,KAAL,GAAO,MAAM,GAAG,GAAG,CAACK,EAAE,eAAeL,EAAC,EAAE,CAAC,GAASA,IAAN,MAAeA,GAAE,UAAR,KAA+B,MAAbV,GAAEU,GAAE,SAAyB,MAAbV,KAAI2zL,EAAenzL,EAAE,GAAG,EAAeA,EAAE,IAAIR,GAAE,SAAQ,CAAE,CAAhC,EAAoC,OAAAU,GAAEg2L,GAAEh2L,EAAC,EAAE,KAAK,MAAM,KAAK,CAAC,KAAK,KAAK,aAAaV,GAAE,SAASU,GAAE,WAAW,EAAE,QAAQE,GAAE,OAAO,EAAE,CAAC,EAAQ,EAAE,CAAC,IAAIH,GAAEC,GAAE,KAAK,GAAc,OAAOD,IAAlB,SAAoB,OAAO,KAAK,UAAUC,GAAEE,GAAEZ,EAAC,EAAE,OAAOS,GAAC,CAAE,KAAKmzL,EAAG,KAAKE,EAAG,KAAKpmH,EAAG,KAAKumH,EAAG,KAAK9sC,EAAE,OAAOzmJ,GAAEg2L,GAAEh2L,GAAE,MAAM,QAAQ,EAAE,KAAK,MAAM,KAAK,CAAC,KAAK,KAAK,aAAaV,GAAE,SAASU,GAAE,WAAW,EAAE,QAAQE,GAAE,OAAO,EAAE,CAAC,EAC1f,GAAG,KAAKozL,EAAE,MAAM,MAAMxzL,EAAE,GAAG,CAAC,CAAE,CAAC,GAAc,OAAOC,IAAlB,UAA4BA,KAAP,KAAS,OAAOA,GAAE,SAAQ,CAAE,KAAKszL,EAAGnsC,GAAE,GAAG,IAAI/mJ,GAAEJ,GAAE,OAAOC,GAAE,MAAMA,GAAE,GAAG,EAAE,OAAAG,GAAE80L,GAAGl1L,GAAE,OAAOC,GAAE,MAAMG,GAAEH,GAAE,GAAG,EAAEG,GAAE61L,GAAE71L,EAAC,EAAE,KAAK,MAAM,KAAK,CAAC,KAAK,KAAK,aAAab,GAAE,SAASa,GAAE,WAAW,EAAE,QAAQD,GAAE,OAAO,EAAE,CAAC,EAAQ,GAAG,KAAKszL,EAAG,OAAOxzL,GAAE,CAACK,EAAE,cAAcN,GAAE,KAAKE,EAAE,CAAC,IAAID,GAAE,GAAG,EAAEA,GAAE,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,KAAK,CAAC,KAAK,KAAK,aAAaV,GAAE,SAASU,GAAE,WAAW,EAAE,QAAQE,GAAE,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK6E,EAAE,OAAOhF,GAAEi2L,GAAEh2L,GAAE,MAAM,QAAQ,EAAEV,GAAE,CAAC,KAAKU,GAAE,aAAaV,GAAE,SAASS,GAAE,WAAW,EACrf,QAAQG,GAAE,OAAO,EAAE,EAAE,KAAK,aAAaF,EAAC,EAAE,KAAK,MAAM,KAAKV,EAAC,EAAE,GAAG,KAAK6zL,EAAGpzL,GAAEC,GAAE,KAAKG,GAAEH,GAAE,MAAM,IAAIN,GAAE,KAAK,SAAS,OAAAsnJ,EAAEjnJ,GAAEL,EAAC,EAAEK,GAAEi2L,GAAE71L,GAAE,SAASJ,GAAEL,EAAC,CAAC,CAAC,EAAE,KAAK,MAAM,KAAK,CAAC,KAAKM,GAAE,aAAaV,GAAE,SAASS,GAAE,WAAW,EAAE,QAAQG,GAAE,OAAO,EAAE,CAAC,EAAQ,GAAG,KAAKyzL,EAAG,MAAM,MAAM7zL,EAAE,GAAG,CAAC,EAAE,KAAK2zL,EAAG,OAAO1zL,GAAEC,GAAE,KAAK6zL,EAAG9zL,EAAC,EAAEA,GAAE,QAAO,CAAE,IAAK,GAAE,OAAOC,GAAE,CAACK,EAAE,cAAcN,GAAE,QAAQE,EAAE,CAAC,IAAID,GAAE,GAAG,EAAEA,GAAE,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,KAAK,CAAC,KAAK,KAAK,aAAaV,GAAE,SAASU,GAAE,WAAW,EAAE,QAAQE,GAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAK,GAAE,MAAMH,GAAE,QAAQ,QAAQ,MAAM,MAAMD,EAAE,GAAG,CAAC,EAC9f,KAAK8zL,EAAG,MAAM,MAAM9zL,EAAE,GAAG,CAAC,CAAE,CAAC,MAAM,MAAMA,EAAE,IAAUC,IAAN,KAAQA,GAAE,OAAOA,GAAE,EAAE,CAAC,CAAE,EAAEG,GAAE,UAAU,SAASF,GAAEE,GAAEZ,GAAE,CAAC,IAAIS,GAAEC,GAAE,KAAK,cAAiC,GAAG,CAACo2L,GAAG,eAAer2L,EAAC,EAAE,CAAC,GAAG,CAACo2L,GAAG,KAAKp2L,EAAC,EAAE,MAAM,MAAMD,EAAE,GAAGC,EAAC,CAAC,EAAEq2L,GAAGr2L,EAAC,EAAE,EAAE,CAAC,IAAII,GAAEH,GAAE,MAAM,GAAaD,KAAV,QAAYI,GAAEF,EAAE,CAAC,KAAK,MAAM,EAAEE,GAAE,CAAC,eAAe,OAAO,aAAa,OAAO,MAAYA,GAAE,OAAR,KAAcA,GAAE,MAAMA,GAAE,aAAa,QAAcA,GAAE,SAAR,KAAgBA,GAAE,QAAQA,GAAE,cAAc,CAAC,UAAuBJ,KAAb,WAAe,CAAC,IAAIL,GAAES,GAAE,MAAM,GAAST,IAAN,KAAQ,CAACA,GAAES,GAAE,aAAa,IAAIC,GAAED,GAAE,SAAS,GAASC,IAAN,KAAQ,CAAC,GACvfV,IAD0f,KACxf,MAAM,MAAMI,EAAE,EAAE,CAAC,EAAE,GAAG,MAAM,QAAQM,EAAC,EAAE,CAAC,GAAG,EAAE,GAAGA,GAAE,QAAQ,MAAM,MAAMN,EAAE,EAAE,CAAC,EAAEM,GAAEA,GAAE,CAAC,CAAC,CAACV,GAAE,GAAGU,EAAC,CAAOV,IAAN,OAAUA,GAAE,GAAG,CAACS,GAAEF,EAAE,GAAGE,GAAE,CAAC,MAAM,OAAO,SAAS,GAAGT,EAAC,CAAC,CAAC,SAAoBK,KAAX,SAAa,KAAK,mBAAyBI,GAAE,OAAR,KAAcA,GAAE,MAAMA,GAAE,aAAaA,GAAEF,EAAE,GAAGE,GAAE,CAAC,MAAM,MAAM,CAAC,UAAqBJ,KAAX,SAAa,CAACK,GAAE,KAAK,mBAAmB,IAAIw2L,GAAEN,GAAGn2L,GAAE,QAAQ,EAAE,GAASC,IAAN,KAAQ,CAAC,IAAIy2L,GAAQ12L,GAAE,OAAR,KAAcA,GAAE,MAAM,GAAGy2L,GAAO,GAALl3L,GAAE,GAAM,MAAM,QAAQU,EAAC,GAAE,QAAQR,GAAE,EAAEA,GAAEQ,GAAE,OAAOR,KAAK,GAAG,GAAGQ,GAAER,EAAC,IAAIi3L,GAAE,CAACn3L,GAAE,GAAG,KAAK,OAAOA,GAAE,GAAGU,KAAIy2L,GAAE12L,GAAEF,EAAE,CAAC,SAAS,OAAO,SAAS,MAAM,EACtfE,GAAE,CAAC,SAAST,GAAE,SAASk3L,EAAC,CAAC,CAAC,CAAC,CAAC,GAAGl3L,GAAES,GAAE,CAAC,GAAGw1L,GAAG51L,EAAC,IAAUL,GAAE,UAAR,MAAwBA,GAAE,yBAAR,MAAiC,MAAM,MAAMI,EAAE,IAAIC,GAAE,EAAE,CAAC,EAAE,GAASL,GAAE,yBAAR,KAAgC,CAAC,GAASA,GAAE,UAAR,KAAiB,MAAM,MAAMI,EAAE,EAAE,CAAC,EAAE,GAAG,EAAa,OAAOJ,GAAE,yBAApB,UAA6C,WAAWA,GAAE,yBAAyB,MAAM,MAAMI,EAAE,EAAE,CAAC,CAAE,CAAC,GAASJ,GAAE,OAAR,MAA0B,OAAOA,GAAE,OAApB,SAA0B,MAAM,MAAMI,EAAE,GAAG,EAAE,CAAC,CAAE,CAACJ,GAAES,GAAEC,GAAE,KAAK,iBAAiBw2L,GAAM,KAAK,MAAM,SAAf,EAAsBC,GAAE,IAAI72L,GAAE,KAAK,IAAI8rK,MAAKpsK,GAAE,GAAG62L,GAAG,KAAK72L,GAAEosK,EAAC,EAAE,CAAC,IAAInsK,GAAED,GAAEosK,EAAC,EAAE,GAASnsK,IAAN,KAAQ,CAAC,GACzemsK,KAD4e,QAC1e,CAAClsK,GAAE,OAAO,IAAI+mJ,GAAE,GAAG3kD,GAAE,GAAG,IAAIpiG,MAAKD,GAAE,GAAGA,GAAE,eAAeC,EAAC,EAAE,CAAC,IAAIuoG,GAAMvoG,GAAE,QAAQ,IAAI,IAAlB,EAAoBC,GAAEF,GAAEC,EAAC,EAAE,GAASC,IAAN,KAAQ,CAAC,GAAGsoG,GAAE,IAAI8+C,GAAErnJ,WAAUqnJ,GAAErnJ,GAAEy2L,GAAG,eAAepvC,EAAC,EAAEA,GAAEovC,GAAGpvC,EAAC,MAAM,CAAC,IAAII,GAAEJ,GAAE,QAAQ6uC,GAAG,KAAK,EAAE,YAAW,EAAG,QAAQC,GAAG,MAAM,EAAE9uC,GAAEovC,GAAGpvC,EAAC,EAAEI,EAAC,CAACV,IAAG3kD,GAAEilD,GAAE,IAAIjlD,GAAEpiG,GAAEuoG,GAAQtoG,IAAN,MAAqB,OAAOA,IAAnB,WAA2BA,KAAL,GAAO,GAAGsoG,IAAc,OAAOtoG,IAAlB,UAAyBA,KAAJ,GAAO+1L,GAAE,eAAe5zF,EAAC,GAAG4zF,GAAE5zF,EAAC,GAAG,GAAGniG,IAAG,KAAI,EAAGA,GAAE,KAAK8mJ,IAAGx+C,GAAEnG,GAAE,GAAG,CAAC,CAACriG,GAAEgnJ,IAAG,IAAI,CAAC/mJ,GAAE,KAAKM,EAAE,GAAGioG,GAAEpoG,GAAEF,GAAEH,GAAOyoG,GAAE,QAAQ,GAAG,IAAlB,GAAoBA,GAAa,OAAOtoG,GAAE,IAApB,aAA4B,QAAOsoG,GAAC,CAAE,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,YAAY,IAAK,gBAAgB,IAAK,gBAAgB,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,gBAAgBA,GACjoB,GAAG,MAAMjoG,EAAE,QAAQioG,GAAE,EAAE,CAACA,GAAEquF,GAAG,eAAe1qB,EAAC,IAAIlsK,GAAEksK,GAAElsK,GAAE0lB,EAAG1lB,EAAC,GAASD,IAAN,KAAQC,GAAE,MAAM8mJ,EAAE/mJ,EAAC,EAAE,KAAK,IAAIC,GAAE60L,GAAG3oB,GAAEnsK,EAAC,EAAEC,KAAIi3L,IAAG,IAAIj3L,GAAE,CAAC,CAACQ,IAAGw2L,KAAIC,IAAG,sBAAsB,IAAI/qB,GAAE+qB,GAAEn3L,GAAE,GAAGg2L,GAAG,eAAe31L,EAAC,EAAE+rK,IAAG,MAAMA,IAAG,IAAIpsK,GAAE,KAAKM,GAAE,KAAK,KAAKA,EAAE,CAA6B,GAA5BI,GAAED,GAAE,wBAAiCC,IAAN,MAAS,GAASA,GAAE,QAAR,KAAe,CAACA,GAAEA,GAAE,OAAO,MAAMJ,CAAC,UAAUI,GAAED,GAAE,SAAoB,OAAOC,IAAlB,UAAgC,OAAOA,IAAlB,SAAoB,CAACA,GAAEsmJ,EAAEtmJ,EAAC,EAAE,MAAMJ,CAAC,CAACI,GAAE,IAAI,CAAC,OAAMA,IAAN,MAASD,GAAE,GAAG+1L,GAAG,eAAen2L,EAAC,GAAUK,GAAE,OAAO,CAAC,IAAjB;AAAA,IAAqB0rK,IAAG;AAAA,GAAMA,IAAG1rK,IAAGD,GAAE61L,GAAE71L,GAAE,QAAQ,EAAEH,GAAEA,GAAE,KAAKV,GAAQA,IAAN,MACpeA,KAD6e,+BAC3em2L,GAAGz1L,EAAC,EAAiCV,KAA/B,8BAAoDU,KAAlB,gBAAoB,+BAA+BV,GAAE,KAAK,MAAM,KAAK,CAAC,aAAaA,GAAE,KAAKS,GAAE,SAASI,GAAE,WAAW,EAAE,QAAQD,GAAE,OAAOR,EAAC,CAAC,EAAE,KAAK,oBAAoB,GAAUosK,EAAC,EAAS9rK,CAAC,GAAC,EAAG82L,GAAG,CAAC,eAAe,SAAS92L,EAAE,CAACA,EAAE,IAAI22L,GAAG32L,EAAE,EAAE,EAAE,GAAG,CAAC,OAAOA,EAAE,KAAK,GAAQ,CAAC,QAAC,CAAQA,EAAE,SAAS,CAAC,EAAE,qBAAqB,SAASA,EAAE,CAACA,EAAE,IAAI22L,GAAG32L,EAAE,EAAE,EAAE,GAAG,CAAC,OAAOA,EAAE,KAAK,GAAQ,CAAC,QAAC,CAAQA,EAAE,QAAO,CAAE,CAAC,EAAE,mBAAmB,UAAU,CAAC,MAAM,MAAMF,EAAE,GAAG,CAAC,CAAE,EAAE,yBAAyB,UAAU,CAAC,MAAM,MAAMA,EAAE,GAAG,CAAC,CACjhB,EAAE,QAAQ,SAAS,EAAE,OAAAi3L,GAAeD,GAAG,SAASA,6CClD9CE,GAAA,QAAiBz3L,IAAA,6CCCnB,IAAI03L,GAAoB5wK,GACtBoyF,MAACqW,GAAA,CAAS,GAAGzoG,EACX,SAAAoyF,MAAC,QAAK,EAAE,iKAAgK,EAC1K,EAEFw+E,GAAmBtxF,GAAKsxF,EAAgB,EACxCA,GAAiB,YAAc,mBAC/BA,GAAiB,QAAU,UAE3B,MAAAC,GAAeD,GCTf,IAAIE,GAAsB9wK,GACxBoyF,MAACqW,GAAA,CAAS,GAAGzoG,EACX,SAAAoyF,MAAC,QAAK,EAAE,8IAA8I,EACxJ,EAEF0+E,GAAsBxxF,GAAKwxF,EAAmB,EAC9CA,GAAoB,YAAc,sBAClCA,GAAoB,QAAU,UAE9B,MAAAC,GAAeD,GCTf,IAAIE,GAAYhxK,GACdoyF,MAACqW,GAAA,CAAS,GAAGzoG,EACX,SAAAoyF,MAAC,KAAE,GAAG,gBAAgB,OAAO,OAAO,YAAY,IAAI,KAAK,OAAO,SAAS,UACvE,SAAAqU,OAAC,KACC,GAAG,QACH,UAAU,oHACV,SAAS,UACT,OAAO,UACP,YAAY,cAEZ,UAAArU,MAAC,QACC,EAAE,+JACF,GAAG,SACH,UAAU,qFAEZA,MAAC,QACC,EAAE,uPACF,GAAG,SACH,UAAU,qFACZ,EACF,EACF,EACF,EAEF4+E,GAAY1xF,GAAK0xF,EAAS,EAC1BA,GAAU,YAAc,YACxBA,GAAU,QAAU,UAEpB,MAAAC,IAAeD,GCbTprE,IAAS/S,IAAU,CACvB,KAAM,CACJ,QAASA,EAAM,QAAQ,CAAC,EACxB,KAAM,EACN,QAAS,OACT,cAAe,SACf,SAAU,QAEZ,QAAS,CACP,KAAM,EACN,UAAWA,EAAM,QAAQ,CAAC,GAE5B,MAAO,CACL,SAAU,WACV,OAAQ,IACR,MAAO,IACP,aAAc,MACd,WAAY,GAAG0kB,GAAK1kB,EAAM,QAAQ,QAAQ,KAAM,EAAG,CAAC,GACpD,OAAQ,OAER,6BAA8B,CAC5B,UAAW,eAEb,UAAW,CACT,SAAU,WACV,IAAK,GACL,KAAM,GACN,MAAO,IACP,OAAQ,IACR,QAAS,QACT,QAAS,MACT,aAAc,MACd,gBAAiBA,EAAM,IAAI,OAAO,MACpC,EAEF,WAAY,CACV,SAAU,WACV,IAAK,EACL,KAAM,EACN,OAAQ,EACR,MAAO,IACP,OAAQ,IACR,QAAS,OACT,cAAe,SACf,WAAY,SACZ,eAAgB,UAElB,MAAO,CACL,SAAU,WACV,MAAO,IACP,OAAQ,IACR,KAAM,+BAER,QAAS,CACP,KAAM,gCAER,SAAU,CACR,OAAQ,MACR,WAAYA,EAAM,IAAI,OAAO,MAC7B,SAAU,WACV,KAAM,MACN,gBAAiB,SAEjB,MAAO,EACP,WAAY,IAEd,IAAK,CACH,KAAM,0BACN,aAAc,MACd,OAAQ,cAAcA,EAAM,QAAQ,QAAQ,IAAI,GAChD,MAAO,IACP,OAAQ,IACR,SAAU,WACV,IAAK,EACL,KAAM,GAER,KAAM,GACN,OAAQ,CACN,aAAc,MACd,OAAQ,cAAcA,EAAM,QAAQ,QAAQ,IAAI,GAChD,MAAO,IACP,OAAQ,IACR,SAAU,WACV,IAAK,EACL,KAAM,EACN,UAAW,iBACX,KAAM,2BAER,MAAO,CACL,MAAO,OACP,cAAeA,EAAM,QAAQ,CAAC,EAC9B,UAAWA,EAAM,QAAQ,CAAC,GAE5B,aAAc,CACZ,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,UAAWA,EAAM,QAAQ,CAAC,EAC1B,aAAcA,EAAM,QAAQ,CAAC,GAE/B,kBAAmB,CACjB,OAAQ,KAAKA,EAAM,QAAQ,CAAC,CAAC,MAE/B,WAAY,CACV,SAAU,IAEZ,SAAU,CACR,MAAOA,EAAM,IAAI,OAAO,QAE1B,WAAY,CACV,WAAY,OACZ,OAAQ,OACR,QAASA,EAAM,QAAQ,EAAG,EAC1B,OAAQ,CAACA,EAAM,QAAQ,EAAG,EAC1B,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,OAAQ,UACR,aAAc,CACZ,OAAQ,cACV,EAEF,QAAS,CACP,SAAU,WACV,MAAOA,EAAM,IAAI,OAAO,OACxB,UAAWA,EAAM,QAAQ,CAAC,EAC1B,WAAY,OACZ,YAAa,OACb,WAAY,WACZ,UAAW,SACX,MAAO,IACP,OAAQ,IAEV,aAAc,CACZ,SAAU,WACV,IAAK,EACL,KAAM,KAER,UAAW,CACT,SAAU,WACV,MAAO,GACP,IAAK,IACL,SAAU,IAEZ,WAAY,CACV,QAAS,OACT,eAAgB,SAChB,WAAY,WACZ,aAAcA,EAAM,QAAQ,CAAC,GAE/B,OAAQ,CACN,UAAWA,EAAM,QAAQ,CAAC,EAC1B,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,sBAAuB,CACrB,YAAaA,EAAM,QAAQ,CAAC,EAC9B,EAEF,YAAa,CACX,OAAQ,KAAKA,EAAM,QAAQ,CAAC,CAAC,MAE/B,YAAa,CACX,SAAU,IAEZ,OAAQ,CACN,MAAO,QAET,YAAa,CACX,QAAS,OAEb,GAEMq+E,GAAW,CAAC,CAAE,WAAAC,EAAY,QAAAC,CAAA,IAAeD,EAAaC,EAAW,IAEjEjiC,IAAO,CAAC,CACZ,QAAA55G,EACA,QAAAi4F,EACA,gBAAAuzC,EACA,MAAA/zC,EACA,qBAAAqkD,EACA,qBAAAC,EACA,kBAAAC,EACA,kBAAAC,EACA,SAAA1qE,EACA,MAAAjU,CACF,IACE4T,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAA68D,MAACoU,IAAoB,KAAMu6D,GAAmB,CAAC/zC,GAAS,CAACQ,EAAS,EAClE/mB,OAAC,OAAI,UAAWlxE,EAAQ,QACtB,UAAAkxE,OAAC,OAAI,UAAWlxE,EAAQ,MACtB,UAAAkxE,OAAC,OAAI,UAAWlxE,EAAQ,WACtB,UAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAO,SAAAlpC,EAAG,kCAAkC,EAAE,EACrE4rB,MAACsd,GAAA,CAAiB,KAAK,MACpB,SAAAsd,SAAUy7C,GAAA,CAAM,MAAOz7C,EAAM,0BAA2B,EAC3D,GACF,EAEAvmB,OAAC,OACC,UAAWR,GAAW1wE,EAAQ,MAAO,CACnC,CAACA,EAAQ,OAAO,EAAG27I,GAAS1jD,EAAQ,KAAK,GAAK,GAC/C,EAED,UAAAp7B,MAAC,OACC,UAAW6T,GAAW1wE,EAAQ,IAAK,CACjC,CAACA,EAAQ,KAAK,EAAG27I,GAAS1jD,EAAQ,KAAK,GAAK,GAC7C,EACD,MAAO,CACL,UAAW,UAAU,KAAK,KAAM0jD,GAAS1jD,EAAQ,KAAK,EAAI,IAAO,GAAG,CAAC,OACvE,GAEFp7B,MAAC,OACC,UAAW6T,GAAW1wE,EAAQ,KAAM,CAClC,CAACA,EAAQ,MAAM,EAAG27I,GAAS1jD,EAAQ,KAAK,GAAK,GAC9C,GACH,IAEDA,EAAQ,MAAM,QAAU,GACvB,MAAM,KAAK,MAAMA,EAAQ,MAAM,OAAO,EAAE,MAAM,EAAE,IAAIroI,GAClDitG,MAAC,OACC,UAAW78D,EAAQ,SACnB,MAAO,CACL,UAAW,UAAU,KAAK,KAAM,IAAMi4F,EAAQ,MAAM,QAAWroI,CAAC,CAAC,OACnE,EAEH,GACL,EAEAshH,OAAC,OAAI,UAAWlxE,EAAQ,MACtB,UAAA68D,MAACsd,IAAiB,KAAK,MAAM,MAAM,SAChC,SAAAlpC,EAAG,kCAAkC,EACxC,EACAigC,OAAC,OAAI,UAAWlxE,EAAQ,aACtB,UAAA68D,MAAC,UACC,KAAK,SACL,UAAW78D,EAAQ,WACnB,QAASg8I,EACT,SAAU/jD,EAAQ,MAAM,iBACxB,aAAYhnD,EAAG,8CAA+C,CAC5D,GAAI,kCACJ,QAAS,GACT,KAAM,6DACP,EAED,SAAA4rB,MAAC0+E,GAAA,CACC,MAAM,UACN,UAAW7qE,GAAW1wE,EAAQ,WAAY,CACxC,CAACA,EAAQ,QAAQ,EAAGi4F,EAAQ,MAAM,iBACnC,EACD,cAAY,QACd,GAEFp7B,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,kBAAmB,YAAU,SAC1E,SAAAi4F,EAAQ,MAAM,QACjB,EACAp7B,MAAC,UACC,KAAK,SACL,UAAW78D,EAAQ,WACnB,QAASi8I,EACT,aAAYhrG,EAAG,8CAA+C,CAC5D,GAAI,mCACJ,QAAS,GACT,KAAM,6DACP,EAED,SAAA4rB,MAACw+E,IAAiB,MAAM,UAAU,UAAWr7I,EAAQ,WAAY,cAAY,OAAO,GACtF,EACF,EACCi4F,EAAQ,MAAM,wBACZ,OAAI,UAAWj4F,EAAQ,QACtB,UAAA68D,MAAC4+E,IAAA,CAAU,UAAWz7I,EAAQ,UAAW,cAAY,OAAO,EAC5D68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,UAAWn6E,EAAQ,aACvD,SAAAixC,EAAG,0CAA0C,EAChD,GACF,SAEC2hE,YAAA,CACC,UAAA/1C,MAACsd,GAAA,CACC,UAAWn6E,EAAQ,WACnB,MAAM,SACN,KAAK,MACL,wBAAyB,CACvB,OAAQixC,EAAG,yCAA0C,CACnD,OAAQirG,GAAe,qBACrBhrE,OAACirE,IAAc,MAAA7+E,EAAc,cAE3BT,MAACsd,GAAA,CAAiB,KAAK,MACpB,SAAA8d,GAAWp7B,MAACq2E,GAAA,CAAM,MAAOj7C,EAAQ,MAAM,yBAA0B,EACpE,EAAmB,KAErB,EACF,CACD,EACH,SAED2U,GAAA,EAAQ,EACT17B,OAAC,OAAI,UAAWlxE,EAAQ,OACtB,UAAA68D,MAACsd,GAAA,CAAiB,KAAK,MACpB,SAAAlpC,EAAG,oCAAoC,EAC1C,EACA4rB,MAAC,UACC,KAAK,SACL,UAAW78D,EAAQ,WACnB,QAAS87I,EACT,SAAU7jD,EAAQ,MAAM,gBACxB,aAAYhnD,EAAG,8CAA+C,CAC5D,GAAI,sCACJ,QAAS,GACT,KAAM,6DACP,EAED,SAAA4rB,MAAC0+E,GAAA,CACC,MAAM,UACN,UAAW7qE,GAAW1wE,EAAQ,YAAa,CACzC,CAACA,EAAQ,QAAQ,EAAGi4F,EAAQ,MAAM,gBACnC,EACD,cAAY,QACd,GAEFp7B,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,YAAa,YAAU,SACpE,SAAAi4F,EAAQ,MAAM,WACjB,EACAp7B,MAAC,UACC,KAAK,SACL,UAAW78D,EAAQ,WACnB,QAAS+7I,EACT,SAAU9jD,EAAQ,MAAM,gBACxB,aAAYhnD,EAAG,8CAA+C,CAC5D,GAAI,uCACJ,QAAS,GACT,KAAM,6DACP,EAED,SAAA4rB,MAACw+E,GAAA,CACC,MAAM,UACN,UAAW3qE,GAAW1wE,EAAQ,YAAa,CACzC,CAACA,EAAQ,QAAQ,EAAGi4F,EAAQ,MAAM,gBACnC,EACD,cAAY,QACd,EACF,EACF,GACF,GAEJ,GACF,EACAp7B,MAAC8T,GAAA,CACC,KAAK,QACL,QAASY,EACT,UAAWvxE,EAAQ,OACnB,SAAU,CAACi4F,GAAWuzC,EAEtB,SAAAt6D,OAACiJ,IAAiB,KAAK,MAAM,UAAS,GAAC,UAAWn6E,EAAQ,YACvD,UAAAixC,EAAG,mCAAmC,EAAE,IAEzC4rB,MAACq2E,GAAA,CAAM,MAAOj7C,EAAQ,gBAAiB,GACzC,GACF,EACF,EAGFmkD,IAAel8E,GAAWmQ,GAAM,EAAEsK,GAAUi/B,GAAI,CAAC,EClWjD,MAAM+8B,WAAchhG,EAAM,SAAU,CAApC,kCAKEtiB,GAAA,oBAAe,IAAM,CACnB,KAAM,CAAE,aAAA6rC,EAAc,QAAAD,CAAA,EAAY,KAAK,MACvC,KAAK,MAAM,kBAAkBC,EAAcD,EAAS,EAAI,CAC1D,GAEA5rC,GAAA,6BAAwB,IAAM,CAC5B,KAAK,MAAM,iBACb,GAEAA,GAAA,6BAAwB,IAAM,CAC5B,KAAK,MAAM,iBACb,GAEAA,GAAA,gCAA2B,IAAM,CAC/B,KAAK,MAAM,oBACb,GACAA,GAAA,gCAA2B,IAAM,CAC/B,KAAK,MAAM,oBACb,GAtBA,mBAAoB,CAClB,KAAK,MAAM,qBACb,CAsBA,QAAS,CACP,KAAM,CAAE,MAAAokE,EAAO,QAAAQ,EAAS,gBAAAuzC,EAAiB,aAAAtsE,EAAc,QAAAD,EAAS,WAAAqD,GAAe,KAAK,MAEpF,OACEzF,MAACs8C,GAAA,CACC,MAAOloE,EAAG,kCAAkC,EAC5C,YAAa,IAAMqxB,EAAWpB,GAAS,oBAAoB,EAAG,CAAE,aAAAhC,EAAc,QAAAD,EAAS,EAEvF,SAAApC,MAAC+8C,IAAA,CACC,gBAAA4xB,EACA,MAAA/zC,EACA,QAAAQ,EACA,SAAU,KAAK,aACf,kBAAmB,KAAK,sBACxB,kBAAmB,KAAK,sBACxB,qBAAsB,KAAK,yBAC3B,qBAAsB,KAAK,0BAC7B,EAGN,CACF,CAEA0+C,GAAM,UAAY,GAElB,MAAM/oF,IAAkB,KAAO,IAE/ByuF,IAAejlH,GACbggH,GACA1sB,GACAr5D,GACAzD,IACA,CACE,oBAAAuhF,GACA,gBAAAO,IACA,gBAAAC,IACA,mBAAAC,IACA,mBAAAC,IACA,kBAAA9E,GACA,WAAAzoE,EAAA,CACF,CACC,EAAEq0E,EAAK,EC/EJtmE,IAAS/S,IAAU,CACvB,aAAc,CACZ,QAAS,KAAKA,EAAM,QAAQ,CAAC,CAAC,MAAMA,EAAM,QAAQ,CAAC,CAAC,MAEtD,UAAW,CACT,QAASA,EAAM,QAAQ,CAAC,EACxB,WAAY,EACZ,cAAeA,EAAM,QAAQ,CAAC,EAC9B,UAAW,SACX,SAAU,GAEZ,OAAQ,CACN,QAASA,EAAM,QAAQ,CAAC,EACxB,WAAYA,EAAM,IAAI,OAAO,eAC7B,OAAQ,GAEV,oBAAqB,CACnB,MAAO,OACP,WAAY,QAEd,qBAAsB,CACpB,MAAO,SAET,OAAQ,CACN,MAAO,OACP,UAAWA,EAAM,QAAQ,CAAC,GAE5B,qBAAsB,CACpB,MAAOA,EAAM,IAAI,OAAO,OAE1B,YAAa,CACX,MAAO,QACP,WAAYA,EAAM,QAAQ,EAAG,EAEjC,GAKMs8C,IAAO,CAAC,CAAE,gBAAA4xB,EAAiB,QAAAvzC,EAAS,MAAAR,EAAO,SAAAlmB,EAAU,QAAAvxE,KAEvDkxE,OAACv7B,EAAM,SAAN,CACC,UAAAknB,MAACoU,GAAA,CAAoB,KAAMu6D,CAAA,CAAiB,EAC3C,CAAChmK,EAAMiyH,CAAK,GACXvmB,OAACv7B,EAAM,SAAN,CACC,UAAAknB,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,aAC7C,SAAAixC,EAAG,0CAA0C,EAChD,EACA4rB,MAACm3E,GAAA,CACC,MAAAv8C,EACA,QAAAQ,EACA,KAAM+7C,GAAU,KAAK,UACrB,QAAS,CAAE,KAAMh0I,EAAQ,UAAW,MAAOA,EAAQ,MAAM,GAE3DkxE,OAAC,OAAI,UAAWlxE,EAAQ,OACtB,UAAAkxE,OAAC,OAAI,UAAU,mBACb,UAAArU,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,oBAC7C,SAAAixC,EAAG,6CAA6C,EACnD,EACA4rB,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,qBAC9C,SAAA68D,MAACq2E,GAAA,CAAM,MAAOj7C,EAAQ,gBAAiB,EACzC,GACF,EACAp7B,MAAC8T,GAAA,CACC,UAAW3wE,EAAQ,OACnB,QAASuxE,EACT,SAAUi6D,GAAmBvqJ,GAAQg3G,EAAQ,KAAK,GAAKA,EAAQ,OAAS,EAExE,SAAA/mB,OAACiJ,GAAA,CACC,KAAK,MACL,UAAU,OACV,UAAWn6E,EAAQ,qBAElB,UAAAixC,EAAG,oCAAoC,QACvCiiG,GAAA,CAAM,MAAOj7C,EAAQ,gBAAiB,UAAWj4F,EAAQ,YAAa,IACzE,EACF,EACF,GACF,GAEJ,EAIJs8I,IAAep8E,GAAWmQ,GAAM,EAAEupC,GAAI,EC5EtC,MAAM2iC,WAAmB5mG,EAAM,SAAU,CAAzC,kCAKEtiB,GAAA,kBAAa,IAAM,CACjB,KAAK,MAAM,kBAAkB,KAAK,MAAM,aAAc,KAAK,MAAM,QAAS,EAAI,CAChF,GANA,mBAAoB,CAClB,KAAK,MAAM,uBACb,CAMA,QAAS,CACP,KAAM,CAAE,MAAAokE,EAAO,QAAAQ,EAAS,gBAAAuzC,EAAiB,aAAAtsE,EAAc,QAAAD,EAAS,WAAAqD,GAAe,KAAK,MAEpF,OACEzF,MAACs8C,GAAA,CACC,MAAOloE,EAAG,mCAAmC,EAC7C,YAAa,IAAMqxB,EAAWpB,GAAS,oBAAoB,EAAG,CAAE,aAAAhC,EAAc,QAAAD,EAAS,EAEvF,SAAApC,MAAC+8C,IAAA,CACC,gBAAA4xB,EACA,MAAA/zC,EACA,QAAAQ,EACA,SAAU,KAAK,YACjB,EAGN,CACF,CAEAskD,GAAW,UAAY,GAEvB,MAAM3uF,IAAkB,CAACzlF,EAAOsC,KAAW,IAE3C+xK,IAAeplH,GACbggH,GACA1sB,GACAr5D,GACAzD,IACA,CACE,sBAAAwhF,GACA,kBAAArE,GACA,WAAAzoE,EAAA,CACF,CACD,EAAEi6E,EAAU,EC5DPhzJ,IAAMphB,GAASA,EAAM,SAAS,kBAEvBs0K,GAAuBrhJ,GAAe,CAAC7R,GAAG,EAAGmzJ,GACpDl3K,EAAMk3K,CAAiB,EAClB,KAGFA,EAAkB,MAC1B,ECTYC,GAAoB,CAC/B,gBAAiB,+BACnB,EAEapM,IAAmB,CAC9BrxE,EACA2vE,EACA52C,EACAR,IAEA/9F,GAAaijJ,GAAkB,gBAAiB,CAC9C,aAAAz9E,EACA,cAAA2vE,EACA,QAAA52C,EACA,MAAAR,CACF,CAAC,ECfGmlD,GAAc,CAClB,KAAM,CACJ,IAAK,6CACL,IAAK,wCACL,IAAK,2CACL,IAAK,2CACL,IAAK,2CACL,IAAK,2CACL,IAAK,oCACL,IAAK,qCACL,IAAK,qCACL,IAAK,oCACL,IAAK,kCACL,IAAK,gCACL,IAAK,mCACL,IAAK,8BACL,IAAK,2CAGT,EClBMC,IAAW,CACf,wBAAyB,CAAC7uK,EAAQ8uK,EAAeC,EAAYC,KACpD,CACL,SAAU96C,GAAa,SACvB,KAAM,OACN,KAAM,CACJ,eAAgB86C,EAAM,eACtB,cAAAF,EACA,WAAAC,EACA,OAAQC,EAAM,OACd,KAAMA,EAAM,KACZ,OAAAhvK,EACA,YAAagvK,EAAM,YACnB,iBAAkBA,EAAM,kBAE1B,aAAcJ,GAAY,OAK9B,UAAW,CAACE,EAAe9uK,EAAQgvK,KAC1B,CACL,SAAU96C,GAAa,SACvB,KAAM,OACN,KAAM,CACJ,eAAgB86C,EAAM,eACtB,cAAAF,EACA,OAAA9uK,EACA,OAAQgvK,EAAM,OACd,KAAMA,EAAM,MAEd,aAAcJ,GAAY,MAGhC,EC/BaK,GAAkB3uK,GAAoB,iBAAiB,EAEvD4uK,IAA0B,CAACt7B,EAAau7B,EAAoBH,IACvE9uK,GACE+uK,GACAJ,IAAS,wBACPj7B,EAAY,OACZA,EAAY,GACZu7B,EAAmB,GACnBH,CAAA,EAEF,CACE,YAAAp7B,EACA,mBAAAu7B,EACA,MAAAH,CAAA,CAEJ,EAcWI,GAAc,CACzB,YAAa,sBACb,cAAe,wBACf,gBAAiB,0BACjB,mBAAoB,6BACpB,MAAO,eACT,EAEaC,IAAYP,GAAiBpjJ,GAAa0jJ,GAAY,YAAa,CAAE,cAAAN,EAAe,EAEpFQ,IAAoB,CAACR,EAAe16K,IAC/Cs3B,GAAa0jJ,GAAY,cAAe,CAAE,cAAAN,EAAe,OAAA16K,EAAQ,EAEtDm7K,IAAsB,CAACT,EAAe16K,IACjDs3B,GAAa0jJ,GAAY,gBAAiB,CAAE,cAAAN,EAAe,OAAA16K,EAAQ,EAExDo7K,IAAwBV,GACnCpjJ,GAAa0jJ,GAAY,mBAAoB,CAAE,cAAAN,EAAe,EAEnDW,GAAaX,GAAiBpjJ,GAAa0jJ,GAAY,MAAO,CAAE,cAAAN,EAAe,ECtCtFY,IAAqBV,IACzBA,EAAM,sBAAwBz9D,GAAWy9D,EAAM,aAAc,gBAAgB,EAEtEA,GAGHW,IAA2BX,IAC/BA,EAAM,4BAA8Bz9D,GAAWy9D,EAAM,aAAc,UAAU,EAEtEA,GAGHl+C,IAAek+C,IACnBA,EAAM,qBAAuBloD,GAAwBkoD,EAAM,MAAM,EAE1DA,GAGHp+C,IAAeo+C,GAAS,CAC5B,MAAMrhG,EAAQ,CACZ,CAACosE,GAAc,OAAO,EAAG,OACzB,CAACA,GAAc,MAAM,EAAG,SACxB,CAACA,GAAc,SAAS,EAAG,SAC3B,CAACA,GAAc,QAAQ,EAAG,aAGtB7+J,EAAO,CACX,CAAC6+J,GAAc,OAAO,EAAGlrB,GAAW,OAAO,QAC3C,CAACkrB,GAAc,MAAM,EAAGlrB,GAAW,OAAO,MAC1C,CAACkrB,GAAc,SAAS,EAAGlrB,GAAW,OAAO,MAC7C,CAACkrB,GAAc,QAAQ,EAAGlrB,GAAW,OAAO,MAG9C,OAAAmgD,EAAM,YAAcrhG,EAAMqhG,EAAM,MAAM,GAAK/rG,EAAG,sBAAsB,EACpE+rG,EAAM,WAAa9zL,EAAK8zL,EAAM,MAAM,EAEpCA,EAAM,gBAAkBA,EAAM,SAAWj1B,GAAc,QACvDi1B,EAAM,eAAiBA,EAAM,SAAWj1B,GAAc,OACtDi1B,EAAM,kBAAoBA,EAAM,SAAWj1B,GAAc,UACzDi1B,EAAM,iBAAmBA,EAAM,SAAWj1B,GAAc,SAEjDi1B,CACT,EAEMv9B,IAAau9B,GAAS,CAC1B,MAAMrhG,EAAQ,CACZ,CAACksE,GAAY,IAAI,EAAG52E,EAAG,0BAA2B,CAChD,GAAI,UACJ,QAAS,GACT,KAAM,qBACP,EACD,CAAC42E,GAAY,WAAW,EAAG52E,EAAG,iCAAkC,CAC9D,GAAI,iBACJ,QAAS,GACT,KAAM,4BACP,EACD,CAAC42E,GAAY,gBAAgB,EAAG52E,EAAG,sCAAuC,CACxE,GAAI,oBACJ,QAAS,GACT,KAAM,iCACP,EACD,CAAC42E,GAAY,wBAAwB,EAAG52E,EAAG,qCAAsC,CAC/E,GAAI,uBACJ,QAAS,GACT,KAAM,gCACP,GAGH,OAAA+rG,EAAM,UACJrhG,EAAMqhG,EAAM,IAAI,GAChB/rG,EAAG,uBAAwB,CACzB,GAAI,MACJ,QAAS,GACT,KAAM,sBACP,EAEI+rG,CACT,EAEM59C,IAAe,CAAC49C,EAAOvyK,IAAU,CACrC,MAAMmzK,EAAqB,CAAE,GAAI,EAAG,KAAM,SAE1C,GAAI,CAAC/vJ,GAAYpjB,EAAM,YAAY,GAAK,CAACjF,EAAMw3K,EAAM,MAAM,EAAG,CAC5D,MAAMh0C,EAAcv+H,EAAM,aACvB,OAAOu+H,GACCA,EAAY,KAAOg0C,EAAM,OAAO,aACxC,EACA,QAEEnvJ,GAAYm7G,CAAW,GAG1B11E,GAAO,KACL,oBACA,eAAe0pH,EAAM,OAAO,aAAa,wBAAwBA,EAAM,EAAE,IAE3EA,EAAM,YAAcY,GANpBZ,EAAM,YAAch0C,CAQxB,MACEg0C,EAAM,YAAcY,EAGtB,OAAOZ,CACT,EAOM5kD,IAAoB/pH,GACpBgqB,KAEKhqB,EAGF,CACL,GAAGA,EACH,iBAAkB,CAChB,YAAagpB,GAAgBuqE,GAAuBV,GAAS,oBAAoB,CAAC,CAAC,GAErF,YAAa02B,GAAA,CAA2B,EAI/BimD,GAAcpoD,GACzBioD,IACAC,IACA7+C,IACAF,IACA6gB,IACArgB,IACAhH,GACF,EAEa0lD,GAAeloD,GAAoBioD,EAAW,ECnJrDE,GAAgB51K,GAASA,EAAM,SAAS,MACxC61K,GAA0B,CAAC71K,EAAOsC,IACtCA,EAAM,YAAcA,EAAM,YAAY,GAAKA,EAAM,cAEtCwzK,IAAyB,IACpC7iJ,GAAe,CAAC4iJ,GAAyBD,EAAa,EAAG,CAACjB,EAAeoB,IAAe,CACtF,GAAI14K,EAAM04K,CAAU,EAClB,OAAO,KAETA,EAAaA,EAAW,OAExB,MAAMC,EAAYD,EAAWpB,CAAa,EAC1C,GAAIt3K,EAAM24K,CAAS,EACjB,OAAO,KAGT,IAAInB,EAAQmB,EAAU,KAEtB,OAAI34K,EAAMw3K,CAAK,EACN,KAGFa,GAAYb,CAAK,CAC1B,CAAC,EAEUoB,IAA8B,IACzChjJ,GAAe,CAAC4iJ,GAAyBD,EAAa,EAAG,CAACjB,EAAeoB,IAAe,CACtF,MAAMC,EAAYD,EAAW,IAAIpB,CAAa,EAC9C,GAAIt3K,EAAM24K,CAAS,EACjB,OAAO,KAGT,MAAM7wL,EAAQ6wL,EAAU,IAAI,OAAO,EACnC,OAAI34K,EAAMlY,CAAK,EACN,KAGFA,EAAM,MACf,CAAC,EAEU+wL,IAAqB,IAChCjjJ,GAAe,CAAC4iJ,GAAyBD,EAAa,EAAG,CAACjB,EAAeoB,IAAe,CACtF,MAAMC,EAAYD,EAAW,IAAIpB,CAAa,EAC9C,GAAIt3K,EAAM24K,CAAS,EACjB,MAAO,GAGT,MAAMjjE,EAAaijE,EAAU,IAAI,YAAY,EAC7C,OAAI34K,EAAM01G,CAAU,EACX,GAGFA,CACT,CAAC,EAEUojE,IAA4B,IACvCljJ,GAAe,CAAC4iJ,GAAyBD,EAAa,EAAG,CAACjB,EAAeoB,IAAe,CACtF,MAAMC,EAAYD,EAAW,IAAIpB,CAAa,EAC9C,GAAIt3K,EAAM24K,CAAS,EACjB,OAAO,KAGT,IAAInB,EAAQmB,EAAU,IAAI,MAAM,EAEhC,OAAI34K,EAAMw3K,CAAK,EACN,KAGFmB,EAAU,IAAI,oBAAoB,CAC3C,CAAC,EChDH,MAAMI,WAAuB5oG,EAAM,SAAU,CAC3C,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEPA,EAAM,cAAgB,MAAQA,EAAM,QAAU,MAChDA,EAAM,UAAUA,EAAM,YAAY,EAAE,CAExC,CAEA,0BAA0BmrE,EAAW,CACnC,MAAMnrE,EAAQ,KAAK,MAGjBmrE,EAAU,cAAgB,OACzBA,EAAU,QAAU,MACrBnrE,EAAM,cAAgB,MACpBA,EAAM,YAAY,KAAOmrE,EAAU,YAAY,KAEjDA,EAAU,UAAUA,EAAU,YAAY,EAAE,CAEhD,CAEA,QAAS,CACP,KAAM,CACJ,SAAA8R,EACA,kBAAA41F,EACA,oBAAAC,EACA,sBAAAC,EACA,YAAA57B,EACA,MAAAo7B,EACA,WAAAwB,EACA,eAAAC,EACA,mBAAAC,EACA,GAAG9hF,CAAA,EACD,KAAK,MAET,OAAOlV,EAAS,CACd,eAAgBtlF,GAAUk7K,EAAkB17B,EAAY,GAAIx/I,CAAM,EAClE,iBAAkBA,GAAUm7K,EAAoB37B,EAAY,GAAIx/I,CAAM,EACtE,mBAAoBA,GAAUo7K,EAAsB57B,EAAY,EAAE,EAClE,YAAao7B,IAAU,KACvB,MAAAA,EACA,YAAAp7B,EACA,WAAA48B,EACA,eAAAC,EACA,mBAAAC,EACA,GAAG9hF,CAAA,CACJ,CACH,CACF,CAEA2hF,GAAe,UAAY,CAIzB,OAAQ1oG,EAAU,OAAO,WAEzB,YAAaA,EAAU,OAAO,WAG9B,SAAUA,EAAU,KAAK,WAMzB,MAAOA,EAAU,OAAO,WAExB,WAAYA,EAAU,OAEtB,mBAAoBA,EAAU,IAChC,EAEA,MAAMq/B,IAAsB,IAAM,CAChC,MAAMypE,EAAqBV,IAAA,EACrBW,EAA0BR,IAAA,EAC1BK,EAAiBJ,IAAA,EACjBQ,EAAwBP,IAAA,EAU9B,MARwB,CAACn2K,EAAOsC,KACvB,CACL,MAAOk0K,EAAmBx2K,EAAOsC,CAAK,EACtC,WAAYm0K,EAAwBz2K,EAAOsC,CAAK,EAChD,eAAgBg0K,EAAet2K,EAAOsC,CAAK,EAC3C,mBAAoBo0K,EAAsB12K,EAAOsC,CAAK,GAI5D,EAEAq0K,GAAeztF,GACb6jB,IACA,CACE,kBAAAooE,IACA,oBAAAC,IACA,sBAAAC,IACA,UAAAH,GAAA,CAEJ,EAAEkB,EAAc,ECvHVQ,IAAe,CAAC,CAAE,MAAA35L,EAAO,WAAA45L,EAAY,QAAAh6G,EAAS,KAAA58E,EAAO,MACzDy0G,MAAC,OACC,QAAA73B,EACA,UAAWorC,GAAK,oCAAoChoH,CAAI,GAAI,CAC1D,kBAAmB42L,EACnB,mBAAoBA,EACpB,aAAc,CAACA,CAAA,CAChB,EAED,SAAA9tE,OAAC,OAAI,UAAU,wBACZ,UAAA9rH,EAAM,KAET,EACF,ECNIirH,IAAS/S,IAAU,CACvB,QAAS,CACP,UAAW,SACX,QAAS,QAEX,YAAa,CACX,MAAOA,EAAM,QAAQ,QAAQ,KAC7B,UAAWA,EAAM,QAAQ,CAAC,EAC1B,UAAW,UAEb,gBAAiB,CACf,QAAS,QACT,UAAWA,EAAM,QAAQ,CAAC,EAE9B,GAEM2hF,IAA0B,CAAC,GAAI,GAAI,GAAI,EAAE,EAEzCC,IAAwB,CAAC,CAC7B,iBAAAC,EAAmBF,IACnB,WAAAG,EAAa,GACb,QAAAp/I,EACA,mBAAAq/I,EAAqB,GACrB,OAAArxK,EACA,YAAA4zI,CACF,IACE/kD,MAAC0hF,GAAA,CAAe,OAAAvwK,EAAgB,YAAA4zI,EAC7B,UAAC,CAAE,MAAAo7B,EAAO,YAAAsC,EAAa,iBAAAC,EAAkB,eAAAC,EAAgB,mBAAAC,CAAA,WACvD,OACC,UAAA5iF,MAAC,OAAI,UAAWuT,GAAK,8BAA+BpwE,EAAQ,OAAO,EAChE,SAAAm/I,EAAiB,IAAI/8K,GAAU,CAC9B,MAAM48K,EAAaM,EAActC,EAAM,SAAW56K,EAAS,EAC3D,OACEy6F,MAACkiF,IAAA,CAEC,MAAO38K,EACP,KAAMg9K,EACN,WAAAJ,EACA,QAAS,IAAOA,EAAaO,EAAiBn9K,CAAM,EAAIo9K,EAAep9K,CAAM,GAJxEA,CAAA,CAOX,CAAC,EACH,EACCi9K,SACE,OAAI,GAAG,cAAc,UAAWr/I,EAAQ,YACtC,SAAEs/I,GAAetC,EAAM,mBAStBngF,MAAC,OAAI,UAAU,4CACb,SAAAA,MAACq5E,GAAA,CACC,UAAS,GACT,QAAQ,OACR,IAAK,EAGL,IAAKh+I,KAAW,GAAK,IACrB,MAAO,SAAS8kJ,EAAM,OAAQ,EAAE,EAChC,SAAU,CAACxzK,EAAOpkB,IAAUo6L,EAAep6L,CAAK,EAChD,WAAY,CACV,aAAcy3G,MAACwb,GAAA,CAAe,SAAS,MAAM,aAAC,EAChD,GAEJ,EAtBAxb,MAAC,QAAK,UAAW78D,EAAQ,gBAAiB,QAASy/I,EAChD,WAAG,6BAA8B,CAChC,GAAI,gBACJ,QAAS,GACT,KAAM,+DACP,EACH,CAgBA,CAEJ,GAEJ,EAEJ,EAGFC,IAAex/E,GAAWmQ,GAAM,EAAE6uE,GAAqB,EC/EjDjtG,IAAU9uE,GAAU,OAAO,EAAE,EAEtBw8K,GAAe,CAACx3K,EAAQ8pE,IAASppE,IAAW,CACvD,OAAQA,EAAO,MACb,KAAKu0K,GAAY,YACf,OAAOj1K,EAAM,MACX,CAACU,EAAO,aAAa,EACrB1F,GAAU,OAAO,CACf,WAAY,GACZ,MAAO,KACP,KAAM2kJ,GAAA,CAAe,CACtB,GAGL,KAAKs1B,GAAY,MACf,OAAOj1K,EAAM,MACX,CAACU,EAAO,aAAa,EACrB1F,GAAU,OAAO,CACf,WAAY,GACZ,MAAO,KACP,KAAM2kJ,GAAA,CAAe,CACtB,GAGL,KAAKm1B,GAAgB,QACnB,OAAO90K,EAAM,QAAQ,CAACU,EAAO,KAAK,YAAY,EAAE,EAAG,CACjD,WAAY,GACZ,MAAO,KACP,QAAS,GACV,EAEH,KAAKo0K,GAAgB,QACnB,OAAO90K,EACJ,QAAQ,CAACU,EAAO,KAAK,YAAY,EAAE,EAAG,CACrC,WAAY,GACZ,MAAO,KACP,QAAS,GACV,EACA,QAAQ,CAACA,EAAO,KAAK,YAAY,GAAI,MAAM,EAAG,CAC7C,GAAGA,EAAO,SACV,iBAAkBA,EAAO,aAAa,SAAW,IAClD,EAEL,KAAKo0K,GAAgB,QACnB,OAAA90K,EAAQA,EAAM,QAAQ,CAACU,EAAO,KAAK,YAAY,EAAE,EAAG,CAClD,WAAY,GACZ,MAAOA,EAAO,MACf,EACGA,EAAO,MAAM,OACfV,EAAQA,EAAM,QAAQ,CAACU,EAAO,KAAK,YAAY,EAAE,EAAG,CAClD,KAAMA,EAAO,MAAM,KACpB,GAEIV,EAET,KAAKi1K,GAAY,cACf,OAAOj1K,EAAM,MAAM,CAACU,EAAO,cAAe,OAAQ,QAAQ,EAAGA,EAAO,MAAM,EAE5E,KAAKu0K,GAAY,gBACf,OAAOj1K,EAAM,MAAM,CAACU,EAAO,cAAe,OAAQ,QAAQ,EAAG,CAAC,EAEhE,KAAKu0K,GAAY,mBACf,OAAOj1K,EAAM,MAAM,CAACU,EAAO,cAAe,OAAQ,oBAAoB,EAAG,EAAI,EAE/E,QACE,OAAOV,CAAA,CAEb,EC5EMy3K,IAAoB,CACxB,KAAM,CACJ,IAAK,mCACL,IAAK,mCACL,QACE,6EAEN,ECLMC,GAAiB,CACrB,gBAAiB7xK,IACR,CACL,SAAUk0H,GAAa,cACvB,KAAM,MACN,OAAQ,CACN,OAAAl0H,CAAA,CACF,GAIJ,eAAgB,CAACA,EAAQ8uK,EAAej5C,EAAe,MAC9C,CACL,SAAU3B,GAAa,aACvB,KAAM,MACN,OAAQ,CACN,OAAAl0H,EACA,cAAA8uK,CAAA,EAEF,MAAO,CACL,aAAAj5C,CAAA,CACF,GAIJ,eAAgB,CAAC71H,EAAQ4zI,KAAiB,CACxC,SAAU1f,GAAa,aACvB,KAAM,MACN,OAAQ,CACN,OAAAl0H,EACA,cAAe4zI,EAAY,IAE7B,KAAMA,EACN,aAAcg+B,IAAkB,MAEpC,EChCaE,IAAoB,CAC/B,MAAO,qBACT,EAIaC,GAA8BzxK,GAAoB,0BAA0B,EAE5E0xK,GAAwBhyK,GACnCE,GAAoB6xK,GAA6BF,GAAe,gBAAgB7xK,CAAM,EAAG,CACvF,OAAAA,CACF,CAAC,EAMUiyK,GAA6B3xK,GAAoB,yBAAyB,EAE1E4xK,GAAuB,CAAClyK,EAAQmyK,EAAWt8C,EAAe,KACrE31H,GACE+xK,GACAJ,GAAe,eAAe7xK,EAAQmyK,EAAWt8C,CAAY,EAC7D,CACE,OAAA71H,EACA,UAAAmyK,EACA,aAAAt8C,CAAA,CAEJ,EAMWu8C,IAA0B9xK,GAAoB,yBAAyB,ECD9E+xK,IAAkCpsH,GACtCo8G,GAA2B,QAC3B,CAAC,CAAE,KAAArnL,EAAM,OAAA6f,EAAQ,SAAA8wB,KAAe,CAC9B,MAAMulE,EAAer2F,EAAO,KAAK,aAC3Bo2F,EAAUp2F,EAAO,KAAK,MAAM,GAElC,OAAA7f,EAAK6f,CAAM,EAEX8wB,EAAS21I,IAAc,EACvB31I,EAAS22I,IAAkB,EAE3B32I,EAAS2oE,GAAWpB,GAAS,iBAAiB,EAAG,CAAE,aAAAhC,EAAc,QAAAD,CAAA,CAAS,CAAC,EACpEhrC,GAAiB,gBAC1B,CACF,EAEMqsH,IAA+BrsH,GACnCk8G,GAAkB,QAClB,CAAC,CAAE,KAAAnnL,EAAM,OAAA6f,EAAQ,SAAA8wB,KAAe,CAC9B,MAAMulE,EAAer2F,EAAO,KAAK,aAC3Bo2F,EAAUp2F,EAAO,KAAK,MAAM,GAElC,OAAA7f,EAAK6f,CAAM,EAEX8wB,EAAS21I,IAAc,EACvB31I,EAAS22I,IAAkB,EAE3B32I,EAAS2oE,GAAWpB,GAAS,iBAAiB,EAAG,CAAE,aAAAhC,EAAc,QAAAD,CAAA,CAAS,CAAC,EACpEhrC,GAAiB,gBAC1B,CACF,EAEMssH,IAA6BtsH,GACjCgpH,GAAgB,QAChB,CAAC,CAAE,SAAAtjJ,EAAU,KAAA3wC,EAAM,OAAA6f,MACjB8wB,EAASqmJ,GAAsB,IAAI,CAAC,EAEpCh3L,EAAK6f,CAAM,EAEX8wB,EAAS2oE,GAAWpB,GAAS,qBAAqB,CAAC,CAAC,EAC7CjtC,GAAiB,iBAE5B,EAEMusH,IAA2BvsH,GAC/B0oH,GAAkB,gBAClB,CAAC,CAAE,OAAA9zK,EAAQ,SAAA8wB,KAAe,CACxB,KAAM,CAAE,aAAAulE,EAAc,cAAA2vE,EAAe,MAAAp3C,CAAA,EAAU5uH,EACzCovH,EAAU,CACd,GAAGpvH,EAAO,QACV,oBAAqB,GACrB,iBAAkB,CAChB,YAAawuB,GACXuqE,GAAuBV,GAAS,sBAAsB,EAAG,CACvD,QAASu2B,EAAM,GACf,aAAAv4B,CAAA,CACD,EACH,CACF,EAGFvlE,EACE42I,IAAiB1nK,EAAO,aAAcgmK,EAAe52C,EAASpvH,EAAO,KAAK,EAE9E,CACF,EAOM43K,IAA+BxsH,GACnC,CAACk8G,GAAkB,QAASE,GAA2B,OAAO,EAC9D,CAAC,CAAE,OAAAxnK,EAAQ,SAAA8wB,EAAU,KAAA3wC,KAAW,CAC9B,GAAI2lL,GAAoC9lK,CAAM,GAAKA,EAAO,MAAM,KAAK,iBACnE,OAAA7f,EAAK6f,CAAM,EACJ8wB,EACL2oE,GAAWpB,GAAS,sBAAsB,EAAG,KAAM,CAAE,KAAM,iBAAkB,GAG/EytE,GAAoC9lK,CAAM,GAC1CA,EAAO,MAAM,KAAK,QAAQ,uBAE1B8wB,EAASyoE,GAAmBv5F,EAAO,MAAM,KAAK,QAAQ,qBAAqB,CAAC,CAEhF,CACF,EAOM63K,IAA6BzsH,GACjC,CAACgpH,GAAgB,OAAO,EACxB,CAAC,CAAE,OAAAp0K,EAAQ,SAAA8wB,EAAU,KAAA3wC,KAAW,CAC9B,GAAI2lL,GAAoC9lK,CAAM,GAAKA,EAAO,MAAM,KAAK,QAAQ,iBAC3E,OAAA8wB,EAAS2oE,GAAWpB,GAAS,sBAAsB,EAAG,KAAM,CAAE,KAAM,QAAS,CAAC,EACvEl4G,EAAK6f,CAAM,EAElB8lK,GAAoC9lK,CAAM,GAC1CA,EAAO,MAAM,KAAK,QAAQ,uBAE1B8wB,EAASyoE,GAAmBv5F,EAAO,MAAM,KAAK,QAAQ,qBAAqB,CAAC,CAEhF,CACF,EAMM83K,IAA8B1sH,GAClC65G,GAAsB,QACtB,CAAC,CAAE,OAAAjlK,EAAQ,SAAA8wB,EAAU,KAAA3wC,KAAW,CAG9B,MAAM43L,EAAU/3K,EAAO,SAAS,SAAS,cAAgB,EACnDg4K,EAAY,CAACD,EAEnB,GAAIA,GAGE/3K,EAAO,SAAS,SAAS,SAAWqkK,GAAc,KACpD,OAAAlkL,EAAK6f,CAAM,EAEX8wB,EAAS8jJ,IAAY,EAErB9jJ,EAAS2oE,GAAWpB,GAAS,qBAAqB,CAAC,CAAC,EAC7CjtC,GAAiB,iBAG5B,GAAI4sH,GAGEh4K,EAAO,SAAS,SAAS,SAAWqkK,GAAc,KACpD,OAAAlkL,EAAK6f,CAAM,EAEX8wB,EAAS21I,IAAc,EACvB31I,EAAS22I,IAAkB,EAE3B32I,EACE2oE,GAAWpB,GAAS,iBAAiB,EAAG,CACtC,aAAcr4F,EAAO,KAAK,aAC1B,QAASA,EAAO,KAAK,QACtB,GAEIorD,GAAiB,gBAG9B,CACF,EAEM6sH,IAA8B7sH,GAClC65G,GAAsB,QACtB,CAAC,CAAE,OAAAjlK,EAAQ,SAAA8wB,KAAe,CACxB,GAAI9wB,EAAO,MAAO,CAChB,MAAM+3K,EAAU,CAAC/3K,EAAO,MAAM,QAG1B+3K,EACFjnJ,EAAS2oE,GAAWpB,GAAS,aAAa,CAAC,CAAC,EAH5B,CAAC0/E,GAKjBjnJ,EACE2oE,GAAWpB,GAAS,iBAAiB,EAAG,CACtC,aAAcr4F,EAAO,KAAK,aAC1B,QAASA,EAAO,KAAK,QACtB,EAGP,CACF,CACF,EAEMk4K,IAAiB9sH,GACrB,CACE42G,GAAsB,QACtBI,GAAuB,QACvBV,GAA8B,QAC9BG,GAA6B,QAC7BE,GAAe,QACfO,GAAyB,QACzBrkB,GAAoB,SAEtB,CAAC,CAAE,OAAAj+I,EAAQ,SAAA2qD,EAAU,SAAA75B,KAAe,CAClC+6F,GAAY7rH,EAAO,SAAS,QAAQ,CACtC,CACF,EAEMm4K,IAA+B/sH,GACnC42G,GAAsB,QACtB,CAAC,CAAE,OAAAhiK,EAAQ,SAAA2qD,EAAU,SAAA75B,KAAe,CAGlC,GAFA+6F,GAAY7rH,EAAO,SAAS,QAAQ,EAEhCA,EAAO,KAAK,YAAa,CAC3B,MAAMovH,EAAUi0C,GAAW14G,GAAU,EAC/BytH,EAAgB,WAAWhpD,EAAQ,MAAM,EAE3CpvH,EAAO,SAAS,mBAAqBo4K,EACvCtnJ,EACEqlE,GAA6B,CAC3B,aAAcn2F,EAAO,KAAK,aAC1B,QAASA,EAAO,KAAK,QACrB,OAAQovH,EAAQ,gBAChB,mBAAoBnD,GAAwBjsH,EAAO,SAAS,kBAAkB,EAC/E,GAGH8wB,EACE2oE,GAAWpB,GAAS,iBAAiB,EAAG,CACtC,aAAcr4F,EAAO,KAAK,aAC1B,QAASA,EAAO,KAAK,QACtB,EAGP,CACF,CACF,EAEaq4K,IAAyB,CACpCJ,IACAH,IACAL,IACAG,IACAF,IACAG,IACAF,IACAH,IACAU,IACAC,GACF,ECvQMG,IAAgB,CAAC,CAAE,QAAAC,EAAS,oBAAAC,EAAqB,MAAA1lG,EAAO,MAAAv2F,EAAO,SAAAsiG,CAAA,IACnEwpB,OAACv7B,EAAM,SAAN,CACE,UAAC0rG,EAQAxkF,MAACsd,GAAA,CAAiB,KAAMinE,EAAU,MAAQ,MAAQ,SAAAzlG,EAAM,EAPxDkhB,MAACs3C,GAAA,CACC,UAAS,GACT,MAAA/uJ,EACA,QAASy3G,MAAC0lB,GAAA,CAAM,MAAM,UAAU,EAChC,MAAO1lB,MAACsd,GAAA,CAAiB,KAAMinE,EAAU,MAAQ,MAAQ,SAAAzlG,CAAA,CAAM,IAKlE+L,CAAA,EACH,ECDI2oB,IAAS/S,IAAU,CACvB,UAAW,CACT,KAAM,GAER,QAAS,CACP,OAAQA,EAAM,QAAQ,EAAG,CAAC,GAE5B,aAAc,CACZ,OAAQA,EAAM,QAAQ,EAAG,CAAC,GAE5B,IAAK,CACH,MAAOA,EAAM,IAAI,OAAO,QAE1B,KAAM,CACJ,eAAgB,YAEpB,GAEA,MAAMgkF,YAAuB3rG,EAAM,aAAc,CAAjD,kCACEtiB,GAAA,aAAQ,CAEN,cAAei6G,GAAsB,YACrC,mBAAoB,KAGtBj6G,GAAA,oBAAe7uE,GAAK,CAClB,MAAMqqL,EAAgB,SAASrqL,EAAE,OAAO,MAAO,EAAE,EACjD+wF,GAAa,SAASA,GAAa,OAAO,uBAAwB,CAChE,YAAas5F,CAAA,CACd,EAED,KAAK,SAAS,CAAE,cAAAA,EAAe,CACjC,GAEA,QAAS,CACP,KAAM,CACJ,QAAA7uI,EACA,KAAA6Z,EACA,WAAA0gF,EACA,iBAAAimB,EACA,iBAAA+gC,EAAmB,GACnB,YAAAC,EACA,SAAAjwE,CAAA,EACE,KAAK,MAGHkwE,EAAsB,GACtBC,EAA0BnnD,EAAaA,EAAW,wBAA0B,GAElF,IAAIonD,EAAgB,GACpB,OAAQ,KAAK,MAAM,eACjB,KAAKrU,GAAsB,YACzBqU,EAAgB,CAACD,EACjB,MACF,KAAKpU,GAAsB,IACzBqU,EAAgB,GAChB,KAEA,CAMJ,OAJAA,EAAgBA,GAAiB,CAACJ,EAI7B1nI,GAAM,YAKR+4F,YAAA,CACC,UAAA/1C,MAAC,OAAI,UAAW78D,EAAQ,UACtB,SAAAkxE,OAAC0wE,GAAA,CAAW,MAAO,KAAK,MAAM,cAAe,SAAU,KAAK,aAC1D,UAAA/kF,MAACskF,IAAA,CACC,oBAAqB,CAACM,EACtB,MACElnD,EAAW,cACPtpD,EAAG,mCAAmC,EACtCA,EAAG,yCAAyC,EAElD,QAAS,KAAK,MAAM,gBAAkBq8F,GAAsB,YAC5D,MAAOA,GAAsB,YAE7B,SAAAzwE,MAAC,KAAE,UAAW78D,EAAQ,aACnB,SAAAu6F,EAAW,cACRtpD,EAAG,mDAAmD,EACtDA,EAAG,yDAAyD,EAClE,IAGDwwG,EAEAA,EAQAA,CAA4D,EAC/D,EACF,GAEE,CAAC,KAAK,MAAM,oBACZ,CAACC,IACCxwE,OAACv7B,EAAM,SAAN,CACE,WAAC10D,GAAQu/H,GAAkB,cAAc,MAAM,GAC9C3jD,MAACsd,GAAA,CACC,KAAK,MACL,UAAWn6E,EAAQ,IACnB,wBAAyB,CACvB,OAAQixC,EAAG,2BAA4B,CACrC,UAAW,aAAajxC,EAAQ,IAAI,WAAWwgH,EAAiB,aAAa,MAAM,+CACnF,QAAS,OACV,EACH,GAIJ3jD,MAAC8T,GAAA,CACC,KAAK,QACL,UAAU,gCACV,QAAS,IAAMY,EAAS,KAAK,MAAM,aAAa,EAChD,SAAU,CAACowE,EAEV,SAAAH,CAAA,EACH,EACF,GAEN,EAhEO3kF,MAAC+T,GAAA,CAAa,KAAI,GAAC,CAkE9B,CACF,CAEA,MAAMhjB,QAA4B,IAE5Bi0F,IAAyBzqH,GAC7B8oC,GAAWmQ,GAAM,EACjBhf,GACEzD,GAAA,CAEJ,EAAE0zF,GAAc,EAEhBQ,GAAer3K,GACboyF,MAACglF,IAAA,CACE,GAAGp3K,CAAA,CACN,EC9JIs3K,IAAwB,CAAC,CAAE,aAAAC,EAAc,KAAAp/G,EAAM,QAAAlT,KACnDwhD,OAAClR,GAAA,CACC,KAAAp9B,EACA,QAAAlT,EACA,kBAAgB,4BAChB,mBAAiB,kCAEjB,UAAAmtC,MAACkkB,GAAA,CAAY,GAAG,4BAA6B,SAAAihE,EAAa,iBAAiB,EAC3EnlF,MAACmkB,IACC,SAAAnkB,MAAColF,GAAA,CAAkB,GAAG,kCACnB,SAAAhxG,EAAG,uCAAuC,EAC7C,EACF,EACA4rB,MAACqlF,GAAA,CACC,SAAArlF,MAAC8T,GAAA,CAAO,QAASjhD,EAAS,UAAS,GAAC,MAAM,UAAU,cAEpD,EACF,GACF,EAGIyyH,IAAgB,CAAC,CAAE,aAAAH,EAAc,iBAAA1R,KACrCzzE,MAAC+W,GAAA,CACC,KAAMA,GAAW,KAAK,SACtB,MAAOouE,EACP,QAAS,CACP,QAAS,IAAM1R,EAAA,CAAiB,CAClC,CACF,EAGI8R,IAAa,CAAC,CAAE,aAAAJ,EAAc,iBAAA1R,KAAuB,CACzD,KAAM,CAAC1tG,EAAMi1E,CAAO,EAAIliE,EAAM,SAAS,EAAI,EAErC0sG,EAAgB,IAAM,CAC1B/R,EAAA,EACAz4B,EAAQ,EAAK,CACf,EAEA,OAAKmqC,EAGDA,EAAa,SAEbnlF,MAACklF,IAAA,CACC,aAAAC,EACA,iBAAA1R,EACA,KAAA1tG,EACA,QAASy/G,CAAA,GAINxlF,MAACslF,IAAA,CAAc,aAAAH,EAA4B,iBAAA1R,CAAA,CAAoC,EAZ/E,IAcX,EChDM3zC,IAAYC,GAAWt/B,IAAU,CACrC,KAAM,CACJ,QAAS,OAER,UAAW,QAEd,IAAK,CACH,QAASA,EAAM,QAAQ,CAAC,EACxB,OAAQ,aAAaA,EAAM,QAAQ,QAAQ,IAAI,GAC/C,YAAa,EACb,WAAY,cACZ,MAAOA,EAAM,QAAQ,KAAK,QAC1B,OAAQ,UACR,KAAM,EACN,QAAS,OACT,eAAgB,SAChB,WAAY,SACZ,kBAAmB,CACjB,QAAS,aAAaA,EAAM,QAAQ,QAAQ,IAAI,GAChD,cAAe,EACf,OAAQ,EACV,EAEF,YAAa,CACX,WAAYA,EAAM,QAAQ,QAAQ,KAClC,MAAOA,EAAM,IAAI,OAAO,MACxB,WAAY,OAEZ,uBAAwB,CACtB,MAAOA,EAAM,IAAI,OAAO,OAE1B,8BAA+B,CAC7B,MAAOA,EAAM,IAAI,OAAO,MAC1B,EAEF,UAAW,CACT,OAAQ,aAAaA,EAAM,QAAQ,QAAQ,IAAI,GAE/C,4DAA6D,CAC3D,OAAQ,kBAEV,oBAAqB,CACnB,QAAS,EACT,UAAW,SACX,SAAU,IAEZ,4BAA6B,CAC3B,OAAQ,EACV,CAEJ,EAAE,EAEIglF,IAAY,CAAC,CAAE,oBAAAC,EAAqB,SAAAv1D,EAAU,QAAAhtF,EAAS,aAAAwiJ,EAAc,YAAAxxG,KACzE6rB,MAAC,OAAI,UAAWuT,GAAKpwE,EAAQ,IAAKA,EAAQ,UAAW,CAAE,CAACA,EAAQ,WAAW,EAAIuiJ,CAAA,CAAsB,EACnG,SAAA1lF,MAACq5E,GAAA,CACC,YAAAllG,EACA,IAAK,EACL,IAAKwxG,EAAe,IAAMtqJ,GAAA,EAAW,GAAK,IAC1C,MAAOqqJ,EAAsB,EAAIA,EAAsB,GACvD,SAAU,CAAC/9L,EAAGY,IAAU4nI,EAAS5nI,CAAK,EACtC,WAAY,CACV,mBAAeizH,GAAA,CAAe,SAAS,MAAO,SAAAmqE,EAAe,IAAM5tD,IAAkB,CAAE,EACzF,CACF,EACF,EAGI6tD,IAAM,CAAC,CAAE,QAAAziJ,EAAS,MAAA27C,EAAO,SAAA2mC,EAAU,QAAAt9C,KACvC63B,MAAC,UACC,KAAK,SACL,QAAA73B,EACA,eAAcs9C,EACd,UAAWlS,GAAKpwE,EAAQ,IAAK,CAAE,CAACA,EAAQ,WAAW,EAAGsiF,EAAU,EAEhE,SAAAzlB,MAACsd,IAAiB,KAAK,MAAM,UAAU,OAAO,UAAS,GAAE,SAAAx+B,CAAA,CAAM,EACjE,EAII+mG,IAAQ,CAAC1R,EAAYE,IAClB,KAAK,MAAMF,EAAaE,CAAa,EAAIA,EAG5CyR,IAAS,CAAC,CAAE,KAAAnT,EAAM,WAAAoT,EAAY,YAAAC,EAAa,aAAAL,EAAc,kBAAAM,EAAmB,WAAAC,KAAiB,CACjG,MAAM/iJ,EAAU28F,IAAA,EACV,CAAC4lD,EAAqBS,CAAsB,EAAIrtG,EAAM,SAAS,CAAC,EAChE,CAACstG,EAAaC,CAAc,EAAIvtG,EAAM,SAAS,EAAK,EAEpDwtG,EAAiBxtG,EAAM,YAAY,CAACytG,EAAWC,IAAgB,CACnET,EAAWQ,CAAS,EACpBJ,EAAuBK,CAAW,CACpC,EAAG,CAACT,CAAU,CAAC,EAETU,EAAgC3tG,EAAM,YAAY,CAAC4tG,EAAYR,IAAe,CAClF,MAAMS,EAAcV,EAAoBS,EAAa,IACrD,OAAOb,IAAMc,EAAaT,CAAU,CACtC,EAAG,CAACD,CAAiB,CAAC,EAEtB,OAAAntG,EAAM,UACJ,IAAM,CACJ,GAAI,CAACstG,EAAa,CAGhB,IAAII,EAAc,KACdI,EAAwBZ,EAAY,KAAKa,GAAiBlU,KAAUgT,EAAec,EAA8BI,EAAc,MAAOX,CAAU,EAAIW,EAAc,MAAM,EACxKlU,EAAO,GAAK,CAACiU,IACfJ,EAAc,CAAE,MAAOb,EAAe,QAAQhT,EAAO,IAAMsT,GAAmB,QAAQ,CAAC,CAAC,EAAItT,CAAA,GAE9F,MAAMhmJ,EAAeq5J,EAAY,KAAKa,GAAiBA,EAAc,iBAAiB,EAChFC,EAAeF,GAAyBJ,GAAe75J,GAAgB,CAAE,MAAO,GAChF45J,EAAYZ,EAAec,EAA8BK,EAAa,MAAOZ,CAAU,EAAIY,EAAa,MAC9GT,EAAe,EAAI,EACnBC,EAAeC,EAAWC,GAAa,KAAK,CAC9C,CACF,EACA,CAACR,EAAaC,EAAmBN,EAAchT,EAAM8T,EAA+BP,EAAYI,EAAgBF,CAAW,GAI3H/xE,OAAC,OAAI,UAAWlxE,EAAQ,KACrB,UAAA6iJ,GAAeA,EAAY,IAAI,CAAC,CAAE,MAAAz9L,KAAY,CAE7C,IAAIk9H,EAAW,GACf,OAAKigE,IACHjgE,EAAWkgE,EAAgBhT,IAAS8T,EAA8Bl+L,EAAO29L,CAAU,EAAM39L,IAAUoqL,GAInG3yE,MAAC4lF,IAAA,CACC,QAAAziJ,EAEA,MAAOwiJ,EAAe,GAAGp9L,CAAK,KAAO0vI,GAAwB1vI,CAAK,EAClE,SAAAk9H,EAEA,QAAS,IAAM,CACb,MAAM8gE,EAAY9gE,EAAW,EAAIkgE,EAAec,EAA8Bl+L,EAAO29L,CAAU,EAAI39L,EAEnG+9L,EAAeC,EADK,CACiB,CACvC,GARK,OAAOh+L,CAAK,GAWvB,CAAC,EACDy3G,MAACylF,IAAA,CACC,oBAAAC,EACA,SAAUn9L,GAAS,CACjB,MAAMg+L,EAAYZ,EAAec,EAA8Bl+L,EAAO29L,CAAU,EAAI39L,EAEpF+9L,EAAeC,EADKh+L,CACiB,CACvC,EACA,QAAA46C,EACA,aAAAwiJ,EACA,YAAaK,GAAeA,EAAY,OAAS,EAAI5xG,EAAG,2BAA2B,EAAI,IACzF,EACF,CAEJ,EClKM0rD,IAAYC,GAAWt/B,IAAU,CACrC,KAAM,CAEJ,OAAQ,sBAEZ,EAAE,EAOIlF,IAAQvjG,GACL,KAAK,MAAMA,EAAI,GAAK,EAAI,IAG3B6tL,GAAQ,CAAC1R,EAAYE,IAClB94E,IAAM,KAAK,MAAM44E,EAAaE,CAAa,EAAIA,CAAa,EAG/D0S,IAAY,CAAC,CACjB,KAAApU,EACA,WAAAoT,EACA,kBAAAE,EACA,0BAAAe,EACA,WAAAd,CACF,IAAM,CACJ,MAAM/iJ,EAAU28F,IAAA,EACV,CAACsmD,EAAaC,CAAc,EAAIvtG,EAAM,SAAS,EAAK,EAE1DA,EAAM,UACJ,IAAM,CACJ,GAAI,CAACstG,EAAa,CAChB,GAAIzT,EAAO,EAEToT,EAAWpT,CAAI,MACV,CACL,MAAMsU,EAAmBpB,IACrBmB,GAA6B,GAAKf,EAAqB,IACzDC,CAAA,EAEFH,EAAWkB,CAAgB,CAC7B,CACAZ,EAAe,EAAI,CACrB,CACF,EACA,CAACJ,EAAmBG,EAAaY,EAA2Bd,EAAYH,EAAYpT,CAAI,GAI1F,MAAMuU,EAAWrB,GAAM,GAAMI,EAAmBC,CAAU,EACpDiB,EAAuB,QAASxU,EAAO,IAAOsT,GAAmB,SAAS,EAEhF,OACEjmF,MAAC,OAAI,UAAW78D,EAAQ,KACtB,SAAA68D,MAAConF,GAAA,CACC,IAAK,EACL,IAAKF,EACL,MAAOvU,EACP,SAAU,CAAChmK,EAAOtU,IAAa,CAC7B0tL,EAAW1tL,CAAQ,CACrB,EACA,MAAO,GACP,kBAAkB,KAClB,iBAAkB9P,GAAS,GAAG4+L,CAAoB,KAClD,KAAMjB,EACN,aAAY9xG,EAAG,0BAA0B,EACzC,iBAAkB7rF,GAAS,GAAG4+L,CAAoB,OAEtD,CAEJ,ECtEME,IAAO,CAAC,CAAE,KAAA1U,EAAM,WAAAoT,EAAY,aAAAuB,EAAc,kBAAArB,EAAmB,cAAA5R,KAC5DiT,EAGDA,EAAa,OAEbtnF,MAAC+mF,IAAA,CACC,KAAApU,EACA,WAAAoT,EACA,kBAAAE,EACA,0BAA2BqB,EAAa,oBAAoB,2BAA6B,EACzF,WAAYjT,GAAiB,MAK/Br0E,MAAC8lF,IAAA,CACC,KAAAnT,EACA,WAAAoT,EACA,kBAAAE,EACA,YAAaqB,EAAa,yBAAyB,eACnD,aAAcA,EAAa,yBAAyB,OAAShX,GAAc,WAC3E,WAAY+D,GAAiB,MApB1B,KCSL7gE,IAAS/S,IAAU,CACvB,KAAM,CACJ,QAASA,EAAM,QAAQ,CAAC,EACxB,QAAS,OACT,cAAe,SACf,KAAM,EACN,OAAQ,QAEV,mBAAoB,CAClB,QAAS,OACT,eAAgB,gBAChB,WAAY,SACZ,QAASA,EAAM,QAAQ,CAAC,GAE1B,QAAS,CACP,UAAW,SACX,UAAWA,EAAM,QAAQ,CAAC,EAC1B,YAAaA,EAAM,QAAQ,CAAC,EAC5B,aAAcA,EAAM,QAAQ,CAAC,GAE/B,QAAS,CACP,UAAWA,EAAM,QAAQ,CAAC,EAC1B,aAAcA,EAAM,QAAQ,CAAC,GAE/B,UAAW,CACT,QAAS,OACT,eAAgB,gBAChB,WAAY,SACZ,QAASA,EAAM,QAAQ,CAAC,GAE1B,cAAe,CACb,QAAS,OACT,cAAe,SACf,KAAM,EACN,SAAU,QAEZ,YAAa,CACX,QAAS,OAEb,GAEMs8C,IAAO,CAAC,CACZ,QAAA55G,EACA,aAAAgiJ,EACA,WAAA9mE,EACA,QAAA+c,EACA,cAAAmsD,EACA,iBAAA9T,EACA,WAAA/1C,EACA,iBAAAimB,EACA,WAAA+uB,EACA,KAAA11H,EACA,UAAAukC,CACF,IACE8yB,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAAkxE,OAAC,OAAI,UAAWlxE,EAAQ,mBACtB,UAAA68D,MAACsd,GAAA,CAAiB,KAAK,MACpB,SAAAlpC,EAAG,kDAAkD,EACxD,EACA4rB,MAACsd,IAAiB,KAAK,MACrB,eAAC+4D,GAAA,CAAM,MAAOj7C,EAAQ,sBAAuB,EAC/C,GACF,EAEAp7B,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,QAC7C,SAAAixC,EAAG,sCAAsC,EAC5C,EAEA4rB,MAAC+vC,GAAA,CAAQ,UAAW5sG,EAAQ,QAAS,EAErCkxE,OAAC,OAAI,UAAWlxE,EAAQ,cACrB,UAAAo+C,GAAW,OAAO,SAAS,cAAc,WAAam8C,GAAY,WACjErpB,OAACv7B,EAAM,SAAN,CACC,UAAAu7B,OAAC,OAAI,UAAWlxE,EAAQ,UACtB,UAAA68D,MAACsd,GAAA,CAAiB,KAAK,MACpB,SAAAlpC,EAAG,mCAAmC,EACzC,GACEmN,GAAW,OAAO,SAAS,cAAc,QACvCA,GAAW,OAAO,SAAS,cAAc,yBAAyB,OAAS+uF,GAAc,mBAE1FhzD,GAAA,CAAiB,KAAK,MACpB,SAAA2a,GAAwBmD,EAAQ,IAAI,EACvC,GAEJ,EACAp7B,MAACqnF,IAAA,CACG,KAAMjsD,EAAQ,KACd,kBAAmBA,EAAQ,OAC3B,WAAYu3C,GAAQD,EAAWC,CAAI,EACnC,aAAcpxF,GAAW,OAAO,SAAS,aACzC,cAAeA,GAAW,OAAO,SAAS,gBAC9Cye,MAAC+vC,GAAA,CAAQ,UAAW5sG,EAAQ,QAAS,GACvC,EAGF68D,MAACulF,IAAA,CACC,aAAAJ,EACA,iBAAA1R,CAAA,GAGFzzE,MAACoU,GAAA,CAAoB,KAAMiK,CAAA,CAAY,EAEvCre,MAACykF,GAAA,CACC,WAAApmE,EACA,SAAUkpE,EACV,WAAA7pD,EACA,iBAAAimB,EACA,KAAA3mG,EACA,mBACGsgE,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,UAAWn6E,EAAQ,YACvD,UAAAixC,EAAG,kCAAkC,EAAE,IAExC4rB,MAACq2E,GAAA,CAAM,MAAOj7C,EAAQ,sBAAuB,GAC/C,GAEJ,EACF,GACF,EAGFosD,IAAenkF,GAAWmQ,GAAM,EAAEupC,GAAI,ECnGtC,MAAM0qC,YAAgB3uG,EAAM,SAAU,CACpC,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAuBb4oD,GAAA,gCAA2Bi3E,GAA0B,CAEnD,GAAIA,EAAuB,OAASnZ,GAAS,OAAQ,CACnD,GAAIU,GAAA,GAAmB,KACrB,MAAO,GACT,GAAWyY,EAAuB,gBAAkB1X,GAAA,EAClD,MAAO,EAEX,SAAW0X,EAAuB,OAASnZ,GAAS,MAAO,CACzD,GAAIU,GAAA,GAAmB,KACrB,MAAO,GACT,GAAWc,GAAA,GAAwB,KACjC,MAAO,GACT,GAAW2X,EAAuB,gBAAkB1X,GAAA,EAClD,MAAO,EAEX,SAAW0X,EAAuB,OAASnZ,GAAS,eAAgB,CAClE,GAAIU,GAAA,GAAmB,KAGrB,MAAO,GACT,GAAWe,GAAA,GAAwB,KACjC,MAAO,EAEX,CACA,MAAO,EACT,GAEAv/D,GAAA,yBAAqBw7G,GAAkB,CACrC,KAAM,CAAE,aAAA3vE,EAAc,QAAA+4B,EAAS,MAAAR,CAAA,EAAU,KAAK,MAE9C,KAAK,MAAM,iBAAiBv4B,EAAc2vE,EAAe52C,EAASR,CAAK,CACzE,GArDO,KAAK,yBAAyBhtH,EAAM,UAAU,cAAc,IAE3DkoH,KAEFloH,EAAM,YAAYy2F,GAAS,UAAU,EAAG,KAAM,CAC5C,WAAY,OAAO,SAAS,WAC5B,aAAcz2F,EAAM,YAAY,GACjC,EAGDA,EAAM,YAAYy2F,GAAS,OAAO,EAAG,KAAM,CACzC,WAAY,OAAO,SAAS,WAC5B,aAAcz2F,EAAM,YAAY,GACjC,EAGP,CAEA,sBAAuB,CACvB,CAoCA,QAAS,CACP,KAAM,CACJ,QAAAwtH,EACA,aAAA+pD,EACA,cAAAuC,EACA,YAAA/uE,EACA,UAAA9F,EACA,6BAAAk9D,EACA,iBAAA0D,EACA,UAAAlyF,EACA,QAAA6gB,EACA,WAAAs7B,EACA,iBAAAimB,EACA,aAAAthD,EACA,WAAAoD,EACA,WAAAitE,EACA,kBAAAmN,EACA,mBAAApxB,CAAA,EACE,KAAK,MAET,MAAI,CAAC,KAAK,yBAAyBltE,EAAU,cAAc,GAAK,CAACktE,EACxD,KAIPzuD,MAACs8C,GAAA,CACC,MAAOloE,EACJgnD,EAAQ,OAASwC,GAAY,KAAO,kCAClCxC,EAAQ,OAASwC,GAAY,OAAS,oCACtCxC,EAAQ,OAASwC,GAAY,SAAW,qCAE7C,YAAa,IACXn4B,EACEpB,GACE+2B,EAAQ,OAASwC,GAAY,IACzB,qBACAxC,EAAQ,OAASwC,GAAY,MAC3B,gBACA,kBAER,CAAE,aAAAv7B,EAAc,QAAAD,CAAA,CAAQ,EAI5B,eAAC2R,GAAA,CAAa,KAAM,CAAC2pB,GAAc+wB,EAChC,aACCzuD,MAAC+8C,IAAA,CACC,UAAAx7D,EACA,WAAYwuF,EACZ,cAAA2X,EACA,YAAA/uE,EACA,UAAA9F,EACA,aAAAsyE,EACA,QAAA/pD,EACA,cAAe,KAAK,kBACpB,iBAAkBq4C,EAClB,KAAMoM,EACN,WAAAniD,EACA,iBAAAimB,EACA,WAAY+uB,CAAA,EACd,CAEJ,GAGN,CACF,CAEA,MAAM3hF,IAAkBzlF,IAAU,CAChC,oBAAqBm8H,GAAyB,EAC9C,6BAA8BsoC,IAA6BzkK,CAAK,EAChE,aAAcskK,GAAgBtkK,CAAK,EACnC,kBAAmBs0K,GAAqBt0K,CAAK,EAC7C,mBAAoBmjJ,GAAmBnjJ,CAAK,CAC9C,GAEAq8K,IAAeptH,GACb2uE,GACAqxC,GACA1sB,GACA/G,GACApC,GAAA,EACAlwD,GACAzD,IACA,CACE,iBAAA2iF,IACA,YAAA/tE,GACA,WAAAF,GACA,WAAAitE,IACA,iBAAAe,GACA,oBAAAplB,EAAA,CACF,CACD,EAAEo5B,GAAO,ECvLJj0E,IAAS/S,IAAU,CACvB,KAAM,CACJ,OAAQ,OACR,QAAS,OACT,WAAY,SACZ,eAAgB,UAElB,aAAc,CACZ,WAAY,eAEd,QAAS,CACP,aAAcA,EAAM,QAAQ,CAAC,EAEjC,GAEMs8C,IAAO,CAAC,CAAE,QAAA55G,CAAA,IACd68D,MAAC,OAAI,UAAW78D,EAAQ,KACtB,SAAAkxE,OAAC,OACC,UAAArU,MAACsd,GAAA,CAAiB,KAAM,IAAK,MAAM,SAAS,UAAWn6E,EAAQ,QAC5D,SAAAixC,EAAG,mCAAmC,EACzC,EACA4rB,MAAC+T,IAAa,KAAI,GAAC,QAAS,CAAE,aAAc5wE,EAAQ,aAAa,CAAG,GACtE,EACF,EAGFykJ,IAAevkF,GAAWmQ,GAAM,EAAEupC,GAAI,ECdtC,MAAM8qC,YAAgC/uG,EAAM,SAAU,CACpD,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEX,KAAM,CAAE,aAAAy0F,EAAc,QAAAD,CAAA,EAAYx0F,EAC5B40B,EAAU,CAAE,aAAA6/D,EAAc,QAAAD,CAAA,EAE1BsoE,EAAYnxI,GAAc,WAAW,EACvCmxI,IACFloI,EAAQ,cAAgBxxB,GAAqB,mBAAmB05J,CAAS,CAAC,GAGxE,CAAC/hK,EAAMiF,EAAM,WAAW,GAAK,CAACjF,EAAMiF,EAAM,YAAY,EAAE,EAC1DA,EAAM,gBAAgBA,EAAM,YAAY,GAAI40B,CAAO,EAEnD50B,EAAM,WAAWy2F,GAAS,iBAAiB,EAAG7hE,CAAO,CAEzD,CAEA,QAAS,CACP,KAAM,CAAE,WAAAk7F,GAAe,KAAK,MAE5B,OACE19B,MAACs8C,GAAA,CAAK,MAAO5e,EAAaA,EAAW,KAAO,GAAI,YAAW,GACzD,SAAA19B,MAAC+8C,IAAA,EAAK,EACR,CAEJ,CACF,CAEA,MAAMhsD,IAAkBzlF,IAAU,CAChC,YAAakkK,GAAelkK,CAAK,CACnC,GAEAw8K,IAAevtH,GACb2uE,GACFqxC,GACA1sB,GACEr5D,GAAQzD,IAAiB,CACzB,WAAA0U,GACA,gBAAAyrE,EAAA,CACD,CAAC,EAAE2W,GAAuB,ECrDrBE,GAAkBz8K,GAASA,EAAM,SAAS,aAC1C08K,GAAmB,CAAC18K,EAAOsC,IAAUA,EAAM,OAC3CuzK,GAA0B,CAAC71K,EAAOsC,IAAUA,EAAM,cAM3Cq6K,IAAgC,IAC3C1pJ,GACE,CAACypJ,GAAkB7G,GAAyB4G,EAAe,EAC3D,CAAC52K,EAAQ8uK,EAAeiI,IAAsB,CAC5C,MAAMC,EAAmBD,EAAkB,IAAI/2K,EAAQ,IAAI,EAC3D,GAAI,CAACxI,EAAMw/K,CAAgB,EAAG,CAC5B,MAAMC,EAAeD,EAAiB,IAAI,OAAQ,IAAI,EACtD,GAAI,CAACx/K,EAAMy/K,CAAY,EAAG,CACxB,MAAMrjC,EAAcqjC,EAAanI,CAAa,EAC9C,GAAI,CAACt3K,EAAMo8I,CAAW,EACpB,OAAOA,EAAY,UAEvB,CACF,CAEA,MAAO,EACT,CACF,EAMWsjC,IAAiC,IAC5C9pJ,GAAe,CAACypJ,GAAkBD,EAAe,EAAG,CAAC52K,EAAQ+2K,IAAsB,CACjF,MAAMC,EAAmBD,EAAkB,IAAI/2K,CAAM,EACrD,OAAIxI,EAAMw/K,CAAgB,EACjB,GAGFA,EAAiB,IAAI,aAAc,EAAK,CACjD,CAAC,EAmBUG,IAA0B,IACrC/pJ,GAAe,CAACypJ,GAAkBD,EAAe,EAAG,CAAC52K,EAAQ+2K,IAAsB,CACjF,MAAMC,EAAmBD,EAAkB,IAAI/2K,CAAM,EACrD,GAAIxI,EAAMw/K,CAAgB,EACxB,OAAO,KAGT,IAAIC,EAAeD,EAAiB,IAAI,MAAM,EAE9C,OAAIx/K,EAAMy/K,CAAY,EACb,MAGTA,EAAe,OAAO,KAAKA,CAAY,EAAE,IAAInI,GAAiBmI,EAAanI,CAAa,EAAE,IAAI,EAEvF/6B,GAAmBkjC,CAAY,EACxC,CAAC,EAOUG,IAAyB,IACpChqJ,GACE,CAACypJ,GAAkB7G,GAAyB4G,EAAe,EAC3D,CAAC52K,EAAQ8uK,EAAeiI,IAAsB,CAC5C,MAAMC,EAAmBD,EAAkB,IAAI/2K,CAAM,EACrD,GAAIxI,EAAMw/K,CAAgB,EACxB,OAAO,KAGT,IAAIC,EAAeD,EAAiB,IAAI,MAAM,EAE9C,GAAIx/K,EAAMy/K,CAAY,EACpB,OAAO,KAGT,IAAIrjC,EAAcqjC,EAAanI,CAAa,EAE5C,OAAIt3K,EAAMo8I,CAAW,EACZ,MAGTA,EAAcA,EAAY,KAEnBE,GAAkBF,CAAW,EACtC,CACF,EAQWyjC,IAAgC,IAC3CjqJ,GAAe,CAACypJ,GAAkBD,EAAe,EAAG,CAAC52K,EAAQ+2K,IAAsB,CACjF,MAAMC,EAAmBD,EAAkB,IAAI/2K,CAAM,EACrD,GAAIxI,EAAMw/K,CAAgB,EACxB,OAAO,KAGT,IAAIC,EAAeD,EAAiB,IAAI,MAAM,EAE9C,GAAIx/K,EAAMy/K,CAAY,EACpB,OAAO,KAGT,IAAIrjC,EAAcqjC,EAAa,OAAO,KAAKA,CAAY,EAAE,CAAC,CAAC,EAE3D,OAAIz/K,EAAMo8I,CAAW,EACZ,MAGTA,EAAcA,EAAY,KAEnBE,GAAkBF,CAAW,EACtC,CAAC,EAMgCruF,GAAqBprD,GAASA,EAAM,SAAS,iBAAiB,EC7HjG,MAAMm9K,WAA8B3vG,EAAM,SAAU,CAClD,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,GAGTA,EAAM,cACJsjB,GAAOtjB,EAAM,YAAY,GAAKsjB,GAAOtjB,EAAM,aAAa,CAAC,CAAC,IAC1D,CAACA,EAAM,yBAET,KAAK,qBAAqBA,CAAK,CAEnC,CAEA,0BAA0BmrE,EAAW,CACnC,MAAMnrE,EAAQ,KAAK,MACfmrE,EAAU,SAAWnrE,EAAM,QAAU,CAACA,EAAM,wBAC9C,KAAK,qBAAqBmrE,CAAS,CAEvC,CAEA,qBAAqBnrE,EAAO,CAC1BA,EAAM,sBAAsBA,EAAM,MAAM,CAC1C,CAEA,QAAS,CACP,KAAM,CAAE,uBAAA86K,EAAwB,aAAAN,EAAc,OAAAj3K,EAAQ,SAAA05E,EAAU,GAAGkV,CAAA,EAAe,KAAK,MAEvF,OAAOlV,EAAS,CACd,uBAAA69F,EACA,aAAAN,EAEA,YAAaA,GAAgBA,EAAa,OAAS,EAAIA,EAAa,CAAC,EAAI,KACzE,OAAAj3K,EACA,kBAAmB,IAAM,CACvB,KAAK,MAAM,WAAWkzF,GAAS,aAAa,CAAC,CAC/C,EACA,GAAGtE,CAAA,CACJ,CACH,CACF,CAEA0oF,GAAsB,UAAY,CAChC,sBAAuBzvG,EAAU,KAAK,WACtC,uBAAwBA,EAAU,KAClC,aAAcA,EAAU,MAGxB,SAAUA,EAAU,KAAK,UAC3B,EAEA,MAAMq/B,IAAsB,IAAM,CAChC,MAAM0vE,EAAkBO,IAAA,EAClBK,EAA4BH,IAAA,EAC5BE,EAAyBL,IAAA,EAa/B,MAXwB,CAAC/8K,EAAOsC,IAAU,CACxC,MAAMg7K,EAAqBD,EAA0Br9K,EAAOsC,CAAK,EAEjE,MAAO,CACL,mBAAAg7K,EAEA,YAAaA,EACb,aAAcb,EAAgBz8K,EAAOsC,CAAK,EAC1C,uBAAwB86K,EAAuBp9K,EAAOsC,CAAK,EAE/D,CAEF,EAEAi7K,GAAer0F,GACb6jB,IACA,CACE,sBAAA8qE,GACA,WAAA19E,EAAA,CAEJ,EAAEgjF,EAAqB,EClFvB,MAAMK,WAA6BhwG,EAAM,SAAU,CACjD,oBAAqB,EACf,KAAK,MAAM,cAAgB,MAAQ,KAAK,MAAM,eAChD,KAAK,gBAAgB,KAAK,KAAK,CAEnC,CAEA,0BAA0BC,EAAW,CAC/BA,EAAU,gBAAkB,KAAK,MAAM,eACzC,KAAK,gBAAgBA,CAAS,CAElC,CAEA,gBAAgBnrE,EAAO,CACrBA,EAAM,qBAAqBA,EAAM,OAAQA,EAAM,cAAeA,EAAM,YAAY,CAClF,CAEA,QAAS,CACP,KAAM,CAAE,sBAAAm7K,EAAuB,YAAAhkC,EAAa,OAAA5zI,EAAQ,SAAA05E,EAAU,GAAGkV,CAAA,EAAe,KAAK,MAErF,OAAOlV,EAAS,CACd,sBAAAk+F,EACA,YAAAhkC,EACA,OAAA5zI,EACA,kBAAmB,IAAM,CACvB,KAAK,MAAM,WAAWkzF,GAAS,aAAa,CAAC,CAC/C,EACA,kBAAmB,IAAM,CACvB,KAAK,gBAAgB,KAAK,KAAK,CACjC,EACA,GAAGtE,CAAA,CACJ,CACH,CACF,CAEA+oF,GAAqB,UAAY,CAC/B,qBAAsB9vG,EAAU,KAAK,WACrC,sBAAuBA,EAAU,KACjC,YAAaA,EAAU,OACvB,aAAcA,EAAU,KAGxB,SAAUA,EAAU,KAAK,UAC3B,EAEA8vG,GAAqB,aAAe,CAClC,aAAc,EAChB,EAEA,MAAMzwE,IAAsB,IAAM,CAChC,MAAM2wE,EAAiBT,IAAA,EACjBQ,EAAwBd,IAAA,EAS9B,MAPwB,CAAC38K,EAAOsC,KACvB,CAEL,YAAao7K,EAAe19K,EAAOsC,CAAK,EACxC,sBAAuBm7K,EAAsBz9K,EAAOsC,CAAK,GAI/D,EAEAq7K,IAAez0F,GACb6jB,IACA,CACE,qBAAAgrE,GACA,WAAA59E,EAAA,CAEJ,EAAEqjF,EAAoB,EC5EhBI,IAAc,CAAC,CAAE,KAAAl1E,EAAM,kBAAAm1E,KAC1Bn1E,EACChU,MAAC8T,GAAA,CACC,MAAM,UACN,QAAQ,YACR,MAAO,CACL,MAAO,QAET,QAASq1E,EAER,WAAG,6BAA8B,CAChC,GAAI,YACJ,QAAS,GACT,KAAM,6CACP,EACH,EAdM,KAiBJpsC,IAAO,CAAC,CACZ,uBAAA2rC,EACA,YAAA3jC,EACA,kBAAAqkC,EACA,kBAAAD,EACA,aAAAE,EACA,iBAAA1lC,CACF,IACEtvC,OAAC,OAAI,UAAU,4FACZ,WAACq0E,GAA0BtkK,GAAQ2gI,CAAW,EAC7C/kD,MAAC+W,GAAA,CACC,KAAMA,GAAW,KAAK,SACtB,MAAO,CACL,QAAS3iC,EAAG,4BAA6B,CACvC,qBAAsBuvE,GAAoBA,EAAiB,KAC5D,EACH,GAGFtvC,OAACv7B,EAAM,SAAN,CACC,UAAAknB,MAACwe,GAAA,CAAW,QAAQ,QAAQ,UAAU,8BACnC,SAAA6qE,EACH,EAEArpF,MAACwe,GAAA,CAAW,QAAQ,QAAQ,QAAQ,MAAM,UAAU,gCACjD,SAAAumC,GAAeA,EAAY,gBAC9B,GACF,EAGF/kD,MAACkpF,IAAA,CAAY,KAAME,EAAmB,kBAAAD,CAAA,CAAsC,GAC9E,ECnDIG,IAAsB,gCAE5B,MAAMC,YAAiCzwG,EAAM,aAAc,CACzD,QAAS,CACP,KAAM,CACJ,OAAA3nE,EACA,YAAAq4K,EAAc,GACd,kBAAAJ,EAAoB,GACpB,aAAAC,EAAeC,IACf,iBAAA3lC,CAAA,EACE,KAAK,MAET,OACE3jD,MAACyoF,GAAA,CAAsB,OAAAt3K,EAAgB,YAAAq4K,EACpC,SAAA57K,GACCoyF,MAAC+8C,IAAA,CACC,iBAAA4G,EACA,kBAAAylC,EACA,aAAch1G,EAAGi1G,CAAY,EAC5B,GAAGz7K,CAAA,GAGV,CAEJ,CACF,CAEA,MAAA67K,GAAe/kC,GAAA,EAA2B6kC,GAAwB,ECnBrDG,IAA2Bj4K,GAAoB,wBAAwB,ECVhDilD,GAClCprD,GAASA,EAAM,SAAS,aAAa,IACvC,ECKA,MAAMq+K,IAAc1yH,GAAoByyH,GAAwB,EAE7BrwH,GAAgB,CACjD,KAAMswH,GACR,CAAC,ECHD,MAAMC,IAAyB,KAMzBC,IAA6BzyH,GACjCgsH,GAA2B,QAC3B,CAAC,CAAE,SAAAtmJ,EAAU,OAAA9wB,KAAa,CACpBA,EAAO,KAAK,cACd,WAAW,IAAM,CACf8wB,EAASumJ,GAAqBr3K,EAAO,KAAK,OAAQA,EAAO,KAAK,UAAWA,EAAO,KAAK,YAAY,CAAC,CACpG,EAAG49K,GAAsB,CAE7B,CACF,EAmBaE,IAAyB,CACpCD,GACF,EC1BMz0G,GAAU9uE,GAAU,OAAO,EAAE,EAatByjL,IAA0B,CAACz+K,EAAQ8pE,GAASppE,IAAW,CAClE,OAAQA,EAAO,MACb,KAAKi3K,IAAkB,MACrB,OAAO7tG,GAET,KAAK8tG,GAA4B,QAC/B,OAAO53K,EAAM,MAAM,CACjB,CAACU,EAAO,KAAK,MAAM,EAAG,CACpB,KAAM,KACN,WAAY,GACZ,YAAa,KACb,MAAO,KACT,CACD,EAEH,KAAKk3K,GAA4B,QAC/B,OAAO53K,EACJ,MAAM,CACL,CAACU,EAAO,KAAK,MAAM,EAAG,CACpB,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACT,CACD,EACA,MACC,CAACA,EAAO,KAAK,OAAQ,MAAM,GAC1BA,EAAO,UAAY,IAAI,OAAO,CAAC6nC,EAAKkxG,KACnClxG,EAAIkxG,EAAY,EAAE,EAAI,CACpB,KAAMA,EACN,WAAY,GACZ,gBAAiB,KACjB,MAAO,MAEFlxG,GACN,EAAE,GAGX,KAAKqvI,GAA4B,QAC/B,OAAO53K,EAAM,MAAM,CACjB,CAACU,EAAO,KAAK,MAAM,EAAG,CACpB,KAAM,KACN,WAAY,GACZ,gBAAiB,KACjB,MAAOA,EAAO,MAChB,CACD,EAEH,KAAKo3K,GAA2B,QAC9B,OAAO93K,EAAM,QAAQ,CAACU,EAAO,KAAK,OAAQ,MAAM,EAAG,CAEjD,CAACA,EAAO,KAAK,SAAS,EAAG,CACvB,GAAIV,EAAM,IAAIU,EAAO,KAAK,MAAM,EAAE,IAAI,OAAQ,EAAE,EAAEA,EAAO,KAAK,SAAS,GAAK,GAE1E,WAAY,GACZ,MAAO,IACT,CACF,CACD,EAEH,KAAKo3K,GAA2B,QAChC,KAAKG,IAAwB,QAC3B,OAAOj4K,EAAM,MAAM,CAACU,EAAO,KAAK,OAAQ,MAAM,EAAG,CAC/C,CAACA,EAAO,KAAK,SAAS,EAAG,CACvB,KAAMA,EAAO,SACb,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACT,CACD,EAEH,KAAKo3K,GAA2B,QAC9B,OAAO93K,EAAM,MAAM,CAACU,EAAO,KAAK,OAAQ,MAAM,EAAG,CAC/C,CAACA,EAAO,KAAK,SAAS,EAAG,CACvB,KAAM,KACN,WAAY,GACZ,gBAAiB,KACjB,MAAOA,EAAO,MAChB,CACD,EAEH,QACE,OAAOV,CAAA,CAEb,EClHA,MAAM0+K,WAAoBlxG,EAAM,SAAU,CACxC,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEX,OAAO,SAAS,EAAG,CAAC,CACtB,CAEA,mBAAmBuqG,EAAW,CAG1B,KAAK,MAAM,SAAS,WAAaA,EAAU,SAAS,WACnDxvG,EAAM,KAAK,MAAM,UAAU,GAAK,CAAC,KAAK,MAAM,WAAWwvG,EAAW,KAAK,KAAK,IAE7E,OAAO,SAAS,EAAG,CAAC,CAExB,CAEA,QAAS,CACP,KAAM,CAAE,iBAAArrB,EAAkB,GAAGiT,CAAA,EAAe,KAAK,MACjD,OAAOC,MAAClT,EAAA,CAAkB,GAAGiT,CAAA,CAAY,CAC3C,CACF,CAEAiqF,GAAY,aAAe,CACzB,WAAY,IACd,EAEAA,GAAY,UAAY,CACtB,WAAYhxG,EAAU,IACxB,EC/BA,MAAMixG,IAAkB,CAACznJ,EAAU,KAAOsqD,MACxBkT,MAACgqF,GAAA,CAAY,iBAAAl9F,EAAqC,GAAGl/E,EAAQ,GAAG40B,EAAS,ECErFs9F,IAAYC,GAAWt/B,IAAU,CACrC,cAAe,GACf,cAAe,GACf,YAAa,CACX,UAAW,SAEf,EAAE,EAEIwjB,IAAa,CAAC,CAAE,QAAA9gF,EAAS,MAAAm2C,EAAO,QAAAhV,EAAS,QAAAoyC,EAAS,YAAA1U,EAAc,GAAI,QAAAnvC,KACxEwhD,OAAClR,IAAO,KAAI,GAAC,UAAS,GAAC,QAAAtwC,EAAmB,GAAGmvC,EAC1C,UAAA1oB,GACC0mB,MAACkkB,GAAA,CAAY,UAAW/gF,EAAQ,YAC7B,SAAA16B,GAAW6wE,CAAK,EAAIA,EAAM,CAAE,QAAAzmB,CAAA,CAAS,EAAIymB,EAC5C,EAEF0mB,MAACmkB,GAAA,CAAc,UAAWhhF,EAAQ,cAC/B,SAAA16B,GAAW67D,CAAO,EAAIA,EAAQ,CAAE,QAAAzR,CAAA,CAAS,EAAIyR,CAAA,CAChD,EACC,CAAC37D,EAAM+tG,CAAO,GACb1W,MAACqlF,IAAc,UAAWliJ,EAAQ,cAC/B,SAAA16B,GAAWiuG,CAAO,EAAIA,EAAQ,CAAE,QAAA7jD,CAAA,CAAS,EAAI6jD,CAAA,CAChD,GAEJ,EAGIwzE,IAAkB,CAAC,CACvB,QAAA/mJ,EAAU,GACV,SAAA0nD,EACA,MAAAvR,EACA,OAAAw8E,EACA,QAAAp/C,EACA,YAAA1U,EACA,YAAAmoF,EAAc,GACd,sBAAAC,EAAwB,GACxB,QAAAv3H,CACF,IAAM,CACJ1vB,EAAU,CAAE,GAAG28F,IAAA,EAAa,GAAG38F,CAAA,EAE/B,KAAM,CAACknJ,EAAUC,CAAW,EAAIxxG,EAAM,SAASqxG,GAAe,EAAK,EAEnE,OACE91E,OAACv7B,EAAM,SAAN,CACE,UAAAuxG,GACCrqF,MAACikB,IAAA,CACC,QAAA9gF,EACA,MAAAm2C,EACA,QAASuR,EACT,QAAA6rB,EACA,YAAA1U,EACA,QAASr6G,GAAK,CACPyiM,IACCziM,GAEFA,EAAE,kBAEJ2iM,EAAY,EAAK,GAEnBz3H,GAAWA,EAAQlrE,CAAC,CACtB,IAIFghB,EAAMmtJ,CAAM,EAUV,KATCrtJ,GAAWqtJ,CAAM,EAMhBA,EAAO,CACL,OAAQ,IAAMw0B,EAAY,EAAI,EAC/B,EAPDxxG,EAAM,aAAag9E,EAAQ,CACzB,QAAS,IAAM,CACbw0B,EAAY,EAAI,CAClB,EACD,CAIH,EACN,CAEJ,ECjFMC,IAAa38K,GACjBymG,OAAC,OAAI,QAAQ,cAAe,GAAGzmG,EAC7B,UAAAoyF,MAAC,QACC,SAAAA,MAAC,YAAS,GAAG,IACX,eAAC,QAAK,EAAE,6BAA6B,EACvC,EACF,EACAA,MAAC,QAAK,KAAK,OAAO,EAAE,uBAAuB,EAC3CA,MAAC,QAAK,KAAK,OAAO,EAAE,uBAAuB,EAC3CA,MAAC,QAAK,KAAK,OAAO,EAAE,uBAAuB,EAC3CA,MAAC,QAAK,KAAK,OAAO,EAAE,uBAAuB,EAC3CA,MAAC,KAAE,SAAS,UACV,SAAAA,MAAC,QACC,KAAK,UACL,EAAE,qcAEN,EACAA,MAAC,QACC,KAAK,UACL,EAAE,wcAEJA,MAAC,QACC,KAAK,UACL,EAAE,8uBAEJA,MAAC,QACC,KAAK,UACL,EAAE,yMAEJA,MAAC,QACC,KAAK,UACL,EAAE,iUACJ,EACF,ECzBI8/B,IAAYC,GAAWt/B,IAAU,CACrC,MAAO,CACL,QAAS,OACT,cAAe,MACf,eAAgB,gBAChB,WAAY,UAEd,KAAM,CACJ,UAAWA,EAAM,QAAQ,CAAC,EAC1B,SAAU,GACV,WAAY,OAEZ,MAAO,CACL,aAAcA,EAAM,QAAQ,CAAC,EAC/B,EAEF,IAAK,CACH,UAAWA,EAAM,QAAQ,CAAC,EAC1B,aAAcA,EAAM,QAAQ,CAAC,EAEjC,EAAE,EAEF,SAAS+pF,GAAmC,CAAE,SAAA91E,EAAU,OAAA+1E,EAAQ,OAAAC,GAAU,CACxE,MAAMvnJ,EAAU28F,IAAA,EAEV,CAAC6qD,EAAaC,CAAc,EAAIzvC,YAAS,EAAK,EAEpD,cACG+uC,IAAA,CAAgB,YAAW,GAAC,MAAO,GAAI,sBAAqB,GAC3D,UAAAlqF,MAACoU,GAAA,CAAoB,KAAMu2E,CAAA,CAAa,EACxCt2E,OAAC,OAAI,UAAWlxE,EAAQ,MACtB,UAAA68D,MAACuqF,IAAA,CAAW,MAAO,GAAI,OAAQ,GAAI,EACnCvqF,MAAC,OACC,IAAK,GAAGxjE,GAAA,CAAc,2BACtB,MAAO,GACP,OAAQ,GACR,IAAI,gBACN,EACF,EACA63E,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAA68D,MAAC,KAAG,SAAAyqF,CAAA,CAAO,EACXzqF,MAAC,KAAG,SAAA0qF,CAAA,CAAO,GACb,EAEA1qF,MAAC8T,GAAA,CACC,SAAU62E,EACV,UAAWxnJ,EAAQ,IACnB,QAAQ,YACR,MAAM,UACN,UAAS,GACT,QAAS,IAAM,CACbynJ,EAAe,EAAI,EAOnB,IAAI97K,EAAU21F,GAAA,EACd,GAAI31F,EAAS,CACX,IAAI+7K,EAAc/7K,EAAQ,SAAS,SAAWA,EAAQ,SAAS,OAE/DA,EAAQ,QAAQ+7K,EAAa,CAAE,sBAAuB,GAAM,CAC9D,CAEAn2E,EAAA,CACF,EAEC,WAAG,4CAA4C,GAClD,EACF,CAEJ,CCtDA,MAAMo2E,YAA0BhyG,EAAM,SAAU,CAC9C,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEG62F,GAAA,GACD,UAAU,OAAO,uBAM5B72F,EAAM,SAGR,KAAK,KAAOkrE,EAAM,WACpB,CAEA,QAAS,CACP,KAAM,CAAE,mBAAAiyG,EAAoB,mBAAAxlF,GAAuB,KAAK,MAExD,OAAKwlF,EAKH12E,OAAC,OAAI,MAAO,CAAE,UAAW,OAAQ,OAAQ,QACtC,UAAA02E,EAAmB,iBAAiB,aAAe,QAClD/qF,MAAC,QACC,OAAO,OACP,OAAQ+qF,EAAmB,iBAAiB,eAC5C,IAAK,KAAK,KAET,gBAAO,KAAKA,EAAmB,iBAAiB,QAAU,EAAE,EAAE,IAC7D78L,GACE8xG,MAAC,SAEC,KAAK,SACL,KAAM9xG,EACN,MAAO68L,EAAmB,iBAAiB,OAAO78L,CAAG,GAHhDA,CAAA,CAIP,CACD,GAIP8xG,MAACwqF,GAAA,CACC,SAAU,IAAM,CACd,OAAQO,EAAmB,iBAAiB,YAC1C,IAAK,MACHxlF,EACEwlF,EAAmB,iBAAiB,gBACtC,MAEF,IAAK,OACH,KAAK,KAAK,QAAQ,SAClB,KAEF,CAEJ,EACA,OAAQ32G,EACN,4DACF,OAAQA,EACN,2DAA0D,EAC9D,EACF,EA3CO,IA6CX,CACF,CAEA,MAAM2c,IAAkBzlF,IAAU,CAChC,mBAAoBukK,IAA0BvkK,CAAK,CACrD,GAEM0/K,IAAwBzwH,GAE5BszF,GACAr5D,GACEzD,IACA,CACE,aAAA0hF,GACA,WAAAhtE,GACA,mBAAAF,GACA,WAAAd,GACA,OAAAt0F,EAAA,CACF,CACD,EAAE26K,GAAiB,EAEtB,MAAMG,YAAiBnyG,EAAM,SAAU,CACrC,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEG62F,GAAA,GACD,UAAU,OAAO,uBAM5B72F,EAAM,SAGR,KAAK,KAAOkrE,EAAM,WACpB,CAEA,QAAS,CACP,KAAM,CAAE,OAAA3nE,EAAQ,mBAAAo0F,GAAuB,KAAK,MAE5C,OACEvF,MAACyoF,GAAA,CAAsB,OAAAt3K,EACpB,UAAC,CAAE,YAAA4zI,EAAa,uBAAA2jC,CAAA,IACfA,GAA0B,CAAC3jC,EACzB/kD,MAACoU,GAAA,CAAoB,KAAI,GAAC,EAE1BpU,MAAC0hF,GAAA,CAAe,OAAAvwK,EAAgB,YAAA4zI,EAC7B,UAAC,CAAE,MAAAo7B,CAAA,IACDA,EAAM,QACL9rE,OAAC,OAAI,MAAO,CAAE,UAAW,OAAQ,OAAQ,QACtC,UAAA8rE,EAAM,QAAQ,iBAAiB,aAAe,QAC7CngF,MAAC,QACC,OAAO,OACP,OAAQmgF,EAAM,QAAQ,iBAAiB,eACvC,IAAK,KAAK,KAET,gBAAO,KACNA,EAAM,QAAQ,iBAAiB,QAAU,EAAC,EAAG,IAC7CjyL,GACE8xG,MAAC,SAEC,KAAK,SACL,KAAM9xG,EACN,MAAOiyL,EAAM,QAAQ,iBAAiB,OAAOjyL,CAAG,GAH3CA,CAAA,CAIP,CACD,GAIP8xG,MAACwqF,GAAA,CACC,SAAU,IAAM,CACd,OAAQrK,EAAM,QAAQ,iBAAiB,YACrC,IAAK,MACH56E,EACE46E,EAAM,QAAQ,iBAAiB,gBACjC,MAEF,IAAK,OACH,KAAK,KAAK,QAAQ,SAClB,KAEF,CAEJ,EACA,OAAQ/rG,EACN,oDACF,OAAQA,EACN,mDAAkD,EACtD,EACF,EAzCe,IAyCf,CAGN,EAGN,CAEJ,CACF,CAEA,MAAM82G,IAAe12F,OACT,IACV,CACE,aAAAi+E,GACA,WAAAhtE,GACA,mBAAAF,GACA,WAAAd,GACA,OAAAt0F,EAAA,CAEJ,EAAE86K,GAAQ,EAEV,MAAME,YAA6BryG,EAAM,SAAU,CACjD,QAAS,CAGP,OAFav/C,GAAc,MAAM,EAEzB,CACN,IAAK,iBACH,OAAOymE,MAACgrF,IAAA,CAAuB,GAAG,KAAK,MAAO,EAEhD,IAAK,QACH,OAAOhrF,MAACkrF,IAAA,CAAc,GAAG,KAAK,MAAO,EAEvC,QACE,MAAM,IAAI,MAAM,cAAc,EAEpC,CACF,CAEA,MAAAE,IAAe7wH,GACb2uE,GACA4d,GACAmjC,IAAA,CACF,EAAEkB,GAAoB,EC/NTE,GAA4B55K,GAAoB,0BAA0B,EAE1E65K,IAAsBta,GACjC3/J,GAAoBg6K,GAA2BtZ,GAAW,kBAAkBf,CAAS,EAAG,CACtF,UAAAA,CACF,CAAC,EAEUua,GAA4B,2BAE5BC,IAAsB,IAAM3uJ,GAAa0uJ,EAAyB,ECXzEE,GAA+B/0H,GACnCprD,GAASA,EAAM,SAAS,mBAC1B,EAEaogL,IAA2BD,GAA6B,WACxDE,IAAwBF,GAA6B,QACrDG,IAAyBH,GAA6B,SCD7DI,IAAY,CAACvgL,EAAOU,IACjB1F,GAAU,OAAO,EAAE,EAGfwlL,IAA6B70H,GAAoBo0H,GAA2B,CACvF,CAACE,EAAyB,EAAGM,GAC/B,CAAC,ECIKr4E,IAAS/S,IAAU,CACvB,KAAM,CACJ,UAAW,OACX,QAAS,OACT,cAAe,SACf,QAASA,EAAM,QAAQ,CAAC,GAE1B,QAAS,CACP,KAAM,EACN,cAAeA,EAAM,QAAQ,CAAC,GAEhC,KAAM,CACJ,SAAU,IACV,UAAW,IAEb,OAAQ,CACN,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,YAAa,CACX,UAAWA,EAAM,QAAQ,CAAC,EAC1B,MAAOA,EAAM,IAAI,OAAO,QAE1B,mBAAoB,CAClB,UAAWA,EAAM,QAAQ,EAAE,GAE7B,GAAI,CACF,MAAO,OACP,OAAQ,EACR,UAAWA,EAAM,QAAQ,CAAC,EAC1B,OAAQ,OACR,UAAW,aAAaA,EAAM,IAAI,OAAO,MAAM,IAEjD,SAAU,CACR,UAAWA,EAAM,QAAQ,CAAC,EAC1B,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,WAAY,CACV,MAAO,QAET,YAAa,CACX,UAAWA,EAAM,QAAQ,CAAC,EAC1B,UAAW,SAEf,GAEMs8C,IAAO,CAAC,CACZ,eAAAgvB,EACA,WAAAruC,EACA,MAAA9C,EACA,YAAAc,EACA,WAAArd,EACA,kBAAA0tE,EACA,iBAAAC,EACA,QAAA7oJ,EACA,YAAA8oJ,EACA,eAAAC,EACA,oBAAAC,CACF,IAAM,CACJ,MAAMC,EAAYxxD,GAAO,mBAAqBc,EAAY,OAEpD2wD,EAAwBp0D,GAAwByD,EAAY,OAASA,EAAY,IAAI,EAE3F,aACG,OAAI,UAAWv4F,EAAQ,KACrB,WACC68D,MAAC+T,GAAA,CAAa,KAAI,GAAC,EAEnB2pB,GACAhC,GACAd,GACEvmB,OAACv7B,EAAM,SAAN,CACC,UAAAu7B,OAAC,OAAI,UAAWlxE,EAAQ,QACrB,UAAA4oI,EAAe,MAAM,KAAK,UACxBA,EAAe,MAAM,KAAK,MAAQruC,EAAW,OAC5C19B,MAAC,OACC,IAAK+rE,EAAe,MAAM,KAAK,MAAQruC,EAAW,KAClD,UAAWv6F,EAAQ,KACnB,IAAI,SAGV68D,MAACsd,IAAiB,KAAK,MAAM,UAAU,gBACpC,SAAAlpC,EAAG,wCAAwC,EAC9C,EACA4rB,MAACsd,GAAA,CACC,KAAK,MACL,UAAU,gBACV,wBAAyB,CACvB,OAAQlpC,EAAG,iDAAkD,CAC3D,UAAW,gBAAgBjxC,EAAQ,MAAM,KACzC,gBAAiBkpJ,EACjB,QAAS,UACV,EACH,GAEFrsF,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,YAC7C,WAAG,4CAA6C,CAC/C,IAAKu/E,GAAW,KAAM,UAAU,EAChC,KAAMF,GAAW,KAAM,GAAG,EAC3B,EACH,EAECypE,EACC53E,OAACv7B,EAAM,SAAN,CACE,UAAAozG,SACE,OAAI,UAAW/oJ,EAAQ,YACtB,SAAA68D,MAAC8T,IAAO,KAAM9T,MAACssF,GAAA,EAAiB,EAAI,KAAMJ,EAAgB,OAAO,SAC9D,SAAA93G,EAAG,uDAAuD,EAC7D,EACF,EAEF4rB,MAAC+W,GAAA,CAAW,MAAOo1E,CAAA,CAAqB,GAC1C,EAEAnsF,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,YAC7C,SAAAixC,EAAG,8CAA8C,EACpD,EAGDg4G,EAAY,EACX/3E,OAACv7B,EAAM,SAAN,CACC,UAAAu7B,OAAC27B,GAAA,CAAK,UAAS,GAAC,UAAW7sG,EAAQ,mBACjC,UAAA68D,MAACgwC,GAAA,CAAK,KAAI,GAAC,GAAI,EACb,SAAAhwC,MAACsd,GAAA,CAAiB,KAAK,MACpB,SAAAlpC,EAAG,0CAA0C,EAChD,EACF,EACA4rB,MAACgwC,IAAK,KAAI,GAAC,GAAI,EACb,SAAAhwC,MAACsd,GAAA,CAAiB,KAAK,MACrB,SAAAtd,MAACq2E,GAAA,CACC,MAAOp+C,GAAwBm0D,CAAS,EACxC,UAAU,iBAEd,EACF,GACF,EACApsF,MAAC,MAAG,UAAW78D,EAAQ,GAAI,EAC3B68D,MAACsd,GAAA,CACC,KAAK,MACL,MAAM,SACN,QAASyuE,EACT,UAAW5oJ,EAAQ,SAElB,WAAG,uCAAuC,GAC7C,EACF,QAEC6sG,GAAA,CAAK,UAAS,GAAC,UAAW7sG,EAAQ,mBACjC,SAAA68D,MAACgwC,GAAA,CAAK,KAAI,GAAC,GAAI,EACb,eAAC1yB,GAAA,CAAiB,KAAK,MACpB,SAAAlpC,EAAG,6CAA6C,EACnD,EACF,EACF,GAEJ,EACA4rB,MAAC8T,GAAA,CACC,QAAQ,WACR,KAAK,QACL,UAAW3wE,EAAQ,WACnB,QAAS6oJ,EAET,SAAAhsF,MAACsd,IAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,wCAAwC,EAC9C,GACF,EACF,EAGN,CAEJ,EAEAm4G,IAAelpF,GAAWmQ,GAAM,EAAEupC,GAAI,ECjKtC,MAAMyvC,WAAoB1zG,EAAM,SAAU,CACxC,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAYb4oD,GAAA,iCAA4BuiB,GAAa,CAErCA,EAAU,mBACVA,EAAU,kBAAkB,OAAS+0E,GAAS,WAC9C/0E,EAAU,aAAa,KACtB,KAAK,MAAM,aAAa,KAAOA,EAAU,aAAa,IACrDpwE,EAAM,KAAK,MAAM,cAAc,IACjC,CAAC,KAAK,MAAM,0BACZ,CAACowE,EAAU,0BACX,CAACA,EAAU,qBAEX,KAAK,MAAM,oBAAoBA,EAAU,YAAY,EAAE,CAE3D,GAEAviB,GAAA,yBAAoB,IAAM,CACxB,KAAK,MAAM,WAAW6tC,GAAS,oBAAoB,EAAG,CACpD,aAAc,KAAK,MAAM,aACzB,QAAS,KAAK,MAAM,QACrB,CACH,GAEA7tC,GAAA,wBAAmB,IAAM,CACvB,KAAK,MAAM,WAAW6tC,GAAS,YAAY,EAAG,CAC5C,aAAc,KAAK,MAAM,aAC1B,CACH,GApCE,KAAK,MAAM,sBAETz2F,EAAM,mBACNA,EAAM,kBAAkB,OAASkgJ,GAAS,WAC1ClgJ,EAAM,aAAa,IAEnB,KAAK,MAAM,oBAAoBA,EAAM,YAAY,EAAE,CAEvD,CA8BA,QAAS,CACP,KAAM,CACJ,eAAAm+J,EACA,MAAAnxC,EACA,gBAAA+zC,EACA,WAAAjxC,EACA,qBAAA8vB,EACA,kBAAAqyB,EACA,eAAAqM,EACA,oBAAAC,EACA,YAAAzwD,CAAA,EACE,KAAK,MAET,OACE17B,MAACs8C,GAAA,CAAK,WAAY,GAChB,SAAAt8C,MAAC+8C,IAAA,CACC,eAAAgvB,EACA,WAAYve,GAAwBmhB,EACpC,WAAAjxC,EACA,MAAA9C,EACA,YAAAc,EACA,kBAAmB,KAAK,kBACxB,iBAAkB,KAAK,iBACvB,YAAamkD,GAAqBA,EAAkB,OAAS/xB,GAAS,UACtE,eAAAo+B,EACA,oBAAAC,CAAA,GAEJ,CAEJ,CACF,CAEAK,GAAY,UAAY,GAExB,MAAMz7F,IAAkB,CAACzlF,EAAOsC,KAAW,CACzC,kBAAmBgyK,GAAqBt0K,CAAK,EAC7C,yBAA0BogL,IAAyBpgL,CAAK,EACxD,oBAAqBsgL,IAAuBtgL,CAAK,EACjD,eAAgBqgL,IAAsBrgL,CAAK,GAAG,UAC9C,YAAakkK,GAAelkK,CAAK,EACjC,YAAaokK,IAAepkK,CAAK,CACnC,GAEAmhL,IAAelyH,GACb2uE,GACAqxC,GACA1sB,GACAr5D,GACAzD,IACA,CACE,WAAA0U,GACA,oBAAA6lF,IACA,oBAAAE,GAAA,CACF,CACD,EAAEgB,EAAW,ECxHd,IAAIE,GAAW9+K,GACbymG,OAACgC,GAAA,CAAS,GAAGzoG,EACX,UAAAoyF,MAAC,QAAK,EAAE,6MAA4M,EACpNA,MAAC,QAAK,EAAE,gBAAgB,KAAK,OAAM,GACrC,EAEF0sF,GAAUx/F,GAAKw/F,EAAO,EACtBA,GAAQ,YAAc,UACtBA,GAAQ,QAAU,UAElB,MAAAC,GAAeD,GCEf,MAAME,YAA6B9zG,EAAM,SAAU,CACjD,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EAEN,KAAK,MAAM,mBACd,KAAK,MAAM,UAAY,KAAK,MAAM,SAAS,KAAK,MAAM,IAAI,CAE9D,CAEA,wBAAwBuqG,EAAW,CACjC,OAAK5U,GAAQ4U,EAAU,KAAM,KAAK,MAAM,IAAI,GAC1C,KAAK,MAAM,UAAY,KAAK,MAAM,SAAS,KAAK,MAAM,IAAI,EAGrD,IACT,CAEA,QAAS,CACP,KAAM,CACJ,SAAAttB,EACA,KAAAr5E,EACA,UAAAq7K,EACA,cAAAC,EACA,KAAAvhM,EACA,WAAAwhM,EACA,wBAAAC,EACA,sCAAAC,EACA,YAAAC,CAAA,EACE,KAAK,MAET,OAAIL,GAAa,CAACI,EAITjtF,MAAC+W,GAAA,CAAW,MAAO81E,EAAW,EAGnCC,GAAiBE,EAAwBx7K,CAAI,EACxC07K,EACL74E,OAACv7B,EAAM,SAAN,CACC,gBAACs7B,GAAA,CAAoB,KAAM24E,EAAY,KAAAxhM,EAAY,EAClDuhM,EAAct7K,CAAI,GACrB,EAEAs7K,EAAct7K,CAAI,EAIf07K,EACL74E,OAACv7B,EAAM,SAAN,CACC,gBAACs7B,GAAA,CAAoB,KAAM24E,EAAY,KAAAxhM,EAAY,EAClDs/F,EAASr5E,CAAI,GAChB,QAECuiG,GAAA,CAAa,KAAAxoH,EAAY,KAAMwhM,EAC7B,aAAMliG,EAASr5E,CAAI,EACtB,CAEJ,CACF,CA6BA,MAAM27K,GAAmB,CAAC,CACxB,UAAAphH,EACA,KAAAxgF,EACA,KAAAyoH,EAAO,GACP,YAAAk5E,EAAc,GACd,MAAAz8L,EACA,cAAAq8L,EACA,wBAAAE,EACA,SAAAI,EACA,SAAAviG,EACA,kBAAAwiG,EAAoB,GACpB,gCAAAC,CACF,IACSx0G,EAAM,aAAa/M,EAAW,GAAIv6D,GAAQ,CAC/C,IAAIq7K,EACApkL,GAAWhY,CAAK,EAClBo8L,EAAYp8L,EAAM+gB,CAAI,EACbkT,GAASj0B,CAAK,EAEvBo8L,EAAYngK,GAAIlb,EAAM/gB,CAAK,EAClB8pB,GAAQ9pB,CAAK,GACtBqgC,GAAQrgC,EAAO88L,GAAa,CAE1B,GADAV,EAAYngK,GAAIlb,EAAM+7K,CAAS,EAC3BV,EACF,MAAO,EAEX,CAAC,EAGH,MAAMI,EACJK,GAAmCT,GAAaS,EAAgCT,CAAS,EAErFE,EACJ/4E,IAASA,EAAKxiG,CAAI,GAAK,CAAC7I,EAAMkkL,CAAS,IAAM,CAACI,EAEhD,OACEjtF,MAAC4sF,IAAA,CACC,SAAA/hG,EACA,KAAAr5E,EACA,UAAAq7K,EACA,cAAAC,EACA,SAAAM,EACA,KAAA7hM,EACA,WAAAwhM,EACA,wBAAAC,EACA,YAAAE,EACA,kBAAAG,EACA,sCAAAJ,CAAA,EAGN,CAAC,EAGHE,GAAiB,UAAY,CAC3B,KAAMn0G,EAAU,KAChB,SAAUA,EAAU,KACpB,wBAAyBA,EAAU,KACnC,UAAWA,EAAU,KAAK,WAC1B,SAAUA,EAAU,KAAK,UAC3B,ECnKA,MAAMw0G,IAAoB,CACxB,MAAO,CAACxhI,EAAgB/8D,EAAM28C,IACxB38C,GAAM,MACDA,GAAM,OAAO,SAAS,QAAQ,OAAStH,EAAE,OAAO,EAAE,KAAK,IAAI,EAE3DsH,GAAM,OAGnB,ECLMw+L,GAAiB,CACrB,mBAAoB,CAACznD,EAAUzrG,KAAW,CACxC,SAAU8qG,GAAa,cACvB,KAAM,MACN,OAAQ,CACN,mBAAoBW,CAAA,EAEtB,MAAAzrG,CAAA,GAGF,iCAAkC8nE,IAAiB,CACjD,SAAUgjC,GAAa,yBACvB,KAAM,MACN,OAAQ,CACN,aAAAhjC,CAAA,CACF,GAGF,eAAgB,CAACqrF,EAAeC,EAAe,MAAW,CACxD,SAAUtoD,GAAa,aACvB,KAAM,MACN,OAAQ,CACN,cAAAqoD,CAAA,EAEF,MAAO,CACL,aAAAC,CAAA,CACF,GAGF,UAAWD,IAAkB,CAC3B,SAAUroD,GAAa,QACvB,KAAM,MACN,OAAQ,CACN,cAAAqoD,CAAA,CACF,GAGF,eAAgBA,IAAkB,CAChC,SAAUroD,GAAa,QACvB,KAAM,OACN,OAAQ,CACN,cAAAqoD,CAAA,CACF,GAGF,YAAaA,IAAkB,CAC7B,SAAUroD,GAAa,aACvB,KAAM,MACN,OAAQ,CACN,cAAAqoD,CAAA,EAEF,MAAO,CACL,aAAc,GAChB,GAGF,cAAeA,IAAkB,CAC/B,SAAUroD,GAAa,wBACvB,KAAM,MACN,OAAQ,CACN,cAAAqoD,CAAA,CACF,GAGF,cAAe,CAACA,EAAe9+H,KAAU,CACvC,SAAUy2E,GAAa,aACvB,KAAM,QACN,OAAQ,CACN,cAAAqoD,CAAA,EAEF,KAAA9+H,EACA,aAAc4+H,IAAkB,QAGlC,KAAMrhD,IAAgB,CACpB,SAAU9G,GAAa,oBACvB,KAAM,OACN,KAAM8G,EACN,MAAO,EAGP,EAEJ,EClFayhD,GAA2Bn8K,GAAoB,wBAAwB,EAEvEo8K,IAAuB,CAAC7nD,EAAUzrG,IAC7ClpB,GACEu8K,GACAH,GAAe,mBAAmBznD,EAAUzrG,CAAK,EACjDA,CACF,EAEWuzJ,IAAqCzrF,GAChDhxF,GACEu8K,GACAH,GAAe,iCAAiCprF,CAAY,CAC9D,ECNIzrC,IAAau1E,IACbA,EAAY,aACdA,EAAY,sBAAwBzpB,GAAWypB,EAAY,YAAY,EAEvEA,EAAY,sBAAwB,MAGtCA,EAAY,YAAc5I,GAA0B4I,EAAY,MAAM,EACtEA,EAAY,WAAa3I,GAAyB2I,EAAY,MAAM,EAEpEA,EAAY,gBAAkBA,EAAY,SAAW7I,GAAkB,QACvE6I,EAAY,gBAAkBA,EAAY,SAAW7I,GAAkB,QACvE6I,EAAY,iBAAmBA,EAAY,SAAW7I,GAAkB,SACxE6I,EAAY,iBAAmBA,EAAY,SAAW7I,GAAkB,SAExE6I,EAAY,WAAaA,EAAY,kBAAoBA,EAAY,iBAErEA,EAAY,YAAczI,GAA0ByI,EAAY,MAAM,EACtEA,EAAY,mBAAqBvI,GAAiCuI,EAAY,MAAM,EAE7EA,GAGI4hD,GAAoBn1D,GAAgBhiE,GAAU,EAE9Co3H,GAAqBj1D,GAAoBg1D,EAAiB,EC3BjEE,IAA0B3iL,GAAU3C,EAAM2C,CAAK,EAAI,KAAOA,EAAM,SAAS,gBAEzE4iL,IAAwB,CAAC5iL,EAAOsC,IAC7BjF,EAAMiF,CAAK,EAAI,KAAOA,EAAM,YAG/BugL,GAA8B5vJ,GAClC,CAAC2vJ,IAAuBD,GAAuB,EAC/C,CAAC5qD,EAAa/3H,IAAU,CACtB,GAAI3C,EAAM2C,CAAK,EACb,OAAO,KAGT,MAAMpd,EAAMk1I,GAA2BC,CAAW,EAC5C7xH,EAAOlG,EAAM,IAAIpd,CAAG,EAC1B,OAAIya,EAAM6I,CAAI,EACL,KAEFA,CACT,CACF,EAEa48K,IAA4B7vJ,GACvC,CAAC4vJ,EAA2B,EAC5Bt3H,GACSluD,EAAMkuD,CAAS,EAAI,GAAQA,EAAU,IAAI,YAAY,GAAK,EAErE,EACaw3H,IAAyB9vJ,GAAe,CAAC4vJ,EAA2B,EAAGt3H,GAAa,CAC/F,GAAIluD,EAAMkuD,CAAS,EACjB,OAAO,KAGT,MAAMrlD,EAAOqlD,EAAU,IAAI,MAAM,EAEjC,GAAIluD,EAAM6I,CAAI,EACZ,OAAO,KAGT,GAAI,CAACA,EAAK,KAER,MAAM,IAAI,MAAM,+DAAiEA,CAAI,EAGvF,MAAMslD,EAAStlD,EAAK,OAGD,OAAAqlD,EAAU,IAAI,aAAc,IAAI,EAE5CC,CACT,CAAC,EAEuCv4B,GAAe,CAAC4vJ,EAA2B,EAAGt3H,GAAa,CACjG,GAAIluD,EAAMkuD,CAAS,EACjB,OAAO,KAGT,MAAMpmE,EAAQomE,EAAU,IAAI,OAAO,EAEnC,OAAIluD,EAAMlY,CAAK,EACN,MAGJgY,GAAWhY,EAAM,IAAI,GACxBgmE,GAAO,KAAK,yBAA0B,wBAAyB,CAAE,MAAAhmE,EAAO,EAGnEA,EAAM,KAAOA,EAAM,OAASA,EACrC,CAAC,EAEM,MAAM69L,GAAqB/vJ,GAAe,CAAC8vJ,GAAsB,EAAGE,GACrE5lL,EAAM4lL,CAAe,EAChB,MAETA,EAAgB,aAAeP,GAAmBO,EAAgB,YAAY,EACvEA,EACR,EAEYC,GAAgCjwJ,GAC3C,CAAC+vJ,EAAkB,EACnBC,GACM5lL,EAAM4lL,CAAe,EAChB,MAGTA,EAAgB,aAAeP,GAAmBO,EAAgB,YAAY,EAG9EA,EAAgB,aAAa,KAAK,CAChC,GAAI,EACJ,KAAM,QACP,EAEMA,EAEX,EAMgC73H,GAC9BprD,GAASA,EAAM,SAAS,YACxByiL,EACF,EC3FA,MAAMU,WAAiC31G,EAAM,SAAU,CACrD,oBAAqB,CACfnwE,EAAM,KAAK,MAAM,eAAe,GAClC,KAAK,oBAAoB,KAAK,KAAK,CAEvC,CAEA,0BAA0BowE,EAAW,CACnC,MAAMnrE,EAAQ,KAAK,OACfmrE,EAAU,WAAanrE,EAAM,UAAYmrE,EAAU,cAAgBnrE,EAAM,cAC3E,KAAK,oBAAoBmrE,CAAS,CAEtC,CAEA,oBAAoBnrE,EAAO,CACpBjF,EAAMiF,EAAM,YAAY,EAG3BA,EAAM,qBAAqBA,EAAM,SAAU,CACzC,YAAaA,EAAM,YACnB,UAAWA,EAAM,UAClB,EALDA,EAAM,mCAAmCA,EAAM,YAAY,CAO/D,CAEA,QAAS,CACP,KAAM,CACJ,0BAAAwgL,EACA,SAAApoD,EACA,gBAAAuoD,EACA,SAAA1jG,EACA,UAAA6jG,EACA,GAAG3uF,CAAA,EACD,KAAK,MAET,IAAI4uF,EAAuB,KAC3B,OAAIJ,IACGG,EAKHC,EAAuBJ,EAJvBI,EAAuB,CACrB,aAAcJ,EAAgB,aAAa,OAAOpiD,GAAeA,EAAY,KAAO,CAAC,IAOpFthD,EAAS,CACd,0BAAAujG,EACA,SAAApoD,EACA,gBAAiB2oD,EACjB,GAAG5uF,CAAA,CACJ,CACH,CACF,CAEA0uF,GAAyB,aAAe,CACtC,YAAa,GACb,aAAc,KACd,UAAW,EACb,EAEAA,GAAyB,UAAY,CACnC,gBAAiBz1G,EAAU,OAE3B,SAAUA,EAAU,KAAK,WACzB,0BAA2BA,EAAU,KACrC,SAAUA,EAAU,UAAU,CAACA,EAAU,OAAQA,EAAU,MAAM,CAAC,EAClE,aAAcA,EAAU,UAAU,CAACA,EAAU,OAAQA,EAAU,MAAM,CAAC,EAEtE,YAAaA,EAAU,IACzB,EAEA,MAAM+X,IAAkB,CAACzlF,EAAOsC,KACvB,CACL,gBAAiB0gL,GAAmBhjL,EAAOsC,CAAK,EAChD,2BAA4BjF,EAAMiF,EAAM,YAAY,EAChD4gL,GAA8BljL,EAAOsC,CAAK,EAC1C,KACJ,0BAA2BwgL,IAA0B9iL,EAAOsC,CAAK,IAItD4mF,GAAQzD,IAAiB,CACtC,qBAAA88F,IACA,mCAAAC,GACF,CAAC,EAAEW,EAAwB,ECjGXnoL,GAAU,OAAO,EAAE,ECV5B,MAAMsoL,GAAsB,CACjC,OAAQ,EACR,MAAO,CACT,ECIMC,IAAkBC,GAAe,CAIrC,OAHAA,EAAY,YAAcA,EAAY,OAASF,GAAoB,MACnEE,EAAY,aAAeA,EAAY,OAASF,GAAoB,OAE5DE,EAAY,MAClB,KAAKF,GAAoB,OACvBE,EAAY,UAAY16G,EAAG,sCAAsC,EACjE,MACF,KAAKw6G,GAAoB,MACvBE,EAAY,UAAY16G,EAAG,qCAAqC,EAChE,MACF,QACE7jF,GAAU,GAAO,8BAA8B,EAEnD,OAAOu+L,CACT,EAEMC,IAAwBD,IAC5BA,EAAY,4BAA8BpsE,GAAWosE,EAAY,KAAM,UAAU,EACjFA,EAAY,gCAAkCpsE,GAAWosE,EAAY,KAAM,OAAO,EAElFA,EAAY,qBAAuB72D,GAAwB62D,EAAY,MAAM,EAEzEA,EAAY,eACdA,EAAY,qBAAuB,IAAIA,EAAY,oBAAoB,IAGlEA,GAGIE,GAAoBp2D,GAAgBi2D,IAAiBE,GAAqB,EAE1EE,IAAyBl2D,GAAoBi2D,EAAiB,ECjCrEpxD,GAAc,CAClB,MAAO,EACP,IAAK,EACL,OAAQ,EACR,gBAAiB,EACjB,eAAgB,EAChB,gBAAiB,EACjB,MAAO,EACP,QAAS,EACT,gBAAiB,CACnB,EAEMsxD,IAAsBzjJ,GAAU,CACpC,OAAQA,EAAA,CACN,KAAKmyF,GAAY,MACf,OAAOxpD,EAAG,4BAA4B,EACxC,KAAKwpD,GAAY,IACf,OAAOxpD,EAAG,0BAA0B,EACtC,KAAKwpD,GAAY,OACf,OAAOxpD,EAAG,6BAA6B,EACzC,KAAKwpD,GAAY,gBACf,OAAOxpD,EAAG,sCAAsC,EAClD,KAAKwpD,GAAY,eACf,OAAOxpD,EAAG,qCAAqC,EACjD,KAAKwpD,GAAY,gBACf,OAAOxpD,EAAG,sCAAsC,EAClD,KAAKwpD,GAAY,MACf,OAAOxpD,EAAG,4BAA4B,EACxC,KAAKwpD,GAAY,QACf,OAAOxpD,EAAG,8BAA8B,EAC1C,KAAKwpD,GAAY,gBACf,OAAOxpD,EAAG,sCAAsC,EAClD,QACE,OAAO3oC,CAAA,CAEb,EAEM0jJ,IAAwBv2D,GAAgBk2D,IAC5CA,EAAY,sBAAwBpsE,GAAWosE,EAAY,KAAM,kBAAkB,EACnFA,EAAY,YAAcI,IAAoBJ,EAAY,WAAW,EACrEA,EAAY,aAAeA,EAAY,OACvCA,EAAY,gBAAkB72D,GAAwB62D,EAAY,OAAQA,EAAY,QAAQ,EAC9FA,EAAY,YAAcve,IAAsBue,EAAY,MAAM,EAClEA,EAAY,WAAate,IAAqBse,EAAY,MAAM,EAChEA,EAAY,qBAAuB72D,GACjC62D,EAAY,YACZA,EAAY,UAGPA,EACR,EAEYM,IAA6Br2D,GAAoBo2D,GAAqB,ECxC7EE,IAAqB/jL,GAASA,EAAM,SAAS,YAC7C08K,IAAmB,CAAC18K,EAAOsC,IAAUA,EAAM,OAC3C0hL,GAAwB,CAAChkL,EAAOsC,IAAUA,EAAM,YAChD2hL,IAAuB,CAACjkL,EAAOsC,IAAUA,EAAM,WAExC4hL,GAAyBjxJ,GACpC,CAAC8wJ,IAAoBrH,IAAkBsH,EAAqB,EAC5D,CAAC99K,EAAML,EAAQ66I,IAAgB,CAC7B,GAAI,CAACx6I,EACH,OAAO,KAGT,MAAMi+K,EAAcj+K,EAAK,IAAIL,CAAM,EAEnC,GAAI,CAACs+K,EACH,OAAO,KAGT,MAAMC,EAAkBD,EAAY,IAAIzjC,CAAW,EAEnD,OAAK0jC,EAIEA,EAAgB,OAHd,IAIX,CACF,EAEaC,IAAwB,IAC5BpxJ,GAAe,CAACixJ,EAAsB,EAAGI,GAC1C1+J,GAAO0+J,CAAe,EACjB,GAGFA,EAAgB,UACxB,EAGUC,IAA6B,IACjCtxJ,GACL,CACEixJ,GACAF,GACAtiC,IACAwhC,EAAA,EAEF,CAACoB,EAAiB5jC,EAAa8jC,EAAyBvB,IAAoB,CAC1E,GAAIr9J,GAAO0+J,CAAe,EACxB,OAAO,KAGT,MAAMp+K,EAAOo+K,EAAgB,KAE7B,GAAI,CAACp+K,EACH,OAAO,KAOT,MAAM5D,EAAQ,CAAE,wBAAAkiL,CAAA,EAEhB,OAAQ9jC,EAAA,CACN,KAAKnB,GAAY,MAGf,OAFe1nB,GAAa3xH,EAAM5D,CAAK,EAEzB,KAAK,CAACrmB,EAAGE,IAAMA,EAAE,QAAUF,EAAE,OAAO,EAEpD,KAAKsjK,GAAY,OAMf,OALgB35H,GAAOq9J,CAAe,EAElCtN,GAAazvK,EAAM5D,CAAK,EADxBqzK,GAAazvK,EAAM,CAAE,GAAG5D,EAAO,GAAG2gL,CAAA,CAAiB,GAIzC,KAAK,CAAChnM,EAAGE,IAAMA,EAAE,aAAeF,EAAE,YAAY,EAE9D,KAAKsjK,GAAY,kBACf,OAAOukC,IAA2B59K,CAAI,EAExC,KAAKq5I,GAAY,aACf,OAAOokC,IAAuBz9K,EAAM5D,CAAK,EAE3C,QACErd,GAAU,GAAO,uBAAuBy7J,CAAW,EAAE,EAE3D,GAIS+jC,IAAmC,IACvCxxJ,GAAe,CAACixJ,EAAsB,EAAGI,GAAmB,CACjE,GAAI1+J,GAAO0+J,CAAe,EACxB,OAAO,KAGT,MAAMI,EAAaJ,EAAgB,WAEnC,OAAKI,GACI,IAIX,CAAC,EAGUC,IAAgC,IAC3C1xJ,GAAe,CAACixJ,GAAwBD,GAAoB,EAAG,CAAC/9K,EAAM0+K,IAAe,CACnF,GAAI,CAAC1+K,EACH,OAAO,KAGT,MAAMs9K,EAAcx2J,GAAY9mB,EAAK,KAAM,GAAK,EAAE,aAAe0+K,CAAU,EAE3E,OAAKpB,EAIEE,GAAkBF,CAAW,EAH3B,IAIX,CAAC,EC9GH,MAAMqB,WAA6Br3G,EAAM,SAAU,CAAnD,kCAkBEtiB,GAAA,gBAAW,IAAM,CAEX,CAAC,KAAK,MAAM,mBAAqB,CAAC7tD,EAAM,KAAK,MAAM,WAAW,QAAQ,KAAK,GAC7E,KAAK,MAAM,iBACT,KAAK,MAAM,OACX,KAAK,MAAM,YACX,KAAK,KACL,KAAK,MAAM,WAAW,QAAQ,MAC9B,KAAK,MAAM,MAGjB,GA5BA,IAAI,MAAO,CACT,MAAO,CACL,cAAe,KAAK,MAAM,qBAC1B,cAAe,KAAK,MAAM,cAE9B,CAEA,mBAAoB,CAClB,KAAK,MAAM,iBACT,KAAK,MAAM,OACX,KAAK,MAAM,YACX,KAAK,KACL,GACA,KAAK,MAAM,MAEf,CAeA,QAAS,CACP,OAAO,KAAK,MAAM,SAAS,CACzB,kBAAmB,KAAK,MAAM,kBAC9B,KAAM,KAAK,MAAM,YACjB,WAAY,KAAK,MAAM,WACvB,WAAY,IAAM,CAChB,KAAK,UACP,EACD,CACH,CACF,CAEAwnL,GAAqB,aAAe,CAGlC,MAAO,EACT,EAEAA,GAAqB,UAAY,CAC/B,iBAAkBn3G,EAAU,KAAK,WACjC,kBAAmBA,EAAU,KAC7B,GAAIA,EAAU,OACd,MAAOA,EAAU,OAGjB,SAAUA,EAAU,KAAK,UAC3B,EAEA,MAAMq/B,IAAsB,IAAM,CAChC,MAAM+3E,EAAoBT,IAAA,EACpBU,EAAyBR,IAAA,EACzBS,EAA+BP,IAAA,EAWrC,MATwB,CAACzkL,EAAOsC,KACvB,CAEL,kBAAmBwiL,EAAkB9kL,EAAOsC,CAAK,EACjD,YAAayiL,EAAuB/kL,EAAOsC,CAAK,EAChD,WAAY0iL,EAA6BhlL,EAAOsC,CAAK,EACrD,qBAAsBk/I,IAAwBxhJ,CAAK,GAIzD,EAEAilL,GAAe/7F,GACb6jB,IACA,CACE,iBAAA4zC,GAAA,CAEJ,EAAEkkC,EAAoB,EChGhB/6G,IAAU9uE,GAAU,OAAO,CAYjC,CAAC,EAEYkqL,IAAqB,CAACllL,EAAQ8pE,IAASppE,IAAW,CAC7D,OAAQA,EAAO,MACb,KAAK8/I,GAAiB,QACpB,OAAOxgJ,EAAM,QAAQ,CAACU,EAAO,KAAK,OAAQA,EAAO,KAAK,WAAW,EAAG,CAClE,WAAY,GACZ,YAAa,KACb,MAAO,KACR,EAEH,KAAK8/I,GAAiB,QACpB,IAAI2kC,EAAa,GAOjB,GAAIzkL,EAAO,SAAS,OAAO,QAAQ,SAAW,KAC5CykL,EAAazkL,EAAO,SAAS,SACxB,CACL,IAAI0kL,EAAgBplL,EAAM,MAAM,CAACU,EAAO,KAAK,OAAQA,EAAO,KAAK,YAAa,MAAM,CAAC,EAEjF2kL,EACA3kL,EAAO,KAAK,cAAgB6+I,GAAY,aAE1C8lC,KAAqBppM,EAAE,WAEvBopM,KAAqBppM,EAAE,GAGrB,OAAOmpM,EAAkB,IAC3BA,EAAgBA,EACb,WACA,UACA,IAAI7mL,GACIA,EAAK,MACb,EAEH6mL,EAAgB,GAGlBD,EAAajyJ,GAAOkyJ,EAAe1kL,EAAO,SAAS,IAAI,EACvDykL,EAAa/xJ,GAAS+xJ,EAAY,CAAClpM,EAAGE,IAAMkpM,EAAcppM,CAAC,IAAMopM,EAAclpM,CAAC,CAAC,CACnF,CAEA,OAAO6jB,EACJ,QAAQ,CAACU,EAAO,KAAK,OAAQA,EAAO,KAAK,WAAW,EAAG,CACtD,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACR,EACA,QACC,CAACA,EAAO,KAAK,OAAQA,EAAO,KAAK,YAAa,YAAY,EAC1DA,EAAO,SAAS,QAEjB,MAAM,CAACA,EAAO,KAAK,OAAQA,EAAO,KAAK,YAAa,MAAM,EAAG1F,GAAU,OAAOmqL,CAAU,CAAC,EAE9F,KAAK3kC,GAAiB,QACpB,OAAOxgJ,EAAM,QAAQ,CAACU,EAAO,KAAK,OAAQA,EAAO,KAAK,WAAW,EAAG,CAClE,WAAY,GACZ,gBAAiB,KACjB,MAAOA,EAAO,MACf,EAEH,QACE,OAAOV,CAAA,CAEb,EC1FA,MAAqBslL,WAAuBp7F,YAAU,CA+BpD,YAAY5nF,EAAO,CACjB,MAAMA,CAAK,EAEX,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,qBAAuB,KAAK,qBAAqB,KAAK,IAAI,EAC/D,KAAK,mBAAqB,KAAK,mBAAmB,KAAK,IAAI,CAC7D,CAEA,mBAAoB,CAClB,KAAK,WAAa,KAAK,MAAM,UAC7B,KAAK,QAAU,KAAK,uBACpB,KAAK,sBACP,CAEA,oBAAqB,CACnB,GAAI,KAAK,MAAM,WAAa,KAAK,SAAU,CACzC,MAAMijL,EAAgB,KAAK,iBAAiB,KAAK,eAAe,EAChEA,EAAc,UACZA,EAAc,aACd,KAAK,mBACL,KAAK,gBACP,KAAK,SAAW,EAClB,CACA,KAAK,sBACP,CAEA,sBAAuB,CACrB,KAAK,uBACL,KAAK,0BACP,CAEA,oBAAqB,CACnB,IAAIC,EAAU,GAEd,MAAMC,EAAc,CAClB,IAAI,SAAU,CACZD,EAAU,EACZ,GAGF,GAAI,CACF,SAAS,iBAAiB,OAAQ,KAAMC,CAAW,EACnD,SAAS,oBAAoB,OAAQ,KAAMA,CAAW,CACxD,MAAY,CAEZ,CACA,OAAOD,CACT,CAEA,sBAAuB,CACrB,IAAItuJ,EAAU,KAAK,MAAM,WAEzB,OAAI,KAAK,qBACPA,EAAU,CACR,WAAY,KAAK,MAAM,WACvB,QAAS,IAGXA,EAAU,CACR,QAAS,IAGNA,CACT,CAGA,iBAAiBu2G,EAAQ,CACvB,KAAK,cAAgBA,CACvB,CAEA,0BAA2B,CACzB,IAAIi4C,EAAW,OACX,KAAK,MAAM,YAAc,KAC3BA,EAAW,KAAK,gBAAgB,YAGlCA,EAAS,oBACP,aACA,KAAK,mBACL,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,WAE7C,CAEA,sBAAuB,CACrB,IAAIA,EAAW,OACX,KAAK,MAAM,YAAc,KAC3BA,EAAW,KAAK,iBAAiB,KAAK,eAAe,GAGvDA,EAAS,oBACP,SACA,KAAK,eACL,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,YAE3CA,EAAS,oBACP,SACA,KAAK,eACL,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,WAE7C,CAEA,iBAAiB9tJ,EAAI,CACnB,MAAM+tJ,EACJ,KAAK,MAAM,iBAAmB,KAAK,MAAM,kBAC3C,OAAIA,IAGG/tJ,GAAMA,EAAG,WAClB,CAEA,YAAYt1B,EAAO,CACjB,OAAOA,CACT,CAEA,sBAAuB,CACrB,MAAMijL,EAAgB,KAAK,iBAAiB,KAAK,eAAe,EAEhE,GAAI,CAAC,KAAK,MAAM,SAAW,CAACA,EAC1B,OAGF,IAAIG,EAAW,OACX,KAAK,MAAM,YAAc,KAC3BA,EAAWH,GAGbG,EAAS,iBACP,aACA,KAAK,mBACL,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,YAE3CA,EAAS,iBACP,SACA,KAAK,eACL,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,YAE3CA,EAAS,iBACP,SACA,KAAK,eACL,KAAK,QAAU,KAAK,QAAU,KAAK,MAAM,YAGvC,KAAK,MAAM,aACb,KAAK,gBAET,CAEA,mBAAmBrpM,EAAG,CAGhBA,EAAE,SAAW,GAAK,CAAC,KAAK,sBAC1BA,EAAE,gBAEN,CAEA,gBAAiB,CACf,MAAMu7C,EAAK,KAAK,gBACV8tJ,EAAW,OACXE,EAAa,KAAK,iBAAiBhuJ,CAAE,EAE3C,IAAIx4C,EACJ,GAAI,KAAK,MAAM,UAAW,CACxB,MAAMygD,EACJ,SAAS,iBAAmB,SAAS,KAAK,YAAc,SAAS,KAC7DgmJ,EACJH,EAAS,cAAgB,OACrBA,EAAS,YACT7lJ,EAAI,UACN,KAAK,MAAM,UACbzgD,EAASymM,EAETzmM,EAAS,KAAK,gBAAgBw4C,EAAIiuJ,CAAS,CAE/C,MAAW,KAAK,MAAM,UACpBzmM,EAASwmM,EAAW,UAEpBxmM,EAASw4C,EAAG,aAAeguJ,EAAW,UAAYA,EAAW,aAK7DxmM,EAAS,OAAO,KAAK,MAAM,SAAS,GACnCw4C,GAAMA,EAAG,eAAiB,OAE3B,KAAK,uBACL,KAAK,mBAAqBguJ,EAAW,aACrC,KAAK,gBAAkBA,EAAW,UAE9B,OAAO,KAAK,MAAM,UAAa,aACjC,KAAK,MAAM,SAAU,KAAK,YAAc,CAAE,EAC1C,KAAK,SAAW,IAGtB,CAEA,gBAAgBhuJ,EAAIiuJ,EAAW,CAC7B,OAAKjuJ,EAKH,KAAK,qBAAqBA,CAAE,GAC3BA,EAAG,aAAeiuJ,EAAY,OAAO,aAL/B,CAOX,CAEA,qBAAqBjuJ,EAAI,CACvB,OAAKA,EAGEA,EAAG,UAAY,KAAK,qBAAqBA,EAAG,YAAY,EAFtD,CAGX,CAEA,QAAS,CACP,MAAMkuJ,EAAc,KAAK,YAAY,KAAK,KAAK,EACzC,CACJ,SAAAvmG,EACA,QAAAr8B,EACA,QAAA6iI,EACA,YAAAC,EACA,UAAAC,EACA,OAAAx4C,EACA,SAAAy4C,EACA,UAAAC,EACA,IAAApnM,EACA,UAAA0nD,EACA,WAAA2/I,EACA,UAAAC,EACA,gBAAAC,EACA,GAAGhkL,CAAA,EACDwjL,EAEJxjL,EAAM,IAAMpb,GAAQ,CAClB,KAAK,gBAAkBA,EACnBnI,GACFA,EAAImI,CAAI,CAEZ,EAEA,MAAMq/L,EAAgB,CAAChnG,CAAQ,EAC/B,OAAIwmG,IACEt4C,EACFw4C,EAAYM,EAAc,QAAQ94C,CAAM,EAAI84C,EAAc,KAAK94C,CAAM,EAC5D,KAAK,gBACdw4C,EACIM,EAAc,QAAQ,KAAK,aAAa,EACxCA,EAAc,KAAK,KAAK,aAAa,IAGtC/4G,EAAM,cAActqB,EAAS5gD,EAAOikL,CAAa,CAC1D,CACF,CAzREr7H,GADmBo6H,GACZ,YAAY,CACjB,SAAU53G,EAAU,KAAK,WACzB,QAASA,EAAU,KACnB,QAASA,EAAU,KACnB,YAAaA,EAAU,KACvB,UAAWA,EAAU,KACrB,OAAQA,EAAU,KAClB,SAAUA,EAAU,KAAK,WACzB,UAAWA,EAAU,OACrB,IAAKA,EAAU,KACf,gBAAiBA,EAAU,KAC3B,UAAWA,EAAU,OACrB,WAAYA,EAAU,KACtB,UAAWA,EAAU,OAGvBxiB,GAjBmBo6H,GAiBZ,eAAe,CACpB,QAAS,MACT,QAAS,GACT,YAAa,GACb,UAAW,EACX,IAAK,KACL,UAAW,IACX,UAAW,GACX,UAAW,GACX,WAAY,GACZ,OAAQ,KACR,gBAAiB,OCpBrB,MAAMrsE,IAAa,CAAC,CAAE,WAAAyrE,EAAY,WAAAvrE,CAAA,IAChC,CAACurE,GAAc5rK,GAAQ4rK,EAAW,QAAQ,KAAK,EAAI,KACjDhwF,MAAC,OAAI,UAAU,mDACb,SAAAA,MAAC8T,GAAA,CAAO,QAAS2Q,EACf,SAAAzkB,MAACsd,GAAA,CAAiB,KAAK,MAAO,SAAAlpC,EAAG,kBAAkB,EAAE,EACvD,EACF,EAME09G,GAAc,CAAC,CACnB,KAAA54L,EAAO,GACP,WAAA82L,EACA,WAAAvrE,EACA,YAAAstE,EACA,UAAAj5L,EACA,eAAAk5L,CACF,IACE39E,OAACu8E,GAAA,CACC,SAAUnsE,EACV,QAAS,CAACutE,EAAe,UAAYhC,GAAc,CAAC5rK,GAAQ4rK,EAAW,QAAQ,KAAK,EACnF,GAAGgC,EAEH,UAAC5tK,GAAQlrB,CAAI,EAKZ8mG,MAAC,KAAE,UAAU,sDAAuD,SAAAlnG,CAAA,CAAU,EAJ9EknG,MAAC61E,IAAM,WAAW,QAChB,SAAA71E,MAACiyF,GAAA,CAAW,SAAA/4L,EAAK,OAAc64L,EAAY/jM,CAAM,CAAC,EAAE,EACtD,EAIDgkM,EAAe,UAAYhyF,MAACukB,IAAA,CAAW,WAAAyrE,EAAwB,WAAAvrE,CAAA,CAAwB,GAC1F,EAGFqtE,GAAY,aAAe,CACzB,eAAgB,CACd,SAAU,GACV,YAAa,GACb,UAAW,EACX,UAAW,GACX,UAAW,GAEf,EAEAA,GAAY,UAAY,CACtB,KAAM94G,EAAU,MAChB,WAAYA,EAAU,OACtB,YAAaA,EAAU,KAAK,WAC5B,WAAYA,EAAU,KAAK,WAC3B,eAAgBA,EAAU,MAC5B,EC9CA,MAAMw6B,IAAS/S,IAAU,CACvB,KAAM,CACJ,QAAS,KAAKA,EAAM,QAAQ,CAAC,CAAC,KAC9B,UAAWA,EAAM,QAAQ,CAAC,EAC1B,aAAcA,EAAM,QAAQ,CAAC,GAE/B,MAAO,CACL,UAAW,SACX,SAAU,GACV,cAAe,aAEjB,QAAS,CACP,gBAAiBA,EAAM,QAAQ,QAAQ,KACvC,OAAQ,GAAGA,EAAM,QAAQ,CAAC,CAAC,QAE7B,qBAAsB,CAEpB,SAAU,UAEZ,KAAM,CACJ,QAAS,GAAGA,EAAM,QAAQ,CAAC,CAAC,kBAE9B,KAAM,CACJ,MAAOA,EAAM,IAAI,OAAO,OACxB,SAAU,IAEZ,UAAW,CACT,SAAU,IAEZ,MAAO,CACL,SAAU,IAEZ,YAAa,GACb,aAAc,CACZ,MAAOA,EAAM,IAAI,OAAO,SAE5B,GAEMyxF,IAA6B,CAAC,CAClC,kBAAA9B,EACA,KAAAl3L,EACA,WAAA82L,EACA,WAAAvrE,EACA,QAAAthF,CACF,IACE68D,MAAC0G,GAAA,CACE,UAAC,CAAE,SAAArC,EAAU,WAAAoB,CAAA,IACZzF,MAAC,OAAI,UAAW78D,EAAQ,qBACtB,SAAA68D,MAAC8xF,GAAA,CAEC,KAAA54L,EACA,WAAA82L,EACA,WAAAvrE,EACA,UACE,CAAC2rE,GACDh8G,EAAG,mDAAoD,CACrD,GAAI,qBACJ,QAAS,GACT,KAAM,uEACP,EAEH,YAAa06G,GACXz6E,OAAC89E,GAAA,CAEC,QAAS,IACP1sF,EAAWpB,EAAS,0BAA0B,EAAG,CAC/C,WAAYyqF,EAAY,WACzB,EAGH,UAAA9uF,MAACoyF,GAAA,CAAU,UAAWjvJ,EAAQ,KAAM,MAAO,IACzC,SAAA68D,MAACwe,GAAA,CAAW,UAAU,OAAO,UAAWr7E,EAAQ,KAC7C,WAAG,iBAAkB,CACpB,KAAM2rJ,EAAY,4BAClB,KAAMA,EAAY,gCACnB,EACH,EACF,QACCsD,GAAA,CAAU,UAAWjvJ,EAAQ,KAAM,MAAO,IACzC,SAAA68D,MAACwe,GAAA,CAAW,UAAU,OAAO,UAAWr7E,EAAQ,UAC7C,SAAA2rJ,EAAY,UACf,EACF,EACA9uF,MAACoyF,IAAU,UAAWjvJ,EAAQ,KAAM,MAAO,GAAI,MAAM,QACnD,SAAA68D,MAACwe,GAAA,CACC,UAAU,OACV,UAAW3K,GAAW1wE,EAAQ,MAAO,CACnC,CAACA,EAAQ,WAAW,EAAG2rJ,EAAY,YACnC,CAAC3rJ,EAAQ,YAAY,EAAG2rJ,EAAY,aACrC,EAEA,SAAAA,EAAY,sBACf,CACF,IA9BK,wBAAwBA,EAAY,UAAU,GA+BrD,EA7CG,2BA+CP,EACF,EAEJ,EAGIuD,IAA8B,CAAC,CAAE,UAAArzJ,EAAW,QAAAmE,EAAS,OAAAhyB,KACzD6uF,MAACmtF,GAAA,CACC,YAAW,GACX,UAAWntF,MAACyoF,GAAA,CAAsB,OAAAt3K,CAAA,CAAgB,EAClD,KAAM,CAAC,CAAE,uBAAAu3K,EAAwB,YAAA3jC,CAAA,IAAkB2jC,GAA0B,CAAC3jC,EAE7E,UAAC,CAAE,YAAAA,CAAA,IACFA,GACE/kD,MAACmwF,GAAA,CACC,OAAAh/K,EACA,cAAe4zI,EAAY,GAC3B,YAAa8F,GAAY,aAExB,SAAAj9I,UACE,OAAI,UAAWimG,GAAW70E,EAAWmE,EAAQ,KAAM,6BAA6B,EAC/E,UAAA68D,MAAC,MAAG,UAAW78D,EAAQ,MAAQ,SAAAixC,EAAG,yCAAyC,EAAE,EAE7E4rB,MAAC+vC,GAAA,CAAQ,UAAW5sG,EAAQ,QAAS,EAErC68D,MAACoU,GAAA,CAAoB,KAAMxmG,EAAM,kBAAmB,EACpDoyF,MAACkyF,IAAA,CAA2B,QAAA/uJ,EAAmB,GAAGv1B,CAAA,CAAO,GAC3D,GAEJ,CAGN,EAGF0kL,IAAejvF,GAAWmQ,GAAM,EAAE6+E,GAA2B,ECrIvD7+E,IAAS/S,IAAU,CACvB,IAAK,CACH,OAAQ,IAEV,KAAM,CACJ,QAAS,mBAEb,GAEM8xF,IAAsB,CAAC,CAAE,kBAAAnC,EAAmB,KAAAl3L,EAAM,WAAA82L,EAAY,WAAAvrE,EAAY,QAAAthF,KAC9E68D,MAAC8xF,GAAA,CAEC,KAAA54L,EACA,WAAA82L,EACA,WAAAvrE,EACA,UACE,CAAC2rE,GACDh8G,EAAG,4CAA6C,CAC9C,GAAI,qBACJ,QAAS,GACT,KAAM,+DACP,EAEH,YAAa98C,GACX+8E,OAAC89E,GAAA,CAA2C,UAAWhvJ,EAAQ,IAC7D,UAAA68D,MAACoyF,GAAA,CAAU,UAAWjvJ,EAAQ,KAAM,MAAO,GACzC,SAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAO,SAAAoF,GAAWprF,EAAM,QAAS,UAAU,EAAE,EACtE,EACA0oE,MAACoyF,GAAA,CAAU,UAAWjvJ,EAAQ,KAC5B,SAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAO,SAAAhmF,EAAM,WAAW,KAAK,EACtD,EACA0oE,MAACoyF,IAAU,UAAWjvJ,EAAQ,KAC5B,SAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,MAAM,QAChC,SAAAhmF,EAAM,eAAiB,EACpB,IAAIA,EAAM,uBAAuB,GACjCA,EAAM,wBACZ,EACF,IAba,iBAAiBA,EAAM,EAAE,EAcxC,GA3BG,oBA6BP,EAGIk7J,IAAe,CAAC,CAAE,UAAAxzJ,EAAW,QAAAmE,EAAS,OAAAhyB,KAC1C6uF,MAACmwF,GAAA,CAAqB,OAAAh/K,EAAgB,YAAa05I,GAAY,MAC5D,SAAAj9I,GACCymG,OAAC,OAAI,UAAAr1E,EACH,UAAAghE,MAACoU,GAAA,CAAoB,KAAMxmG,EAAM,kBAAmB,EACpDoyF,MAACuyF,IAAA,CAAoB,QAAApvJ,EAAmB,GAAGv1B,CAAA,CAAO,GACpD,EAEJ,EAGF6kL,IAAepvF,GAAWmQ,GAAM,EAAEg/E,GAAY,ECvDxCh/E,IAAS/S,IAAU,CACvB,IAAK,CACH,OAAQ,IAEV,KAAM,CACJ,QAAS,mBAEb,GAEMiyF,IAAsB,CAAC,CAAE,kBAAAtC,EAAmB,KAAAl3L,EAAM,WAAA82L,EAAY,WAAAvrE,EAAY,QAAAthF,KAAc,CAC5F,IAAIwvJ,EAAY,GAEhB,OAAKhqL,EAAMzP,CAAI,IACby5L,EAAYz5L,EAAK,OAAOinL,GAASA,EAAM,iBAAiB,GAIxDngF,MAAC8xF,GAAA,CAEC,KAAMa,EACN,WAAA3C,EACA,WAAAvrE,EACA,UACE,CAAC2rE,GACDh8G,EAAG,6CAA8C,CAC/C,GAAI,qBACJ,QAAS,GACT,KAAM,gEACP,EAEH,YAAa+rG,GACX9rE,OAAC89E,GAAA,CAA2C,UAAWhvJ,EAAQ,IAC7D,UAAA68D,MAACoyF,GAAA,CAAU,UAAWjvJ,EAAQ,KAAM,MAAO,GACzC,SAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAO,SAAA6iE,EAAM,4BAA4B,EAClE,EACAngF,MAACoyF,GAAA,CAAU,UAAWjvJ,EAAQ,KAC5B,SAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAO,SAAA6iE,EAAM,UAAU,EAChD,EACAngF,MAACoyF,GAAA,CAAU,UAAWjvJ,EAAQ,KAAM,MAAO,GACzC,SAAAkxE,OAACiJ,GAAA,CAAiB,KAAK,MAAM,MAAM,QAAQ,cACvC6iE,EAAM,sBACV,EACF,IAXa,iBAAiBA,EAAM,EAAE,EAYxC,GAzBG,qBA6BX,EAEMyS,IAAe,CAAC,CAAE,UAAA5zJ,EAAW,QAAAmE,EAAS,OAAAhyB,KAC1C6uF,MAACmwF,GAAA,CAAqB,OAAAh/K,EAAgB,YAAa05I,GAAY,OAC5D,SAAAj9I,GACCymG,OAAC,OAAI,UAAAr1E,EACH,UAAAghE,MAACoU,GAAA,CAAoB,KAAMxmG,EAAM,kBAAmB,EACpDoyF,MAAC0yF,IAAA,CAAoB,QAAAvvJ,EAAmB,GAAGv1B,CAAA,CAAO,GACpD,EAEJ,EAGFilL,IAAexvF,GAAWmQ,GAAM,EAAEo/E,GAAY,EChExCp/E,IAAS,KAAO,CACpB,WAAY,CACV,UAAW,OAEf,GAEMs/E,GAAe,CAAC,CAAE,SAAAjoG,EAAU,SAAA46B,EAAU,MAAA+jD,KAAY,CAWtD,MAAMupB,EAAgB,OAAO,OAAO,GAVV,CACxB,MAAO,OACP,SAAU,WACV,UAAW,UACX,QAAS,OACT,cAAe,SACf,SAAU,EACV,SAAU,QAG+CvpB,CAAK,EAChE,OAAK/jD,IACHstE,EAAc,QAAU,OACxBA,EAAc,OAAS,EACvBA,EAAc,SAAW,UAGpB/yF,MAAC,OAAI,MAAO+yF,EAAgB,SAAAloG,CAAA,CAAS,CAC9C,EAKMmoG,GAAN,MAAMA,WAA8Bl6G,EAAM,SAAU,CAApD,kCAMEtiB,GAAA,aAAQ,CACN,SAAUw8H,GAAsB,KAAK,SAGvCx8H,GAAA,uBAAkB,CAAC7pD,EAAOpkB,IAAU,CAClC,KAAK,SAAS,CACZ,SAAUA,CAAA,CACX,CACH,GAEA,QAAS,CACP,KAAM,CAAE,QAAA46C,GAAY,KAAK,MAEzB,OACEkxE,OAACv7B,EAAM,SAAN,CACC,UAAAknB,MAACizF,GAAA,CACC,SAAS,SACT,MAAM,UACN,QAAS,CACP,KAAM9vJ,EAAQ,YAGhB,SAAAkxE,OAACoK,GAAA,CACC,MAAO,KAAK,MAAM,SAClB,SAAU,KAAK,gBACf,eAAe,UACf,UAAU,UACV,QAAQ,YAER,UAAAze,MAAC0e,GAAA,CACC,MAAOtqC,EAAG,8BAA+B,CACvC,GAAI,gBACJ,QAAS,GACT,KAAM,2BACP,EACD,MAAO4+G,GAAsB,KAAK,SAGpChzF,MAAC0e,GAAA,CACC,MAAOtqC,EAAG,8BAA+B,CACvC,GAAI,YACJ,QAAS,GACT,KAAM,2BACP,EACD,MAAO4+G,GAAsB,KAAK,OACpC,GACF,GAGFhzF,MAAC8yF,IAAa,SAAU,KAAK,MAAM,WAAaE,GAAsB,KAAK,OACzE,SAAAhzF,MAAC4yF,IAAA,CACC,UAAU,uEACV,OAAQ,KAAK,MAAM,SAEvB,EAEA5yF,MAAC8yF,IAAa,SAAU,KAAK,MAAM,WAAaE,GAAsB,KAAK,MACzE,SAAAhzF,MAACwyF,IAAA,CACC,UAAU,uEACV,OAAQ,KAAK,MAAM,QACrB,CACF,GACF,CAEJ,CACF,EAtEEh8H,GADIw8H,GACG,OAAO,CACZ,MAAO,QACP,OAAQ,WAHZ,IAAME,GAANF,GAyEA,MAAAG,IAAe9vF,GAAWmQ,GAAM,EAAE0/E,EAAqB,EC5GjDE,IAAc,CAAC,CAAE,OAAAjiL,EAAQ,iBAAAwyI,KACzBA,EAAiB,cAAc,SAAS,wBACnC3jD,MAACqyF,KAA4B,OAAAlhL,EAAgB,EAG/C6uF,MAACkzF,KAAsB,OAAA/hL,EAAgB,ECA1CqiG,IAAS/S,IAAU,CACvB,QAAS,CACP,SAAU,WACV,IAAK,EACL,MAAO,EACP,MAAOA,EAAM,QAAQ,QAAQ,KAEjC,GAMM4yF,IAAkB,CAAC,CAAE,QAAAlwJ,EAAS,OAAAhyB,EAAQ,iBAAAwyI,EAAkB,UAAA2vC,KAC5Dj/E,OAAC,OAAI,UAAU,+CACb,UAAArU,MAAC2W,GAAA,CAAW,QAAS28E,EAAW,UAAWnwJ,EAAQ,QACjD,SAAA68D,MAAC0sF,KAAQ,EACX,EACA1sF,MAACupF,GAAA,CAAyB,OAAAp4K,EAAgB,kBAAiB,GAAC,EAE5D6uF,MAAC,OAAI,UAAU,+CACZ,YAAoBA,MAACozF,IAAA,CAAY,OAAAjiL,EAAgB,iBAAAwyI,CAAA,CAAoC,EACxF,GACF,EAGF4vC,IAAelwF,GAAWmQ,GAAM,EAAE6/E,GAAe,ECrBjD,MAAMG,WAAwB16G,EAAM,aAAc,CAAlD,kCACEtiB,GAAA,uBAAkB,IAAM,CACtB,KAAK,MAAM,sBAAsB,KAAK,MAAM,MAAM,CACpD,GAEA,QAAS,CACP,KAAM,CAAE,2BAAA2tF,EAA4B,iBAAAR,EAAkB,OAAAxyI,CAAA,EAAW,KAAK,MAEtE,aACGmrI,GAAA,CAAK,MAAOloE,EAAG,4BAA4B,EAC1C,SAAA4rB,MAACyoF,GAAA,CAAsB,OAAAt3K,EACpB,UAAC,CAAE,uBAAAu3K,CAAA,IACFr0E,OAACv7B,EAAM,SAAN,CACC,UAAAknB,MAACoU,GAAA,CACC,KAAM+vC,GAA8B,CAACR,GAAoB+kC,CAAA,GAE3D1oF,MAAC+8C,IAAA,CACC,OAAA5rI,EACA,iBAAAwyI,EACA,UAAW,KAAK,iBAClB,EACF,EAEJ,EACF,CAEJ,CACF,CAEA6vC,GAAgB,aAAe,CAC7B,OAAQ,IACV,EAEA,MAAMziG,IAAkB,KAAO,IAE/B0iG,IAAel5H,GACbmqF,GAAA,EACAlwD,GACAzD,IACA,CACE,sBAAAoyF,EAAA,CACF,CACD,EAAEqQ,EAAe,2CCzDlBv8E,GAAiB,CAChB,YAAe,EACf,eAAkB,EAClB,eAAkB,EAClB,WAAc,qDCJf,IAAIA,EAAOnwH,GAAA,EAEX,SAAS4sM,EAAWliL,EAAM,CACzB,KAAK,KAAOylG,EAAK,eACjB,KAAK,KAAOzlG,CACb,CAEA,OAAAkiL,EAAW,UAAY,CAEtB,UAAY,SAASt7K,EAAQ,CAC5B,OAAO,KAAK,KAAK,MACnB,EAEC,MAAQ,SAASA,EAAQ,CACxB,QAASrlB,EAAI,EAAGA,EAAI,KAAK,KAAK,OAAQA,IAErCqlB,EAAO,IAAI,KAAK,KAAK,WAAWrlB,CAAC,EAAG,CAAC,CAExC,GAGA4gM,GAAiBD,8CCrBjBE,GAAiB,CAChB,EAAI,EACJ,EAAI,EACJ,EAAI,EACJ,EAAI,qDCHL,IAAIC,EAAM/sM,GAAA,EAEV,SAASgtM,EAAUC,EAAYC,EAAW,CACzC,KAAK,WAAaD,EAClB,KAAK,UAAaC,CACnB,CAEA,OAAAF,EAAU,eAAiB,CAQ1B,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,CAAC,EAGT,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,CAAC,EAGT,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,EAAE,EAGX,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,EAAE,EACX,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,EAAE,EAGX,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,GAAG,EACb,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,GAGxBA,EAAU,YAAc,SAASG,EAAYC,EAAmB,CAE/D,IAAIC,EAAUL,EAAU,gBAAgBG,EAAYC,CAAiB,EAErE,GAAIC,GAAW,KACd,MAAM,IAAI,MAAM,6BAA+BF,EAAa,sBAAwBC,CAAiB,EAOtG,QAJIniL,EAASoiL,EAAQ,OAAS,EAE1Bj7L,EAAO,IAAI,MAENnG,EAAI,EAAGA,EAAIgf,EAAQhf,IAM3B,QAJIoD,EAAQg+L,EAAQphM,EAAI,EAAI,CAAC,EACzBghM,EAAaI,EAAQphM,EAAI,EAAI,CAAC,EAC9BihM,EAAaG,EAAQphM,EAAI,EAAI,CAAC,EAEzBmnG,EAAI,EAAGA,EAAI/jG,EAAO+jG,IAC1BhhG,EAAK,KAAK,IAAI46L,EAAUC,EAAYC,CAAS,CAAC,EAIhD,OAAO96L,CACR,EAEA46L,EAAU,gBAAkB,SAASG,EAAYC,EAAmB,CAEnE,OAAOA,EAAiB,CACxB,KAAKL,EAAI,EACR,OAAOC,EAAU,gBAAgBG,EAAa,GAAK,EAAI,CAAC,EACzD,KAAKJ,EAAI,EACR,OAAOC,EAAU,gBAAgBG,EAAa,GAAK,EAAI,CAAC,EACzD,KAAKJ,EAAI,EACR,OAAOC,EAAU,gBAAgBG,EAAa,GAAK,EAAI,CAAC,EACzD,KAAKJ,EAAI,EACR,OAAOC,EAAU,gBAAgBG,EAAa,GAAK,EAAI,CAAC,EACzD,QACC,MACF,CACA,EAEAG,GAAiBN,mDC1SjB,SAASO,GAAc,CACtB,KAAK,OAAS,IAAI,MAClB,KAAK,OAAS,CACf,CAEA,OAAAA,EAAY,UAAY,CAEvB,IAAM,SAASnpM,EAAO,CACrB,IAAIopM,EAAW,KAAK,MAAMppM,EAAQ,CAAC,EACnC,OAAU,KAAK,OAAOopM,CAAQ,IAAO,EAAIppM,EAAQ,EAAO,IAAM,CAChE,EAEC,IAAM,SAASqpM,EAAKxiL,EAAQ,CAC3B,QAAShf,EAAI,EAAGA,EAAIgf,EAAQhf,IAC3B,KAAK,QAAWwhM,IAASxiL,EAAShf,EAAI,EAAO,IAAM,CAAC,CAEvD,EAEC,gBAAkB,UAAW,CAC5B,OAAO,KAAK,MACd,EAEC,OAAS,SAASsC,EAAK,CAEtB,IAAIi/L,EAAW,KAAK,MAAM,KAAK,OAAS,CAAC,EACrC,KAAK,OAAO,QAAUA,GACzB,KAAK,OAAO,KAAK,CAAC,EAGfj/L,IACH,KAAK,OAAOi/L,CAAQ,GAAM,MAAU,KAAK,OAAS,GAGnD,KAAK,QACP,GAGAE,GAAiBH,kDCPjB,QA9BII,EAAS,CAEZ,KAAO,SAASttM,EAAG,CAElB,GAAIA,EAAI,EACP,MAAM,IAAI,MAAM,QAAUA,EAAI,GAAG,EAGlC,OAAOstM,EAAO,UAAUttM,CAAC,CAC3B,EAEC,KAAO,SAASA,EAAG,CAElB,KAAOA,EAAI,GACVA,GAAK,IAGN,KAAOA,GAAK,KACXA,GAAK,IAGN,OAAOstM,EAAO,UAAUttM,CAAC,CAC3B,EAEC,UAAY,IAAI,MAAM,GAAG,EAEzB,UAAY,IAAI,MAAM,GAAG,GAIjB4L,EAAI,EAAGA,EAAI,EAAGA,IACtB0hM,EAAO,UAAU1hM,CAAC,EAAI,GAAKA,EAE5B,QAASA,EAAI,EAAGA,EAAI,IAAKA,IACxB0hM,EAAO,UAAU1hM,CAAC,EAAI0hM,EAAO,UAAU1hM,EAAI,CAAC,EACzC0hM,EAAO,UAAU1hM,EAAI,CAAC,EACtB0hM,EAAO,UAAU1hM,EAAI,CAAC,EACtB0hM,EAAO,UAAU1hM,EAAI,CAAC,EAE1B,QAASA,EAAI,EAAGA,EAAI,IAAKA,IACxB0hM,EAAO,UAAUA,EAAO,UAAU1hM,CAAC,CAAC,EAAKA,EAG1C,OAAA2hM,GAAiBD,kDC3CjB,IAAIC,EAAO5tM,GAAA,EAEX,SAAS6tM,EAAaJ,EAAKhgM,EAAO,CAEjC,GAAIggM,EAAI,QAAU,KACjB,MAAM,IAAI,MAAMA,EAAI,OAAS,IAAMhgM,CAAK,EAKzC,QAFI7J,EAAS,EAENA,EAAS6pM,EAAI,QAAUA,EAAI7pM,CAAM,GAAK,GAC5CA,IAGD,KAAK,IAAM,IAAI,MAAM6pM,EAAI,OAAS7pM,EAAS6J,CAAK,EAChD,QAASxB,EAAI,EAAGA,EAAIwhM,EAAI,OAAS7pM,EAAQqI,IACxC,KAAK,IAAIA,CAAC,EAAIwhM,EAAIxhM,EAAIrI,CAAM,CAE9B,CAEA,OAAAiqM,EAAa,UAAY,CAExB,IAAM,SAASzpM,EAAO,CACrB,OAAO,KAAK,IAAIA,CAAK,CACvB,EAEC,UAAY,UAAW,CACtB,OAAO,KAAK,IAAI,MAClB,EAEC,SAAW,SAASvD,EAAG,CAItB,QAFI4sM,EAAM,IAAI,MAAM,KAAK,UAAS,EAAK5sM,EAAE,UAAS,EAAK,CAAC,EAE/CoL,EAAI,EAAGA,EAAI,KAAK,UAAS,EAAIA,IACrC,QAASmnG,EAAI,EAAGA,EAAIvyG,EAAE,UAAS,EAAIuyG,IAClCq6F,EAAIxhM,EAAImnG,CAAC,GAAKw6F,EAAK,KAAKA,EAAK,KAAK,KAAK,IAAI3hM,CAAC,CAAC,EAAK2hM,EAAK,KAAK/sM,EAAE,IAAIuyG,CAAC,EAAG,EAIxE,OAAO,IAAIy6F,EAAaJ,EAAK,CAAC,CAChC,EAEC,IAAM,SAAS5sM,EAAG,CAEjB,GAAI,KAAK,UAAS,EAAKA,EAAE,UAAS,EAAK,EACtC,OAAO,KAOR,QAJIitM,EAAQF,EAAK,KAAK,KAAK,IAAI,CAAC,CAAC,EAAKA,EAAK,KAAK/sM,EAAE,IAAI,CAAC,CAAC,EAEpD4sM,EAAM,IAAI,MAAM,KAAK,UAAS,CAAE,EAE3BxhM,EAAI,EAAGA,EAAI,KAAK,UAAS,EAAIA,IACrCwhM,EAAIxhM,CAAC,EAAI,KAAK,IAAIA,CAAC,EAGpB,QAASA,EAAI,EAAGA,EAAIpL,EAAE,UAAS,EAAIoL,IAClCwhM,EAAIxhM,CAAC,GAAK2hM,EAAK,KAAKA,EAAK,KAAK/sM,EAAE,IAAIoL,CAAC,CAAC,EAAK6hM,CAAK,EAIjD,OAAO,IAAID,EAAaJ,EAAK,CAAC,EAAE,IAAI5sM,CAAC,CACvC,GAGAktM,GAAiBF,mDClEjB,IAAIG,EAAOhuM,GAAA,EACP+tM,EAAahtL,GAAA,EACb6sL,EAAO5sL,GAAA,EAEPitL,EAAgB,CACnB,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,EACb,WAAa,GAGVC,EAAS,CAET,uBAAyB,CACxB,GACA,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,GAAI,EAAE,EAClB,CAAC,EAAG,GAAI,GAAI,GAAI,EAAE,EAClB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAG,EACvB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,GAG9B,IAAO,KACP,IAAO,KACP,SAAY,MAEZ,eAAiB,SAASxjL,EAAM,CAE/B,QADI9pB,EAAI8pB,GAAQ,GACTwjL,EAAO,YAAYttM,CAAC,EAAIstM,EAAO,YAAYA,EAAO,GAAG,GAAK,GAChEttM,GAAMstM,EAAO,KAAQA,EAAO,YAAYttM,CAAC,EAAIstM,EAAO,YAAYA,EAAO,GAAG,EAE3E,OAAUxjL,GAAQ,GAAM9pB,GAAKstM,EAAO,QACzC,EAEI,iBAAmB,SAASxjL,EAAM,CAEjC,QADI9pB,EAAI8pB,GAAQ,GACTwjL,EAAO,YAAYttM,CAAC,EAAIstM,EAAO,YAAYA,EAAO,GAAG,GAAK,GAChEttM,GAAMstM,EAAO,KAAQA,EAAO,YAAYttM,CAAC,EAAIstM,EAAO,YAAYA,EAAO,GAAG,EAE3E,OAAQxjL,GAAQ,GAAM9pB,CAC3B,EAEI,YAAc,SAAS8pB,EAAM,CAI5B,QAFIyjL,EAAQ,EAELzjL,GAAQ,GACdyjL,IACAzjL,KAAU,EAGX,OAAOyjL,CACZ,EAEI,mBAAqB,SAAShB,EAAY,CACzC,OAAOe,EAAO,uBAAuBf,EAAa,CAAC,CACxD,EAEI,QAAU,SAASiB,EAAa,EAAGh7F,EAAG,CAErC,OAAQg7F,EAAW,CAEnB,KAAKH,EAAc,WAAa,OAAQ,EAAI76F,GAAK,GAAK,EACtD,KAAK66F,EAAc,WAAa,OAAO,EAAI,GAAK,EAChD,KAAKA,EAAc,WAAa,OAAO76F,EAAI,GAAK,EAChD,KAAK66F,EAAc,WAAa,OAAQ,EAAI76F,GAAK,GAAK,EACtD,KAAK66F,EAAc,WAAa,OAAQ,KAAK,MAAM,EAAI,CAAC,EAAI,KAAK,MAAM76F,EAAI,CAAC,GAAM,GAAK,EACvF,KAAK66F,EAAc,WAAa,OAAQ,EAAI76F,EAAK,EAAK,EAAIA,EAAK,GAAK,EACpE,KAAK66F,EAAc,WAAa,OAAU,EAAI76F,EAAK,EAAK,EAAIA,EAAK,GAAK,GAAK,EAC3E,KAAK66F,EAAc,WAAa,OAAU,EAAI76F,EAAK,GAAK,EAAIA,GAAK,GAAK,GAAK,EAE3E,QACC,MAAM,IAAI,MAAM,mBAAqBg7F,CAAW,CACtD,CACA,EAEI,0BAA4B,SAASC,EAAoB,CAIxD,QAFI5tM,EAAI,IAAIstM,EAAW,CAAC,CAAC,EAAG,CAAC,EAEpB9hM,EAAI,EAAGA,EAAIoiM,EAAoBpiM,IACvCxL,EAAIA,EAAE,SAAS,IAAIstM,EAAW,CAAC,EAAGH,EAAK,KAAK3hM,CAAC,CAAC,EAAG,CAAC,CAAC,EAGpD,OAAOxL,CACZ,EAEI,gBAAkB,SAAS0vH,EAAM5qH,EAAM,CAEtC,GAAI,GAAKA,GAAQA,EAAO,GAIvB,OAAO4qH,EAAI,CACX,KAAK69E,EAAK,YAAe,MAAO,IAChC,KAAKA,EAAK,eAAkB,MAAO,GACnC,KAAKA,EAAK,eAAiB,MAAO,GAClC,KAAKA,EAAK,WAAe,MAAO,GAChC,QACC,MAAM,IAAI,MAAM,QAAU79E,CAAI,CACrC,SAEgB5qH,EAAO,GAIjB,OAAO4qH,EAAI,CACX,KAAK69E,EAAK,YAAe,MAAO,IAChC,KAAKA,EAAK,eAAkB,MAAO,IACnC,KAAKA,EAAK,eAAiB,MAAO,IAClC,KAAKA,EAAK,WAAe,MAAO,IAChC,QACC,MAAM,IAAI,MAAM,QAAU79E,CAAI,CACrC,SAEgB5qH,EAAO,GAIjB,OAAO4qH,EAAI,CACX,KAAK69E,EAAK,YAAe,MAAO,IAChC,KAAKA,EAAK,eAAiB,MAAO,IAClC,KAAKA,EAAK,eAAiB,MAAO,IAClC,KAAKA,EAAK,WAAe,MAAO,IAChC,QACC,MAAM,IAAI,MAAM,QAAU79E,CAAI,CACrC,KAGM,OAAM,IAAI,MAAM,QAAU5qH,CAAI,CAEpC,EAEI,aAAe,SAAS+oM,EAAQ,CAQ/B,QANIC,EAAcD,EAAO,eAAc,EAEnCE,EAAY,EAIP5iC,EAAM,EAAGA,EAAM2iC,EAAa3iC,IAEpC,QAAS6iC,EAAM,EAAGA,EAAMF,EAAaE,IAAO,CAK9C,QAHOC,EAAY,EACZC,EAAOL,EAAO,OAAO1iC,EAAK6iC,CAAG,EAE3BhsG,EAAI,GAAIA,GAAK,EAAGA,IAErB,GAAI,EAAAmpE,EAAMnpE,EAAI,GAAK8rG,GAAe3iC,EAAMnpE,GAIxC,QAASjiG,EAAI,GAAIA,GAAK,EAAGA,IAEpBiuM,EAAMjuM,EAAI,GAAK+tM,GAAeE,EAAMjuM,GAIpCiiG,GAAK,GAAKjiG,GAAK,GAIfmuM,GAAQL,EAAO,OAAO1iC,EAAMnpE,EAAGgsG,EAAMjuM,CAAC,GACzCkuM,IAKCA,EAAY,IACfF,GAAc,EAAIE,EAAY,EAEtC,CAKK,QAAS9iC,EAAM,EAAGA,EAAM2iC,EAAc,EAAG3iC,IACxC,QAAS6iC,EAAM,EAAGA,EAAMF,EAAc,EAAGE,IAAO,CAC/C,IAAIp/L,EAAQ,EACRi/L,EAAO,OAAO1iC,EAAS6iC,CAAG,GAAQp/L,IAClCi/L,EAAO,OAAO1iC,EAAM,EAAG6iC,CAAG,GAAQp/L,IAClCi/L,EAAO,OAAO1iC,EAAS6iC,EAAM,CAAC,GAAIp/L,IAClCi/L,EAAO,OAAO1iC,EAAM,EAAG6iC,EAAM,CAAC,GAAIp/L,KAClCA,GAAS,GAAKA,GAAS,KAC1Bm/L,GAAa,EAErB,CAKK,QAAS5iC,EAAM,EAAGA,EAAM2iC,EAAa3iC,IACpC,QAAS6iC,EAAM,EAAGA,EAAMF,EAAc,EAAGE,IACpCH,EAAO,OAAO1iC,EAAK6iC,CAAG,GACrB,CAACH,EAAO,OAAO1iC,EAAK6iC,EAAM,CAAC,GAC1BH,EAAO,OAAO1iC,EAAK6iC,EAAM,CAAC,GAC1BH,EAAO,OAAO1iC,EAAK6iC,EAAM,CAAC,GAC1BH,EAAO,OAAO1iC,EAAK6iC,EAAM,CAAC,GAC3B,CAACH,EAAO,OAAO1iC,EAAK6iC,EAAM,CAAC,GAC1BH,EAAO,OAAO1iC,EAAK6iC,EAAM,CAAC,IAC/BD,GAAa,IAKhB,QAASC,EAAM,EAAGA,EAAMF,EAAaE,IACpC,QAAS7iC,EAAM,EAAGA,EAAM2iC,EAAc,EAAG3iC,IACpC0iC,EAAO,OAAO1iC,EAAK6iC,CAAG,GACrB,CAACH,EAAO,OAAO1iC,EAAM,EAAG6iC,CAAG,GAC1BH,EAAO,OAAO1iC,EAAM,EAAG6iC,CAAG,GAC1BH,EAAO,OAAO1iC,EAAM,EAAG6iC,CAAG,GAC1BH,EAAO,OAAO1iC,EAAM,EAAG6iC,CAAG,GAC3B,CAACH,EAAO,OAAO1iC,EAAM,EAAG6iC,CAAG,GAC1BH,EAAO,OAAO1iC,EAAM,EAAG6iC,CAAG,IAC/BD,GAAa,IAShB,QAFII,EAAY,EAEPH,EAAM,EAAGA,EAAMF,EAAaE,IACpC,QAAS7iC,EAAM,EAAGA,EAAM2iC,EAAa3iC,IAChC0iC,EAAO,OAAO1iC,EAAK6iC,CAAG,GACzBG,IAKH,IAAId,EAAQ,KAAK,IAAI,IAAMc,EAAYL,EAAcA,EAAc,EAAE,EAAI,EACzE,OAAAC,GAAaV,EAAQ,GAEdU,CACZ,GAGA,OAAAK,GAAiBX,mDCtRjB,IAAIY,EAAU9uM,IAAA,EACVstM,EAAUvsL,IAAA,EACV2sL,EAAY1sL,IAAA,EACZ6tL,EAAOzoL,IAAA,EACP2nL,EAAaznL,GAAA,EAEjB,SAASyoL,EAAO5B,EAAYC,EAAmB,CAC9C,KAAK,WAAaD,EAClB,KAAK,kBAAoBC,EACzB,KAAK,QAAU,KACf,KAAK,YAAc,EACnB,KAAK,UAAY,KACjB,KAAK,SAAW,EACjB,CAGA,IAAIh7K,EAAQ28K,EAAO,UAEnB,OAAA38K,EAAM,QAAU,SAAS1H,EAAM,CAC9B,IAAI8tC,EAAU,IAAIs2I,EAAQpkL,CAAI,EAC9B,KAAK,SAAS,KAAK8tC,CAAO,EAC1B,KAAK,UAAY,IAClB,EAEApmC,EAAM,OAAS,SAASw5I,EAAK6iC,EAAK,CACjC,GAAI7iC,EAAM,GAAK,KAAK,aAAeA,GAAO6iC,EAAM,GAAK,KAAK,aAAeA,EACxE,MAAM,IAAI,MAAM7iC,EAAM,IAAM6iC,CAAG,EAEhC,OAAO,KAAK,QAAQ7iC,CAAG,EAAE6iC,CAAG,CAC7B,EAEAr8K,EAAM,eAAiB,UAAW,CACjC,OAAO,KAAK,WACb,EAEAA,EAAM,KAAO,UAAW,CAEvB,GAAI,KAAK,WAAa,EAAG,CACxB,IAAI+6K,EAAa,EACjB,IAAKA,EAAa,EAAGA,EAAa,GAAIA,IAAc,CAKnD,QAJI6B,EAAW1B,EAAQ,YAAYH,EAAY,KAAK,iBAAiB,EAEjE77K,EAAS,IAAIo8K,EACbuB,EAAiB,EACZhjM,EAAI,EAAGA,EAAI+iM,EAAS,OAAQ/iM,IACpCgjM,GAAkBD,EAAS/iM,CAAC,EAAE,UAG/B,QAASA,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IAAK,CAC9C,IAAIye,EAAO,KAAK,SAASze,CAAC,EAC1BqlB,EAAO,IAAI5G,EAAK,KAAM,CAAC,EACvB4G,EAAO,IAAI5G,EAAK,UAAS,EAAImkL,EAAK,gBAAgBnkL,EAAK,KAAMyiL,CAAU,CAAC,EACxEziL,EAAK,MAAM4G,CAAM,CACrB,CACG,GAAIA,EAAO,mBAAqB29K,EAAiB,EAChD,KACJ,CACE,KAAK,WAAa9B,CACpB,CACC,KAAK,SAAS,GAAO,KAAK,mBAAkB,CAAE,CAC/C,EAEA/6K,EAAM,SAAW,SAAS28F,EAAMq/E,EAAa,CAE5C,KAAK,YAAc,KAAK,WAAa,EAAI,GACzC,KAAK,QAAU,IAAI,MAAM,KAAK,WAAW,EAEzC,QAASxiC,EAAM,EAAGA,EAAM,KAAK,YAAaA,IAAO,CAEhD,KAAK,QAAQA,CAAG,EAAI,IAAI,MAAM,KAAK,WAAW,EAE9C,QAAS6iC,EAAM,EAAGA,EAAM,KAAK,YAAaA,IACzC,KAAK,QAAQ7iC,CAAG,EAAE6iC,CAAG,EAAI,IAE5B,CAEC,KAAK,0BAA0B,EAAG,CAAC,EACnC,KAAK,0BAA0B,KAAK,YAAc,EAAG,CAAC,EACtD,KAAK,0BAA0B,EAAG,KAAK,YAAc,CAAC,EACtD,KAAK,2BAA0B,EAC/B,KAAK,mBAAkB,EACvB,KAAK,cAAc1/E,EAAMq/E,CAAW,EAEhC,KAAK,YAAc,GACtB,KAAK,gBAAgBr/E,CAAI,EAGtB,KAAK,WAAa,OACrB,KAAK,UAAYggF,EAAO,WAAW,KAAK,WAAY,KAAK,kBAAmB,KAAK,QAAQ,GAG1F,KAAK,QAAQ,KAAK,UAAWX,CAAW,CACzC,EAEAh8K,EAAM,0BAA4B,SAASw5I,EAAK6iC,EAAM,CAErD,QAAShsG,EAAI,GAAIA,GAAK,EAAGA,IAExB,GAAI,EAAAmpE,EAAMnpE,GAAK,IAAM,KAAK,aAAempE,EAAMnpE,GAE/C,QAASjiG,EAAI,GAAIA,GAAK,EAAGA,IAEpBiuM,EAAMjuM,GAAK,IAAM,KAAK,aAAeiuM,EAAMjuM,IAEzC,GAAKiiG,GAAKA,GAAK,IAAMjiG,GAAK,GAAKA,GAAK,IACpC,GAAKA,GAAKA,GAAK,IAAMiiG,GAAK,GAAKA,GAAK,IACpC,GAAKA,GAAKA,GAAK,GAAK,GAAKjiG,GAAKA,GAAK,EACxC,KAAK,QAAQorK,EAAMnpE,CAAC,EAAEgsG,EAAMjuM,CAAC,EAAI,GAEjC,KAAK,QAAQorK,EAAMnpE,CAAC,EAAEgsG,EAAMjuM,CAAC,EAAI,GAIrC,EAEA4xB,EAAM,mBAAqB,UAAW,CAKrC,QAHI88K,EAAe,EACf3hL,EAAU,EAELthB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAE3B,KAAK,SAAS,GAAMA,CAAC,EAErB,IAAIuiM,EAAYK,EAAK,aAAa,IAAI,GAElC5iM,GAAK,GAAKijM,EAAgBV,KAC7BU,EAAeV,EACfjhL,EAAUthB,EAEb,CAEC,OAAOshB,CACR,EAEA6E,EAAM,gBAAkB,SAAS+8K,EAAWC,EAAel2L,EAAO,CAEjE,IAAIm2L,EAAQF,EAAU,qBAAqBC,EAAel2L,CAAK,EAC3Do2L,EAAK,EAET,KAAK,KAAI,EAET,QAAS1jC,EAAM,EAAGA,EAAM,KAAK,QAAQ,OAAQA,IAI5C,QAFIhjE,EAAIgjE,EAAM0jC,EAELb,EAAM,EAAGA,EAAM,KAAK,QAAQ7iC,CAAG,EAAE,OAAQ6iC,IAAO,CAExD,IAAIv9L,EAAIu9L,EAAMa,EACVX,EAAO,KAAK,QAAQ/iC,CAAG,EAAE6iC,CAAG,EAE5BE,IACHU,EAAM,UAAU,EAAG,GAAG,EACtBA,EAAM,OAAOn+L,EAAG03F,CAAC,EACjBymG,EAAM,OAAOn+L,EAAIo+L,EAAI1mG,CAAC,EACtBymG,EAAM,OAAOn+L,EAAIo+L,EAAI1mG,EAAI0mG,CAAE,EAC3BD,EAAM,OAAOn+L,EAAG03F,EAAI0mG,CAAE,EACtBD,EAAM,QAAO,EAEjB,CAGC,OAAOA,CACR,EAEAj9K,EAAM,mBAAqB,UAAW,CAErC,QAASqwE,EAAI,EAAGA,EAAI,KAAK,YAAc,EAAGA,IACrC,KAAK,QAAQA,CAAC,EAAE,CAAC,GAAK,OAG1B,KAAK,QAAQA,CAAC,EAAE,CAAC,EAAKA,EAAI,GAAK,GAGhC,QAASjiG,EAAI,EAAGA,EAAI,KAAK,YAAc,EAAGA,IACrC,KAAK,QAAQ,CAAC,EAAEA,CAAC,GAAK,OAG1B,KAAK,QAAQ,CAAC,EAAEA,CAAC,EAAKA,EAAI,GAAK,EAEjC,EAEA4xB,EAAM,2BAA6B,UAAW,CAI7C,QAFIm9K,EAAMV,EAAK,mBAAmB,KAAK,UAAU,EAExC5iM,EAAI,EAAGA,EAAIsjM,EAAI,OAAQtjM,IAE/B,QAASmnG,EAAI,EAAGA,EAAIm8F,EAAI,OAAQn8F,IAAK,CAEpC,IAAIw4D,EAAM2jC,EAAItjM,CAAC,EACXwiM,EAAMc,EAAIn8F,CAAC,EAEf,GAAI,KAAK,QAAQw4D,CAAG,EAAE6iC,CAAG,GAAK,KAI9B,QAAShsG,EAAI,GAAIA,GAAK,EAAGA,IAExB,QAASjiG,EAAI,GAAIA,GAAK,EAAGA,IAEpBiiG,GAAK,IAAMA,GAAK,GAAKjiG,GAAK,IAAMA,GAAK,GACnCiiG,GAAK,GAAKjiG,GAAK,EACpB,KAAK,QAAQorK,EAAMnpE,CAAC,EAAEgsG,EAAMjuM,CAAC,EAAI,GAEjC,KAAK,QAAQorK,EAAMnpE,CAAC,EAAEgsG,EAAMjuM,CAAC,EAAI,EAIvC,CAEA,EAEA4xB,EAAM,gBAAkB,SAAS28F,EAAM,CAItC,QAFIygF,EAAOX,EAAK,iBAAiB,KAAK,UAAU,EAEvC5iM,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC5B,IAAIwjM,EAAO,CAAC1gF,IAAWygF,GAAQvjM,EAAK,IAAM,EAC1C,KAAK,QAAQ,KAAK,MAAMA,EAAI,CAAC,CAAC,EAAEA,EAAI,EAAI,KAAK,YAAc,EAAI,CAAC,EAAIwjM,CACtE,CAEC,QAASxjM,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC5B,IAAIwjM,EAAO,CAAC1gF,IAAWygF,GAAQvjM,EAAK,IAAM,EAC1C,KAAK,QAAQA,EAAI,EAAI,KAAK,YAAc,EAAI,CAAC,EAAE,KAAK,MAAMA,EAAI,CAAC,CAAC,EAAIwjM,CACtE,CACA,EAEAr9K,EAAM,cAAgB,SAAS28F,EAAMq/E,EAAa,CAMjD,QAJI1jL,EAAQ,KAAK,mBAAqB,EAAK0jL,EACvCoB,EAAOX,EAAK,eAAenkL,CAAI,EAG1Bze,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAE5B,IAAIwjM,EAAO,CAAC1gF,IAAWygF,GAAQvjM,EAAK,IAAM,EAEtCA,EAAI,EACP,KAAK,QAAQA,CAAC,EAAE,CAAC,EAAIwjM,EACXxjM,EAAI,EACd,KAAK,QAAQA,EAAI,CAAC,EAAE,CAAC,EAAIwjM,EAEzB,KAAK,QAAQ,KAAK,YAAc,GAAKxjM,CAAC,EAAE,CAAC,EAAIwjM,CAEhD,CAGC,QAASxjM,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAE5B,IAAIwjM,EAAO,CAAC1gF,IAAWygF,GAAQvjM,EAAK,IAAM,EAEtCA,EAAI,EACP,KAAK,QAAQ,CAAC,EAAE,KAAK,YAAcA,EAAI,CAAC,EAAIwjM,EAClCxjM,EAAI,EACd,KAAK,QAAQ,CAAC,EAAE,GAAKA,EAAI,EAAI,CAAC,EAAIwjM,EAElC,KAAK,QAAQ,CAAC,EAAE,GAAKxjM,EAAI,CAAC,EAAIwjM,CAEjC,CAGC,KAAK,QAAQ,KAAK,YAAc,CAAC,EAAE,CAAC,EAAK,CAAC1gF,CAC3C,EAEA38F,EAAM,QAAU,SAAS1H,EAAM0jL,EAAa,CAO3C,QALIsB,EAAM,GACN9jC,EAAM,KAAK,YAAc,EACzB+jC,EAAW,EACXC,EAAY,EAEPnB,EAAM,KAAK,YAAc,EAAGA,EAAM,EAAGA,GAAO,EAIpD,IAFIA,GAAO,GAAGA,MAED,CAEZ,QAASjuM,EAAI,EAAGA,EAAI,EAAGA,IAEtB,GAAI,KAAK,QAAQorK,CAAG,EAAE6iC,EAAMjuM,CAAC,GAAK,KAAM,CAEvC,IAAImuM,EAAO,GAEPiB,EAAYllL,EAAK,SACpBikL,GAAYjkL,EAAKklL,CAAS,IAAMD,EAAY,IAAM,GAGnD,IAAInuE,EAAOqtE,EAAK,QAAQT,EAAaxiC,EAAK6iC,EAAMjuM,CAAC,EAE7CghI,IACHmtE,EAAO,CAACA,GAGT,KAAK,QAAQ/iC,CAAG,EAAE6iC,EAAMjuM,CAAC,EAAImuM,EAC7BgB,IAEIA,GAAY,KACfC,IACAD,EAAW,EAEjB,CAKG,GAFA/jC,GAAO8jC,EAEH9jC,EAAM,GAAK,KAAK,aAAeA,EAAK,CACvCA,GAAO8jC,EACPA,EAAM,CAACA,EACP,KACJ,CACA,CAEA,EAEAX,EAAO,KAAO,IACdA,EAAO,KAAO,GAEdA,EAAO,WAAa,SAAS5B,EAAYC,EAAmByC,EAAU,CAMrE,QAJIb,EAAW1B,EAAQ,YAAYH,EAAYC,CAAiB,EAE5D97K,EAAS,IAAIo8K,EAERzhM,EAAI,EAAGA,EAAI4jM,EAAS,OAAQ5jM,IAAK,CACzC,IAAIye,EAAOmlL,EAAS5jM,CAAC,EACrBqlB,EAAO,IAAI5G,EAAK,KAAM,CAAC,EACvB4G,EAAO,IAAI5G,EAAK,UAAS,EAAImkL,EAAK,gBAAgBnkL,EAAK,KAAMyiL,CAAU,CAAC,EACxEziL,EAAK,MAAM4G,CAAM,CACnB,CAIC,QADI29K,EAAiB,EACZhjM,EAAI,EAAGA,EAAI+iM,EAAS,OAAQ/iM,IACpCgjM,GAAkBD,EAAS/iM,CAAC,EAAE,UAG/B,GAAIqlB,EAAO,kBAAoB29K,EAAiB,EAC/C,MAAM,IAAI,MAAM,0BACb39K,EAAO,gBAAe,EACtB,IACC29K,EAAiB,EAClB,GAAG,EASP,IALI39K,EAAO,gBAAe,EAAK,GAAK29K,EAAiB,GACpD39K,EAAO,IAAI,EAAG,CAAC,EAITA,EAAO,kBAAoB,GAAK,GACtCA,EAAO,OAAO,EAAK,EAIpB,KAEK,EAAAA,EAAO,mBAAqB29K,EAAiB,IAGjD39K,EAAO,IAAIy9K,EAAO,KAAM,CAAC,EAErBz9K,EAAO,mBAAqB29K,EAAiB,KAGjD39K,EAAO,IAAIy9K,EAAO,KAAM,CAAC,EAG1B,OAAOA,EAAO,YAAYz9K,EAAQ09K,CAAQ,CAC3C,EAEAD,EAAO,YAAc,SAASz9K,EAAQ09K,EAAU,CAU/C,QARIprM,EAAS,EAETksM,EAAa,EACbC,EAAa,EAEbC,EAAS,IAAI,MAAMhB,EAAS,MAAM,EAClCiB,EAAS,IAAI,MAAMjB,EAAS,MAAM,EAE7BvsG,EAAI,EAAGA,EAAIusG,EAAS,OAAQvsG,IAAK,CAEzC,IAAIytG,EAAUlB,EAASvsG,CAAC,EAAE,UACtB0tG,EAAUnB,EAASvsG,CAAC,EAAE,WAAaytG,EAEvCJ,EAAa,KAAK,IAAIA,EAAYI,CAAO,EACzCH,EAAa,KAAK,IAAIA,EAAYI,CAAO,EAEzCH,EAAOvtG,CAAC,EAAI,IAAI,MAAMytG,CAAO,EAE7B,QAASjkM,EAAI,EAAGA,EAAI+jM,EAAOvtG,CAAC,EAAE,OAAQx2F,IACrC+jM,EAAOvtG,CAAC,EAAEx2F,CAAC,EAAI,IAAOqlB,EAAO,OAAOrlB,EAAIrI,CAAM,EAE/CA,GAAUssM,EAEV,IAAIE,EAASvB,EAAK,0BAA0BsB,CAAO,EAC/CE,EAAU,IAAItC,EAAWiC,EAAOvtG,CAAC,EAAG2tG,EAAO,UAAS,EAAK,CAAC,EAE1DE,EAAUD,EAAQ,IAAID,CAAM,EAChCH,EAAOxtG,CAAC,EAAI,IAAI,MAAM2tG,EAAO,UAAS,EAAK,CAAC,EAC5C,QAASnkM,EAAI,EAAGA,EAAIgkM,EAAOxtG,CAAC,EAAE,OAAQx2F,IAAK,CACjC,IAAIskM,EAAWtkM,EAAIqkM,EAAQ,UAAS,EAAKL,EAAOxtG,CAAC,EAAE,OAC5DwtG,EAAOxtG,CAAC,EAAEx2F,CAAC,EAAKskM,GAAY,EAAID,EAAQ,IAAIC,CAAQ,EAAI,CAC3D,CAEA,CAGC,QADIC,EAAiB,EACZvkM,EAAI,EAAGA,EAAI+iM,EAAS,OAAQ/iM,IACpCukM,GAAkBxB,EAAS/iM,CAAC,EAAE,WAM/B,QAHIye,EAAO,IAAI,MAAM8lL,CAAc,EAC/BpsM,EAAQ,EAEH6H,EAAI,EAAGA,EAAI6jM,EAAY7jM,IAC/B,QAASw2F,EAAI,EAAGA,EAAIusG,EAAS,OAAQvsG,IAChCx2F,EAAI+jM,EAAOvtG,CAAC,EAAE,SACjB/3E,EAAKtmB,GAAO,EAAI4rM,EAAOvtG,CAAC,EAAEx2F,CAAC,GAK9B,QAASA,EAAI,EAAGA,EAAI8jM,EAAY9jM,IAC/B,QAASw2F,EAAI,EAAGA,EAAIusG,EAAS,OAAQvsG,IAChCx2F,EAAIgkM,EAAOxtG,CAAC,EAAE,SACjB/3E,EAAKtmB,GAAO,EAAI6rM,EAAOxtG,CAAC,EAAEx2F,CAAC,GAK9B,OAAOye,CACR,EAEA+lL,GAAiB1B,mDClbjB,SAASlsL,EAAQ3X,EAAK,CAAE,OAAI,OAAO,QAAW,YAAc,OAAO,OAAO,UAAa,SAAY2X,EAAU,SAAiB3X,EAAK,CAAE,OAAO,OAAOA,CAAI,EAAa2X,EAAU,SAAiB3X,EAAK,CAAE,OAAOA,GAAO,OAAO,QAAW,YAAcA,EAAI,cAAgB,QAAUA,IAAQ,OAAO,UAAY,SAAW,OAAOA,CAAI,EAAa2X,EAAQ3X,CAAG,CAAE,CAE7V,SAAS6Y,GAAW,CAAE,OAAAA,EAAW,OAAO,QAAU,SAAUC,EAAQ,CAAE,QAAS/X,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAAE,IAAIgY,EAAS,UAAUhY,CAAC,EAAG,QAAS7E,KAAO6c,EAAc,OAAO,UAAU,eAAe,KAAKA,EAAQ7c,CAAG,IAAK4c,EAAO5c,CAAG,EAAI6c,EAAO7c,CAAG,EAAM,CAAG,OAAO4c,CAAO,EAAWD,EAAS,MAAM,KAAM,SAAS,CAAE,CAE3T,SAASsvE,EAAyBpvE,EAAQqvE,EAAU,CAAE,GAAIrvE,GAAU,KAAM,MAAO,GAAI,IAAID,EAAS,GAAQyvE,EAAa,OAAO,KAAKxvE,CAAM,EAAO7c,EAAK6E,EAAG,IAAKA,EAAI,EAAGA,EAAIwnF,EAAW,OAAQxnF,IAAO7E,EAAMqsF,EAAWxnF,CAAC,EAAO,EAAAqnF,EAAS,QAAQlsF,CAAG,GAAK,KAAa4c,EAAO5c,CAAG,EAAI6c,EAAO7c,CAAG,GAAK,GAAI,OAAO,sBAAuB,CAAE,IAAIosF,EAAmB,OAAO,sBAAsBvvE,CAAM,EAAG,IAAKhY,EAAI,EAAGA,EAAIunF,EAAiB,OAAQvnF,IAAO7E,EAAMosF,EAAiBvnF,CAAC,EAAO,EAAAqnF,EAAS,QAAQlsF,CAAG,GAAK,IAAkB,OAAO,UAAU,qBAAqB,KAAK6c,EAAQ7c,CAAG,IAAa4c,EAAO5c,CAAG,EAAI6c,EAAO7c,CAAG,GAAO,OAAO4c,CAAO,CAEzmB,SAAS6wE,EAAgBC,EAAUC,EAAa,CAAE,GAAI,EAAED,aAAoBC,GAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAI,CAEvJ,SAASC,EAAkBhxE,EAAQ8C,EAAO,CAAE,QAAS7a,EAAI,EAAGA,EAAI6a,EAAM,OAAQ7a,IAAK,CAAE,IAAIgpF,EAAanuE,EAAM7a,CAAC,EAAGgpF,EAAW,WAAaA,EAAW,YAAc,GAAOA,EAAW,aAAe,GAAU,UAAWA,IAAYA,EAAW,SAAW,IAAM,OAAO,eAAejxE,EAAQixE,EAAW,IAAKA,CAAU,CAAE,CAAE,CAE3T,SAASC,EAAaH,EAAaI,EAAYC,EAAa,CAAE,OAAID,GAAYH,EAAkBD,EAAY,UAAWI,CAAU,EAAwEJ,CAAY,CAErN,SAAS6hB,EAA2Bv4B,EAAMw4B,EAAM,CAAE,GAAIA,IAASh0F,EAAQg0F,CAAI,IAAM,UAAY,OAAOA,GAAS,YAAe,OAAOA,EAAQ,GAAIx4B,IAAS,OAAU,MAAM,IAAI,eAAe,2DAA2D,EAAK,OAAOA,CAAK,CAEvQ,SAAS24B,EAAUC,EAAU11G,EAAY,CAAE,GAAI,OAAOA,GAAe,YAAcA,IAAe,KAAQ,MAAM,IAAI,UAAU,oDAAoD,EAAK01G,EAAS,UAAY,OAAO,OAAO11G,GAAcA,EAAW,UAAW,CAAE,YAAa,CAAE,MAAO01G,EAAU,WAAY,GAAO,SAAU,GAAM,aAAc,EAAI,CAAE,CAAE,EAAO11G,IAAY,OAAO,eAAiB,OAAO,eAAe01G,EAAU11G,CAAU,EAAI01G,EAAS,UAAY11G,EAAW,CAEld,SAASu1G,EAAuBz4B,EAAM,CAAE,GAAIA,IAAS,OAAU,MAAM,IAAI,eAAe,2DAA2D,EAAK,OAAOA,CAAK,CAEpK,IAAI2T,EAAQhyF,GAAA,EAERkyF,EAAYnxE,KAIZ2vL,EAAa1vL,IAAA,EAEb8rL,EAAoB1mL,GAAA,EAExB,SAASuqL,EAA0BC,EAAK,CACtC,OACEA,EAAI,8BACJA,EAAI,2BACJA,EAAI,0BACJA,EAAI,yBACJA,EAAI,wBAA0B,CAElC,CAOA,SAASC,EAAW93J,EAAK,CAGvB,QAFI8C,EAAM,GAED5vC,EAAI,EAAGA,EAAI8sC,EAAI,OAAQ9sC,IAAK,CACnC,IAAI6kM,EAAW/3J,EAAI,WAAW9sC,CAAC,EAE3B6kM,EAAW,IACbj1J,GAAO,OAAO,aAAai1J,CAAQ,EAC1BA,EAAW,MACpBj1J,GAAO,OAAO,aAAa,IAAOi1J,GAAY,CAAC,EAC/Cj1J,GAAO,OAAO,aAAa,IAAOi1J,EAAW,EAAI,GACxCA,EAAW,OAAUA,GAAY,OAC1Cj1J,GAAO,OAAO,aAAa,IAAOi1J,GAAY,EAAE,EAChDj1J,GAAO,OAAO,aAAa,IAAOi1J,GAAY,EAAI,EAAI,EACtDj1J,GAAO,OAAO,aAAa,IAAOi1J,EAAW,EAAI,IAIjD7kM,IACA6kM,EAAW,QAAYA,EAAW,OAAU,GAAK/3J,EAAI,WAAW9sC,CAAC,EAAI,MACrE4vC,GAAO,OAAO,aAAa,IAAOi1J,GAAY,EAAE,EAChDj1J,GAAO,OAAO,aAAa,IAAOi1J,GAAY,GAAK,EAAI,EACvDj1J,GAAO,OAAO,aAAa,IAAOi1J,GAAY,EAAI,EAAI,EACtDj1J,GAAO,OAAO,aAAa,IAAOi1J,EAAW,EAAI,EAEvD,CAEE,OAAOj1J,CACT,CAEA,IAAIk1J,EAAgB,CAClB,KAAM,IACN,MAAO,IACP,QAAS,UACT,QAAS,WAEPC,EAAa,CACf,MAAO9+G,EAAU,OAAO,WACxB,KAAMA,EAAU,OAChB,MAAOA,EAAU,MAAM,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EAC3C,QAASA,EAAU,OACnB,QAASA,EAAU,QAGjB++G,GAEJ,SAAUj9F,EAAkB,CAC1BgD,EAAUi6F,EAAcj9F,CAAgB,EAExC,SAASi9F,GAAe,CACtB,IAAIvpL,EAEA+kF,EAAOnX,EAEXT,EAAgB,KAAMo8G,CAAY,EAElC,QAASvrL,EAAO,UAAU,OAAQhG,EAAO,IAAI,MAAMgG,CAAI,EAAGC,EAAO,EAAGA,EAAOD,EAAMC,IAC/EjG,EAAKiG,CAAI,EAAI,UAAUA,CAAI,EAG7B,OAAOixF,EAA2BthB,GAAQmX,EAAQnX,EAAQshB,EAA2B,MAAOlvF,EAAOupL,EAAa,WAAa,OAAO,eAAeA,CAAY,GAAG,KAAK,MAAMvpL,EAAM,CAAC,IAAI,EAAE,OAAOhI,CAAI,CAAC,CAAC,EAAG,OAAO,eAAeo3F,EAAuBxhB,CAAK,EAAG,UAAW,CACxQ,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO,OACR,EAAGmX,EAAK,CACb,CAEE,OAAAvX,EAAa+7G,EAAc,CAAC,CAC1B,IAAK,wBACL,MAAO,SAA+Bh/G,EAAW,CAC/C,IAAI4c,EAAS,KAEb,OAAO,OAAO,KAAKoiG,EAAa,SAAS,EAAE,KAAK,SAAUvwM,EAAG,CAC3D,OAAOmuG,EAAO,MAAMnuG,CAAC,IAAMuxF,EAAUvxF,CAAC,CAC9C,CAAO,CACP,CACA,EAAK,CACD,IAAK,oBACL,MAAO,UAA6B,CAClC,KAAK,OAAM,CACjB,CACA,EAAK,CACD,IAAK,qBACL,MAAO,UAA8B,CACnC,KAAK,OAAM,CACjB,CACA,EAAK,CACD,IAAK,SACL,MAAO,UAAkB,CACvB,IAAIkvG,EAAS,KAAK,MACdnuG,EAAQmuG,EAAO,MACfnrG,EAAOmrG,EAAO,KACd58F,EAAQ48F,EAAO,MACfshG,EAAUthG,EAAO,QACjBuhG,GAAUvhG,EAAO,QAEjBwhG,EAAS,IAAIV,EAAW,GAAI5D,EAAkB95L,CAAK,CAAC,EAIxD,GAHAo+L,EAAO,QAAQP,EAAWpvM,CAAK,CAAC,EAChC2vM,EAAO,KAAI,EAEP,KAAK,SAAW,KAAM,CACxB,IAAIC,EAAS,KAAK,QACdT,EAAMS,EAAO,WAAW,IAAI,EAEhC,GAAI,CAACT,EACH,OAGF,IAAIU,EAAQF,EAAO,QAEnB,GAAIE,IAAU,KACZ,OAGF,IAAIC,EAAQ9sM,EAAO6sM,EAAM,OACrBE,GAAQ/sM,EAAO6sM,EAAM,OACrBG,GAAS,OAAO,kBAAoB,GAAKd,EAA0BC,CAAG,EAC1ES,EAAO,OAASA,EAAO,MAAQ5sM,EAAOgtM,EACtCb,EAAI,MAAMa,EAAOA,CAAK,EACtBH,EAAM,QAAQ,SAAU1lC,GAAK8lC,EAAK,CAChC9lC,GAAI,QAAQ,SAAU+lC,EAAMC,EAAK,CAC/BhB,IAAQA,EAAI,UAAYe,EAAOR,GAAUD,GACzC,IAAI9pD,GAAI,KAAK,MAAMwqD,EAAM,GAAKL,CAAK,EAAI,KAAK,MAAMK,EAAML,CAAK,EACzDpxM,GAAI,KAAK,MAAMuxM,EAAM,GAAKF,EAAK,EAAI,KAAK,MAAME,EAAMF,EAAK,EAC7DZ,GAAOA,EAAI,SAAS,KAAK,MAAMgB,EAAML,CAAK,EAAG,KAAK,MAAMG,EAAMF,EAAK,EAAGpqD,GAAGjnJ,EAAC,CACtF,CAAW,CACX,CAAS,CACT,CACA,CACA,EAAK,CACD,IAAK,SACL,MAAO,UAAkB,CACvB,IAAI0xM,EAAS,KAETC,EAAU,KAAK,MACPA,EAAQ,MAC1B,IAAUrtM,EAAOqtM,EAAQ,KACPA,EAAQ,MACNA,EAAQ,QACRA,EAAQ,QAC5B,IAAUpvB,EAAQovB,EAAQ,MAChB74F,EAAa5lB,EAAyBy+G,EAAS,CAAC,QAAS,OAAQ,QAAS,UAAW,UAAW,OAAO,CAAC,EAExGC,GAAchuL,EAAS,CACzB,OAAQtf,EACR,MAAOA,GACNi+K,CAAK,EAER,OAAO1wF,EAAM,cAAc,SAAUjuE,EAAS,CAC5C,MAAOguL,GACP,OAAQttM,EACR,MAAOA,EACP,IAAK,SAAaysE,EAAO,CACvB,OAAO2gI,EAAO,QAAU3gI,CAClC,GACS+nC,CAAU,CAAC,CACpB,CACA,CAAG,CAAC,EAEKg4F,CACT,GAAEj/G,EAAM,SAAS,EAEjB,OAAO,eAAei/G,EAAc,eAAgB,CAClD,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAOF,CACT,CAAC,EACD,OAAO,eAAeE,EAAc,YAAa,CAC/C,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAOD,CACT,CAAC,EAED,IAAIgB,GAEJ,SAAUC,EAAmB,CAC3Bj7F,EAAUg7F,EAAWC,CAAiB,EAEtC,SAASD,GAAY,CACnB,OAAAn9G,EAAgB,KAAMm9G,CAAS,EAExBp7F,EAA2B,MAAOo7F,EAAU,WAAa,OAAO,eAAeA,CAAS,GAAG,MAAM,KAAM,SAAS,CAAC,CAC5H,CAEE,OAAA98G,EAAa88G,EAAW,CAAC,CACvB,IAAK,wBACL,MAAO,SAA+B//G,EAAW,CAC/C,IAAIigH,EAAS,KAEb,OAAO,OAAO,KAAKjB,EAAa,SAAS,EAAE,KAAK,SAAUvwM,EAAG,CAC3D,OAAOwxM,EAAO,MAAMxxM,CAAC,IAAMuxF,EAAUvxF,CAAC,CAC9C,CAAO,CACP,CACA,EAAK,CACD,IAAK,SACL,MAAO,UAAkB,CACvB,IAAIyxM,EAAU,KAAK,MACf1wM,EAAQ0wM,EAAQ,MAChB1tM,EAAO0tM,EAAQ,KACfn/L,EAAQm/L,EAAQ,MAChBjB,EAAUiB,EAAQ,QAClBhB,GAAUgB,EAAQ,QAClBl5F,EAAa5lB,EAAyB8+G,EAAS,CAAC,QAAS,OAAQ,QAAS,UAAW,SAAS,CAAC,EAG/Ff,EAAS,IAAIV,EAAW,GAAI5D,EAAkB95L,CAAK,CAAC,EACxDo+L,EAAO,QAAQP,EAAWpvM,CAAK,CAAC,EAChC2vM,EAAO,KAAI,EACX,IAAIE,EAAQF,EAAO,QAEnB,GAAIE,IAAU,KAUd,KAAIl1H,EAAM,GACV,OAAAk1H,EAAM,QAAQ,SAAU1lC,EAAKhjE,GAAG,CAE9B,IAAI/+F,EAAQ,KACZ+hK,EAAI,QAAQ,SAAU+lC,GAAMzgM,EAAG,CAC7B,GAAI,CAACygM,IAAQ9nM,IAAU,KAAM,CAG3BuyE,EAAI,KAAK,IAAI,OAAOvyE,EAAO,GAAG,EAAE,OAAO++F,GAAG,GAAG,EAAE,OAAO13F,EAAIrH,EAAO,KAAK,EAAE,OAAOA,EAAO,GAAG,CAAC,EAC1FA,EAAQ,KACR,MACZ,CAGU,GAAIqH,IAAM06J,EAAI,OAAS,EAAG,CACxB,GAAI,CAAC+lC,GAGH,OAGE9nM,IAAU,KAEZuyE,EAAI,KAAK,IAAI,OAAOlrE,EAAG,GAAG,EAAE,OAAO03F,GAAG,QAAQ,EAAE,OAAO13F,EAAG,GAAG,CAAC,EAG9DkrE,EAAI,KAAK,IAAI,OAAOvyE,EAAO,GAAG,EAAE,OAAO++F,GAAG,IAAI,EAAE,OAAO13F,EAAI,EAAIrH,EAAO,KAAK,EAAE,OAAOA,EAAO,GAAG,CAAC,EAGjG,MACZ,CAEc8nM,IAAQ9nM,IAAU,OACpBA,EAAQqH,EAEpB,CAAS,CACT,CAAO,EACM8gF,EAAM,cAAc,MAAOjuE,EAAS,CACzC,eAAgB,aAChB,OAAQtf,EACR,MAAOA,EACP,QAAS,OAAO,OAAO6sM,EAAM,OAAQ,GAAG,EAAE,OAAOA,EAAM,MAAM,GAC5Dr4F,CAAU,EAAGjnB,EAAM,cAAc,OAAQ,CAC1C,KAAMk/G,EACN,EAAG,SAAS,OAAOI,EAAM,OAAQ,GAAG,EAAE,OAAOA,EAAM,OAAQ,KAAK,CACxE,CAAO,EAAGt/G,EAAM,cAAc,OAAQ,CAC9B,KAAMm/G,GACN,EAAG/0H,EAAI,KAAK,EAAE,CACtB,CAAO,CAAC,EACR,CACA,CAAG,CAAC,EAEK41H,CACT,GAAEhgH,EAAM,SAAS,EAEjB,OAAO,eAAeggH,EAAW,eAAgB,CAC/C,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAOjB,CACT,CAAC,EACD,OAAO,eAAeiB,EAAW,YAAa,CAC5C,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAOhB,CACT,CAAC,EAED,IAAIjC,EAAS,SAAgBjoL,EAAO,CAClC,IAAIsrL,EAAWtrL,EAAM,SACjBmyF,EAAa5lB,EAAyBvsE,EAAO,CAAC,UAAU,CAAC,EAEzD4nF,EAAY0jG,IAAa,MAAQJ,EAAYf,EACjD,OAAOj/G,EAAM,cAAc0c,EAAWuK,CAAU,CAClD,EAEA,OAAA81F,EAAO,aAAehrL,EAAS,CAC7B,SAAU,UACTgtL,CAAa,EAChBhvG,GAAiBgtG,qCCvVjB,MAAMsD,WAAergH,EAAM,SAAU,CAgBnC,QAAS,CACP,KAAM,CAAE,MAAAvwF,EAAO,KAAAgD,EAAM,iBAAA6tM,EAAkB,gBAAAC,EAAiB,MAAAv/L,CAAA,EAAU,KAAK,MAEvE,OACEkmG,MAAC61F,IAAA,CACC,MAAAttM,EACA,KAAAgD,EACA,QAAS6tM,EACT,QAASC,EACT,MAAAv/L,CAAA,EAGN,CACF,CA5BE08D,GADI2iI,GACG,YAAY,CACjB,MAAOngH,EAAU,OAAO,WACxB,KAAMA,EAAU,OAChB,iBAAkBA,EAAU,OAC5B,gBAAiBA,EAAU,OAC3B,MAAOA,EAAU,SAGnBxiB,GATI2iI,GASG,eAAe,CACpB,KAAM,IACN,iBAAkB,UAClB,gBAAiB,UACjB,MAAO,MCdX,MAAMG,IAAa,CAAC,CAAE,MAAA/wM,EAAO,KAAAgD,EAAM,iBAAA6tM,EAAkB,gBAAAC,EAAiB,MAAAv/L,KACpEkmG,MAACm5F,GAAA,CACC,MAAA5wM,EACA,KAAAgD,EACA,iBAAA6tM,EACA,gBAAAC,EACA,MAAAv/L,CAAA,CACF,ECEI05G,IAAS/S,IAAU,CACvB,QAAS,CACP,SAAU,WACV,IAAK,EACL,MAAO,EACP,MAAOA,EAAM,QAAQ,QAAQ,KAEjC,GAKMs8C,IAAO,CAAC,CAAE,QAAA55G,EAAS,sBAAA4lJ,EAAuB,kBAAAwQ,EAAmB,OAAApoL,EAAQ,YAAA4zI,CAAA,IACzE1wC,OAAC,OAAI,UAAU,uBACb,UAAArU,MAAC2W,GAAA,CAAW,QAAS4iF,EAAmB,UAAWp2J,EAAQ,QACzD,SAAA68D,MAAC0sF,KAAQ,EACX,EACA1sF,MAACupF,IAAyB,OAAAp4K,EAAgB,EAC1C6uF,MAAC,MAAG,UAAU,2BAA2B,EACzCA,MAAC,OAAI,UAAU,8BACZ,SAAA+oF,EACC/oF,MAACoU,GAAA,CAAoB,KAAI,GAAC,EAE1BC,OAAC,OAAI,UAAU,gDACb,UAAArU,MAACsd,GAAA,CACC,KAAK,MACL,MAAM,SACN,UAAU,8DAET,WAAG,0CAA2C,CAC7C,GAAI,gEACJ,QAAS,GACT,KAAM,mDACN,0BAA2BynC,EAAY,0BACxC,IAGH/kD,MAAC,OAAI,UAAU,kDACb,SAAAA,MAACs5F,IAAA,CAAW,MAAOv0C,EAAY,MAAO,KAAM,IAAK,EACnD,GACF,EAEJ,GACF,EAGFy0C,IAAen2F,GAAWmQ,GAAM,EAAEupC,GAAI,ECrCtC,MAAM08C,WAAuB3gH,EAAM,SAAU,CAC3C,QAAS,CACP,KAAM,CAAE,OAAA3nE,EAAQ,aAAAw1I,CAAA,EAAiB,KAAK,MAEtC,OACE3mD,MAACyoF,IAAsB,OAAAt3K,EACpB,UAAC,CAAE,aAAAi3K,EAAc,uBAAAM,KAChBA,GAA0B/hC,GAAgBviI,GAAQgkK,CAAY,GAAK,CAACA,EAAa,CAAC,EAChFpoF,MAACoU,GAAA,CAAoB,KAAI,GAAC,EAE1BpU,MAAC8oF,IAAA,CACC,OAAA33K,EACA,cAAei3K,EAAa,CAAC,EAAE,GAC/B,aAAc,GAEb,UAAC,CAAE,YAAArjC,EAAa,sBAAAgkC,EAAuB,kBAAAI,EAAmB,kBAAAoQ,KACzDllF,OAACioC,GAAA,CACC,MAAOloE,EAAG,6BAA8B,CACtC,GAAI,QACJ,QAAS,GACT,KAAM,gCACP,EAED,UAAA4rB,MAAC+8C,IAAA,CAGC,sBAAuBgsC,GAAyBhkC,EAAY,QAAU,KACtE,kBAAAw0C,EACA,OAAApoL,EACA,YAAA4zI,CAAA,GAEF/kD,MAAC,OAAI,UAAU,qDACb,eAAC8T,GAAA,CAAO,KAAK,QAAQ,UAAU,aAAa,QAASq1E,EACnD,SAAAnpF,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,oCAAoC,EAC1C,EACF,EACF,IACF,GAKV,CAEJ,CACF,CAEAqlH,GAAe,UAAY,CACzB,GAAIzgH,EAAU,OACd,OAAQA,EAAU,MACpB,EAEA,MAAM+X,IAAkB,KAAO,IAE/B2oG,IAAen/H,GACbusF,GACAtyD,GACAzD,IACA,EAAC,CACF,EAAE0oG,EAAc,EC5EXjmF,IAAS/S,IAAU,CACvB,QAAS,CACP,QAAS,KAAKA,EAAM,QAAQ,CAAC,CAAC,MAEhC,MAAO,CACL,cAAeA,EAAM,QAAQ,CAAC,EAC9B,aAAc,aAAaA,EAAM,QAAQ,QAAQ,IAAI,IAEvD,QAAS,CACP,UAAWA,EAAM,QAAQ,CAAC,EAE9B,GAEMk5F,IAAU,CAAC,CAAE,QAAAx2J,EAAS,MAAAm2C,EAAO,SAAAuR,CAAA,IACjCwpB,OAAC,OAAI,UAAWlxE,EAAQ,QACtB,UAAA68D,MAACsd,IAAiB,UAAWn6E,EAAQ,MAAO,KAAK,MAC9C,SAAAm2C,EACH,EAEA0mB,MAAC,OAAI,UAAW78D,EAAQ,QAAU,SAAA0nD,CAAA,CAAS,GAC7C,EAGF+uG,GAAev2F,GAAWmQ,GAAM,EAAEmmF,GAAO,ECXnC58C,IAAO,CAAC,CACZ,WAAA1+B,EACA,iBAAAqmE,EACA,SAAAhwE,EACA,MAAAyrE,EACA,WAAAwB,EACA,YAAA58B,EACA,OAAA5zI,EACA,KAAA6rC,CACF,IACEq3D,OAAC,OACC,UAAU,2DAEV,UAAArU,MAACoU,GAAA,CAAoB,KAAMiK,CAAA,CAAY,QAEtCtH,GAAA,CAAW,KAAMA,GAAW,KAAK,SAAU,MAAO4qE,EAAY,EAE/D3hF,MAACupF,GAAA,CAAyB,OAAAp4K,EAAgB,kBAAmB,GAAO,EAEpE6uF,MAAC,OAAI,UAAU,mBACb,SAAAA,MAAC25F,GAAA,CACC,MAAOvlH,EAAG,wCAAyC,CACjD,GAAI,0BACJ,QAAS,GACT,KAAM,uCACP,EAED,SAAA4rB,MAACqiF,IAAA,CAAsB,OAAAlxK,EAAgB,YAAA4zI,CAAA,CAA0B,IAErE,EAEA/kD,MAAC25F,GAAA,CACC,MAAOvlH,EAAG,qCAAsC,CAC9C,GAAI,qBACJ,QAAS,GACT,KAAM,kCACP,EAEA,SAAAp3B,GACCgjD,MAACykF,GAAA,CACC,WAAApmE,EACA,iBAAAqmE,EACA,SAAAhwE,EACA,mBACG4I,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,UAAU,SAC9C,UAAAlpC,EAAG,4BAA4B,EAAE,IAEjC+rG,GAASA,EAAM,OAAS,SAAM9J,GAAA,CAAM,MAAO8J,EAAM,qBAAsB,GAC1E,EAEF,KAAAnjI,CAAA,EACF,EAEJ,EACF,ECrDF,MAAM68I,YAAkB/gH,EAAM,aAAc,CAA5C,kCACEtiB,GAAA,oBAAe,CAACuuF,EAAau7B,EAAoBH,IAAU,CACzD,KAAK,MAAM,wBAAwBp7B,EAAau7B,EAAoBH,CAAK,CAC3E,GAEA,QAAS,CACP,KAAM,CAAE,kBAAAN,EAAmB,OAAA1uK,EAAQ,aAAAg0K,EAAc,iBAAA1R,GAAqB,KAAK,MAO3E,OACEzzE,MAACyoF,GAAA,CAAsB,OAAAt3K,EACpB,UAAC,CAAE,YAAA4zI,EAAa,uBAAA2jC,CAAA,IACfA,EACE1oF,MAACoU,GAAA,CAAoB,KAAI,GAAC,EAE1BpU,MAAC0hF,GAAA,CAAe,OAAAvwK,EAAgB,YAAA4zI,EAC7B,UAAC,CAAE,MAAAo7B,EAAO,YAAAsC,EAAa,eAAAb,EAAgB,WAAAD,CAAA,IACtCttE,OAACioC,GAAA,CAAK,MAAOloE,EAAG,2BAA2B,EACzC,UAAA4rB,MAAC+8C,IAAA,CACC,YAAAgI,EACA,WAAY68B,EACZ,iBAAkB,CAACa,GAAeb,GAAkB,CAACzB,EAAM,OAC3D,SAAU,CAACnO,EAAe,CAAE,mBAAAsO,CAAA,IAC1B,KAAK,aAAav7B,EAAau7B,EAAoBH,CAAK,EAE1D,MAAAA,EACA,WAAAwB,EACA,KAAM9B,EACN,OAAA1uK,CAAA,GAGF6uF,MAAC+W,GAAA,CACC,KAAMA,GAAW,KAAK,SACtB,MAAOouE,EACP,QAAS,CACP,QAAS,IAAM1R,GAAiB,CAClC,EACF,EACF,EAEJ,EAGN,CAEJ,CACF,CAEA,MAAM1iF,IAAkBzlF,IAAU,CAChC,aAAcskK,GAAgBtkK,CAAK,EACnC,kBAAmBs0K,GAAqBt0K,CAAK,CAC/C,GAEMolF,IAAqB,CACzB,wBAAA2vF,IACA,iBAAA5M,EACF,EAEAqmB,IAAev/H,GACbusF,GACAtyD,GACAzD,IACAL,GAAA,CACD,EAAEmpG,GAAS,ECtENrmF,IAAS/S,IAAU,CACvB,KAAM,CACJ,UAAW,OACX,QAAS,OACT,cAAe,SACf,QAASA,EAAM,QAAQ,CAAC,GAE1B,QAAS,CACP,QAAS,OACT,eAAgB,SAChB,cAAe,SACf,KAAM,EACN,cAAeA,EAAM,QAAQ,CAAC,GAEhC,OAAQ,CACN,QAAS,cACT,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,YAAa,CACX,UAAWA,EAAM,QAAQ,CAAC,EAC1B,MAAOA,EAAM,IAAI,OAAO,QAE1B,WAAY,CACV,MAAO,MACP,UAAWA,EAAM,QAAQ,CAAC,EAE9B,GAEA,MAAMs8C,YAAajkE,EAAM,aAAc,CACrC,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,GAEP,CAACA,EAAM,OAASA,EAAM,MAAM,SAAW,IACzCA,EAAM,mBAEV,CAGA,QAAS,CACP,KAAM,CAAE,QAAAu1B,EAAS,kBAAA42J,EAAmB,gBAAAC,EAAiB,MAAA7Z,EAAO,MAAA1/E,CAAA,EAAU,KAAK,MAE3E,cACGuvC,GAAA,CAAK,UAAS,GAAC,UAAW7sG,EAAQ,KACjC,UAAAkxE,OAAC27B,IAAK,KAAI,GAAC,GAAI,GAAI,UAAW7sG,EAAQ,QACpC,UAAA68D,MAACsd,IAAiB,KAAK,MAAM,UAAU,gBACpC,SAAAlpC,EAAG,uCAAuC,EAC7C,EACA4rB,MAACsd,GAAA,CACC,KAAK,MACL,UAAU,gBACV,wBAAyB,CACvB,OAAQlpC,EAAG,+CAAgD,CACzD,UAAW,gBAAgBjxC,EAAQ,MAAM,KACzC,gBAAiBk8I,GAAe,2BAC7BC,GAAA,CAAc,MAAA7+E,EACb,eAAC6c,GAAA,CAAiB,KAAK,MAAM,UAAS,GAAC,UAAWn6E,EAAQ,OACxD,SAAA68D,MAACq2E,GAAA,CAAM,MAAO8J,EAAM,qBAAsB,EAC5C,EACF,GAEF,QAAS,UACV,EACH,GAEFngF,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,YAC7C,WAAG,2CAA4C,CAC9C,IAAKu/E,GAAWy9D,EAAM,aAAc,UAAU,EAC9C,KAAM39D,GAAW29D,EAAM,aAAc,GAAG,EACzC,EACH,GACF,EACAngF,MAACgwC,IAAK,KAAI,GAAC,UAAW7sG,EAAQ,QAC3B,UAACx6B,EAAM0rE,GAAW,gBAAgB,CAAC,SACjCipC,GAAA,CAAiB,KAAK,MAAO,SAAAjpC,GAAW,gBAAgB,EAAE,EAE/D,EACAggC,OAAC27B,IAAK,KAAI,GAAC,UAAS,GAAC,QAAQ,SAAS,WAAW,SAC/C,UAAAhwC,MAAC8T,IAAO,QAAQ,WAAW,UAAW3wE,EAAQ,WAAY,QAAS62J,EACjE,SAAAh6F,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,wCAAwC,EAC9C,EACF,QACC0/B,GAAA,CAAO,UAAW3wE,EAAQ,WAAY,QAAS42J,EAC9C,SAAA/5F,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAS,GACnC,SAAAlpC,EAAG,0CAA0C,EAChD,EACF,GACF,GACF,CAEJ,CACF,CAEA,MAAA6lH,IAAe52F,GAAWmQ,GAAM,EAAEsK,GAAUi/B,GAAI,CAAC,EC9FjD,MAAMm9C,WAAyBphH,EAAM,aAAc,CAAnD,kCACEtiB,GAAA,yBAAoBypH,GAAiB,CACnC,KAAK,MAAM,WAAWA,CAAa,EACnC,KAAK,MAAM,WAAW57E,GAAS,cAAc,CAAC,CAChD,GAEA7tC,GAAA,uBAAkBypH,GAAiB,CACjC,KAAK,MAAM,WAAWA,CAAa,EACnC,KAAK,MAAM,WAAW57E,GAAS,aAAa,CAAC,CAC/C,GAEA,QAAS,CACP,KAAM,CAAE,OAAAlzF,EAAQ,WAAAyvK,GAAe,KAAK,MAEpC,OACE5gF,MAACyoF,IAAsB,OAAAt3K,EACpB,UAAC,CAAE,YAAA4zI,EAAa,uBAAA2jC,CAAA,IACfA,GAA0B,CAAC3jC,QACxB3wC,GAAA,CAAoB,KAAI,GAAC,EAE1BpU,MAAC0hF,GAAA,CAAe,OAAAvwK,EAAgB,YAAA4zI,EAC7B,UAAC,CAAE,MAAAo7B,CAAA,IACFngF,MAACs8C,GAAA,CACC,MAAOloE,EAAG,mCAAmC,EAI7C,OAAQ,IAAM,CACZwsG,GACF,EAEA,SAAA5gF,MAAC+8C,IAAA,CACC,kBAAmB,IAAM,KAAK,kBAAkBgI,EAAY,EAAE,EAC9D,gBAAiB,IAAM,KAAK,gBAAgBA,EAAY,EAAE,EAC1D,MAAAo7B,CAAA,EACF,GAGN,EAGN,CAEJ,CACF,CAEA+Z,GAAiB,aAAe,CAC9B,OAAQ,IACV,EAEA,MAAMnpG,IAAkB,IAAM,CAAC,EAEzBL,IAAqB,CACzB,WAAAkwF,GACA,WAAAn7E,EACF,EAEA00F,IAAe3lG,GACbzD,IACAL,GACF,EAAEwpG,EAAgB,ECxEZE,GAAc,CAClB,GAAGr2F,GAMH,aAAc,IAAIjI,GAAM,oBAAqB,mBAAmB,EAEhE,yBAA0B,IAAIA,GAC5B,gCACA,8CAIF,YAAa,IAAIA,GAAM,mBAAoB,kBAAkB,EAE7D,oBAAqB,IAAIA,GAAM,4BAA6B,0BAA0B,EAEtF,mBAAoB,IAAIA,GACtB,mCACA,iCAGF,cAAe,IAAIA,GAAM,mBAAoB,YAAY,EAGzD,aAAc,IAAIA,GAAM,oBAAqB,mBAAmB,EAKhE,WAAY,IAAIA,GAAM,aAAc,6BAA8B,EAAK,EAEvE,qBAAsB,IAAIA,GACxB,wBACA,mDAGF,0BAA2B,IAAIA,GAC7B,8BACA,kEAGF,mBAAoB,IAAIA,GACtB,sBACA,qDAGF,cAAe,IAAIA,GACjB,yBACA,2DAGF,eAAgB,IAAIA,GAClB,0BACA,4DAGF,gBAAiB,IAAIA,GACnB,mBACA,6DAGF,qBAAsB,IAAIA,GACxB,wBACA,kEAGF,qBAAsB,IAAIA,GAAM,uBAAwB,qBAAqB,EAE7E,gBAAiB,IAAIA,GACnB,2BACA,4DAEJ,EC/CMu+F,IAAgB,CAEpBhyD,GACA,aACA,UACF,EAGMiyD,IAAa,CAACjgK,EAAU,KAAO,CAAC,GAAGggK,IAAe,GAAGhgK,CAAO,EAE5DkgK,GAAkBxhD,GAAUD,GAAeC,EAAQ,IAAM/4C,MAAC,QAAI,CAAE,EAOhEkE,IAAS,CACb,CACE,WAAYk2F,GAAY,KACxB,QAAS,IAAM,MAKjB,CACE,WAAYA,GAAY,cACxB,QAASrxC,GAAA,EAKX,CACE,WAAYqxC,GAAY,MACxB,QAAS3uB,EAAA,EAEX,CACE,WAAY2uB,GAAY,SACxB,QAASjtB,GAAA,EAEX,CACE,WAAYitB,GAAY,gBACxB,QAASntB,GAAA,EAKX,CACE,WAAYmtB,GAAY,WACxB,QAASnhB,GAAA,EAKX,CACE,WAAYmhB,GAAY,qBACxB,QAAS1gB,EAAA,EAEX,CACE,WAAY0gB,GAAY,0BACxB,QAAS1gB,EAAA,EAEX,CACE,WAAY0gB,GAAY,mBACxB,QAAShgB,GAAA,EAEX,CACE,WAAYggB,GAAY,cACxB,QAAS5a,GAAA,EAEX,CACE,WAAY4a,GAAY,eACxB,QAASza,GAAA,EAEX,CACE,WAAYya,GAAY,gBACxB,QAASzS,GAAA,EAEX,CACE,WAAYyS,GAAY,qBACxB,QAASvS,GAAA,EAEX,CACE,WAAYuS,GAAY,gBACxB,QAAS3N,GAAA,EAEX,CACE,WAAY2N,GAAY,qBACxB,QAASjP,IACT,MAAO,CACL,aAAc,GAChB,EAKF,CACE,WAAYiP,GAAY,aACxB,QAAS5G,GAAA,EAEX,CACE,WAAY4G,GAAY,yBACxB,QAASG,GAAgB,IAAA7hD,GAAA,IACvB,OAA6D,wBAAwC,IACvG,EAEF,CACE,WAAY0hD,GAAY,YACxB,QAASP,GAAA,EAEX,CACE,WAAYO,GAAY,mBACxB,QAASG,GAAgB,IAAA7hD,GAAA,IACvB,OAA8C,wBAA6B,IAC7E,EAEF,CACE,WAAY0hD,GAAY,oBACxB,QAASF,GAAA,EAEX,CACE,WAAYE,GAAY,aACxB,QAASX,GAAA,EAOX,CACE,WAAYW,GAAY,eACxB,QAASG,GAAgB,IAAA7hD,GAAA,IACvB,OAA+C,wBAAuB,IACxE,CAEJ,EAEA8hD,IAAet2F,IAAO,IAAIzJ,IACnBA,EAAM,QACTA,EAAM,MAAQ,IAGXA,EAAM,MAAM,QACfA,EAAM,MAAM,MAAQ6/F,IAAW,EAAE,GAG5B7/F,EACR,ECzGD,IAAI99D,GAAQ,KACRypJ,GAAc,GAalB,SAASqU,IAAQn5G,EAAY,CAC3B,GAAI8kG,GACF,OAAOzpJ,GAGTypJ,GAAc,GAMd,OAAO,iBAAiB,qBAAsBz5K,GAC5C0iI,GAAiB1iI,GAAO,OAAQ,oBAAoB,GAEtD,OAAO,iBAAiB,OAAQ,IAAM,CAChBqnD,GAAem7E,EAAsB,IAEvD,QAAQ,KAAK,2EAA2E,EACxFl7E,GAAkBk7E,EAAsB,EAE5C,CAAC,EAEDv6E,GAAA,EAEA0sB,EAAW,OAASk5G,IAMpB,MAAMnhJ,EAAcioC,EAAW,YAC/Bz+D,GAAcw2B,CAAW,EAEzB89E,GAAoB71C,EAAW,SAAS,EAKnC34E,EAAM24E,EAAW,MAAM,IAC1B/wF,GACE,CAACoY,EAAM24E,EAAW,OAAO,MAAM,GAAK,CAAC34E,EAAM24E,EAAW,OAAO,SAAS,EACtE,mDAGF5I,GAAa,eAAe4I,EAAW,OAAO,MAAM,EACpD5I,GAAa,aAAa4I,EAAW,OAAO,SAAS,GAQhD34E,EAAM24E,EAAW,QAAQ,IAE5BA,EAAW,SAAWA,EAAW,SAASA,EAAW,YAAY,GAAG,EAEpEo3D,GAAA,mCAAAwB,CAAA,mCAAAhvJ,EAAA,EAA6B,0BAAAgvJ,CAAA,WAC1B,KAAK,CAAC,CAAE,mBAAAA,KAAyB,CAChCA,EAAmB54D,CAAU,CAC/B,CAAC,EACA,MAAM7wF,GAAS,CACdgmE,GAAO,MAAM,iCAAkChmE,CAAK,EACpD4+I,GAAiB5+I,EAAO,UAAU,CACpC,CAAC,GAQP,MAAMqe,EAAUnB,GAAA,EAEhB62F,GAAgB11F,CAAO,EAEvBA,EAAQ,OAAOnE,GACb+tE,GAAa,SAASD,GAAO,kBAAmB,CAC9C,SAAA9tE,CAAA,CACD,GAOH22E,EAAW,YAAc2xC,GAAqB3xC,CAAU,EAMxD,MAAM4lB,EAAQ5lB,EAAW,MACzB2lB,GAAcC,CAAK,EAMnB,MAAMwS,EAAWp4B,EAAW,SAC5Bm4B,GAAiBC,CAAQ,EAMzB,MAAM4C,EAAah7B,EAAW,WAC9B+6B,GAAyBC,CAAU,EAMnC,MAAM7Z,EAAUnhB,EAAW,QAC3BkhB,GAAgBC,CAAO,EAMvB3B,GAAcxf,EAAW,KAAK,EAMzB34E,EAAM24E,EAAW,WAAW,GAE/B+mB,GAAuB/mB,EAAW,WAAW,EAQ/C,MAAMxpB,EAAiBwpB,EAAW,gBAAkB,GAGpDxpB,EAAe,KAAOqvC,GAAA,EAGtBrvC,EAAe,GAAK,CAClB,GAAGA,EAAe,GAClB,MAAO,CACL,QAASxxD,GAAU,OAAO06F,GAAA,CAAuB,EACnD,EAGF2wB,GAAiBrwC,EAAW,QAAQ,EAGpCA,EAAW,eAAiBxpB,EAE5Bn7B,GAAQqyG,GAAe1tD,CAAU,EACjC5kD,GAAcC,EAAK,EAKnBsnE,GAAe3iB,EAAW,MAAM,EAChCqjB,GAAoBrjB,EAAW,WAAW,EAM1CtO,GAAcsO,EAAW,IAAI,EAKxB34E,EAAM24E,EAAW,SAAS,IAC7BA,EAAW,UAAYA,EAAW,UAAUA,EAAW,YAAY,GAAG,EACtED,GAAoBC,CAAU,GAOhC,MAAMo5G,EAAuBp5G,EAAW,qBACxC/wF,GAAUkY,GAAWiyL,CAAoB,EAAG,6CAA6C,EACzF5jH,GAAW,wBAAwB4jH,CAAoB,EAMvD,MAAMC,EAAethJ,EAAY,OAGjC,OAAAshJ,EAAa,YAAcx+J,GAC3Bw+J,EAAa,IAAMr5G,EAAW,YAAY,IAC1Cq5G,EAAa,mBAAqBt+J,GAClCs+J,EAAa,mBAAqBv+J,GAClCu+J,EAAa,mBAAqBp+J,GAClCo+J,EAAa,mBAAqBr+J,GAElCm6B,GAAO,UAAUkkI,CAAY,EAC7BthJ,EAAY,OAASshJ,EAGrBjiH,GAAa,SAASD,GAAO,YAAa,CAAE,WAAA6I,EAAY,EAMxDguD,GAAA,EAEO3yG,EACT,CAEA,MAAMi+J,YAAwB9hH,EAAM,SAAU,CAG5C,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EACX,MAAM0zE,EAAa1zE,EAAM,WACzB,KAAK,YAAc0zE,EAAW,KAC9B,KAAK,MAAQm5G,IAAQn5G,CAAU,CACjC,CAEA,mBAAoB,CAElBtO,GAAc,KAAK,WAAW,CAChC,CAEA,QAAS,CACP,aAAQ4lE,GAAA,CAAI,MAAO,KAAK,MAAO,CACjC,CACF,CCtTA,MAAMiiD,IAAcv5G,GAAc,CAChC,MAAMw5G,EAAcx5G,EAAW,aAAe,SAAS,eAAe,MAAM,EAE5Ey5G,GAAS,OACP/6F,MAACg7F,cAAA,CACC,SAAAh7F,MAAC46F,IAAA,CAAgB,WAAAt5G,EAAwB,EAC3C,EACAw5G,CAAA,CAEJ,ECjBAv5G,IAAe,CACb,eAAgB,CACd,KAAM,EACN,OAAQ,CACN,SAAU,KACV,aAAc,KAChB,EAEF,MAAO,CACL,MAAO,CACL,KAAM,CACJ,KAAM,KACN,QAAS,IAEX,WAAY,CACV,KAAM,KACN,QAAS,IAEX,cAAe,KACjB,EAEF,MAAO,CACL,mBAAoB,IAEtB,SAAU,CACR,oBAAqB,CACnB,KAAM,eACR,EAEF,KAAM,CACJ,MAAO,KACP,aAAc,CACZ,KAAM,CACJ,OAAQ,CACN,CACE,KAAM,aACN,SAAU,IAEZ,CACE,KAAM,YACN,SAAU,IAEZ,CACE,KAAM,QACN,SAAU,IAEZ,CACE,KAAM,QACN,SAAU,IAEZ,CACE,KAAM,WACN,SAAU,IAEZ,CACE,KAAM,0BACN,SAAU,GACZ,CACF,CACF,CACF,CAEJ,ECzDA05G,IAAe,CAKb,CACE,WAAY90D,GAAe,QAC3B,UAAWn6H,GAAUA,EAAO,KAAK,SACjC,gBAAiBm8F,GAAgB,iBAEnC,CACE,WAAYikE,GAAqB,QACjC,UAAWpgK,GAAUA,EAAO,KAAK,SACjC,gBAAiBm8F,GAAgB,gBAErC,ECpBA+yF,IAAe,GCuBT1nF,IAAS/S,IAAU,CACvB,KAAM,CACJ,MAAO,QAET,MAAO,CACL,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,QAAS,CACP,QAAS,OACT,WAAY,UAEd,MAAO,CACL,MAAO,OACP,MAAO,IAET,WAAY,CACV,UAAW,UAEb,QAAS,CACP,MAAO,OACP,OAAQ,GACR,WAAYA,EAAM,QAAQ,CAAC,EAC3B,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAY,QAEd,WAAY,CACV,MAAO,OACP,OAAQ,GACR,WAAYA,EAAM,QAAQ,CAAC,EAC3B,YAAaA,EAAM,QAAQ,CAAC,EAC5B,WAAY,QAEd,UAAW,CACT,MAAO,OACP,MAAO,qBACP,UAAW,GACX,UAAW,GACX,SAAU,SACV,QAAS,cACT,aAAc,WACd,qBAAsB,EACtB,qBAAsB,WACtB,WAAY,QAEd,iBAAkB,CAChB,QAAS,KAAKA,EAAM,QAAQ,CAAC,CAAC,MAEhC,OAAQ,CACN,MAAO,QAET,kBAAmB,CACjB,MAAOA,EAAM,IAAI,OAAO,OAE1B,kBAAmB,CACjB,MAAOA,EAAM,QAAQ,QAAQ,KAEjC,GAEA,MAAM06F,WAAiCriH,EAAM,SAAU,CAKrD,YAAYlrE,EAAO,CACjB,MAAMA,CAAK,EALb4oD,GAAA,aAAQ,CACN,MAAO,KAAK,MAAM,QAgBpBA,GAAA,gBAAW,IAAM,KAAK,MAAM,iBAAiBorC,GAAU,4BAA4B,GAEnFprC,GAAA,gBAAW,IAAM,CACf,KAAM,CACJ,MAAAznE,EACA,KAAA8a,EACA,kBAAAqpK,EACA,0BAAAE,EACA,iBAAAnxE,CAAA,EACE,KAAK,MAEL,KAAK,MAAM,MAAM,YAAc,KAAK,MAAM,MAAM,QAClDixE,EAAkBnkL,CAAK,EAEvBqkL,EAA0BrkL,EAAO8a,EAAM,KAAK,MAAM,KAAK,EAEzDo4F,EAAiBL,GAAU,4BAA4B,CACzD,GAEAprC,GAAA,kBAAa,IACX,KAAK,MAAM,MAAM,SAAW,GAC5B,KAAK,MAAM,MAAM,YAAc,GAC/B,KAAK,MAAM,MAAM,WAAa,KAAK,MAAM,MAAM,SAhC/C,KAAK,MAAM,MAAQ,CACjB,GAAG,KAAK,MAAM,MAEd,QAAS5oD,EAAM,KAAK,MAAM,QACtBA,EAAM,KAAK,MAAM,QACjB,KAAK,IAAIA,EAAM,MAAM,SAAU,CAAC,EACpC,WAAYA,EAAM,KAAK,MAAM,WAEjC,CA0BA,QAAS,CACP,KAAM,CAAE,MAAA7e,EAAO,QAAAo0C,CAAA,EAAY,KAAK,MAEhC,OACEkxE,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAA68D,MAACkkB,GAAA,CAAY,GAAG,oCACd,SAAAlkB,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,MAC7C,SAAAixC,EAAG,iDAAiD,EACvD,EACF,EACAigC,OAAC8P,GAAA,CAAc,UAAWhhF,EAAQ,QAChC,UAAA68D,MAACq5E,GAAA,CACC,GAAG,aACH,UAAWl2I,EAAQ,MACnB,QAAS,CAAE,UAAWA,EAAQ,YAC9B,MAAO,KAAK,MAAM,MAAM,YAAc,GACtC,IAAK,EACL,IAAK,IACL,SAAU,CAACx7C,EAAGY,IAAU,CACtB,KAAK,SAAS,CACZ,MAAO,CACL,GAAG,KAAK,MAAM,MACd,WAAYA,CAAA,CACd,CACD,CACH,UAED+0H,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,QAAS,aAEzD,EACA68D,MAACq5E,GAAA,CACC,GAAG,UACH,UAAWl2I,EAAQ,MACnB,QAAS,CAAE,UAAWA,EAAQ,YAC9B,MAAO,KAAK,MAAM,MAAM,SAAW,GACnC,IAAK,EACL,IAAK,IACL,SAAU,CAACx7C,EAAGY,IAAU,CACtB,KAAK,SAAS,CACZ,MAAO,CACL,GAAG,KAAK,MAAM,MACd,QAASA,CAAA,CACX,CACD,CACH,UAED+0H,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,WAAY,aAE5D,EACA68D,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,UAC7C,WAAM,KACT,GACF,EACA68D,MAACqlF,IACC,SAAAhxE,OAAC27B,GAAA,CAAK,UAAS,GAAC,UAAW7sG,EAAQ,iBACjC,UAAA68D,MAACgwC,GAAA,CAAK,KAAI,GAAC,GAAI,GACb,SAAAhwC,MAAC8T,GAAA,CACC,UAAW3wE,EAAQ,OACnB,QAAS,KAAK,SACd,SAAU,KAAK,aAEf,gBAACm6E,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,kBAC7C,UAAAixC,EAAG,gDAAgD,EAAG,IACtD,KAAK,MAAM,MAAM,WAAW,MAE5B,KAAK,MAAM,MAAM,SACpB,IAEJ,EACA4rB,MAACgwC,GAAA,CAAK,KAAI,GAAC,GAAI,GACb,SAAAhwC,MAAC8T,GAAA,CAAO,QAAQ,OAAO,UAAW3wE,EAAQ,OAAQ,QAAS,KAAK,SAC9D,SAAA68D,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,kBAC7C,SAAAixC,EAAG,eAAe,EACrB,EACF,EACF,GACF,EACF,GACF,CAEJ,CACF,CAEA+mH,GAAyB,gBAAkB,CACzC,qBAAsB,GACtB,kBAAmB,mCACrB,EAEAA,GAAyB,aAAe,CACtC,MAAOtnB,GAAA,CACT,EAEAsnB,GAAyB,aAAe16F,IAAU,CAChD,MAAO,CACL,SAAU,OACV,OAAQA,EAAM,QAAQ,CAAC,EAE3B,GAEA,MAAM1P,IAAkB,CAACzlF,EAAOklF,KACvB,CACL,MAAOs+E,IAAexjK,EAAOklF,CAAQ,EACrC,KAAM++E,IAAcjkK,EAAOklF,CAAQ,IAIjC4qG,GAAmC7gI,GACvCi6B,GACEzD,IACA,CACE,iBAAAkR,GACA,kBAAAixE,GACA,0BAAAE,GAAA,CACF,EAEF/vE,GAAWmQ,GAAM,CACnB,EAAE2nF,EAAwB,EAO1BC,GAAiC,gBAAkBD,GAAyB,gBAC5EC,GAAiC,aAAeD,GAAyB,aCtOzE,MAAM3nF,IAAS/S,IAAU,CACvB,KAAM,CACJ,MAAO,QAET,MAAO,CACL,MAAOA,EAAM,QAAQ,QAAQ,MAE/B,QAAS,CACP,QAAS,OACT,WAAY,UAEd,QAAS,CACP,OAAQ,EACR,QAAS,KAAKA,EAAM,QAAQ,GAAG,CAAC,MAAMA,EAAM,QAAQ,CAAC,CAAC,MAExD,OAAQ,CACN,MAAO,QAET,kBAAmB,CACjB,MAAOA,EAAM,IAAI,OAAO,OAE1B,kBAAmB,CACjB,MAAOA,EAAM,QAAQ,QAAQ,KAEjC,GAEA,MAAM46F,WAA8BviH,EAAM,SAAU,CAApD,kCACEtiB,GAAA,gBAAW,IAAM,KAAK,MAAM,iBAAiBorC,GAAU,wBAAwB,GAE/EprC,GAAA,gBAAW,IAAM,CACf,KAAM,CAAE,aAAA6rC,EAAc,QAAAD,EAAS,kBAAAiwE,EAAmB,WAAA5sE,EAAY,iBAAAxD,GAAqB,KAAK,MAExFowE,IACA5sE,EAAWpB,GAAS,iBAAiB,EAAG,CACtC,aAAAhC,EACA,QAAAD,CAAA,CACD,EACDH,EAAiBL,GAAU,wBAAwB,CACrD,GAEA,QAAS,CACP,KAAM,CAAE,OAAAr8F,EAAQ,mBAAA+8F,EAAoB,QAAAn/D,CAAA,EAAY,KAAK,MAErD,OACEkxE,OAAC,OAAI,UAAWlxE,EAAQ,KACtB,UAAA68D,MAACkkB,GAAA,CAAY,GAAG,gCACd,SAAAlkB,MAACsd,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,MAC7C,SAAAixC,EAAG,mDAAmD,EACzD,EACF,EACA4rB,MAACmkB,GAAA,CAAc,UAAWhhF,EAAQ,QAChC,eAACm6E,GAAA,CAAiB,KAAK,MACpB,SAAAlpC,EAAG,sDAAuD,CACzD,OAAA7uE,EACA,mBAAA+8F,CAAA,CACD,EACH,EACF,EACAtC,MAACqlF,IAAc,UAAWliJ,EAAQ,QAChC,SAAAkxE,OAAC27B,GAAA,CAAK,UAAS,GACb,UAAAhwC,MAACgwC,GAAA,CAAK,KAAI,GAAC,GAAI,GACb,SAAAhwC,MAAC8T,GAAA,CAAO,UAAW3wE,EAAQ,OAAQ,QAAS,KAAK,SAC/C,eAACm6E,GAAA,CAAiB,KAAK,MAAM,UAAWn6E,EAAQ,kBAC7C,SAAAixC,EAAG,kDAAmD,CACrD,mBAAAkuB,CAAA,CACD,EACH,EACF,EACF,EACAtC,MAACgwC,GAAA,CAAK,KAAI,GAAC,GAAI,GACb,SAAAhwC,MAAC8T,GAAA,CACC,QAAQ,OACR,UAAWD,GAAW1wE,EAAQ,OAAQ,cAAc,EACpD,QAAS,KAAK,SAEd,SAAA68D,MAACsd,IAAiB,KAAK,MAAM,UAAWn6E,EAAQ,kBAC7C,SAAAixC,EAAG,uDAAuD,EAC7D,GACF,CACF,GACF,EACF,GACF,CAEJ,CACF,CAEAinH,GAAsB,gBAAkB,CACtC,qBAAsB,GACtB,kBAAmB,+BACrB,EAEAA,GAAsB,aAAe56F,IAAU,CAC7C,MAAO,CACL,SAAU,OACV,OAAQA,EAAM,QAAQ,CAAC,EAE3B,GAEA,MAAM1P,IAAkB,CAACzlF,EAAOklF,KACvB,IAGH8qG,GAAiC/gI,GACrCi6B,GACEzD,IACA,CACE,kBAAAshF,GACA,WAAA5sE,GACA,iBAAAxD,EAAA,CACF,EAEFoB,GAAWmQ,GAAM,CACnB,EAAE6nF,EAAqB,EAOvBC,GAA8B,gBAAkBD,GAAsB,gBACtEC,GAA8B,aAAeD,GAAsB,aCrInE,MAAM54F,IAAU,CACd,CACE,KAAMb,GAAU,6BAChB,KAAMu5F,EAAA,EAER,CACE,KAAMv5F,GAAU,yBAChB,KAAMy5F,EAAA,CAEV,ECEM7vD,GAAkB,IAClBxW,GAAA,GAAmB,KAEd1uH,GAAU,OAAO,CACtB,GAAI,KACJ,MAAO,KACP,SAAU,KACV,UAAW,KACX,KAAM,KACP,EACQwvH,GAAA,GAAwB,KAC1BxvH,GAAU,OAAO,CACtB,GAAI,KACJ,MAAOwvH,KAAqB,MAC5B,SAAUA,KAAqB,SAC/B,UAAWA,KAAqB,UAChC,KAAMg4B,GAAS,MAChB,EACQ/3B,GAAA,GAAwB,KAC1BzvH,GAAU,OAAO,CACtB,GAAIyvH,GAAA,EACJ,MAAO,KACP,SAAU,KACV,UAAW,KACX,KAAM+3B,GAAS,UAChB,EAEIxnJ,GAAU,OAAO,CACtB,GAAI,KACJ,MAAO,KACP,SAAU,KACV,UAAW,KACX,KAAM,KACP,EAGUi1L,IAA2B,CAACjwL,EAAQkgI,GAAA,EAAmBx/H,IAAW,CAC7E,OAAQA,EAAO,MACb,KAAKiiJ,GAAmB,QACxB,KAAKE,GAAwB,QAC7B,KAAKD,GAA4B,QACjC,KAAKvJ,GAAgB,QACnB,OAAOr5I,EAAM,MAAM,CACjB,GAAIU,EAAO,SAAS,GACpB,MAAOA,EAAO,SAAS,MACvB,SAAUA,EAAO,SAAS,SAC1B,UAAWA,EAAO,SAAS,UAC3B,KAAMA,EAAO,SAAS,SACvB,EAGH,KAAK67H,GAAmB,QACtB,OAAO2D,GAAA,EAET,KAAKlF,GACH,OAAOh7H,EAAM,MAAM,CACjB,GAAI,KACJ,MAAO,KACP,SAAU,KACV,UAAW,KACX,KAAM,KACP,EAEH,QACE,OAAOA,CAAA,CAEb,EClEakwL,IAAkCpkI,GAC7C6qF,GAA0B,QAC1B,CAAC,CAAE,SAAAtrF,EAAU,SAAA75B,EAAU,KAAA3wC,EAAM,OAAA6f,KAAa,CAExC,GAAKrD,EAAMqD,EAAO,SAAS,KAAK,EAM9ByqD,GAAO,KACL,eACA,6BAA6BzqD,EAAO,SAAS,IAAI,IAAIA,EAAO,SAAS,EAAE,QARxC,CACjC,MAAMw0F,EAAeI,GAAgBjqC,GAAU,EACzC8zE,EAAWT,GAAkCxpC,EAAcx0F,EAAO,SAAS,KAAK,EAEtF7f,EAAKm0G,GAAmBmqC,CAAQ,CAAC,CACnC,CAMF,CACF,ECNMr1D,IAAU9uE,GAAU,OAAO,CAC/B,KAAM,GACN,aAAc,CACZ,KAAM,KACN,WAAY,GACZ,YAAa,KACb,MAAO,MAET,aAAc,CACZ,KAAM,KACN,WAAY,GACZ,YAAa,KACb,MAAO,MAET,YAAa,CACX,KAAM,KACN,WAAY,GACZ,YAAa,KACb,MAAO,KAEX,CAAC,EAIKm1L,GAAgCzvL,GAAU,OAAOA,EAAO,KAAK,kBAAkB,EAE/E0vL,IAAY,CAACpwL,EAAOU,IAAW,CACnC,MAAMupH,EAAqBkmE,GAA8BzvL,CAAM,EAE/D,OAAOV,EAAM,MACX,CAAC,OAAQiqH,CAAkB,EAC3BjvH,GAAU,OAAO,CACf,iBAAkB,KAClB,WAAY,GACZ,YAAa,KACb,MAAO,KACR,EAEL,EAEMq1L,GAAY,CAACrwL,EAAOU,IAAW,CACnC,MAAMupH,EAAqBkmE,GAA8BzvL,CAAM,EAE/D,OAAOV,EAAM,MACX,CAAC,OAAQiqH,CAAkB,EAC3BjvH,GAAU,OAAO,CACf,iBAAkB0F,EAAO,SACzB,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACR,EAEL,EAEM4vL,IAAY,CAACtwL,EAAOU,IAAW,CACnC,MAAMupH,EAAqBkmE,GAA8BzvL,CAAM,EAE/D,OAAOV,EAAM,MACX,CAAC,OAAQiqH,CAAkB,EAC3BjvH,GAAU,OAAO,CACf,iBAAkB,KAClB,WAAY,GACZ,gBAAiB,KACjB,MAAO0F,EAAO,MACf,EAEL,EAMM6vL,IAAiB,CAACvwL,EAAOU,IAAW,CACxC,MAAMupH,EAAqBkmE,GAA8BzvL,CAAM,EAE/D,OAAOV,EAAM,QAAQ,CAAC,OAAQiqH,CAAkB,EAAG,CACjD,WAAY,GACZ,MAAO,KACR,CACH,EAEMumE,IAAiB,CAACxwL,EAAOU,IAAW,CACxC,MAAMupH,EAAqBkmE,GAA8BzvL,CAAM,EAE/D,OAAOV,EAAM,QAAQ,CAAC,OAAQiqH,CAAkB,EAAG,CACjD,WAAY,GACZ,gBAAiB,KACjB,MAAOvpH,EAAO,MACf,CACH,EAEM+vL,IAA6B,CAACzwL,EAAOU,IAClCV,EAAM,MAAM,CACjB,aAAc,CACZ,KAAM,KACN,WAAY,GACZ,YAAa,KACb,MAAO,KACT,CACD,EAGG0wL,IAA6B,CAAC1wL,EAAOU,IAClCV,EAAM,MAAM,CACjB,aAAc,CACZ,KAAMU,EAAO,SACb,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACT,CACD,EAGGiwL,IAA6B,CAAC3wL,EAAOU,IAClCV,EAAM,MAAM,CACjB,aAAc,CACZ,KAAM,KACN,WAAY,GACZ,gBAAiB,KACjB,MAAOU,EAAO,MAChB,CACD,EAGGkwL,IAA6B,CAAC5wL,EAAOU,IAClCV,EAAM,MAAM,CACjB,aAAc,CACZ,KAAM,KACN,WAAY,GACZ,YAAa,KACb,MAAO,KACT,CACD,EAGG6wL,IAA6B,CAAC7wL,EAAOU,IAClCV,EAAM,MAAM,CACjB,aAAc,CACZ,KAAMU,EAAO,SACb,WAAY,GACZ,gBAAiB,KACjB,MAAO,KACT,CACD,EAGGowL,IAA6B,CAAC9wL,EAAOU,IAClCV,EAAM,MAAM,CACjB,aAAc,CACZ,KAAM,KACN,WAAY,GACZ,gBAAiB,KACjB,MAAOU,EAAO,MAChB,CACD,EAGUqwL,IAA0Bt/J,GAAcq4C,IAAS,CAC5D,CAAC6sE,GAA0B,OAAO,EAAGy5C,IACrC,CAACz5C,GAA0B,OAAO,EAAG05C,GACrC,CAAC15C,GAA0B,OAAO,EAAG25C,IACrC,CAACz5C,GAAwB,OAAO,EAAG45C,IACnC,CAAC55C,GAAwB,OAAO,EAAG65C,IACnC,CAAC75C,GAAwB,OAAO,EAAG85C,IACnC,CAAC75C,GAAwB,OAAO,EAAG85C,IACnC,CAAC95C,GAAwB,OAAO,EAAG+5C,IACnC,CAAC/5C,GAAwB,OAAO,EAAGg6C,IACnC,CAAC/5C,GAAiB,OAAO,EAAGw5C,IAC5B,CAACx5C,GAAiB,OAAO,EAAGy5C,IAC5B,CAACz5C,GAAiB,OAAO,EAAGs5C,EAC9B,CAAC,EC7KKW,IAAqBhpH,GAAO,SAAS,EAAG,OAAO,EAAE,iBAEjDipH,GAAiB,CAAE,QAAS,GAAM,mBAAAD,GAAA,EAGxCttB,GAAa,QAAU,CAAE,GAAGutB,EAAA,EAC5B9mB,GAAe,QAAU,CAAE,GAAG8mB,EAAA,EAC9B3mB,GAAmB,QAAU,CAAE,GAAG2mB,EAAA,EAClCzZ,GAAa,QAAU,CAAE,GAAGyZ,EAAA,EAE5B,MAAA3qE,IAAe,CACb,UAAW+Y,GACX,YAAa/B,GACb,KAAM6C,GACN,kBAAmB8vD,IACnB,QAASzyC,IACT,MAAOkmB,GACP,oBAAqB8c,IACrB,eAAgBlf,IAChB,QAAS6I,GACT,YAAaG,GACb,aAAc5mB,IACd,WAAY3B,IACZ,iBAAkBgvC,IAClB,MAAOvZ,GACP,OAAQ37B,IACR,YAAaqpC,IACb,aAAczG,GAChB,EC7CM7iF,IAAQ,CAACvhB,IAAU4iF,IAAO8D,IAAgB3B,IAAWO,GAAW,ECDhEyvB,IAAuB,KAAO,CAClC,OAAQz/J,GAAA,EAER,kBAAmB,IAAM,CACvB,MAAMuX,EAAU,CACd,eAAgBxX,GAAA,CAAe,EAG3B8yG,EAAgB7Y,GAAA,EAClB6Y,IAAkB,OACpBt7F,EAAQ,cAAgBs7F,GAM1B,MAAM0uD,EAAej0D,GAAA,EACrB,OAAKnkH,GAAQo4K,CAAY,IACvBhqJ,EAAQ,GAAKgqJ,GAGRhqJ,CACT,CACF,GC5BAiqJ,IAAe,CACb,cAAe,KACf,QAAS,CAAC,KAAM,KAAM,KAAM,KAAM,IAAI,EACtC,SAAU,EACZ,ECAaC,IAAuBjrL,GAAoB,mBAAmB,ECIrEkrL,IAAwBvlI,GAC5BslI,IAAqB,QACrB,CAAC,CAAE,OAAA1wL,EAAQ,SAAA2qD,EAAU,KAAAxqE,KAAW,CAG9BA,EAAK6f,CAAM,EAIXknE,GAAS6xD,GAAYpuE,EAAA,CAAU,EAAG0zE,GAAmB1zE,EAAA,CAAU,CAAC,CAClE,CACF,EAEaimI,IAAyB,CAACD,GAAqB,ECP5DliI,IAAe,CACb,GAAGo3G,IACH,GAAGnnC,GACH,GAAGa,GACH,GAAG7C,GACH,GAAGk0D,IACH,GAAG1zF,GACH,GAAGwjE,IACHtf,IACAouC,IACA,GAAGzsC,IACH,GAAGvG,IACH,GAAGL,IACH,GAAG2hC,IACH,GAAGzF,GACL,EC7BMvtD,IAAQ,KAAO,ICUf+lE,GAAY,CAChB,OAAQC,GAAI,KACZ,UAAWC,GAAO,GAAG,EACrB,cAAeC,GAAW,GAAG,EAC7B,QAASC,GAAK,GAAG,EACjB,QAASC,GAAK,GAAG,EACjB,eAAgB,UAChB,MAAO,OACP,OAAQ,UACR,OAAQ,UACR,SAAU,UACV,SAAU,SACZ,EAEMC,GAAcv4E,GAASi4E,GAAUj4E,CAAK,EAEtCw4E,IAAe,IAAMP,GAErBQ,IAAWl9F,GAAe,CAC9B,QAAS,CACP,KAAM5mE,GAAc,QAAS,OAAO,SAAS,GAAG,GAAK,QACrD,QAAS,CACP,KAAM,WAER,UAAW,CACT,KAAM,WAER,kBAAmB,IAErB,IAAK,CACH,UAAW,GACX,OAAQ6jK,IAAA,EACR,OAAQ,CACN,KAAMD,GAAY,SAAS,EAC3B,MAAOA,GAAY,QAAQ,EAC3B,QAASA,GAAY,WAAW,EAChC,SAAUA,GAAY,SAAS,EAC/B,MAAOA,GAAY,eAAe,GAEpC,OAAQ,CACN,OAAQ,GACR,cAAe,IAEjB,UAAW,CACT,OAAQ,GAKR,QAAS,GACT,SAAU,IAEZ,gBAAiB,CACf,OAAQ,IAEV,YAAa,CACX,YAAa,EACb,aAAc,EACd,WAAY,GACZ,cAAe,GAEjB,QAAS,CACP,MAAOD,GAAK,GAAG,GAEjB,aAAc,CACZ,WAAY,SACZ,SAAU,SACV,aAAc,YAEhB,WAAY,CACV,MAAO,CACL,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,EAEF,IAAO,CACL,MAAO,CACL,SAAU,GACV,WAAY,IACZ,WAAY,EACd,CACF,CACF,CACF,EAEF,WAAY,CACV,WAAY,sBAEd,OAAQ,CACN,OAAQ,KACR,aAAc,KAElB,CAAC,EAEKz8F,GAAQ,CACZ,SAAA48F,GACF,EAKA58F,GAAM,SAAS,QAAQ,gBAAkBmkB,GACnC04E,gBAAa14E,CAAK,GAAKnkB,GAAM,SAAS,QAAQ,kBACzCg1F,QAAK,KAAK,QAEV8H,SAAM,KAAK,QCnMtB,MAAMC,GAAY,CAEhB,oBAAqBC,GAAa,CAEhC,KAAM,CACJ,SAAU,CAAE,KAAAl8L,EAAM,SAAAwkK,CAAA,CAAS,EACzB03B,EAEJ,MAAO,CACL,KAAAl8L,EACA,SAAAwkK,CAAA,CAEJ,CACF,EAEA23B,IAAe,CAEb,QAAS,CAEP,YAAa,CACX,OAAQ,0CACR,WAAY,wCACZ,UAAW,wBACX,cAAe,qCACf,kBAAmB,eACnB,MAAO,4CACP,YAAa,wEAGf,UAAAF,EAAA,EAEF,KAAM,CAEJ,YAAa,CACX,OAAQ,0CACR,WAAY,gCACZ,YAAa,uEACb,UAAW,gBACX,cAAe,6BACf,kBAAmB,eACnB,MAAO,6CAGT,UAAAA,EAAA,CAEJ,EChCMl8G,IAAa,CACjB,UAAAw6D,GACA,UAAAv6D,IACA,YAAA05G,IACA,eAAAC,IACA,QAAAz4F,IACA,SAAAmvB,IACA,YAAAv4E,GACA,MAAA6tD,IACA,qBAAAwzF,IACA,KAAA+B,IACA,YAAAhiI,IAAA,YACAmqC,GACA,MAAAkyB,IACA,MAAAr2B,GACA,SAAAi9F,GACF,EAEA7C,IAAYv5G,GAAU","names":["f","require$$0","g","reactJsxRuntime_production_min","h","m","n","p","q","c","a","k","b","d","e","l","jsxRuntimeModule","global","factory","module","this","SLICE$0","createClass","ctor","superClass","Iterable","value","isIterable","Seq","KeyedIterable","isKeyed","KeyedSeq","IndexedIterable","isIndexed","IndexedSeq","SetIterable","isAssociative","SetSeq","maybeIterable","IS_ITERABLE_SENTINEL","maybeKeyed","IS_KEYED_SENTINEL","maybeIndexed","IS_INDEXED_SENTINEL","maybeAssociative","isOrdered","maybeOrdered","IS_ORDERED_SENTINEL","DELETE","SHIFT","SIZE","MASK","NOT_SET","CHANGE_LENGTH","DID_ALTER","MakeRef","ref","SetRef","OwnerID","arrCopy","arr","offset","len","newArr","ii","ensureSize","iter","returnTrue","wrapIndex","index","uint32Index","wholeSlice","begin","end","size","resolveBegin","resolveIndex","resolveEnd","defaultIndex","ITERATE_KEYS","ITERATE_VALUES","ITERATE_ENTRIES","REAL_ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","ITERATOR_SYMBOL","Iterator","next","iteratorValue","type","v","iteratorResult","iteratorDone","hasIterator","getIteratorFn","isIterator","maybeIterator","getIterator","iterable","iteratorFn","isArrayLike","emptySequence","seqFromValue","fn","reverse","seqIterate","seqIterator","keyedSeqFromValue","indexedSeqFromValue","isSeq","IS_SEQ_SENTINEL","ArraySeq","array","notSetValue","maxIndex","ObjectSeq","object","keys","key","IterableSeq","iterator","iterations","step","IteratorSeq","cache","val","maybeSeq","EMPTY_SEQ","seq","maybeIndexedSeqFromValue","useKeys","entry","fromJS","json","converter","fromJSWith","fromJSDefault","parentJSON","isPlainObj","is","valueA","valueB","deepEqual","notAssociative","entries","flipped","_","allEqual","bSize","Repeat","times","EMPTY_REPEAT","searchValue","this$0","other","invariant","condition","error","Range","start","EMPTY_RANGE","possibleIndex","offsetValue","Collection","KeyedCollection","IndexedCollection","SetCollection","imul","smi","i32","hash","o","STRING_HASH_CACHE_MIN_STRLEN","cachedHashString","hashString","hashJSObj","string","stringHashCache","STRING_HASH_CACHE_SIZE","STRING_HASH_CACHE_MAX_SIZE","obj","usingWeakMap","weakMap","UID_HASH_KEY","canDefineProperty","getIENodeHash","objHashUID","isExtensible","node","assertNotInfinite","Map","emptyMap","isMap","map","keyValues","i","updateMap","keyPath","updater","updatedValue","updateInDeepMap","forceIterator","mergeIntoMapWith","merger","iters","deepMerger","deepMergerWith","comparator","OrderedMap","sortFactory","mapper","mutable","MapIterator","ownerID","makeMap","maybeMap","IS_MAP_SENTINEL","MapPrototype","ArrayMapNode","shift","keyHash","didChangeSize","didAlter","removed","idx","exists","MAX_ARRAY_MAP_SIZE","createNodes","isEditable","newEntries","BitmapIndexedNode","bitmap","nodes","bit","popCount","keyHashFrag","newNode","updateNode","MAX_BITMAP_INDEXED_SIZE","expandNodes","isLeafNode","newBitmap","newNodes","setIn","spliceOut","spliceIn","HashArrayMapNode","count","newCount","MIN_HASH_ARRAY_MAP_SIZE","packNodes","HashCollisionNode","mergeIntoNode","ValueNode","keyMatch","mapIteratorFrame","stack","mapIteratorValue","subNode","prev","root","EMPTY_MAP","newRoot","newSize","idx1","idx2","excluding","packedII","packedNodes","including","expandedNodes","iterables","mergeIntoCollectionWith","existing","nextValue","collection","x","mergeIntoMap","keyPathIter","isNotSet","existingValue","newValue","nextExisting","nextUpdated","canEdit","newArray","newLen","after","List","empty","emptyList","isList","makeList","VNode","list","listNodeFor","updateList","values","oldSize","setListBounds","mergeIntoListWith","iterateList","DONE","maybeList","IS_LIST_SENTINEL","ListPrototype","level","originIndex","removingFirst","newChild","oldChild","editable","editableVNode","sizeIndex","left","right","tailPos","getTailOffset","tail","iterateNodeOrLeaf","iterateLeaf","iterateNode","from","to","origin","capacity","EMPTY_LIST","newTail","updateVNode","nodeHas","lowerNode","newLowerNode","rawIndex","owner","oldOrigin","oldCapacity","newOrigin","newCapacity","newLevel","offsetShift","oldTailOffset","newTailOffset","oldTail","beginIndex","maxSize","emptyOrderedMap","isOrderedMap","updateOrderedMap","newMap","newList","makeOrderedMap","maybeOrderedMap","omap","EMPTY_ORDERED_MAP","has","ToKeyedSequence","indexed","reversedSequence","reverseFactory","context","mappedSequence","mapFactory","resolveSize","ToIndexedSequence","ToSetSequence","FromEntriesSequence","validateEntry","indexedIterable","cacheResultThrough","flipFactory","flipSequence","makeSequence","filterFactory","predicate","filterSequence","countByFactory","grouper","groups","groupByFactory","isKeyedIter","coerce","iterableClass","reify","sliceFactory","originalSize","resolvedBegin","resolvedEnd","resolvedSize","sliceSize","sliceSeq","skipped","isSkipping","takeWhileFactory","takeSequence","iterating","skipWhileFactory","skipSequence","skipping","concatFactory","isKeyedIterable","singleton","concatSeq","sum","flattenFactory","depth","flatSequence","stopped","flatDeep","currentDepth","flatMapFactory","interposeFactory","separator","interposedSequence","defaultComparator","maxFactory","maxCompare","comp","zipWithFactory","keyIter","zipper","zipSequence","iterators","isDone","steps","s","Record","defaultValues","name","hasInitialized","RecordType","setProps","RecordTypePrototype","RecordPrototype","recordName","defaultVal","makeRecord","likeRecord","record","prototype","names","setProp","Set","emptySet","isSet","set","updateSet","originalSet","OrderedSet","maybeSet","IS_SET_SENTINEL","SetPrototype","makeSet","EMPTY_SET","emptyOrderedSet","isOrderedSet","maybeOrderedSet","OrderedSetPrototype","makeOrderedSet","EMPTY_ORDERED_SET","Stack","emptyStack","isStack","head","makeStack","maybeStack","IS_STACK_SENTINEL","StackPrototype","EMPTY_STACK","mixin","methods","keyCopier","isProtoKey","returnValue","sideEffect","joined","isFirst","reducer","initialReduction","reduction","useFirst","reversed","not","entriesSequence","entryMapper","found","searchKey","searchKeyPath","nested","keyMapper","neg","defaultNegComparator","amount","hashIterable","IterablePrototype","quoteString","KeyedIterablePrototype","removeNum","numArgs","spliced","zipped","interleaved","defaultZipper","ordered","keyed","hashMerge","murmurHashOfSize","Immutable","format","args","argIndex","browser","freeGlobal","_freeGlobal","freeSelf","_root","Symbol","_Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","_getRawTag","objectToString","_objectToString","require$$1","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObject","isObject_1","asyncTag","funcTag","genTag","proxyTag","isFunction","isFunction_1","isNil","isNil_1","warning","isAbsolute","pathname","spliceOne","resolvePathname","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","hasTrailingSlash","last","up","part","_typeof","valueEqual","item","aType","bType","aValue","bValue","aKeys","bKeys","PathUtils","path","hasBasename","prefix","search","hashIndex","searchIndex","location","LocationUtils","_extends","target","source","_resolvePathname","_resolvePathname2","_interopRequireDefault","_valueEqual","_valueEqual2","_PathUtils","state","currentLocation","createTransitionManager_1","_warning","_warning2","createTransitionManager","prompt","setPrompt","nextPrompt","confirmTransitionTo","action","getUserConfirmation","callback","listeners","appendListener","isActive","listener","notifyListeners","_len","_key","DOMUtils","event","message","ua","createBrowserHistory_1","_invariant","_invariant2","_LocationUtils","require$$3","_createTransitionManager","require$$4","_createTransitionManager2","_DOMUtils","require$$5","PopStateEvent","HashChangeEvent","getHistoryState","createBrowserHistory","props","globalHistory","canUseHistory","needsHashChangeListener","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","basename","getDOMLocation","historyState","_ref","_window$location","createKey","transitionManager","setState","nextState","history","handlePopState","handlePop","handleHashChange","forceNextPop","ok","revertPop","fromLocation","toLocation","toIndex","allKeys","fromIndex","delta","go","initialLocation","createHref","push","href","prevIndex","nextKeys","replace","goBack","goForward","listenerCount","checkDOMListeners","isBlocked","block","unblock","listen","unlisten","API_CALL","TYPES","REQUEST","DATA","createUserLightBasic","email","createIncognitoBasic","userId","isActionApiCall","createApiCallAction","typeEnum","request","data","createApiEnumAction","listCacheClear","_listCacheClear","eq","eq_1","assocIndexOf","length","_assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","_listCacheDelete","listCacheGet","_listCacheGet","listCacheHas","_listCacheHas","listCacheSet","_listCacheSet","ListCache","_ListCache","stackClear","_stackClear","stackDelete","_stackDelete","stackGet","_stackGet","stackHas","_stackHas","coreJsData","_coreJsData","maskSrcKey","uid","isMasked","func","_isMasked","funcProto","funcToString","toSource","_toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","pattern","_baseIsNative","getValue","_getValue","getNative","_getNative","_Map","nativeCreate","_nativeCreate","hashClear","_hashClear","hashDelete","_hashDelete","HASH_UNDEFINED","hashGet","_hashGet","hashHas","_hashHas","hashSet","_hashSet","Hash","_Hash","mapCacheClear","_mapCacheClear","isKeyable","_isKeyable","getMapData","_getMapData","mapCacheDelete","_mapCacheDelete","mapCacheGet","_mapCacheGet","mapCacheHas","_mapCacheHas","mapCacheSet","_mapCacheSet","MapCache","_MapCache","LARGE_ARRAY_SIZE","stackSet","pairs","_stackSet","_Stack","defineProperty","_defineProperty","baseAssignValue","_baseAssignValue","assignMergeValue","_assignMergeValue","createBaseFor","fromRight","iteratee","keysFunc","_createBaseFor","baseFor","_baseFor","freeExports","exports","freeModule","moduleExports","Buffer","allocUnsafe","cloneBuffer","buffer","isDeep","Uint8Array","_Uint8Array","cloneArrayBuffer","arrayBuffer","_cloneArrayBuffer","cloneTypedArray","typedArray","_cloneTypedArray","copyArray","_copyArray","objectCreate","baseCreate","proto","_baseCreate","overArg","transform","arg","_overArg","getPrototype","_getPrototype","isPrototype","Ctor","_isPrototype","initCloneObject","_initCloneObject","isObjectLike","isObjectLike_1","argsTag","baseIsArguments","_baseIsArguments","propertyIsEnumerable","isArguments","isArguments_1","isArray","isArray_1","MAX_SAFE_INTEGER","isLength","isLength_1","isArrayLike_1","isArrayLikeObject","isArrayLikeObject_1","stubFalse","stubFalse_1","nativeIsBuffer","isBuffer","objectTag","objectCtorString","isPlainObject","isPlainObject_1","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","_baseIsTypedArray","baseUnary","_baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","isTypedArray_1","safeGet","_safeGet","assignValue","objValue","_assignValue","copyObject","customizer","isNew","_copyObject","baseTimes","_baseTimes","reIsUint","isIndex","_isIndex","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","_arrayLikeKeys","nativeKeysIn","_nativeKeysIn","baseKeysIn","isProto","_baseKeysIn","keysIn","keysIn_1","toPlainObject","toPlainObject_1","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","baseMergeDeep","srcIndex","mergeFunc","srcValue","stacked","isCommon","isTyped","_baseMergeDeep","baseMerge","_baseMerge","identity","identity_1","apply","thisArg","_apply","nativeMax","overRest","otherArgs","_overRest","constant","constant_1","baseSetToString","_baseSetToString","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","lastCalled","stamp","remaining","_shortOut","setToString","_setToString","baseRest","_baseRest","isIterateeCall","_isIterateeCall","createAssigner","assigner","sources","guard","_createAssigner","merge","merge_1","defaultEnv","_currentEnv","setCurrentEnv","currentEnv","getEnv","nativeKeys","_nativeKeys","baseKeys","_baseKeys","DataView","_DataView","Promise","_Promise","_Set","WeakMap","_WeakMap","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ctorString","_getTag","isEmpty","isEmpty_1","isNumber","isNumber_1","isNaN","_isNaN","isString","isString_1","baseFindIndex","_baseFindIndex","setCacheAdd","_setCacheAdd","setCacheHas","_setCacheHas","SetCache","_SetCache","arraySome","_arraySome","cacheHas","_cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","bitmask","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","_equalArrays","mapToArray","_mapToArray","setToArray","_setToArray","symbolTag","symbolProto","symbolValueOf","equalByTag","convert","_equalByTag","arrayPush","_arrayPush","baseGetAllKeys","symbolsFunc","_baseGetAllKeys","arrayFilter","resIndex","_arrayFilter","stubArray","stubArray_1","nativeGetSymbols","getSymbols","symbol","_getSymbols","keys_1","getAllKeys","_getAllKeys","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","_equalObjects","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","_baseIsEqualDeep","baseIsEqual","_baseIsEqual","baseIsMatch","matchData","noCustomizer","_baseIsMatch","isStrictComparable","_isStrictComparable","getMatchData","_getMatchData","matchesStrictComparable","_matchesStrictComparable","baseMatches","_baseMatches","isSymbol","isSymbol_1","reIsDeepProp","reIsPlainProp","isKey","_isKey","FUNC_ERROR_TEXT","memoize","resolver","memoized","memoize_1","MAX_MEMOIZE_SIZE","memoizeCapped","_memoizeCapped","rePropName","reEscapeChar","stringToPath","match","number","quote","subString","_stringToPath","arrayMap","_arrayMap","symbolToString","baseToString","_baseToString","toString","toString_1","castPath","_castPath","toKey","_toKey","baseGet","_baseGet","get","defaultValue","get_1","baseHasIn","_baseHasIn","hasPath","hasFunc","_hasPath","hasIn","hasIn_1","baseMatchesProperty","_baseMatchesProperty","baseProperty","_baseProperty","basePropertyDeep","_basePropertyDeep","property","property_1","baseIteratee","_baseIteratee","reWhitespace","trimmedEndIndex","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isBinary","toNumber_1","INFINITY","MAX_INTEGER","toFinite","sign","toFinite_1","toInteger","remainder","toInteger_1","findIndex","findIndex_1","baseIsNaN","_baseIsNaN","strictIndexOf","_strictIndexOf","baseIndexOf","_baseIndexOf","indexOf","indexOf_1","createFind","findIndexFunc","_createFind","find","find_1","arrayEach","_arrayEach","baseForOwn","_baseForOwn","createBaseEach","eachFunc","_createBaseEach","baseEach","_baseEach","castFunction","_castFunction","forEach","forEach_1","isUndefined","isUndefined_1","isNull","isNull_1","baseMap","_baseMap","map_1","baseAssign","_baseAssign","baseAssignIn","_baseAssignIn","copySymbols","_copySymbols","getSymbolsIn","_getSymbolsIn","copySymbolsIn","_copySymbolsIn","getAllKeysIn","_getAllKeysIn","initCloneArray","_initCloneArray","cloneDataView","dataView","_cloneDataView","reFlags","cloneRegExp","regexp","_cloneRegExp","cloneSymbol","_cloneSymbol","initCloneByTag","_initCloneByTag","baseIsMap","_baseIsMap","nodeIsMap","isMap_1","baseIsSet","_baseIsSet","nodeIsSet","isSet_1","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","cloneableTags","baseClone","isFlat","isFull","isFunc","subValue","_baseClone","clone","clone_1","arrayIncludes","_arrayIncludes","arrayIncludesWith","_arrayIncludesWith","noop","noop_1","createSet","_createSet","baseUniq","includes","outer","computed","seenIndex","_baseUniq","uniqBy","uniqBy_1","baseValues","_baseValues","values_1","spreadableSymbol","isFlattenable","_isFlattenable","baseFlatten","isStrict","_baseFlatten","baseSortBy","comparer","_baseSortBy","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","_compareAscending","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","_compareMultiple","baseOrderBy","iteratees","criteria","_baseOrderBy","sortBy","sortBy_1","compare","toCompare","getOrderedArray","keysOrder","arrayToSort","comparatorFunc","current","orderedArray","findOnArray","existsOnArray","toggleArrayValue","arrayParam","asArray","param","filterDuplicates","getId","objects","id","getHostname","uri","matches","getRelativePath","getQueryFromUri","uriBase","curr","getQueryParam","formatQueryParams","parameters","qs","url","regex","results","component","CALLBACK_EVENTS","getCallbackUri","callbackUri","removeUrlParameter","queryToRemoveParam","queryToRemove","queries","baseUrl","query","getAbsolutePath","queryParams","base","apiConsumerQueryParam","apiVersionQueryParam","QUERY_PARAM_API_CONSUMER","QUERY_PARAM_API_CONSUMER_DEPRECATED","getQueryApiConsumer","getApiConsumer","getApiUrl","apiUrl","isDev","isPreprod","isProd","isWebCustomer","isKiosk","isBo","isOrderPlugin","isWebGlobal","isEmbeddedFront","hasAuthEnabled","shouldUseAppConfig","isLocalhost","isLocalhostOrPrivateIp","hostname","secondOctet","__DEV__","__VERSION__","__SDK_GIT_COMMIT__","__APP_GIT_COMMIT__","__SDK_GIT_BRANCH__","__APP_GIT_BRANCH__","getPublicUrl","_store","registerStore","store","getStore","createAction","dispatch","createReducer","initialState","fnMap","handler","defaultEqualityCheck","areArgumentsShallowlyEqual","equalityCheck","defaultMemoize","lastArgs","lastResult","getDependencies","funcs","dependencies","dep","dependencyTypes","createSelectorCreator","memoizeOptions","_len2","_key2","recomputations","resultFunc","memoizedResultFunc","selector","params","createSelector","concat","concat_1","uniqWith","uniqWith_1","isError","wat","isInstanceOf","isBuiltin","className","isErrorEvent","isDOMError","isDOMException","isParameterizedString","isPrimitive","isEvent","isElement","isRegExp","isThenable","isSyntheticEvent","isVueViewModel","truncate","str","max","safeJoin","input","delimiter","output","isMatchingPattern","requireExactStringMatch","stringMatchesSomePattern","testString","patterns","applyAggregateErrorsToEvent","exceptionFromErrorImplementation","parser","maxValueLimit","limit","hint","originalException","truncateAggregateExceptions","aggregateExceptionsFromError","prevExceptions","exception","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","parentId","exceptions","maxValueLength","isGlobalObj","GLOBAL_OBJ","getGlobalObject","getGlobalSingleton","creator","gbl","__SENTRY__","WINDOW","DEFAULT_MAX_STRING_LENGTH","htmlTreeAsString","elem","options","currentElem","MAX_TRAVERSE_HEIGHT","out","height","sepLength","nextStr","keyAttrs","maxStringLength","_htmlElementAsString","el","classes","attr","keyAttrPairs","keyAttr","keyAttrPair","allowedAttrs","getLocationHref","getComponentName","DEBUG_BUILD","PREFIX","CONSOLE_LEVELS","originalConsoleMethods","consoleSandbox","console","wrappedFuncs","wrappedLevels","originalConsoleMethod","makeLogger","enabled","logger","DSN_REGEX","isValidProtocol","protocol","dsnToString","dsn","withPassword","host","pass","port","projectId","publicKey","dsnFromString","lastPath","split","projectMatch","dsnFromComponents","components","validateDsn","makeDsn","SentryError","logLevel","fill","replacementFactory","original","wrapped","markFunctionWrapped","addNonEnumerableProperty","getOriginalFunction","urlEncode","convertToPlainObject","getOwnProperties","newObj","serializeEventTarget","extractedProps","extractExceptionKeysForMessage","maxLength","includedKeys","serialized","dropUndefinedKeys","inputValue","_dropUndefinedKeys","memoizationMap","isPojo","memoVal","STACKTRACE_FRAME_LIMIT","WEBPACK_ERROR_REGEXP","STRIP_FRAME_REGEXP","createStackParser","parsers","sortedParsers","skipFirst","frames","lines","line","cleanedLine","frame","stripSentryFramesAndReverse","stackParserFromStackParserOptions","stackParser","localStack","defaultFunctionName","getFunctionName","handlers","instrumented","addHandler","maybeInstrument","instrumentFn","triggerHandlers","typeHandlers","addConsoleInstrumentationHandler","instrumentConsole","log","uuid4","crypto","getRandomByte","getFirstException","getEventDescription","eventId","firstException","addExceptionTypeValue","addExceptionMechanism","newMechanism","defaultMechanism","currentMechanism","mergedData","checkOrSetAlreadyCaught","arrayify","maybeArray","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","handlerForType","originalRemoveEventListener","isSimilarToLastCapturedEvent","shouldSkipDOMEvent","eventType","globalListener","getEventTarget","supportsFetch","isNativeFetch","supportsNativeFetch","doc","sandbox","err","addFetchInstrumentationHandler","instrumentFetch","originalFetch","method","parseFetchArgs","handlerData","response","finishedHandlerData","erroredHandlerData","hasProp","prop","getUrlFromResource","resource","fetchArgs","_oldOnErrorHandler","addGlobalErrorInstrumentationHandler","instrumentError","msg","column","_oldOnUnhandledRejectionHandler","addGlobalUnhandledRejectionInstrumentationHandler","instrumentUnhandledRejection","supportsHistory","chromeVar","isChromePackagedApp","hasHistoryApi","lastHref","addHistoryInstrumentationHandler","instrumentHistory","oldOnPopState","historyReplacementFunction","originalHistoryFunction","SENTRY_XHR_DATA_KEY","addXhrInstrumentationHandler","instrumentXHR","xhrproto","originalOpen","startTimestamp","parseUrl","onreadystatechangeHandler","xhrInfo","readyStateArgs","setRequestHeaderArgs","header","originalSend","sentryXhrData","getSDKSource","memoBuilder","hasWeakSet","inner","unmemoize","normalize","maxProperties","visit","normalizeToSize","normalized","jsonSize","memo","stringified","stringifyValue","remainingDepth","valueWithToJSON","jsonValue","numAdded","visitable","visitKey","visitValue","objName","getConstructorName","utf8Length","States","RESOLVED","REJECTED","resolvedSyncPromise","SyncPromise","resolve","rejectedSyncPromise","reason","reject","executor","onfulfilled","onrejected","onfinally","isRejected","cachedHandlers","makePromiseBuffer","isReady","remove","task","add","taskProducer","drain","timeout","counter","capturedSetTimeout","fragment","validSeverityLevels","severityLevelFromString","ONE_SECOND_IN_MS","dateTimestampInSeconds","createUnixTimestampInSecondsFunc","performance","approxStartingTimeOrigin","timeOrigin","timestampInSeconds","threshold","performanceNow","dateNow","timeOriginDelta","timeOriginIsReliable","navigationStart","navigationStartDelta","navigationStartIsReliable","createEnvelope","headers","items","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","envelopeItems","envelopeItem","envelopeItemType","encodeUTF8","textEncoder","serializeEnvelope","envHeaders","parts","append","itemHeaders","payload","stringifiedPayload","concatBuffers","buffers","totalLength","acc","buf","merged","createAttachmentEnvelopeItem","attachment","ITEM_TYPE_TO_DATA_CATEGORY_MAP","envelopeItemTypeToDataCategory","getSdkMetadataForEnvelopeHeader","metadataOrEvent","version","createEventEnvelopeHeaders","sdkInfo","tunnel","dynamicSamplingContext","createClientReportEnvelope","discarded_events","timestamp","clientReportItem","DEFAULT_RETRY_AFTER","parseRetryAfterHeader","now","headerDelay","headerDate","disabledUntil","limits","dataCategory","isRateLimited","updateRateLimits","statusCode","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","namespaces","delay","category","DEFAULT_ENVIRONMENT","getGlobalEventProcessors","addGlobalEventProcessor","notifyEventProcessors","processors","processor","final","makeSession","startingTime","session","sessionToJSON","updateSession","duration","closeSession","status","TRACE_FLAG_SAMPLED","spanToTraceContext","span","span_id","trace_id","op","parent_span_id","tags","spanToJSON","spanIsSpanClass","spanIsSampled","traceFlags","prepareEvent","scope","client","isolationScope","normalizeDepth","normalizeMaxBreadth","prepared","integrations","applyClientOptions","applyIntegrationsMetadata","applyDebugIds","finalScope","getFinalScope","clientEventProcessors","getGlobalScope","isolationData","mergeScopeData","finalScopeData","attachments","applyScopeDataToEvent","eventProcessors","evt","applyDebugMeta","normalizeEvent","environment","release","dist","debugIdStackParserCache","debugIdMap","debugIdStackFramesCache","cachedDebugIdStackFrameCache","filenameDebugIdMap","debugIdStackTrace","parsedStack","cachedParsedStack","stackFrame","images","filename","integrationNames","maxBreadth","captureContext","Scope","captureException","getCurrentHub","captureMessage","captureEvent","configureScope","addBreadcrumb","breadcrumb","withScope","rest","hub","lastEventId","getClient","getCurrentScope","startSession","getIsolationScope","currentScope","userAgent","currentSession","endSession","_sendSessionUpdate","captureSession","getRootSpan","getDynamicSamplingContextFromClient","public_key","user_segment","dsc","getDynamicSamplingContextFromSpan","txn","v7FrozenDsc","maybeSampleRate","jsonSpan","fingerprint","breadcrumbs","sdkProcessingMetadata","applyDataToEvent","applySpanToEvent","applyFingerprintToEvent","applyBreadcrumbsToEvent","applySdkMetadataToEvent","mergeData","extra","user","contexts","propagationContext","transactionName","mergeAndOverwriteScopeData","mergeVal","cleanedExtra","cleanedTags","cleanedUser","cleanedContexts","mergedBreadcrumbs","rootSpan","DEFAULT_MAX_BREADCRUMBS","globalScope","generatePropagationContext","newScope","requestSession","extras","scopeToMerge","scopeData","scopeContext","maxBreadcrumbs","maxCrumbs","mergedBreadcrumb","_breadcrumbs","_attachments","_contexts","_tags","_extra","_user","_level","_fingerprint","_eventProcessors","_propagationContext","_sdkProcessingMetadata","_transactionName","_span","additionalEventProcessors","newData","syntheticException","SDK_VERSION","API_VERSION","DEFAULT_BREADCRUMBS","Hub","_version","assignedScope","assignedIsolationScope","top","maybePromiseResult","res","beforeBreadcrumb","finalBreadcrumb","oldHub","makeMain","integration","customSamplingContext","sentry","getMainCarrier","registry","getHubFromCarrier","setHubOnCarrier","getGlobalHub","hasHubOnCarrier","carrier","enhanceEventWithSdkInfo","createSessionEnvelope","metadata","envelopeHeaders","createEventEnvelope","SENTRY_API_VERSION","getBaseApiEndpoint","_getIngestEndpoint","_encodedAuth","getEnvelopeEndpointWithUrlEncodedAuth","tunnelOrOptions","getReportDialogEndpoint","dsnLike","dialogOptions","endpoint","encodedOptions","installedIntegrations","integrationsByName","currentInstance","existingInstance","getIntegrationsToSetup","defaultIntegrations","userIntegrations","finalIntegrations","debugIndex","debugInstance","setupIntegrations","integrationIndex","setupIntegration","afterSetupIntegrations","serializeMetricBuckets","metricBucketItems","tagEntries","maybeTags","createMetricEnvelope","createMetricEnvelopeItem","ALREADY_SEEN_ERROR","BaseClient","eventMessage","promisedEvent","capturedSpanScope","transport","clientFinished","transportFlushed","eventProcessor","forceInitialize","integrationId","integrationName","isAlreadyInstalled","env","promise","sendResponse","eventOrCount","metricsEnvelope","hook","crashed","errored","ex","mechanism","sessionNonTerminal","ticked","tick","interval","spanId","parentSpanId","finalEvent","sentryError","sampleRate","isTransaction","isTransactionEvent","beforeSendLabel","capturedSpanIsolationScope","processBeforeSend","_validateBeforeSendResult","processedEvent","spanCount","spanCountBefore","spanCountAfter","droppedSpanCount","transactionInfo","outcomes","beforeSendResult","invalidValueError","beforeSend","beforeSendTransaction","initAndBind","clientClass","setCurrentClient","initializeClient","DEFAULT_TRANSPORT_BUFFER_SIZE","createTransport","makeRequest","rateLimits","flush","send","filteredEnvelopeItems","getEventForEnvelopeItem","filteredEnvelope","recordEnvelopeLoss","requestTask","applySdkMetadata","DEFAULT_IGNORE_ERRORS","DEFAULT_IGNORE_TRANSACTIONS","INTEGRATION_NAME","_inboundFiltersIntegration","_hint","clientOptions","mergedOptions","_mergeOptions","_shouldDropEvent","inboundFiltersIntegration","internalOptions","_isSentryError","_isIgnoredError","_isIgnoredTransaction","_isDeniedUrl","_getEventFilterUrl","_isAllowedUrl","ignoreErrors","_getPossibleEventMessages","ignoreTransactions","denyUrls","allowUrls","possibleMessages","lastException","_getLastValidUrl","originalFunctionToString","SETUP_CLIENTS","_functionToStringIntegration","originalFunction","functionToStringIntegration","ignoreOnError","shouldIgnoreOnError","ignoreNextOnError","wrap","before","wrapper","sentryWrapped","wrappedArguments","exceptionFromError","parseStackFrames","extractMessage","eventFromPlainObject","isUnhandledRejection","getNonErrorObjectExceptionValue","eventFromError","stacktrace","popSize","getPopSize","reactMinifiedRegexp","eventFromException","attachStacktrace","eventFromUnknownInput","eventFromMessage","eventFromString","domException","__sentry_template_string__","__sentry_template_values__","captureType","getObjectClassName","createUserFeedbackEnvelope","feedback","createUserFeedbackEnvelopeItem","BrowserClient","sdkSource","cachedFetchImpl","getNativeFetchImplementation","document","fetchImpl","contentWindow","clearCachedFetchImplementation","makeFetchTransport","nativeFetch","pendingBodySize","pendingCount","requestSize","requestOptions","XHR_READYSTATE_DONE","makeXHRTransport","xhr","UNKNOWN_FUNCTION","CHROME_PRIORITY","WINJS_PRIORITY","GECKO_PRIORITY","createFrame","lineno","colno","chromeRegex","chromeEvalRegex","chromeStackParserFn","subMatch","extractSafariExtensionDetails","chromeStackLineParser","geckoREgex","geckoEvalRegex","gecko","geckoStackLineParser","winjsRegex","winjs","winjsStackLineParser","defaultStackLineParsers","defaultStackParser","isSafariExtension","isSafariWebExtension","MAX_ALLOWED_STRING_LENGTH","_breadcrumbsIntegration","_options","_getConsoleBreadcrumbHandler","_getDomBreadcrumbHandler","_getXhrBreadcrumbHandler","_getFetchBreadcrumbHandler","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","breadcrumbsIntegration","dom","componentName","element","_isEvent","endTimestamp","status_code","body","parsedLoc","parsedFrom","parsedTo","_dedupeIntegration","previousEvent","currentEvent","dedupeIntegration","_isSameMessageEvent","_isSameExceptionEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","_getFramesFromEvent","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","_globalHandlersIntegration","_installGlobalOnErrorHandler","globalHandlerLog","_installGlobalOnUnhandledRejectionHandler","globalHandlersIntegration","getOptions","_eventFromIncompleteOnError","_enhanceEventWithInitialFrame","_getUnhandledRejectionError","_eventFromRejectionWithPrimitive","ERROR_TYPES_RE","ev","ev0","ev0s","ev0sf","_httpContextIntegration","referrer","httpContextIntegration","DEFAULT_KEY","DEFAULT_LIMIT","_linkedErrorsIntegration","linkedErrorsIntegration","DEFAULT_EVENT_TARGET","_browserApiErrorsIntegration","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","browserApiErrorsIntegration","originalCallback","wrapOptions","globalObject","eventName","wrappedEventHandler","originalEventHandler","getDefaultIntegrations","init","startSessionTracking","showReportDialog","script","onClose","reportDialogClosedMessageHandler","injectionPoint","getRandomValues","rnds8","rng","byteToHex","unsafeStringify","randomUUID","native","v4","rnds","generateUUID","uuidv4","getObjectFromStorage","saveToStorage","getFromStorage","getObjectFromSession","saveToSession","getFromSession","removeFromSession","setCookie","expTime","domain","expires","getCookie","ca","deleteCookie","_frontSessionId","SessionStorageKey","FRONT_SESSION_ID_HEADER","initFrontSessionId","getFrontSessionId","_userData","_loggerConfig","_Logger","Sentry.getCurrentHub","config","Sentry.init","Sentry.setTag","detail","Sentry.withScope","Sentry.captureMessage","Sentry.showReportDialog","Sentry.captureException","info","prefillReportDialogData","shouldRetryIfNotLoadedYet","nameElem","emailElem","idElem","userContext","userData","Sentry.configureScope","proContext","proData","restaurantContext","restaurantData","Sentry.lastEventId","__publicField","Logger","createSimpleSelector","getState","formatData","dataState","dataJs","actionData","DEFAULT_STATE","createSimpleReducer","actionType","STOP_PROPAGATION","createMiddleware","actionsToHandleParam","actionsToHandle","toHandle","actionToHandle","symbolObservablePonyfill","ponyfill","randomString","ActionTypes","createStore","preloadedState","enhancer","_ref2","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","subscribe","isSubscribed","replaceReducer","nextReducer","observable","outerSubscribe","observer","observeState","unsubscribe","$$observable","getUndefinedStateErrorMessage","actionDescription","assertReducerShape","reducers","combineReducers","reducerKeys","finalReducers","finalReducerKeys","shapeAssertionError","hasChanged","_i","previousStateForKey","nextStateForKey","errorMessage","bindActionCreator","actionCreator","bindActionCreators","actionCreators","boundActionCreators","_objectSpread","ownKeys","sym","compose","applyMiddleware","middlewares","_dispatch","middlewareAPI","chain","middleware","I18nFetchingLocale","translationsContext","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","__vite_glob_0_7","__vite_glob_0_8","__vite_glob_0_9","__vite_glob_0_10","__vite_glob_0_11","__vite_glob_0_12","__vite_glob_0_13","__vite_glob_0_14","__vite_glob_0_15","__vite_glob_0_16","__vite_glob_0_17","__vite_glob_0_18","__vite_glob_0_19","loadTranslationFile","locale","appName","loadTranslationFileForApp","fileKey","retrieveMessages","languageParam","labels","CHOOSE_LOCALE","RETRIEVE_MESSAGES_LIMIT","baseSlice","_baseSlice","castSlice","_castSlice","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","reHasUnicode","hasUnicode","_hasUnicode","asciiToArray","_asciiToArray","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeToArray","_unicodeToArray","stringToArray","_stringToArray","createCaseFirst","methodName","strSymbols","chr","trailing","_createCaseFirst","upperFirst","upperFirst_1","capitalize","capitalize_1","localeEquals","localeA","localeB","getForLocale","localesData","localeData","StorageItem","saveLocaleToStorage","language","getLocaleFromStorage","pad","int","bool","debounce","wait","immediate","do_nothing","monthToStr","monthNumber","shorthand","revFormat","dateObj","monthName","hour","day","amPM","shortMonth","seconds","unixSeconds","weekNum","weekNumber","year","ISODate","minutes","month","tokenRegex","formats","date","english","nth","createDateFormatter","_ref$config","defaults","_ref$l10n","l10n","frmt","overrideLocale","createDateParser","_ref2$config","_ref2$l10n","givenFormat","timeless","customLocale","parsedDate","date_orig","datestr","matched","ops","matchIndex","regexStr","token","isBackSlash","escaped","_ref3","compareDates","date1","date2","getWeek","givenDate","week1","isBetween","ts","ts1","ts2","HOOKS","toggleClass","createElement","content","clearNode","findParent","createNumberInput","inputClassName","opts","numInput","arrowUp","arrowDown","_loop","DEBOUNCED_CHANGE_MS","FlatpickrInstance","instanceConfig","self","flatpickr","bind","setHoursFromDate","positionCalendar","changeMonth","changeYear","clear","close","destroy","isEnabled","jumpToDate","open","redraw","setDate","toggle","setupHelperFunctions","yr","parseConfig","setupLocale","setupInputs","setupDates","build","bindEvents","updateValue","setCalendarWidth","isSafari","triggerEvent","bindToInstance","daysWidth","updateTime","timeWrapper","prevValue","setHoursFromInputs","ampm2military","military2ampm","hours","limitMinHours","limitMaxHours","maxTime","minTime","setHours","setDefaultHours","min_hr","min_minutes","max_hr","max_minutes","onYearInput","onClick","triggerChange","setupMobile","debouncedResize","onResize","onMouseOver","onKeyDown","documentClick","onMonthNavClick","selectDate","selText","timeIncrement","jumpDate","jumpTo","incrementNumInput","inputElem","createEvent","buildMonthNav","_buildWeeks","buildWeeks","weekWrapper","weekNumbers","buildWeekdays","buildDays","buildTime","customAppend","createDay","dayNumber","dateIsEnabled","dayElement","isDateSelected","isDateInRange","focusOnDayElem","targetNode","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","getNextAvailableDay","givenMonth","loopDelta","numMonthDays","focusOnDay","dayFocused","isInView","startElem","buildMonthDays","firstOfMonth","prevMonthDays","daysInMonth","days","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayIndex","dayNum","dayContainer","frag","buildMonth","container","monthNavFragment","monthElement","yearInput","yearElement","currentMonth","buildMonths","updateNavigationCurrentMonth","hourInput","minuteInput","secondInput","updateWeekdays","firstDayOfWeek","weekdays","is_offset","triggerChangeEvent","isCalendarElem","isCalendarElement","isInput","lostFocus","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","parsed","allowInput","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","_delta","elems","hoverDate","initialDate","rangeStartDate","rangeEndDate","lastDate","containsDisabled","minRange","maxRange","t","prevMonth","dayElem","outOfRange","_ret","positionElement","wasOpen","minMaxDateSetter","inverseDateObj","boolOpts","userConfig","formats$$1","dates","parseDateRules","timeMode","minMaxTimeSetter","pluginConf","customPositionElement","calendarHeight","child","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","rightMost","isSelectable","selectedDate","shouldChangeMonth","selectedIndex","single","range","CALLBACKS","option","setSelectedDate","inputDate","rule","preloadedDate","inputType","hooks","getDateStr","dObj","isPrevMonth","isNextMonth","isKeyDown","min","curValue","isHourElem","isMinuteElem","_flatpickr","nodeList","instances","QUERY_PARAM_LOCALE","getDefaultBrowserLocale","DEFAULT_OPTIONS","_locale","_texts","_polyglot","Polyglot","getPolyglot","setPolyglot","polyglot","getLanguageWithoutRegionCode","getCurrentLanguageWithoutRegionCode","isSupportedLocale","supportedLocale","getCurrentSupportedLanguage","getDefaultLocale","queryLocale","storageLocale","configureI18n","setLocale","setTexts","apiConsumerTexts","restaurantCustomTexts","optionsFR","moment","optionsDE","getLocale","getCountryForLocale","getCountryCodeForLocale","countryCode","trWithLocale","useKeyIfNotFound","text","smartCount","singular","plural","paramKey","placeholder","tr","trOptional","isFetchingI18nPhrases","getI18nPhrases","phrases","baseClamp","lower","upper","_baseClamp","startsWith","position","startsWith_1","getForCurrentLocale","locales","currentLanguage","defaultLanguage","DEFAULT","i18nReducer","retrieveCount","negate","negate_1","baseSet","_baseSet","basePickBy","paths","_basePickBy","pickBy","pickBy_1","omitBy","omitBy_1","GlobalErrors","Error","mergeHeaders","headersBase","headersToMerge","headersToMergeKey","headerKey","ApiError","code","formatEndpoint","formattedEnpoint","template","ApiManager","headersParam","optionsHeadersMiddleware","previousRequestOptions","success","failure","fetchRequestData","timeouts","contentType","apiError","newRequestOptions","localizedMessage","errorHandler","foundLocalizedMessage","globalLocalizedMessage","errorHandlerFuncResult","defaultUrl","retry","isExtern","otherOptions","finalUrl","defaultHeaders","simulateHeader","defaultOptions","finalOptions","formData","_apiManagerInstance","Events","EventManager","events","EventManagerInstance","SendEventContainer","React","nextProps","PropTypes","gtag","_window","_default","smallWords","toTitleCase","title","mightBeEmail","redacted","redactEmail","titleCase","redactingEmail","_str","_gtag","_format","_excluded","_excluded2","_excluded3","_excluded4","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","enumerableOnly","symbols","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","minLen","arr2","_arr","_n","_d","_s","_e","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_createClass","protoProps","staticProps","GA4","_this","GA_MEASUREMENT_ID","nonce","gaOptions","mapFields","gtagOptions","initConfigs","_options$legacyDimens","legacyDimensionMetric","_options$testMode","testMode","mergedGtagOptions","queues","queue","fieldsObject","eventCategory","eventAction","eventLabel","eventValue","_args$","timingCategory","timingVar","timingValue","timingLabel","page","_this$_toGtagOptions","_len3","_key3","_args$2","_len4","_key4","hitType","_len5","_key5","command","_len6","_key6","_len7","_key7","readyCallback","clientId","optionsOrName","label","nonInteraction","fieldObject","pathTrim","hitCallback","safetyCallbackCalled","safetyCallback","clearableCallbackForGA","_ga","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","cacheBabelInterop","cacheNodeInterop","hasPropertyDescriptor","desc","ReactGAImplementation","CONSENT_KEY","ConsentChoice","SIX_MONTHS_MS","getConsent","setConsent","choice","cleanUrls","_isInitialized","hasConsented","sendPageView","ReactGA","handleInit","override","indicateDefaultConsentForGA","indicateConsentForGA","consentChoice","ga4ConsentValue","deleteExistingGACookies","getRootDomain","gaCookies","cookie","cookieName","initializeAnalytics","appOptions","appConfig","consent","KEY_PREFIX","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","DEFAULT_VERSION","autoMergeLevel1","inboundState","originalState","reducedState","newState","createPersistoid","blacklist","whitelist","transforms","throttle","storageKey","storage","serialize","defaultSerialize","lastState","stagedState","keysToProcess","timeIterator","writePromise","update","passWhitelistBlacklist","processNextKey","endState","subState","transformer","writeStagedState","onWriteFail","getStoredState","deserialize","defaultDeserialize","rawState","serial","purgeStoredState","warnIfRemoveError","DEFAULT_TIMEOUT","persistReducer","baseReducer","stateReconciler","defaultGetStoredState","_persistoid","_purge","_paused","conditionalUpdate","_persist","restState","_sealed","_rehydrate","restoredState","migrate","migratedState","migrateErr","reconciledRest","_newState","persistorReducer","firstIndex","persistStore","cb","_pStore","register","rehydrate","rehydrateAction","persistor","purgeResult","flushResult","createTransform","inbound","outbound","whitelistBlacklistCheck","fullState","getStorage_1","getStorage","noopStorage","hasStorage","storageType","testKey","createWebStorage_1","createWebStorage","_getStorage","_getStorage2","_createWebStorage","_createWebStorage2","hardSet_1","hardSet","pathGetter_1","pathGetter","getPaths","pathString","jsan","utils","flags","customToString","comma","WMap","cycle","decycle","replacer","noCircularOption","withRefs","derez","_value","nu","symbolKey","keyString","foundPath","parentPath","nextPath","$","rez","lib","space","decycled","reviver","needsRetrocycle","mark","transformMethod","extract","refer","refs","r","immutable","customReplacer","customReviver","immutableValue","stringify","parse","immutableTransform","outboundState","ReactReduxContext","defaultNoopBatch","batch","setBatch","newBatch","getBatch","CLEARED","nullListeners","createListenerCollection","Subscription","parentSub","_proto","Provider","children","contextValue","useMemo","subscription","previousState","useEffect","Context","isHopefullyDomEnvironment","useIsomorphicLayoutEffect","useLayoutEffect","EMPTY_ARRAY","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","updateCount","initStateUpdates","connectAdvanced","selectorFactory","_ref2$getDisplayName","getDisplayName","_ref2$methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","shouldHandleStateChanges","_ref2$storeKey","storeKey","_ref2$withRef","withRef","_ref2$forwardRef","forwardRef","_ref2$context","connectOptions","customStoreWarningMessage","WrappedComponent","wrappedComponentName","displayName","selectorFactoryOptions","pure","createChildSelector","usePureOnlyMemo","ConnectFunction","_useMemo","forwardedRef","wrapperProps","propsContext","ContextToUse","isContextConsumer","useContext","didStoreComeFromProps","didStoreComeFromContext","childPropsSelector","_useMemo2","notifyNestedSubs","overriddenContextValue","_useReducer","useReducer","_useReducer$","previousStateUpdateResult","forceComponentUpdateDispatch","lastChildProps","useRef","lastWrapperProps","childPropsFromStoreUpdate","renderIsScheduled","actualChildProps","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","newChildProps","unsubscribeWrapper","renderedWrappedComponent","renderedChild","Connect","forwarded","hoistStatics","hasOwn","y","shallowEqual","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","constantSelector","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","ownProps","whenMapDispatchToPropsIsFunction","mapDispatchToProps","whenMapDispatchToPropsIsMissing","whenMapDispatchToPropsIsObject","defaultMapDispatchToPropsFactories","whenMapStateToPropsIsFunction","mapStateToProps","whenMapStateToPropsIsMissing","defaultMapStateToPropsFactories","defaultMergeProps","stateProps","dispatchProps","wrapMergePropsFunc","mergeProps","areMergedPropsEqual","hasRunOnce","mergedProps","nextMergedProps","whenMergePropsIsFunction","whenMergePropsIsOmitted","defaultMergePropsFactories","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleFirstCall","firstState","firstOwnProps","handleNewPropsAndNewState","handleNewProps","handleNewState","nextStateProps","statePropsChanged","handleSubsequentCalls","nextOwnProps","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","factories","strictEqual","createConnect","_temp","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","_ref$selectorFactory","defaultSelectorFactory","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","connect","MAX_SIGNED_31_BIT_INT","commonjsGlobal","getUniqueId","objectIs","createEventEmitter","changedBits","onlyChild","createReactContext","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","_Component","_inheritsLoose","oldValue","Component","Consumer","_Component2","_this2","observedBits","_proto2","addLeadingSlash","stripLeadingSlash","stripBasename","stripTrailingSlash","parsePath","createPath","createLocation","canUseDOM","getConfirmation","supportsPopStateOnHashChange","supportsGoWithoutReloadUsingHash","isExtraneousPopstateEvent","_props","HashChangeEvent$1","HashPathCoders","stripHash","getHashPath","pushHashPath","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","encodePath","decodePath","ignorePath","locationsAreEqual$$1","encodedPath","prevLocation","allPaths","baseTag","hashChanged","nextPaths","clamp","lowerBound","upperBound","createMemoryHistory","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","nextIndex","nextEntries","canGo","isarray","pathToRegexpModule","pathToRegexp","compile","tokensToFunction","tokensToRegExp","PATH_REGEXP","tokens","defaultDelimiter","capture","group","modifier","asterisk","partial","repeat","optional","prevText","escapeGroup","restrictBacktrack","escapeString","encodeURIComponentPretty","encodeAsterisk","encode","segment","j","attachKeys","re","regexpToRegexp","arrayToRegexp","stringToRegexp","strict","route","endsWithDelimiter","createNamedContext","createContext","Router","_React$Component","cache$1","cacheLimit$1","cacheCount$1","compilePath$1","cacheKey","pathCache","matchPath","_options$exact","exact","_options$strict","_options$sensitive","sensitive","_compilePath","isExact","isEmptyChildren","Route","context$$1","_this$props","render","addBasename","createURL","staticHandler","Switch","LOCATION_CHANGE","onLocationChanged","isFirstRendering","CALL_HISTORY_METHOD","updateLocation","routerActions","createSelectors","structure","getIn","toJS","isRouter","getRouter","router","getLocation","getAction","getSearch","getHash","createMatchSelector","lastPathname","lastMatch","_possibleConstructorReturn","call","_assertThisInitialized","_getPrototypeOf","_inherits","subClass","_setPrototypeOf","createConnectedRouter","_createSelectors","ConnectedRouter","_PureComponent","_getLocation","pathnameInStore","searchInStore","hashInStore","_history$location","pathnameInHistory","searchInHistory","hashInHistory","handleLocationChange","PureComponent","_onLocationChanged","ConnectedRouterWithContext","createConnectRouter","createRouterReducer","initialRouterState","routerMiddleware","_action$payload","plainStructure","connectRouter","UiAction","updateUI","getUi","generateKeyForComponent","UiContainer","ui","uiState","otherProps","jsx","UiContainer$1","uiReducer","createMuiTheme","muiCreateTheme","CHANGE_CURRENT_THEME","changeCurrentTheme","newCurrentTheme","currentTheme","theme","getThemeOnState","getCurrentThemeOnState","getCurrentTheme","_theme","registerTheme","getRegisteredTheme","getRegisteredMuiTheme","last_1","parent","_parent","baseUnset","isRootPrimitive","_baseUnset","basePullAt","indexes","previous","_basePullAt","remove_1","ModalType","DialogAction","createShowDialogAction","dialogType","dialogProps","hideDialogAction","displayChooseEntryDividerDialog","displayGenerousPaymentDialog","checkId","restaurantId","outstandingBalance","_dialogs","registerDialogs","dialogs","getDialogViewForType","dialog","getDialogState","getDialog","dialogState","DialogRoot","SpecificModal","generateDialog","dialogContent","Dialog","DialogWithStyles","withStyles","DialogRoot$1","isEqual","isEqual_1","Query","forIn","forIn_1","authRequired","disable","pair","SdkRoutingEnum","_routes","registerRoutes","routes","getRoutes","getConfigForRoute","getRoute","routeDefinition","_history","registerHistory","getHistory","_routingEnum","registerRoutingEnum","routingEnum","getRoutingEnum","routeName","generatePathWithParams","finalQueries","queryParamsToKeep","currentUrlQueries","queryParam","currentValueOnUrl","alreadySet","handleStringRoute","redirectToExternal","relativePath","redirectTo","createRedirectToAction","replaceWith","reloadTo","openExternalLink","updatePageQueries","currentQuery","finalValue","goBackAction","isModifiedEvent","Link","innerRef","__RouterContext","newTab","anchor","ReactRouterLink","MuiLink","RoutingContainer","RoutingContainer$1","External","getOrderPluginUrl","ux","DEFAULT_FORM_OPTIONS","_forms","registerForms","forms","getFormsDefaultState","defaultState","form","getForm","formType","getFormOptions","getFormCustomActions","customActions","getFormReducer","getFormModifier","getValidator","FormAction","initForm","updateForm","resetForm","updateFormOptions","DataCatcherType","_dataCatcherSettings","setDataCatcherSettings","dataCatcherSettings","getDataCatcherSettings","getDataCatcherSettingForType","setting","dataCatcherType","isDataCatcherEnabledForType","FormType","DataCatcherAction","postCatchedData","shouldCatchData","dataCatcherMiddleware","getObject","dataCatcherMiddlewares","dataCatcherFormReducer","FORM_CUSTOM_ACTION","blackList","EMAIL_REGEXP","isValidEmail","countryCodes","MIN_LENGHT_FOR_NUMBER","formatPhoneNumberAsYouType","iso","asYouType","AsYouType","parsePhoneNumberFromString","ParseError","formatPhoneNumber","phoneNumber","isValidPhoneNumber","isPhoneNotEmpty","phoneAsStringWithPrefix","getCountryDialCodeFromNumber","cleanForApi","cleanPhoneNumber","getCountryCodes","getCountryFromCountryCode","country","getCountryDialCodeFromCountryCode","notEmpty","isTrue","isGreaterThan","orEqual","isValidEmailUtils","isValidPhone","phone","isPhoneNotEmptyUtils","_isPlaceholder","_curry1","f1","_identity","_curry2","f2","_b","_a","_isArray","_isTransformer","_dispatchable","methodNames","xf","transducer","_map","functor","_isString","_isArrayLike","_xwrap","XWrap","_arity","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","thisObj","_reduce","_arrayReduce","_iterableReduce","_methodReduce","symIterator","_xfBase","_xmap","XMap","_curryN","received","combined","argsIdx","combinedIdx","curryN","_has","_isArguments","hasEnumBug","nonEnumerableProps","hasArgsEnumBug","contains","nIdx","ks","checkArgsLength","_curry3","f3","_c","reduce","curry","_filter","_isObject","_xfilter","XFilter","filter","pred","filterable","_arrayFromIterator","_functionName","identical","_equals","stackA","stackB","equals","_reduced","_xall","XAll","all","_identity2","_map2","_reduce2","_curry","_filter2","_equals2","_all","_all2","sliceIterator","successFn","failFn","valid","runPredicate","inputs","field","errorMsg","validate","spec","inputFn","inputObj","predicates","rules","spected","each","trMessage","validateValue","isValid","childValue","childName","newChildValue","formatValidator","validation","validator","DEFAULT_VALIDATE","getFormState","getFormTypeData","getFormType","getValidatorSelector","makeGetFormDataNotFormatted","formState","makeGetFormData","getFormsDataArray","makeGetFormsData","formsData","formattedFormsData","makeGetFormOptions","formTypeData","makeGetFormErrors","formOptions","errors","fieldName","formErrors","makeGetFormsErrors","clsx","styles","ButtonFlat","inactive","raised","contained","classNames","Button","LoadingBlock","show","loadingLabel","CircularProgress","LoadingBlock$1","LoadingBlockWrapper","jsxs","LoadingBlockWrapper$1","FormButtons","submit","cancel","onSubmit","onReset","displayErrorDialog","setPrototypeOf","setStatic_1","setStatic","BaseComponent","setDisplayName_1","_setStatic","setDisplayName","getDisplayName_1","wrapDisplayName_1","_getDisplayName","wrapDisplayName","hocName","shouldUpdate_1","_inheritsLoose2","_react","shouldUpdate","test","ShouldUpdate","shallowEqual_1","_shallowEqual","pure_1","_shouldUpdate","hoc","NavigationClose","SvgIcon","CloseIcon","SnackbarContainer","autoHideDuration","withCloseAction","actions","IconButton","Snackbar","SnackbarError","DisplayMode","ErrorBlock","newMessage","mode","customElement","ErrorBlockComponent","isEqualWith","isEqualWith_1","union","arrays","union_1","formDataComparator","value1","value2","areFormDataLooselyEqual","obj1","obj2","cloneDeep","cloneDeep_1","FormContainer","defaultData","prevProps","propsToPass","makeMapStateToProps","getFormData","getFormErrors","formCustomActions","FormContainer$1","FormsContainer","formsErrors","getFormsData","getFormsErrors","withForm","DISABLE_FORM_DEV_DATA_QUERY_PARAM","createForm","validationRules","devData","finalDefaultData","finalDevData","disableDevData","dataModifier","formReducer","_searches","registerSearches","searches","searchType","getFormatter","formatter","getSearchApiCallFunc","apiCallFunc","SearchAction","initSearch","updateSearch","resetSearch","GetSearchListAction","getSearchAction","getSearchState","getSearchTypeData","getSearchType","makeGetSearchList","searchData","makeIsFetchingSearchList","makeGetSearchError","customOmitClone","_customOmitClone","flatten","flatten_1","flatRest","_flatRest","omit","omit_1","Search","searchError","TextField","InputAdornment","SearchIcon","Search$1","timeOutSearch","_SearchContainer","searchList","isFetchingSearchList","hideInput","SearchContainer","getSearchList","getSearchError","searchReducer","_statistics","registerStatisticsConfig","statistics","getGroupStatistics","statisticsGroupType","getStatistics","statisticsType","groupStatistics","getStatisticsApiCallFunc","GetStatisticsAction","getStatisticsAction","StatisticsAction","updateStatisticsOptions","initStatisticsConfig","TrendingUp","TrendingUp$1","capitalizeFirstLetter","stylesObject","TypographyCustom","align","skipColor","html","alignDefault","classNameCombined","dangerouslySetInnerHTML","TypographyCustom$1","withTheme","Graph","changeFilter","datasets","icon","filters","filtersState","isFetching","hasData","Paper","Typography","Tabs","Tab","getStatisticsState","getStatisticsGroupType","getStatisticsType","makeGetStatisticsGroupTypeData","statisticsState","groupType","makeGetStatisticsOptions","statisticsData","makeGetStatisticsConfig","makeGetStatisticsItems","groupStatisticsState","itemsState","makeIsFetchingStatistics","makeGetStatisticsError","StatisticsContainer","reload","hideTimeRange","isFetchingStatistics","errorStatistics","getStatisticsItems","getIsFetching","getError","getConfig","QueryParamType","StatisticsPeriod","statisticsOptionsAreEqual","optionsToCompare","getQueryParamsConfig","queryParamConfig","optionValue","optionValueToCompare","getDefaultCustomValue","getPeriodDates","period","defaultCustomValue","StatisticsGroupContainer","dateRange","keysThatRunApiReload","periodDates","queryParamsConfig","urlOptions","MS_FORMAT","DATE_FORMAT_MS","MINUTE_AS_MS","HOUR_AS_MS","fromMs","ms","anyToDate","getMs","getDayKey","dateParam","getDayIndexForKey","getI18nDayNameForKey","getI18nDayShortNameForKey","isSameDay","date1Param","date2Param","getMsFromHour","getMsFromMinute","minute","isToday","formatHour","shouldUseUtc","formatDate","todayWithHour","hourTimestamp","getDateWithHoursAndMinutes","hourMinuteTimestamp","CalendarMode","hooksToHandle","Calendar","selectedDates","dateStr","isUpdate","optionsKeys","defaultDate","nativeCeil","baseRange","_baseRange","createRange","_createRange","range_1","PopoverView","anchorEl","Popover","PopoverView$1","DialogView","DialogTitle","DialogContent","DialogView$2","ListChooserType","ViewType","Pagination","paging","onLoadMore","Pagination$2","convertColorToString","color","colorString","uintColorToHexadecimal","convertHexToRGB","extendedColor","decomposeColor","marker","fade","darken","coefficient","lighten","OptionSingle","viewType","selected","Radio","Option","optionRenderer","multiple","ListItem","Checkbox","Body","hasOptions","filteredOptions","onSelect","handleQueryChange","disableSearch","Body$1","Header","modules","installedModules","__webpack_require__","moduleId","getter","defineProperties","bitapRegexSearch","bitapSearch","patternAlphabet","Bitap","_ref$location","_ref$distance","distance","_ref$threshold","_ref$maxPatternLength","maxPatternLength","_ref$isCaseSensitive","isCaseSensitive","_ref$tokenSeparator","tokenSeparator","_ref$findAllMatches","findAllMatches","_ref$minMatchCharLeng","minMatchCharLength","_options2","deepValue","dotIndex","firstSegment","matchmask","matchedIndices","mask","SPECIAL_CHARS_REGEX","isMatch","matchesLen","_ref$errors","_ref$currentLocation","_ref$expectedLocation","expectedLocation","accuracy","proximity","bitapScore","textLen","currentThreshold","bestLocation","patternLen","matchMask","score","_score","lastBitArr","finalScore","binMax","binMin","binMid","_score3","finish","bitArr","charMatch","_score2","Fuse","_ref$caseSensitive","caseSensitive","_ref$id","_ref$keys","_ref$shouldSort","shouldSort","_ref$getFn","getFn","_ref$sortFn","sortFn","_ref$tokenize","tokenize","_ref$matchAllTokens","matchAllTokens","_ref$includeMatches","includeMatches","_ref$includeScore","includeScore","_ref$verbose","verbose","_prepareSearchers2","tokenSearchers","fullSearcher","_search2","weights","resultMap","keysLen","_ref2$arrayIndex","arrayIndex","_ref3$tokenSearchers","_ref3$fullSearcher","_ref3$resultMap","_ref3$results","averageScore","numTextMatches","mainSearchResult","words","scores","tokenSearcher","hasMatchInText","word","tokenSearchResult","scoresLen","_i2","checkTextMatches","existingResult","_i3","scoreLen","currScore","bestScore","weight","nScore","finalOutput","transformers","_console","showAsPopoverBreakpoints","Content$1","viewProps","Content","Content$2","withWidth","ContentClear","ClearIcon","TextFieldSuffixType","TextFieldCustom","focus","suffixType","prefixStyles","TextFieldCustomWithHOC","MultipleView","helperText","disabled","required","valueIconFormatter","valueFormatter","onDeleteValue","onOpen","emptyRender","alwaysDisplayAddButton","FormControl","InputLabel","Chip","ValueView","clearable","valueFormatterHandleNullValue","formattedValue","ValueView$1","EmptyValue","onClickOpen","ListChooser","valueToDelete","newValues","labelButton","disableFiltering","filteringWithContains","Day","onChange","Month","Year","minYear","maxYear","InlineDate","InlineDate$1","propDatesAreSame","getDateChangedErrorMsg","varName","_DateField","defaultDateIsSame","minDateIsSame","maxDateIsSame","renderValue","DateField","DateField$1","StatisticsOptionsModifierContainer","optionsChanged","optionsAreDefault","checkRequestId","reduceFunc","statisticsReducer","_reducers","registerEntities","entities","getEntities","PERSIST_EXPIRE_DEFAULT_KEY","PERSIST_EXPIRE_DELAY_DEFAULT_KEY","immutableStringify","createExpirationTransform","dateToUnix","getExpiredState","entity","absoluteExpiresAt","expiresAt","jsonState","expiredDate","isExpired","expiredAt","expireDate","loggingStorage","keySizes","stateKey","serializedState","persistConfig","configureRootReducer","reducerName","uxReducer","createStoreCustom","creators","createThunkMiddleware","extraArgument","thunk","crashReporter","UnauthorizedAction","unauthorized","callApi","schema","responseJsonContent","apiMiddleware","apiCall","actionWith","finalAction","requestType","successType","failureType","AuthMode","ACCESS_TOKEN_DELAY_REFRESH","ACCESS_TOKEN_DELAY_REFRESH_SOON","REFRESH_TOKEN_LIFETIME","INCOGNITO_TOKEN_LIFETIME","_clientId","getCookieKey","setClientId","saveAccessToken","removeAccessToken","getAuthCookie","getAuthorization","hasTokenExpired","expirationMoment","willTokenExpireSoon","_restaurantsGroupId","setRestaurantsGroupId","restaurantsGroupId","getUserLightCookieKey","getIncognitoCookieKey","saveUserLightCookie","saveIncognitoCookie","removeUserLight","removeIncognitoCookie","getUserLightCookie","getIncognitoCookie","asciiSize","_asciiSize","unicodeSize","_unicodeSize","stringSize","_stringSize","size_1","stopIterationValues","checkAccessSecurityModes","AppConfigPresets","containsStopIteration","_return","_obj","reduceAppConfigTexts","texts","recursiveCall","finalObject","formatTexts","_appConfig","setDefaultAppConfig","getDefaultAppConfig","mergeWith","mergeWith_1","mergeConfigObject","currentData","mergeAppConfigWithDefault","appConfigDefaultKeys","updatedConfig","_currency","setCurrency","currency","getCurrencySymbol","isValidCurrency","formatPriceWithCurrency","price","multipleOrUnknownCurrency","formatPrice","formatPercent","createDeepFormatter","itemFormatter","getChildren","updateChildren","deepFormatter","formattedChildren","createFormatter","functions","funcRes","createListFormatter","listResult","createMapFormatter","mapObject","includes_1","createSubObjectFormatter","parentObject","CartModifierActionType","CartModifierTargetType","removeComplexCartModifier","cartModifiers","newCartModifiers","cartModifier","formatItemsCartModifiers","recursiveFormatSubcategoriesCartModifiers","formatCartModifier","formatModifier","formatModifiers","FeeSettingStatus","FeeType","formatOrderFee","orderFee","formatOrderFees","formatOrderSettingsFee","feeSetting","formatEntryPrice","formatEntry","formatEntries","formatTableNumber","check","formatTotal","formatCheck","getAsyncPaymentBrowserInfo","formatQuantity","quantityFormatted","formatItemPrice","formatItemsMap","payment","formattedItem","formatAmount","formatBrowserInfo","formatPayment","formatPaymentMade","paymentMade","getDistanceFromLatLon","lat1","lon1","lat2","lon2","R","dLat","deg2rad","dLon","deg","RestaurantStatus","getRestaurantStatusLabel","PspType","formatOpeningHours","openingHours","manufactureDelay","openingHour","formatOpeningHoursList","openingHoursArray","today","currentDayName","dayKeyName","getNextOpening","openingHoursList","maxNumberToCheck","formatRestaurantOpeningHours","delayAsHours","currentDay","nowToCompare","nextDay","formatOrderSettings","restaurant","Feature","PaymentType","isBitSet","flag","formatFeatures","getCountryNameForCode","getPspBoUrl","psp","formatPspShopUrl","pspRestaurantId","formatPspUserUrl","pspUserId","formatLegalRepresentative","legal","representative","address","formatBank","bank","formatLegal","formatAddress","formatDistance","latitude","longitude","sortByName","formatLogo","formatPicture","formatPsp","formatRestaurant","formatRestaurantsMap","formatRestaurantList","formatRestaurantsListData","Type","ThirdParty","getGoogleMapsUrl","zoom","useStyles","makeStyles","StatusChip","OrderMode","OrderStatus","getOrderStatusLabel","getOrderStatusType","getOrderModeLabel","OrderPaymentStatus","getOrderPaymentStatusLabel","getOrderPaymentStatusType","CancellingParty","getCancellingPartyFormatted","cancellingParty","formatAdmissionFee","admissionFee","formatAdmissionFeesData","admissionFees","formatAdmissionFees","formatSubsidy","subsidy","formatSubsidiesData","subsidies","formatSubsidies","formatUserAccountPaymentData","userAccountPayment","formatUserAccountPayment","formatThirdParty","formatOrderNumber","formatDates","dayText","dueDate","formatOrderMode","formatStatus","formatOrderRestaurant","formatPrices","ON_SITE_PAYMENT_ID","irlPayment","calculateIsFullyPaid","formatAmountFromAccount","formatGrantAmount","formatSource","formatOrderUser","formatItems","formatOptionValue","formatOption","formatProduct","product","formatPart","formatMenu","menu","formatDeliveryAddress","formatOrder","formatOrders","getApiConsumerListStateKey","withParents","ApiConsumerStatus","getApiConsumerStatusLabel","getApiConsumerStatusType","ApiConsumerPreset","getApiConsumerPresetLabel","preset","getApiConsumerPresetExplaination","PagerCaptureModes","formatOrderModes","formattedDatas","formatOrderAppConfig","formatAppConfig","formatAppConfigPreset","getAppConfigState","appConfigState","isFetchingAppConfig","getAppConfigError","getAppConfigData","appConfigData","getAppConfig","getOauthClient","auth","oauth","getMergedConfig","typeConfig","getAppTexts","getUserSettings","getFrontSettings","getOrderSettings","getSecuritySettings","getAppConfigPreset","ApiEndpoints","AuthErrors","AuthApi","username","password","client_id","client_secret","refresh_token","UserErrors","transformUserFormDataToBody","UserApi","rGroupId","nextCursor","loadAccounts","AuthUserAction","authenticateUser","clientSecret","LOGOUT_ACTION","logout","SAVE_RAW_ACCESS_TOKEN_ACTION","CLEAN_AUTH_DATA","cleanAuthData","RefreshTokenFlowAction","retryApiCallAction","actionToRetry","RefreshAction","refreshAction","refreshToken","oauthClient","refreshActionDone","getAuthData","getAuthError","authData","isFetchingAuth","isRefreshingOauthToken","getAuth","haveAuthCredentials","getRefreshToken","authCookie","AppConfigApi","GetAppConfigAction","fetchAppConfig","compose_1","SET_API_GENERIC_INVALID","setApiGenericInvalid","API_INVALID_APP_TOKEN_ERROR_CODE","API_INVALID_GEOLOCATION_ERROR_CODE","API_INVALID_ON_SITE_SECURITY","APP_TOKEN_QUERY_PARAM","isAppSecurityError","getAppTokenCodeOnUrl","catchApiGenericError","apiGenericMiddleware","appSecurityMiddlewares","handleSetGenericInvalid","appSecurityReducer","IconError","Loading","AppConfigContainer","AppConfigWrappedComponent","AppConfigContainer$1","withAppConfig","createMuiColor","palette","createMuiTextColor","currentConfig","newConfig","createMuiValueForPalette","createMuiPalette","defaultPalette","paletteValue","paletteKey","createMuiThemeWithPmtRestaurantColors","colors","newPalette","createMuiThemeWithPmtRGroupColors","textsForCurrentLocale","textForLocale","formatCustomTexts","customTextsSelectors","getCustomTextsData","customTexts","getAppConfigSuccess","frontSettings","newTheme","appConfigMiddlewares","appConfigReducer","retryApiCallMiddleware","refreshTokenMiddlewares","notifyTokenChanged","authMiddleware","redirectToParam","refreshMiddlewareSuccess","refreshMiddlewareFailure","logoutMiddleware","saveRawAccessTokenMiddleware","getAppConfigSuccessMiddleware","settings","authMiddlewares","getDefaultState","authReducer","unauthorizedMiddleware","currentUrl","authenticationMode","getAuthProData","authProData","authProState","getAuthRestaurantData","authRestaurantData","authRestaurantState","apiConsumer","_isRefreshingToken","_actions","clearAttemptRefresh","defaultIsRefreshCall","requestNewAccessToken","postRefreshToken","queueActionForRefreshToken","_refreshPromise","refreshActionCreator","refreshPromise","requestNewAccessTokenResponse","attemptRefresh","failureAction","isRefreshCall","defaultRefreshActionCreator","accessToken","handleAccessToken","handleExpiredToken","expiration","getFinalApiUrl","requestUrl","authenticationSettings","getAuthorizationFromModeAndCookies","getOauthToken","getOauthBearerToken","requestConfigurationMiddleware","authorization","chooseLocaleMiddleware","u","N","w","S","F","P","D","E","A","O","C","L","T","M","generateMiddlewares","appMiddlewares","configureStore","reduxDevtoolsExtension","configureStoreProd","CHUNK_ERROR_RELOAD_KEY","isChunkLoadError","handleChunkError","unregisterServiceWorker","registration","PersistGate","_persistor$getState","bootstrapped","spacing","unit","ErrorOccurredView","sentryId","Divider","Grid","ErrorOccurredView$1","ErrorBoundary","errorView","Layout","ThemeDefault","DevThemePage","CardBasicActionType","EditorModeEdit","EditIcon","getCardBasicActionType","EditorModeEditIcon","Actions","CardBasic","Card","CardHeader","CardContent","CardBasic$1","CardPostIt","CardPostIt$1","CardSection","ariaLabel","animationDelay","SocialPerson","SocialPerson$1","LogoGrey","LogoGrey$1","getComponents","calendarPart","Allergen","CountryChooser","Diet","Gender","Celery","Celery$1","Cheese","Cheese$1","Crab","Crab$1","Egg","Egg$1","Fish","Fish$1","Lupine","Lupine$1","Milk","Milk$1","Mustard","Mustard$1","Nut","Nut$1","Peanut","Peanut$1","Shellfish","Shellfish$1","Sesame","Sesame$1","Soy","Soy$1","Sulphites","Sulphites$1","Wheat","Wheat$1","Tartrazine","Tartrazine$1","Rice","Rice$1","RedMeat","RedMeat$1","PoultryMeat","PoultryMeat$1","Fruit","Fruit$1","Corn","Corn$1","Garlic","Garlic$1","Balsam","Balsam$1","Buckwheat","Buckwheat$1","DEFAULT_BIRTHDATE","getGenderLabel","gender","getDietLabel","diet","getAllergenLabel","allergen","getAllergenIcon","getAllergensOptions","DEFAULT_DIETARY_PREFERENCES","AllergenChooser","limitTags","allergensOptions","Autocomplete","Fragment","getTagProps","allergens","listChooserPart","NavigationCheck","CheckIcon","StepIcon","StepAvatar","isCurrent","Avatar","Step","isLast","Step$2","StepContent","Stepper","Stepper$1","AccountCardDetails","AccountCardDetails$1","stepperPart","RENDER_TYPE","Resizer","renderType","FormGroup","FormControlLabel","Resizer$1","ComponentList","componentList","ComponentList$1","SectionList","sectionList","section","SectionList$1","StyleGuidePage","colorComponents","StyleguidePage","Test","devRoutes","createRouteContent","locationFinal","generateRoute","configureRoutes","routesToGenerate","lazy","__vitePreload","index$1","App","Suspense","createLoadable","loader","loading","LazyComponent","LoadingPage","LoadingPage$1","ButtonCustom","variant","ButtonLink","ButtonLink$1","getAppSecurityError","AppSecurityContainer","appSecurityError","AppSecurityContainer$1","NavigationArrowBack","ArrowBack","registerVersion","PMTFirebaseAuth","FirebaseDataSubscription","_firebaseApp","initializeFirebase","initializeApp","getFirebaseApp","firebaseAuthReducer","firebaseDataReducer","existingData","pushConsentToFirebase","plugin","dbPath","db","getDatabase","serverTimestamp","CookieConsentBanner","analyticsConfig","setOpen","currentConsent","setCurrentConsent","useState","setUid","firebaseApp","signInAnonymously","userCredential","selectionIsNecessaryCookiesOnly","saveSelection","handleAccept","handleDeny","Slide","Box","analytics","Env","ActionInfoOutline","InfoOutline","ErrorLayout","buttonLabel","buttonAction","ErrorLayout$1","Page","goBackRoute","onBack","showHeader","disableBack","Page$1","appData","Authorize","onAuthorize","View","appDataIsFetching","appDataError","RestaurantsGroupApi","groupId","storesIds","childrenIds","__extends","extendStatics","__","_hasOwnProperty","_objectKeys","_deepClone","isInteger","charCode","escapePathComponent","unescapePathComponent","hasUndefined","i_1","objKeys","objKeysLength","patchErrorMessageFormatter","messageParts","PatchError","_super","operation","tree","_newTarget","JsonPatchError","deepClone","objOps","getValueByPointer","originalValue","applyOperation","valueToCopy","_areEquals","arrOps","removedList","pointer","getOriginalDestination","validateOperation","mutateDocument","banPrototypeModifications","existingPathFragment","validateFunction","applyPatch","patch","length_1","applyReducer","operationResult","pathLen","existingPathLen","sequence","externalValidator","arrA","arrB","beforeDict","Mirror","ObserverInfo","getMirror","getObserverFromMirror","mirror","removeObserverFromMirror","unobserve","observe","patches","observerInfo","dirtyCheck","generate","fastCheck","invertible","_generate","temp","newKeys","oldKeys","deleted","oldVal","newVal","tree1","tree2","core","duplex","GetRestaurantsGroupAction","fetchRestaurantsGroup","PutGroupStoreListAction","PutGroupGroupListAction","PatchGroupAction","uniq","uniq_1","FrontCateringHistoryType","GroupType","formatLevel","rGroup","formatType","formatFrontSettings","sortSubRestaurantsGroups","formatForgottenPasswordLink","formatChildrenRestaurants","formatRestaurantsGroup","formatRestaurantsGroupWithChildren","getRestaurantsGroupIdOnProps","getRestaurantsGroupListState","restaurantsGroups","groupsMap","restaurantsGroupData","makeIsFetchingRestaurantsGroup","restaurantsGroupListState","makeGetRestaurantsGroup","restaurantsGroup","makeGetRawRestaurantsGroup","makeGetRestaurantsGroupError","RestaurantsGroupContainer","forceReload","loadChildren","notLoadedYet","RestaurantsGroupWrappedComponent","isFetchingRestaurantsGroup","rawRestaurantsGroup","restaurantsGroupError","getRawRestaurantsGroup","getRestaurantsGroup","getRestaurantsGroupError","RestaurantsGroupContainer$1","withRestaurantsGroupMine","GetUserMeAction","fetchUserMe","PutUserMeAction","UserMeActions","userAccount","formatExpirationDateAsHour","formatUserAccount","formatUserAccounts","formatUserUserAccounts","formatDiet","dietaryPreferences","formatAllergens","formatDietaryPreferences","formatAllowContact","marketing","formatMarketing","formatEmail","formatGender","formatBirthdate","formatUserDates","formatPhone","formatName","formatLocales","createDietaryIfNull","formatUser","getUserMeData","isFetchingUserMe","userMeData","getUserMe","userMe","UserMeContainer","UserMeWrappedComponent","isFetchingMe","me","UserMeContainer$1","withUserMe","AuthStateContainer","AuthWrappedComponent","AuthStateContainer$1","withAuthState","meReducer","AuthAppErrors","bodyProps","GetAppDataAction","fetchAuthorizeApp","AuthAppApi","getAppDataState","getAppDataError","authDataState","getAppData","PostAuthorizeAppAction","postAuthorizeApp","getAppDataSuccessMiddleware","redirect_uri","response_type","getAppDataErrorMiddleware","getAppMiddlewares","DEFAULT_APP_DATA","appDataReducer","authorizedAppMiddleware","deniedAppMiddleware","authorizeAppMiddlewares","getAuthorizeState","authorizeState","DEFAULT_AUTHORIZE_DATA","authorizeAppReducer","redirectToLoginPageForAuthApp","authAppReducer","AuthAppPage","isAuthorized","force","AuthAppPage$1","getDefaultBasicToken","getDefaultApiConsumer","getDefaultRestaurantId","filterObject","valueToExclude","filteredObject","RestaurantErrors","RestaurantApi","loadOrderSettings","restaurantIds","restaurants","restaurantRequest","previousOptions","filteredQuery","GetRestaurantAction","fetchRestaurant","RefreshRestaurantAction","PostRestaurantAction","GetRestaurantListAction","GetRestaurantListByGeoPtAction","RestaurantAction","setRestaurant","baseFindKey","_baseFindKey","findKey","findKey_1","HistoryType","generateIdempotencyKey","idempotencyKey","TOP_UP_TYPE","DEFAULT_TOP_UP","TOP_UP_STATUS","baseDifference","valuesLength","valuesIndex","_baseDifference","differenceWith","differenceWith_1","loadRestaurants","rids","HistoryApi","cursor","booking","GetHistoryAction","getHistoryApiForType","historyType","fetchUserHistory","getRestaurantState","getRestaurantIdOnProps","getRestaurantListData","restaurantState","restaurantsListData","restaurantListData","restaurantList","makeIsFetchingRestaurant","makeGetRestaurantError","restaurantError","makeGetRestaurant","makeGetRestaurantFromRestaurantList","getLoadedRestaurantsIds","restaurantsData","getRestaurantMap","restaurantsDataMap","restaurantsMap","restaurantPost","restaurantThemeMiddleware","restaurantReducer","RestaurantContainer","RestaurantWrappedComponent","isFetchingRestaurant","getRestaurant","getRestaurantError","getRestaurantFromRestaurantList","RestaurantContainer$1","withRestaurant","UserType","RegisterApi","newUser","RegisterUserAction","RegisterIncognitoUserAction","RegisterUserLightAction","registerUser","registerAsIncognito","registerUserLight","getRegisterData","getRegisterError","isFetchingRegister","registeredSuccessMiddleware","registeredIncognitoSuccessMiddleware","redirectToRedirectToParamIfExists","DID_REDIRECT_TO_PARAM","registeredUserLightSuccessMiddleware","registrationMiddlewares","registrationReducer","Lock","Lock$1","BrandedCardLayout","backgroundImagePath","logoPath","fallbackIcon","headerInfo","headerHeightVh","scrollableCard","growCardWhenNoImage","badgeOverlap","hasBackgroundImage","BrandedCardLayout$1","LoginViews","TAB_SURFACE_BACKGROUND","TAB_INACTIVE_COLOR","TAB_INACTIVE_HOVER_COLOR","AuthTabs","active","tabs","handleKeyDown","newIndex","nextTabNode","AuthTabs$1","ActionVisibility","Visibility","ActionVisibilityOff","VisibilityOff","now_1","nativeMin","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","debounced","isInvoking","debounce_1","unfetch_module","BAD_REQUEST","fetchFromApi","_ref$baseUrl","_ref$userAgent","fetch","pwnedPasswordRange","row","Sha1","utf8encode","Utf8","K","H0","H1","H2","H3","H4","W","z","strUni","strUtf","cc","HibpPasswordRangeContainer","shaValue","sha1","suffix","pwdData","isPwned","minLength","ErrorOutline","ErrorOutline$1","MessageBlock","toExport","MessageBlockSdk","MessageBlockComponent","HibpPasswordView","pwnedText","displayIsSecureMessage","displayCheckSecure","minPasswordLength","isTooSmall","securityStyles","PasswordField","helperTextClassName","outlineClassName","fullWidth","startAdornment","_rawHelperText","_classes","_checkSecurity","_variant","_minPasswordLength","visibilityToggle","checkSecurity","hibpState","Input","FormHelperText","PasswordField$1","MenuView","button","Menu","MenuItem","__vite_glob_0_20","__vite_glob_0_21","__vite_glob_0_22","__vite_glob_0_23","__vite_glob_0_24","__vite_glob_0_25","__vite_glob_0_26","__vite_glob_0_27","__vite_glob_0_28","__vite_glob_0_29","__vite_glob_0_30","__vite_glob_0_31","__vite_glob_0_32","__vite_glob_0_33","__vite_glob_0_34","__vite_glob_0_35","__vite_glob_0_36","__vite_glob_0_37","__vite_glob_0_38","__vite_glob_0_39","__vite_glob_0_40","__vite_glob_0_41","__vite_glob_0_42","__vite_glob_0_43","__vite_glob_0_44","__vite_glob_0_45","__vite_glob_0_46","__vite_glob_0_47","__vite_glob_0_48","__vite_glob_0_49","__vite_glob_0_50","__vite_glob_0_51","__vite_glob_0_52","__vite_glob_0_53","__vite_glob_0_54","__vite_glob_0_55","__vite_glob_0_56","__vite_glob_0_57","__vite_glob_0_58","__vite_glob_0_59","__vite_glob_0_60","__vite_glob_0_61","__vite_glob_0_62","__vite_glob_0_63","__vite_glob_0_64","__vite_glob_0_65","__vite_glob_0_66","__vite_glob_0_67","__vite_glob_0_68","__vite_glob_0_69","__vite_glob_0_70","__vite_glob_0_71","__vite_glob_0_72","__vite_glob_0_73","__vite_glob_0_74","__vite_glob_0_75","__vite_glob_0_76","__vite_glob_0_77","__vite_glob_0_78","__vite_glob_0_79","__vite_glob_0_80","__vite_glob_0_81","__vite_glob_0_82","__vite_glob_0_83","__vite_glob_0_84","__vite_glob_0_85","__vite_glob_0_86","__vite_glob_0_87","__vite_glob_0_88","__vite_glob_0_89","__vite_glob_0_90","__vite_glob_0_91","__vite_glob_0_92","__vite_glob_0_93","__vite_glob_0_94","__vite_glob_0_95","__vite_glob_0_96","__vite_glob_0_97","__vite_glob_0_98","__vite_glob_0_99","__vite_glob_0_100","__vite_glob_0_101","__vite_glob_0_102","__vite_glob_0_103","__vite_glob_0_104","__vite_glob_0_105","__vite_glob_0_106","__vite_glob_0_107","__vite_glob_0_108","__vite_glob_0_109","__vite_glob_0_110","__vite_glob_0_111","__vite_glob_0_112","__vite_glob_0_113","__vite_glob_0_114","__vite_glob_0_115","__vite_glob_0_116","__vite_glob_0_117","__vite_glob_0_118","__vite_glob_0_119","__vite_glob_0_120","__vite_glob_0_121","__vite_glob_0_122","__vite_glob_0_123","__vite_glob_0_124","__vite_glob_0_125","__vite_glob_0_126","__vite_glob_0_127","__vite_glob_0_128","__vite_glob_0_129","__vite_glob_0_130","__vite_glob_0_131","__vite_glob_0_132","__vite_glob_0_133","__vite_glob_0_134","__vite_glob_0_135","__vite_glob_0_136","__vite_glob_0_137","__vite_glob_0_138","__vite_glob_0_139","__vite_glob_0_140","__vite_glob_0_141","__vite_glob_0_142","__vite_glob_0_143","__vite_glob_0_144","__vite_glob_0_145","__vite_glob_0_146","__vite_glob_0_147","__vite_glob_0_148","__vite_glob_0_149","__vite_glob_0_150","__vite_glob_0_151","__vite_glob_0_152","__vite_glob_0_153","__vite_glob_0_154","__vite_glob_0_155","__vite_glob_0_156","__vite_glob_0_157","__vite_glob_0_158","__vite_glob_0_159","__vite_glob_0_160","__vite_glob_0_161","__vite_glob_0_162","__vite_glob_0_163","__vite_glob_0_164","__vite_glob_0_165","__vite_glob_0_166","__vite_glob_0_167","__vite_glob_0_168","__vite_glob_0_169","__vite_glob_0_170","__vite_glob_0_171","__vite_glob_0_172","__vite_glob_0_173","__vite_glob_0_174","__vite_glob_0_175","__vite_glob_0_176","__vite_glob_0_177","__vite_glob_0_178","__vite_glob_0_179","__vite_glob_0_180","__vite_glob_0_181","__vite_glob_0_182","__vite_glob_0_183","__vite_glob_0_184","__vite_glob_0_185","__vite_glob_0_186","__vite_glob_0_187","__vite_glob_0_188","__vite_glob_0_189","__vite_glob_0_190","__vite_glob_0_191","__vite_glob_0_192","__vite_glob_0_193","__vite_glob_0_194","__vite_glob_0_195","__vite_glob_0_196","__vite_glob_0_197","__vite_glob_0_198","__vite_glob_0_199","__vite_glob_0_200","__vite_glob_0_201","__vite_glob_0_202","__vite_glob_0_203","__vite_glob_0_204","__vite_glob_0_205","__vite_glob_0_206","__vite_glob_0_207","__vite_glob_0_208","__vite_glob_0_209","__vite_glob_0_210","__vite_glob_0_211","__vite_glob_0_212","__vite_glob_0_213","__vite_glob_0_214","__vite_glob_0_215","__vite_glob_0_216","__vite_glob_0_217","__vite_glob_0_218","__vite_glob_0_219","__vite_glob_0_220","__vite_glob_0_221","__vite_glob_0_222","__vite_glob_0_223","__vite_glob_0_224","__vite_glob_0_225","__vite_glob_0_226","__vite_glob_0_227","__vite_glob_0_228","__vite_glob_0_229","__vite_glob_0_230","__vite_glob_0_231","__vite_glob_0_232","__vite_glob_0_233","__vite_glob_0_234","__vite_glob_0_235","__vite_glob_0_236","__vite_glob_0_237","__vite_glob_0_238","__vite_glob_0_239","__vite_glob_0_240","__vite_glob_0_241","__vite_glob_0_242","__vite_glob_0_243","__vite_glob_0_244","__vite_glob_0_245","__vite_glob_0_246","__vite_glob_0_247","__vite_glob_0_248","__vite_glob_0_249","__vite_glob_0_250","__vite_glob_0_251","__vite_glob_0_252","__vite_glob_0_253","__vite_glob_0_254","__vite_glob_0_255","__vite_glob_0_256","__vite_glob_0_257","__vite_glob_0_258","__vite_glob_0_259","__vite_glob_0_260","__vite_glob_0_261","__vite_glob_0_262","__vite_glob_0_263","__vite_glob_0_264","__vite_glob_0_265","__vite_glob_0_266","__vite_glob_0_267","__vite_glob_0_268","__vite_glob_0_269","flagModules","Flag","alt","flagSvg","fullPath","Flag$1","getInitialState","countryDialCode","makeSureStartWithPlusOrEmpty","PhoneField","asYouTypeResults","dialCode","extractedNationalNumber","newFormattedNumber","inputFormatted","nationalNumber","displayAsError","selectElement","Select","dial_code","nextPropsValue","libPhoneNumber","cursorPosition","PhoneField$1","fieldIconStyles","FieldIcon","Icon","FirstName","PersonOutlineIcon","LastName","PhoneNumber","PhoneOutlinedIcon","BadgeId","CardMembershipOutlinedIcon","Tooltip","Email","MailOutlineIcon","Password","LockOutlinedIcon","MarketingOptim","isInputChecked","LoginFormView","forgottenPasswordLink","LoginFormView$1","login","LoginForm","formIsValid","authError","onSubmitLogin","LoginForm$1","fieldsType","getFieldsMap","getField","registrationCodeErrors","set_1","Cgu","CguLabel","linkClass","_RegisterFormView","formFields","registerError","style","cguLabel","restaurantCountry","restaurantsGroupDefaultLocale","userLightCookie","fieldInfo","fieldProps","acceptCgu","RegisterFormView","RegisterFormView$1","optionField","RegisterForm","onSubmitRegistration","allowIncognito","onRedirectToIncognito","RegisterForm$1","UserLightFormView","UserLightFormView$1","userLight","UserLightForm","captionTitle","captionText","UserLightForm$1","IncognitoFormView","IncognitoFormView$1","incognito","IncognitoForm","onRedirectToUserLight","handleKeepIncognito","authMode","btnLabel","withCaption","IncognitoForm$1","LoginPage","credentials","newView","view","tabNode","prevState","frontAppConfig","renderBranded","canSwitchLoginRegister","PaymentPage","LoginPage$1","ForgotPasswordAction","forgotPassword","getData","getForgotPasswordError","getForgotPasswordIsFetching","forgotPasswordSuccessMiddleware","forgotPasswordMiddlewares","DEFAULT_FORGOT_PASSWORD","forgotPasswordReducer","ForgotPasswordForm","userError","ForgotPasswordFormView","View$o","ForgotPasswordPage","ForgotPasswordPage$1","RegisterPage","CheckErrors","CheckApi","tableNumber","posCheckId","checkIdTarget","posCodeToMerge","GetCheckWithTableNumberAction","fetchCheckWithTableNumber","CheckAction","GetCheckWithPosCheckIdAction","fetchCheckWithPosCheckId","GetCheckAction","GetRefreshCheckAction","fetchCheck","fetchRefreshCheck","isFromCheck","GetCheckWithCodeAction","fetchCheckWithCode","MergeCheckWithCodeAction","getCheckData","getEntries","getCheckError","checkData","isFetchingCheck","getCheck","getIdOnProps","getEntryWithId","CHECK_DATA","checkReducer","getPostPaymentData","getPaymentData","getPaymentMadeData","getItems","getPayment","paymentData","getItemWithId","getPostPayment","postPaymentData","getPaymentMade","paymentMadeData","getPaymentError","getPostPaymentAtTableData","postPayment","isFetchingPostPaymentAtTable","CheckContainer","CheckWrappedComponent","checkError","childrenProps","CheckContainer$1","PaymentStatus","TipsValueType","getPaymentStatusLabel","getPaymentStatusType","PaymentMethodsAllowed","forOwn","forOwn_1","PaymentAsyncErrors","PaymentErrorsList","PaymentPdfErrorsList","AsyncPaymentApi","paymentId","GetAsyncPaymentAction","getAsyncPayment","AsyncPaymentCanceledResponseStatus","AsyncPaymentRedirectToPspResponseStatus","AsyncPaymentPendingStatus","getTimeout","asyncPaymentRetry","getAsyncPaymentSuccess","statusFailed","defaultError","errorWithoutRefundData","getAsyncPaymentFailure","AsyncPaymentMiddlewares","isAsyncPaymentRedirectToPspResponse","PaymentApi","paymentMethod","card","fromDate","toDate","SelectPaymentTypeAction","setPaymentTypeAll","setPaymentTypeShare","setPaymentTypeEntries","PaymentAction","resetPayment","selectTips","tips","SharePaymentAction","increaseDivider","decreaseDivider","increaseMultiplier","decreaseMultiplier","PaymentItemSelection","addEntryToPayment","removeEntryFromPayment","shareEntryToPaymentUpdate","share","PostPaymentAction","PostIrlPaymentAction","PostUserLightPaymentAction","resetPostPayment","processPaymentv2","CHECK","getDefaultShare","getDefaultChoose","PAYMENT","PAYMENT_DATA","createItem","itemsPath","ceilToCent","exactValue","ceilWithRoundingValue","roundingValue","updateShareData","maxMultiplier","checkTotal","exactValuePerPerson","amountPerPersonAsNumber","getItemOnState","itemId","createItemOnState","stateItems","removeItemOnState","updateItem","updateItemOnState","increaseItemQuantity","refreshPaymentInfo","total","itemKey","itemPrice","exactTotal","refreshPaymentInfoState","paymentReducer","increaseItemShareUpdate","POST_PAYMENT_DATA","postPaymentReducer","Table","Table$1","Audit","Audit$1","ShoppingCart","ShoppingCart$1","CreditCard","CreditCard$1","Price","hasCartModifier","rowReverse","columnReverse","baseValue","Price$1","Entry","addAction","removeAction","divideAction","isSelection","checkboxId","handleToggle","handleDivideClick","CheckList","CheckListComponent","OrderUnavailableBecauseClosedMessageBlock","nextOpening","Check","canOrder","canPay","reloadCheck","onRedirectToOrder","onRedirectToPayment","fillAvailableSpace","previewFakeCheckCount","isPreviewingFakeCheck","isEmptyCheck","orderUnavailableBecauseClosed","canExpand","isNoCheckYetOnTable","showCheckHeader","orderDisabled","payDisabled","shouldFill","isExpandTrigger","handleExpand","Check$1","TNumber","TableNumber","tableId","TableNumber$1","orderAppConfig","View$m","RestaurantPage","at","loginMode","RestaurantPage$1","NumberField","withFixedDecimals","autoComplete","NumberField$1","View$k","TableNumberPage","TableNumberPage$1","Choose","Choose$1","Share","Share$2","onRedirectToTotality","onRedirectToShare","onRedirectToChoose","View$i","CheckPage","routeParams","CheckPage$1","withCheck","aa","ba","da","ea","fa","B","ha","ia","ja","ka","la","ma","na","oa","pa","H","qa","ra","sa","ta","va","wa","J","xa","ya","za","Aa","Q","U","V","Ba","Ca","Da","Ea","Fa","Ga","Ha","X","Ia","Ja","Ka","La","Ma","Y","Na","Oa","Pa","Z","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","Ya","Za","$a","I","G","ab","reactDomServer_browser_production_min","server_browserModule","AddCircleOutline","AddCircleOutline$1","RemoveCircleOutline","RemoveCircleOutline$1","ArrowTuto","ArrowTuto$1","getRatio","multiplier","divider","onDecreaseMultiplier","onIncreaseMultiplier","onDecreaseDivider","onIncreaseDivider","ReactDOMServer","ThemeProvider","View$g","PaymentSharePage","View$e","ChoosePage","PaymentChoosePage","getAuthenticatedUser","authenticatedUser","WebCustomerAction","TopUpErrors","TopUpApi","userAccountId","userCardId","topUp","PostTopUpAction","postTopUpWithCreditCard","selectedCreditCard","TopUpAction","topUpInit","topUpSelectAmount","topUpUnselectAmount","topUpClickOtherAmount","resetTopUp","formatCreationDate","formatSimpleCreationDate","defaultApiConsumer","formatTopUp","formatTopUps","getTopUpState","getUserAccountIdOnProps","makeGetTopUpForAccount","topUpState","topUpData","makeGetTopUpErrorForAccount","makeIsPostingTopUp","makeGetOtherAmountClicked","TopUpContainer","topUpError","isPostingTopUp","otherAmountClicked","getTopUpForAccount","getTopUpErrorForAccount","getOtherAmountClicked","TopUpContainer$1","AmountCircle","isSelected","defaultAmountsToPropose","TopUpChooseAmountView","amountsToPropose","amountSize","displayOtherAmount","topUpIsInit","onUnselectAmount","onSelectAmount","onClickOtherAmount","TopUpChooseAmountView$1","topUpReducer","UserAccountErrors","UserAccountApi","UserAccountAction","FetchUserUserAccountsAction","fetchUserUserAccounts","FetchUserUserAccountAction","fetchUserUserAccount","accountId","UpdateUserAccountAction","redirectToPostPaymentMiddleware","postPaymentSuccessMiddleware","postTopUpSuccessMiddleware","processPaymentMiddleware","postPaymentFailureMiddleware","postTopUpFailureMiddleware","finalizeAsyncPaymentSuccess","isTopUp","isPayment","finalizeAsyncPaymentFailure","updateCurrency","refreshCheckSuccessFromCheck","paymentAmount","webCustomerMiddlewares","PaymentMethod","checked","isOnlyMethodAllowed","PaymentMethods","isSubmitDisabled","submitLabel","isTRDPaymentAllowed","hasPaymentWithCardPrint","submitEnabled","RadioGroup","ComposedPaymentMethods","PaymentMethods$1","ErrorWithRefundDialog","paymentError","DialogContentText","DialogActions","ErrorSnackBar","ErrorAlert","resetAndClose","CustomTip","customValueSelected","isPercentage","Tip","round","TipBar","onChoseTip","tipsOptions","amountWithoutTips","roundValue","setCustomValueSelected","initialized","setInitialized","onTipSelection","tipAmount","customValue","calculateAmountFromPercentage","percentage","exactAmount","matchingPossibleValue","possibleValue","currentValue","TipSlider","defaultSelectedPercentage","defaultTipsValue","maxValue","tipValueAsPercentage","Slider","Tips","tipsSettings","onPostPayment","View$c","Payment","formsAreValid","PaymentPaymentPage","View$a","PaymentVerificationPage","PaymentVerificationPage$1","getUserAccounts","getUserIdOnProps","makeIsFetchingUserUserAccount","userAccountsState","userAccountsData","userAccounts","makeIsFetchingUserUserAccounts","makeGetUserUserAccounts","makeGetUserUserAccount","makeGetDefaultUserUserAccount","UserAccountsContainer","isFetchingUserAccounts","getDefaultUserUserAccount","defaultUserAccount","UserAccountsContainer$1","UserAccountContainer","isFetchingUserAccount","getUserAccount","UserAccountContainer$1","LinkToPopUp","onRedirectToTopUp","dislayLinkToTopUp","balanceLabel","defaultBalanceLabel","UserAccountRemainingView","forceUpdate","UserAccountRemainingView$1","CreateUserPostUserAction","userReducer","TOKEN_EXPIRATION_DELAY","fetchUserAccountMiddleware","userAccountMiddlewares","userUserAccountsReducer","ScrollToTop","withScrollToTop","DialogContainer","defaultOpen","disableDefaultOnClose","showView","setShowView","LockerIcon","PaymentAsyncRedirectTutorialDialog","label1","label2","redirecting","setRedirecting","currentPath","ForPaymentAtTable","paymentAtTableData","ForPaymentAtTableImpl","ForTopUp","ForTopUpImpl","AsyncPaymentFormPage","AsyncPaymentFormPage$1","FetchPaymentPdfLinkAction","fetchPaymentPdfLink","ResetPaymentPdfLinkAction","resetPaymentPdfLink","fetchPaymentPdfLinkSelectors","isFetchingPaymentPdfLink","getDataPaymentPdfLink","getErrorPaymentPdfLink","resetData","fetchPaymentPdfLinkReducer","handleBackToCheck","handleBackToHome","isIncognito","paymentPdfLink","errorPaymentPdfLink","leftToPay","totalWithTipFormatted","PictureAsPdfIcon","View$7","ConfirmPage","PaymentConfirmPage","Refresh","Refresh$1","LoadingContainerView","errorData","manualRunView","shouldShow","shouldShowManualRunView","delegateErrorHandlingToChildrenResult","withWrapper","LoadingContainer","onUpdate","dontUpdateOnMount","delegateErrorHandlingToChildren","errorName","ApiConsumerErrors","ApiConsumerApi","apiConsumerId","loadSettings","GetApiConsumerListAction","fetchApiConsumerList","fetchApiConsumerListFromRestaurant","formatApiConsumer","formatApiConsumers","getApiConsumerListState","getWithParentsOnProps","getApiConsumerListSelectors","isFetchingApiConsumerList","getApiConsumerListData","getApiConsumerList","apiConsumerList","getApiConsumerListWithDefault","ApiConsumerListContainer","withOther","apiConsumerListToUse","UserTransactionType","formatTypeLabel","transaction","formatTransactionData","formatTransaction","formatTransactionsList","getPaymentTypeLabel","formatUserTransaction","formatUserTransactionsList","getUserHistoryData","getHistoryTypeOnProps","getCheckPosIdOnProps","getUserHistoryTypeData","userHistory","userHistoryType","makeIsFetchingHistory","historyTypeData","makeGetUserHistoryTypeList","formattedRestaurantsMap","makeGetUserHistoryTypePagination","pagination","makeGetUserHistoryTransaction","checkPosId","HistoryTypeContainer","isFetchingHistory","getUserHistoryTypeList","getUserHistoryTypePagination","HistoryTypeContainer$1","userHistoryReducer","newHistory","actualHistory","getIdentifier","InfiniteScroll","parentElement","passive","testOptions","scrollEl","scrollParent","parentNode","scrollTop","renderProps","hasMore","initialLoad","isReverse","loadMore","pageStart","useCapture","useWindow","getScrollParent","childrenArray","HistoryList","rowRenderer","infiniteScroll","TableBody","TransactionsHistoryContent","TableRow","TableCell","HistoryTransactionsModeView","HistoryTransactionsModeView$1","OrderHistoryContent","OrderHistory","OrderHistory$1","TopUpHistoryContent","finalList","TopUpHistory","TopUpHistory$1","TabContainer","templateStyle","_HistoryNormalModeView","AppBar","HistoryNormalModeView","HistoryNormalModeView$1","HistoryView","UserHistoryView","onRefresh","View$5","UserHistoryPage","UserHistoryPage$1","QR8bitByte","_8BitByte","ErrorCorrectLevel","ECL","QRRSBlock","totalCount","dataCount","typeNumber","errorCorrectLevel","rsBlock","RSBlock","QRBitBuffer","bufIndex","num","BitBuffer","QRMath","math","QRPolynomial","ratio","Polynomial","Mode","QRMaskPattern","QRUtil","digit","maskPattern","errorCorrectLength","qrCode","moduleCount","lostPoint","col","sameCount","dark","darkCount","util","BitByte","QRCode","rsBlocks","totalDataCount","minLostPoint","target_mc","instance_name","qr_mc","cs","pos","bits","mod","inc","bitIndex","byteIndex","dataList","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","rawPoly","modPoly","modIndex","totalCodeCount","QRCode_1","QRCodeImpl","getBackingStorePixelRatio","ctx","convertStr","charcode","DEFAULT_PROPS","PROP_TYPES","QRCodeCanvas","bgColor","fgColor","qrcode","canvas","cells","tileW","tileH","scale","rdx","cell","cdx","_this3","_props2","canvasStyle","QRCodeSVG","_React$Component2","_this4","_props3","renderAs","QrCode","backgroundgColor","foregroundColor","QrCodeView","onLoadUserAccount","View$4","UserQrCodePage","UserQrCodePage$1","Section","Section$1","TopUpPage","TopUpPage$1","handleGoToHistory","handleGoToTopUp","View$1","TopUpConfirmPage","TopUpConfirmPage$1","RoutingEnum","globalQueries","getQueries","createAsyncPage","configRoutes","initApp","getApiManagerOptions","loggerConfig","ApplicationView","Application","rootElement","ReactDOM","StrictMode","dataCatcher","devMiddlewares","ChooseEntryDividerDialog","EnhancedChooseEntryDividerDialog","GenerousPaymentDialog","EnhancedGenerousPaymentDialog","authenticatedUserReducer","restaurantsGroupThemeMiddleware","getRestaurantsGroupIdOnAction","onRequest","onSuccess","onFailure","onPatchRequest","onPatchFailure","onRequestPutGroupStoreList","onSuccessPutGroupStoreList","onFailurePutGroupStoreList","onRequestPutGroupGroupList","onSuccessPutGroupGroupList","onFailurePutGroupGroupList","restaurantsGroupReducer","persistExpireDelay","persistOptions","appTokenCode","i18n","GetCustomTextsAction","getCustomTextsSuccess","customTextsMiddlewares","PMTColors","red","orange","lightGreen","blue","grey","getPMTColor","getPMTColors","muiTheme","getLuminance","light","rrfConfig","uploadRes","firebase"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,229,230,231,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,318,319,320,323,324,325,326,327,328,329,330,331,334,337,338,341,342,343,344,345,351,352,353,354,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,420,421,422,423,424,430,432,437,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,502,508,509,510,511,512,513,514,515,516,517,522,523,525,534,535,536,537,555,556,557,566,582,588,589,590,591,595,602,648,675,678,682,749,760,761,762,763,765,801,802,806,807,827,828,829,830,831,832,833,1118,1152,1180,1181,1250,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268],"sources":["../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../node_modules/immutable/dist/immutable.js","../../node_modules/invariant/browser.js","../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObject.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/isNil.js","../../pmt-react-sdk/node_modules/history/node_modules/warning/browser.js","../../pmt-react-sdk/node_modules/resolve-pathname/index.js","../../pmt-react-sdk/node_modules/value-equal/index.js","../../pmt-react-sdk/node_modules/history/PathUtils.js","../../pmt-react-sdk/node_modules/history/LocationUtils.js","../../pmt-react-sdk/node_modules/history/createTransitionManager.js","../../pmt-react-sdk/node_modules/history/DOMUtils.js","../../pmt-react-sdk/node_modules/history/createBrowserHistory.js","../../pmt-react-sdk/packages/modules/src/api/constants.js","../../pmt-react-sdk/packages/modules/src/api/utils.js","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/_assignMergeValue.js","../../node_modules/lodash/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_cloneBuffer.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_cloneArrayBuffer.js","../../node_modules/lodash/_cloneTypedArray.js","../../node_modules/lodash/_copyArray.js","../../node_modules/lodash/_baseCreate.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_initCloneObject.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/isArray.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/isArrayLikeObject.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/isPlainObject.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_safeGet.js","../../node_modules/lodash/_assignValue.js","../../node_modules/lodash/_copyObject.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/toPlainObject.js","../../node_modules/lodash/_baseMergeDeep.js","../../node_modules/lodash/_baseMerge.js","../../node_modules/lodash/identity.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/_createAssigner.js","../../node_modules/lodash/merge.js","../../pmt-react-sdk/packages/modules/src/environment/defaultEnv.js","../../pmt-react-sdk/packages/modules/src/environment/environment.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/isEmpty.js","../../node_modules/lodash/isNumber.js","../../node_modules/lodash/isNaN.js","../../node_modules/lodash/isString.js","../../node_modules/lodash/_baseFindIndex.js","../../node_modules/lodash/_setCacheAdd.js","../../node_modules/lodash/_setCacheHas.js","../../node_modules/lodash/_SetCache.js","../../node_modules/lodash/_arraySome.js","../../node_modules/lodash/_cacheHas.js","../../node_modules/lodash/_equalArrays.js","../../node_modules/lodash/_mapToArray.js","../../node_modules/lodash/_setToArray.js","../../node_modules/lodash/_equalByTag.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_equalObjects.js","../../node_modules/lodash/_baseIsEqualDeep.js","../../node_modules/lodash/_baseIsEqual.js","../../node_modules/lodash/_baseIsMatch.js","../../node_modules/lodash/_isStrictComparable.js","../../node_modules/lodash/_getMatchData.js","../../node_modules/lodash/_matchesStrictComparable.js","../../node_modules/lodash/_baseMatches.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.js","../../node_modules/lodash/memoize.js","../../node_modules/lodash/_memoizeCapped.js","../../node_modules/lodash/_stringToPath.js","../../node_modules/lodash/_arrayMap.js","../../node_modules/lodash/_baseToString.js","../../node_modules/lodash/toString.js","../../node_modules/lodash/_castPath.js","../../node_modules/lodash/_toKey.js","../../node_modules/lodash/_baseGet.js","../../node_modules/lodash/get.js","../../node_modules/lodash/_baseHasIn.js","../../node_modules/lodash/_hasPath.js","../../node_modules/lodash/hasIn.js","../../node_modules/lodash/_baseMatchesProperty.js","../../node_modules/lodash/_baseProperty.js","../../node_modules/lodash/_basePropertyDeep.js","../../node_modules/lodash/property.js","../../node_modules/lodash/_baseIteratee.js","../../node_modules/lodash/_trimmedEndIndex.js","../../node_modules/lodash/_baseTrim.js","../../node_modules/lodash/toNumber.js","../../node_modules/lodash/toFinite.js","../../node_modules/lodash/toInteger.js","../../node_modules/lodash/findIndex.js","../../node_modules/lodash/_baseIsNaN.js","../../node_modules/lodash/_strictIndexOf.js","../../node_modules/lodash/_baseIndexOf.js","../../node_modules/lodash/indexOf.js","../../node_modules/lodash/_createFind.js","../../node_modules/lodash/find.js","../../node_modules/lodash/_arrayEach.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/_castFunction.js","../../node_modules/lodash/forEach.js","../../node_modules/lodash/isUndefined.js","../../node_modules/lodash/isNull.js","../../node_modules/lodash/_baseMap.js","../../node_modules/lodash/map.js","../../node_modules/lodash/_baseAssign.js","../../node_modules/lodash/_baseAssignIn.js","../../node_modules/lodash/_copySymbols.js","../../node_modules/lodash/_getSymbolsIn.js","../../node_modules/lodash/_copySymbolsIn.js","../../node_modules/lodash/_getAllKeysIn.js","../../node_modules/lodash/_initCloneArray.js","../../node_modules/lodash/_cloneDataView.js","../../node_modules/lodash/_cloneRegExp.js","../../node_modules/lodash/_cloneSymbol.js","../../node_modules/lodash/_initCloneByTag.js","../../node_modules/lodash/_baseIsMap.js","../../node_modules/lodash/isMap.js","../../node_modules/lodash/_baseIsSet.js","../../node_modules/lodash/isSet.js","../../node_modules/lodash/_baseClone.js","../../node_modules/lodash/clone.js","../../node_modules/lodash/_arrayIncludes.js","../../node_modules/lodash/_arrayIncludesWith.js","../../node_modules/lodash/noop.js","../../node_modules/lodash/_createSet.js","../../node_modules/lodash/_baseUniq.js","../../node_modules/lodash/uniqBy.js","../../node_modules/lodash/_baseValues.js","../../node_modules/lodash/values.js","../../node_modules/lodash/_isFlattenable.js","../../node_modules/lodash/_baseFlatten.js","../../node_modules/lodash/_baseSortBy.js","../../node_modules/lodash/_compareAscending.js","../../node_modules/lodash/_compareMultiple.js","../../node_modules/lodash/_baseOrderBy.js","../../node_modules/lodash/sortBy.js","../../pmt-react-sdk/packages/utils/src/array/index.js","../../pmt-react-sdk/packages/utils/src/url/index.js","../../pmt-react-sdk/packages/modules/src/environment/getters.js","../../pmt-react-sdk/packages/modules/src/store/index.js","../../pmt-react-sdk/packages/modules/src/redux/createAction.js","../../pmt-react-sdk/packages/modules/src/redux/createReducer.js","../../node_modules/reselect/es/index.js","../../node_modules/lodash/concat.js","../../node_modules/lodash/uniqWith.js","../../pmt-react-sdk/packages/modules/src/redux/createPaginateReducer.js","../../node_modules/@sentry/utils/esm/is.js","../../node_modules/@sentry/utils/esm/string.js","../../node_modules/@sentry/utils/esm/aggregate-errors.js","../../node_modules/@sentry/utils/esm/worldwide.js","../../node_modules/@sentry/utils/esm/browser.js","../../node_modules/@sentry/utils/esm/debug-build.js","../../node_modules/@sentry/utils/esm/logger.js","../../node_modules/@sentry/utils/esm/dsn.js","../../node_modules/@sentry/utils/esm/error.js","../../node_modules/@sentry/utils/esm/object.js","../../node_modules/@sentry/utils/esm/stacktrace.js","../../node_modules/@sentry/utils/esm/instrument/_handlers.js","../../node_modules/@sentry/utils/esm/instrument/console.js","../../node_modules/@sentry/utils/esm/misc.js","../../node_modules/@sentry/utils/esm/instrument/dom.js","../../node_modules/@sentry/utils/esm/supports.js","../../node_modules/@sentry/utils/esm/instrument/fetch.js","../../node_modules/@sentry/utils/esm/instrument/globalError.js","../../node_modules/@sentry/utils/esm/instrument/globalUnhandledRejection.js","../../node_modules/@sentry/utils/esm/vendor/supportsHistory.js","../../node_modules/@sentry/utils/esm/instrument/history.js","../../node_modules/@sentry/utils/esm/instrument/xhr.js","../../node_modules/@sentry/utils/esm/env.js","../../node_modules/@sentry/utils/esm/memo.js","../../node_modules/@sentry/utils/esm/normalize.js","../../node_modules/@sentry/utils/esm/syncpromise.js","../../node_modules/@sentry/utils/esm/promisebuffer.js","../../node_modules/@sentry/utils/esm/url.js","../../node_modules/@sentry/utils/esm/severity.js","../../node_modules/@sentry/utils/esm/time.js","../../node_modules/@sentry/utils/esm/envelope.js","../../node_modules/@sentry/utils/esm/clientreport.js","../../node_modules/@sentry/utils/esm/ratelimit.js","../../node_modules/@sentry/core/esm/debug-build.js","../../node_modules/@sentry/core/esm/constants.js","../../node_modules/@sentry/core/esm/eventProcessors.js","../../node_modules/@sentry/core/esm/session.js","../../node_modules/@sentry/core/esm/utils/spanUtils.js","../../node_modules/@sentry/core/esm/utils/prepareEvent.js","../../node_modules/@sentry/core/esm/exports.js","../../node_modules/@sentry/core/esm/utils/getRootSpan.js","../../node_modules/@sentry/core/esm/tracing/dynamicSamplingContext.js","../../node_modules/@sentry/core/esm/utils/applyScopeDataToEvent.js","../../node_modules/@sentry/core/esm/scope.js","../../node_modules/@sentry/core/esm/version.js","../../node_modules/@sentry/core/esm/hub.js","../../node_modules/@sentry/core/esm/envelope.js","../../node_modules/@sentry/core/esm/api.js","../../node_modules/@sentry/core/esm/integration.js","../../node_modules/@sentry/core/esm/metrics/utils.js","../../node_modules/@sentry/core/esm/metrics/envelope.js","../../node_modules/@sentry/core/esm/baseclient.js","../../node_modules/@sentry/core/esm/sdk.js","../../node_modules/@sentry/core/esm/transports/base.js","../../node_modules/@sentry/core/esm/utils/sdkMetadata.js","../../node_modules/@sentry/core/esm/integrations/inboundfilters.js","../../node_modules/@sentry/core/esm/integrations/functiontostring.js","../../node_modules/@sentry/browser/esm/helpers.js","../../node_modules/@sentry/browser/esm/debug-build.js","../../node_modules/@sentry/browser/esm/eventbuilder.js","../../node_modules/@sentry/browser/esm/userfeedback.js","../../node_modules/@sentry/browser/esm/client.js","../../node_modules/@sentry/browser/esm/transports/utils.js","../../node_modules/@sentry/browser/esm/transports/fetch.js","../../node_modules/@sentry/browser/esm/transports/xhr.js","../../node_modules/@sentry/browser/esm/stack-parsers.js","../../node_modules/@sentry/browser/esm/integrations/breadcrumbs.js","../../node_modules/@sentry/browser/esm/integrations/dedupe.js","../../node_modules/@sentry/browser/esm/integrations/globalhandlers.js","../../node_modules/@sentry/browser/esm/integrations/httpcontext.js","../../node_modules/@sentry/browser/esm/integrations/linkederrors.js","../../node_modules/@sentry/browser/esm/integrations/trycatch.js","../../node_modules/@sentry/browser/esm/sdk.js","../../node_modules/uuid/dist/esm-browser/rng.js","../../node_modules/uuid/dist/esm-browser/stringify.js","../../node_modules/uuid/dist/esm-browser/native.js","../../node_modules/uuid/dist/esm-browser/v4.js","../../pmt-react-sdk/packages/utils/src/uuid/index.js","../../pmt-react-sdk/packages/modules/src/storage/index.js","../../pmt-react-sdk/packages/modules/src/frontSession/index.js","../../pmt-react-sdk/packages/utils/src/logger/index.js","../../pmt-react-sdk/packages/modules/src/redux/createSimpleSelector.js","../../pmt-react-sdk/packages/modules/src/redux/createSimpleReducer.js","../../pmt-react-sdk/packages/modules/src/redux/createMiddleware.js","../../pmt-react-sdk/packages/modules/src/redux/createReducerPerObject.js","../../node_modules/symbol-observable/es/ponyfill.js","../../node_modules/symbol-observable/es/index.js","../../node_modules/redux/es/redux.js","../../pmt-react-sdk/packages/modules/src/i18n/actions.js","../../pmt-react-sdk/packages/modules/src/i18n/constants.js","../../node_modules/lodash/_baseSlice.js","../../node_modules/lodash/_castSlice.js","../../node_modules/lodash/_hasUnicode.js","../../node_modules/lodash/_asciiToArray.js","../../node_modules/lodash/_unicodeToArray.js","../../node_modules/lodash/_stringToArray.js","../../node_modules/lodash/_createCaseFirst.js","../../node_modules/lodash/upperFirst.js","../../node_modules/lodash/capitalize.js","../../pmt-react-sdk/packages/utils/src/locale/index.js","../../pmt-react-sdk/packages/modules/src/i18n/storage.js","../../node_modules/flatpickr/dist/flatpickr.js","../../pmt-react-sdk/packages/modules/src/i18n/utils.js","../../pmt-react-sdk/packages/modules/src/i18n/selectors.js","../../node_modules/lodash/_baseClamp.js","../../node_modules/lodash/startsWith.js","../../pmt-react-sdk/packages/modules/src/i18n/format.js","../../pmt-react-sdk/packages/modules/src/i18n/index.js","../../node_modules/lodash/negate.js","../../node_modules/lodash/_baseSet.js","../../node_modules/lodash/_basePickBy.js","../../node_modules/lodash/pickBy.js","../../node_modules/lodash/omitBy.js","../../pmt-react-sdk/packages/modules/src/api/errors/GlobalErrors.js","../../pmt-react-sdk/packages/modules/src/api/ApiManager.js","../../pmt-react-sdk/packages/modules/src/event/Events.js","../../pmt-react-sdk/packages/modules/src/event/EventManager.js","../../pmt-react-sdk/packages/modules/src/event/components/containers/SendEventContainer.js","../../node_modules/react-ga4/dist/gtag.js","../../node_modules/react-ga4/dist/format.js","../../node_modules/react-ga4/dist/ga4.js","../../node_modules/react-ga4/dist/index.js","../../pmt-react-sdk/packages/modules/src/cookieConsent/index.js","../../pmt-react-sdk/packages/modules/src/analytics/utils.js","../../pmt-react-sdk/packages/modules/src/analytics/index.js","../../node_modules/redux-persist/es/constants.js","../../node_modules/redux-persist/es/stateReconciler/autoMergeLevel1.js","../../node_modules/redux-persist/es/createPersistoid.js","../../node_modules/redux-persist/es/getStoredState.js","../../node_modules/redux-persist/es/purgeStoredState.js","../../node_modules/redux-persist/es/persistReducer.js","../../node_modules/redux-persist/es/persistStore.js","../../node_modules/redux-persist/es/createTransform.js","../../node_modules/redux-persist/lib/storage/getStorage.js","../../node_modules/redux-persist/lib/storage/createWebStorage.js","../../node_modules/redux-persist/lib/storage/index.js","../../node_modules/redux-persist/lib/stateReconciler/hardSet.js","../../node_modules/jsan/lib/path-getter.js","../../node_modules/jsan/lib/utils.js","../../node_modules/jsan/lib/cycle.js","../../node_modules/jsan/lib/index.js","../../node_modules/jsan/index.js","../../node_modules/@redux-devtools/serialize/lib/esm/helpers/index.js","../../node_modules/@redux-devtools/serialize/lib/esm/constants/options.js","../../node_modules/@redux-devtools/serialize/lib/esm/immutable/serialize.js","../../node_modules/@redux-devtools/serialize/lib/esm/immutable/index.js","../../pmt-react-sdk/packages/modules/src/redux/immutableTransform.js","../../node_modules/react-redux/es/components/Context.js","../../node_modules/react-redux/es/utils/batch.js","../../node_modules/react-redux/es/utils/Subscription.js","../../node_modules/react-redux/es/components/Provider.js","../../node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../../node_modules/react-redux/es/components/connectAdvanced.js","../../node_modules/react-redux/es/utils/shallowEqual.js","../../node_modules/react-redux/es/connect/wrapMapToProps.js","../../node_modules/react-redux/es/connect/mapDispatchToProps.js","../../node_modules/react-redux/es/connect/mapStateToProps.js","../../node_modules/react-redux/es/connect/mergeProps.js","../../node_modules/react-redux/es/connect/selectorFactory.js","../../node_modules/react-redux/es/connect/connect.js","../../node_modules/react-redux/es/index.js","../../node_modules/mini-create-react-context/dist/esm/index.js","../../node_modules/resolve-pathname/esm/resolve-pathname.js","../../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../../node_modules/history/esm/history.js","../../node_modules/path-to-regexp/node_modules/isarray/index.js","../../node_modules/path-to-regexp/index.js","../../node_modules/react-router/esm/react-router.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/actions.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/selectors.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/ConnectedRouter.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/reducer.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/structure/plain/getIn.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/structure/plain/index.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/middleware.js","../../pmt-react-sdk/node_modules/connected-react-router/esm/index.js","../../pmt-react-sdk/packages/modules/src/reduxUi/actions.js","../../pmt-react-sdk/packages/modules/src/reduxUi/selectors.js","../../pmt-react-sdk/packages/modules/src/reduxUi/utils.js","../../pmt-react-sdk/packages/modules/src/reduxUi/UiContainer.js","../../pmt-react-sdk/packages/modules/src/reduxUi/ui.js","../../pmt-react-sdk/packages/modules/src/reduxUi/index.js","../../pmt-react-sdk/packages/ui/src/styles/index.js","../../pmt-react-sdk/packages/modules/src/theme/currentTheme.js","../../pmt-react-sdk/packages/modules/src/theme/theme.js","../../pmt-react-sdk/packages/modules/src/theme/selectors.js","../../pmt-react-sdk/packages/modules/src/theme/index.js","../../node_modules/lodash/last.js","../../node_modules/lodash/_parent.js","../../node_modules/lodash/_baseUnset.js","../../node_modules/lodash/_basePullAt.js","../../node_modules/lodash/remove.js","../../pmt-react-sdk/packages/modules/src/dialog/constants/ModalType.js","../../pmt-react-sdk/packages/modules/src/dialog/actions.js","../../pmt-react-sdk/packages/modules/src/dialog/config.js","../../pmt-react-sdk/packages/modules/src/dialog/selectors.js","../../pmt-react-sdk/packages/modules/src/dialog/components/DialogRoot.js","../../node_modules/lodash/isEqual.js","../../pmt-react-sdk/packages/modules/src/routing/constants/index.js","../../node_modules/lodash/forIn.js","../../pmt-react-sdk/packages/modules/src/routing/model/Route.js","../../pmt-react-sdk/packages/modules/src/routing/constants/SdkRoutingEnum.js","../../pmt-react-sdk/packages/modules/src/routing/config.js","../../pmt-react-sdk/packages/modules/src/routing/actions.js","../../node_modules/react-router-dom/esm/react-router-dom.js","../../pmt-react-sdk/packages/modules/src/routing/components/Link/Link.js","../../pmt-react-sdk/packages/modules/src/routing/components/RoutingContainer/RoutingContainer.js","../../pmt-react-sdk/packages/modules/src/routing/constants/External.js","../../pmt-react-sdk/packages/modules/src/routing/getters.js","../../pmt-react-sdk/packages/modules/src/dialog/index.js","../../pmt-react-sdk/packages/modules/src/archi/utils/uxReducer.js","../../pmt-react-sdk/packages/modules/src/form/constants.js","../../pmt-react-sdk/packages/modules/src/form/config.js","../../pmt-react-sdk/packages/modules/src/form/actions.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/DataCatcherType.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/config.js","../../pmt-react-sdk/packages/modules/src/form/FormType.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/actions.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/middlewares.js","../../pmt-react-sdk/packages/modules/src/dataCatcher/index.js","../../pmt-react-sdk/packages/modules/src/form/createFormCustomAction.js","../../pmt-react-sdk/packages/utils/src/email/blackList.js","../../pmt-react-sdk/packages/utils/src/email/index.js","../../pmt-react-sdk/packages/utils/src/country/countryCodes.js","../../pmt-react-sdk/packages/utils/src/phone/index.js","../../pmt-react-sdk/packages/modules/src/form/validation/predicates/index.js","../../node_modules/ramda/src/internal/_isPlaceholder.js","../../node_modules/ramda/src/internal/_curry1.js","../../node_modules/ramda/src/internal/_identity.js","../../node_modules/ramda/src/identity.js","../../node_modules/ramda/src/internal/_curry2.js","../../node_modules/ramda/src/internal/_isArray.js","../../node_modules/ramda/src/internal/_isTransformer.js","../../node_modules/ramda/src/internal/_dispatchable.js","../../node_modules/ramda/src/internal/_map.js","../../node_modules/ramda/src/internal/_isString.js","../../node_modules/ramda/src/internal/_isArrayLike.js","../../node_modules/ramda/src/internal/_xwrap.js","../../node_modules/ramda/src/internal/_arity.js","../../node_modules/ramda/src/bind.js","../../node_modules/ramda/src/internal/_reduce.js","../../node_modules/ramda/src/internal/_xfBase.js","../../node_modules/ramda/src/internal/_xmap.js","../../node_modules/ramda/src/internal/_curryN.js","../../node_modules/ramda/src/curryN.js","../../node_modules/ramda/src/internal/_has.js","../../node_modules/ramda/src/internal/_isArguments.js","../../node_modules/ramda/src/keys.js","../../node_modules/ramda/src/map.js","../../node_modules/ramda/src/internal/_curry3.js","../../node_modules/ramda/src/reduce.js","../../node_modules/ramda/src/curry.js","../../node_modules/ramda/src/internal/_filter.js","../../node_modules/ramda/src/internal/_isObject.js","../../node_modules/ramda/src/internal/_xfilter.js","../../node_modules/ramda/src/filter.js","../../node_modules/ramda/src/internal/_arrayFromIterator.js","../../node_modules/ramda/src/internal/_functionName.js","../../node_modules/ramda/src/identical.js","../../node_modules/ramda/src/type.js","../../node_modules/ramda/src/internal/_equals.js","../../node_modules/ramda/src/equals.js","../../node_modules/ramda/src/internal/_reduced.js","../../node_modules/ramda/src/internal/_xall.js","../../node_modules/ramda/src/all.js","../../node_modules/spected/lib/index.js","../../node_modules/lodash/each.js","../../pmt-react-sdk/packages/modules/src/form/validation/validator.js","../../pmt-react-sdk/packages/modules/src/form/selectors.js","../../pmt-react-sdk/node_modules/clsx/dist/clsx.mjs","../../pmt-react-sdk/packages/ui/src/Button/ButtonFlat.js","../../pmt-react-sdk/packages/ui/src/LoadingBlock/LoadingBlock.js","../../pmt-react-sdk/packages/ui/src/LoadingBlock/LoadingBlockWrapper.js","../../pmt-react-sdk/packages/modules/src/form/components/FormButtons.js","../../pmt-react-sdk/packages/ui/src/ErrorBlock/actions.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inheritsLoose.js","../../node_modules/recompose/setStatic.js","../../node_modules/recompose/setDisplayName.js","../../node_modules/recompose/getDisplayName.js","../../node_modules/recompose/wrapDisplayName.js","../../node_modules/recompose/shouldUpdate.js","../../node_modules/fbjs/lib/shallowEqual.js","../../node_modules/recompose/shallowEqual.js","../../node_modules/recompose/pure.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/close.js","../../pmt-react-sdk/packages/ui/src/Snackbar/SnackbarContainer.js","../../pmt-react-sdk/packages/ui/src/ErrorBlock/SnackbarError.js","../../pmt-react-sdk/packages/ui/src/ErrorBlock/ErrorBlock.js","../../node_modules/lodash/isEqualWith.js","../../node_modules/lodash/union.js","../../pmt-react-sdk/packages/modules/src/form/utils.js","../../node_modules/lodash/cloneDeep.js","../../pmt-react-sdk/packages/modules/src/form/components/FormContainer.js","../../pmt-react-sdk/packages/modules/src/form/components/FormsContainer.js","../../pmt-react-sdk/packages/modules/src/form/components/withForm.js","../../pmt-react-sdk/packages/modules/src/form/createForm.js","../../pmt-react-sdk/packages/modules/src/form/index.js","../../pmt-react-sdk/packages/modules/src/search/config.js","../../pmt-react-sdk/packages/modules/src/search/actions.js","../../pmt-react-sdk/packages/modules/src/search/selectors.js","../../node_modules/lodash/_customOmitClone.js","../../node_modules/lodash/flatten.js","../../node_modules/lodash/_flatRest.js","../../node_modules/lodash/omit.js","../../pmt-react-sdk/packages/modules/src/search/components/Search.js","../../pmt-react-sdk/packages/modules/src/search/components/SearchContainer.js","../../pmt-react-sdk/packages/modules/src/search/index.js","../../pmt-react-sdk/packages/modules/src/statistics/config.js","../../pmt-react-sdk/packages/modules/src/statistics/actions.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/trending-up.js","../../pmt-react-sdk/packages/utils/src/string/index.js","../../pmt-react-sdk/packages/ui/src/Typography/TypographyCustom.js","../../pmt-react-sdk/packages/modules/src/statistics/components/Graph.js","../../pmt-react-sdk/packages/modules/src/statistics/selectors.js","../../pmt-react-sdk/packages/modules/src/statistics/components/StatisticsContainer.js","../../pmt-react-sdk/packages/modules/src/statistics/constants.js","../../pmt-react-sdk/packages/modules/src/statistics/utils.js","../../pmt-react-sdk/packages/modules/src/statistics/components/StatisticsGroupContainer.js","../../pmt-react-sdk/packages/utils/src/date/index.js","../../pmt-react-sdk/packages/ui/src/Calendar/CalendarMode.js","../../pmt-react-sdk/packages/ui/src/Calendar/Calendar.js","../../node_modules/lodash/_baseRange.js","../../node_modules/lodash/_createRange.js","../../node_modules/lodash/range.js","../../pmt-react-sdk/packages/ui/src/ListChooser/PopoverView.js","../../pmt-react-sdk/packages/ui/src/ListChooser/DialogView.js","../../pmt-react-sdk/packages/ui/src/ListChooser/ListChooserType.js","../../pmt-react-sdk/packages/ui/src/ListChooser/ViewType.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/Pagination.js","../../pmt-react-sdk/packages/utils/src/theme/colorManipulator.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/Body.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/Header.js","../../node_modules/fuse.js/dist/fuse.js","../../pmt-react-sdk/packages/ui/src/ListChooser/Content.js","../../pmt-react-sdk/packages/ui/src/svg-icons/content/clear.js","../../pmt-react-sdk/packages/ui/src/TextFieldCustom/TextFieldSuffixType.js","../../pmt-react-sdk/packages/ui/src/TextFieldCustom/index.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/ValueView.js","../../pmt-react-sdk/packages/ui/src/ListChooser/components/EmptyValue.js","../../pmt-react-sdk/packages/ui/src/ListChooser/ListChooser.js","../../pmt-react-sdk/packages/ui/src/DateField/InlineDate.js","../../pmt-react-sdk/packages/ui/src/DateField/DateField.js","../../pmt-react-sdk/packages/modules/src/statistics/components/StatisticsOptionsModifierContainer.js","../../pmt-react-sdk/packages/modules/src/statistics/index.js","../../pmt-react-sdk/packages/modules/src/reducers/index.js","../../pmt-react-sdk/packages/modules/src/archi/utils/reduxPersistTransformExpire.js","../../pmt-react-sdk/packages/modules/src/archi/utils/configureRootReducer.js","../../pmt-react-sdk/packages/modules/src/archi/store/createStoreCustom.js","../../node_modules/redux-thunk/es/index.js","../../pmt-react-sdk/packages/modules/src/archi/middleware/crashReporter.js","../../pmt-react-sdk/packages/modules/src/api/actions.js","../../pmt-react-sdk/packages/modules/src/api/middlewares/api.js","../../pmt-react-sdk/packages/modules/src/auth/constants.js","../../pmt-react-sdk/packages/modules/src/auth/utils/index.js","../../node_modules/lodash/_asciiSize.js","../../node_modules/lodash/_unicodeSize.js","../../node_modules/lodash/_stringSize.js","../../node_modules/lodash/size.js","../../pmt-react-sdk/packages/modules/src/appConfig/constants/index.js","../../pmt-react-sdk/packages/modules/src/appConfig/format/texts.js","../../pmt-react-sdk/packages/modules/src/appConfig/config.js","../../node_modules/lodash/mergeWith.js","../../pmt-react-sdk/packages/modules/src/appConfig/utils.js","../../pmt-react-sdk/packages/utils/src/currency/index.js","../../pmt-react-sdk/packages/utils/src/format/createDeepFormatter.js","../../pmt-react-sdk/packages/utils/src/format/createFormatter.js","../../pmt-react-sdk/packages/utils/src/format/createListFormatter.js","../../pmt-react-sdk/packages/utils/src/format/createMapFormatter.js","../../node_modules/lodash/includes.js","../../pmt-react-sdk/packages/utils/src/format/createSubObjectFormatter.js","../../pmt-react-sdk/packages/modules/src/catalog/constants/index.js","../../pmt-react-sdk/packages/modules/src/catalog/format/cartModifiers.js","../../pmt-react-sdk/packages/modules/src/fees/constants.js","../../pmt-react-sdk/packages/modules/src/fees/order/format.js","../../pmt-react-sdk/packages/modules/src/fees/settings/format.js","../../pmt-react-sdk/packages/modules/src/payment/check/format/entry.js","../../pmt-react-sdk/packages/modules/src/payment/check/format/index.js","../../pmt-react-sdk/packages/utils/src/browser/index.js","../../pmt-react-sdk/packages/modules/src/payment/payment/format/item.js","../../pmt-react-sdk/packages/modules/src/payment/payment/format/index.js","../../pmt-react-sdk/packages/utils/src/geoloc/index.js","../../pmt-react-sdk/packages/modules/src/restaurant/constants.js","../../pmt-react-sdk/packages/modules/src/restaurant/format/openingHours.js","../../pmt-react-sdk/packages/modules/src/restaurant/format/orderSettings.js","../../pmt-react-sdk/packages/modules/src/global/constants/Feature.js","../../pmt-react-sdk/packages/modules/src/global/constants/PaymentType.js","../../pmt-react-sdk/packages/utils/src/bit/index.js","../../pmt-react-sdk/packages/modules/src/global/format/features.js","../../pmt-react-sdk/packages/utils/src/country/index.js","../../pmt-react-sdk/packages/modules/src/psp/format.js","../../pmt-react-sdk/packages/modules/src/restaurant/format/formatLegal.js","../../pmt-react-sdk/packages/modules/src/restaurant/format/index.js","../../pmt-react-sdk/packages/modules/src/thirdParty/constants.js","../../pmt-react-sdk/packages/utils/src/google/index.js","../../pmt-react-sdk/packages/ui/src/StatusChip/index.js","../../pmt-react-sdk/packages/modules/src/order/constants/OrderMode.js","../../pmt-react-sdk/packages/modules/src/order/constants/OrderStatus.js","../../pmt-react-sdk/packages/modules/src/order/constants/index.js","../../pmt-react-sdk/packages/modules/src/order/format/formatAdmissionFees.js","../../pmt-react-sdk/packages/modules/src/order/format/formatUserAccountPayment.js","../../pmt-react-sdk/packages/modules/src/order/format/index.js","../../pmt-react-sdk/packages/modules/src/apiConsumer/constants.js","../../pmt-react-sdk/packages/modules/src/appConfig/format/index.js","../../pmt-react-sdk/packages/modules/src/appConfig/selectors.js","../../pmt-react-sdk/packages/modules/src/api/config/ApiEndpoints.js","../../pmt-react-sdk/packages/modules/src/api/errors/AuthErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/AuthApi.js","../../pmt-react-sdk/packages/modules/src/api/errors/UserErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/UserApi.js","../../pmt-react-sdk/packages/modules/src/auth/actions.js","../../pmt-react-sdk/packages/modules/src/auth/refreshToken/actions.js","../../pmt-react-sdk/packages/modules/src/auth/selectors.js","../../pmt-react-sdk/packages/modules/src/api/calls/AppConfigApi.js","../../pmt-react-sdk/packages/modules/src/appConfig/actions.js","../../node_modules/recompose/compose.js","../../pmt-react-sdk/packages/modules/src/appSecurity/actions.js","../../pmt-react-sdk/packages/modules/src/appSecurity/constants.js","../../pmt-react-sdk/packages/modules/src/appSecurity/utils.js","../../pmt-react-sdk/packages/modules/src/appSecurity/middlewares.js","../../pmt-react-sdk/packages/modules/src/appSecurity/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/alert/error.js","../../pmt-react-sdk/packages/modules/src/appConfig/components/AppConfigContainer.js","../../pmt-react-sdk/packages/modules/src/appConfig/components/withAppConfig.js","../../pmt-react-sdk/packages/modules/src/appConfig/events.js","../../pmt-react-sdk/packages/utils/src/theme/palette.js","../../pmt-react-sdk/packages/utils/src/theme/theme.js","../../pmt-react-sdk/packages/modules/src/customTexts/format.js","../../pmt-react-sdk/packages/modules/src/customTexts/selectors.js","../../pmt-react-sdk/packages/modules/src/appConfig/middlewares.js","../../pmt-react-sdk/packages/modules/src/appConfig/index.js","../../pmt-react-sdk/packages/modules/src/auth/refreshToken/middlewares.js","../../pmt-react-sdk/packages/modules/src/auth/middlewares.js","../../pmt-react-sdk/packages/modules/src/auth/index.js","../../pmt-react-sdk/packages/modules/src/api/middlewares/unauthorizedMiddleware.js","../../pmt-react-sdk/packages/modules/src/authPro/selectors.js","../../pmt-react-sdk/packages/modules/src/authRestaurant/selectors.js","../../pmt-react-sdk/packages/modules/src/auth/refreshToken/preAttemptRefresh.js","../../pmt-react-sdk/packages/modules/src/auth/refreshToken/attemptRefresh.js","../../pmt-react-sdk/packages/modules/src/api/middlewares/oauthUtils.js","../../pmt-react-sdk/packages/modules/src/api/middlewares/requestConfigurationMiddleware.js","../../pmt-react-sdk/packages/modules/src/i18n/middlewares.js","../../node_modules/redux-logger/dist/redux-logger.js","../../pmt-react-sdk/packages/modules/src/archi/store/generateMiddlewares.js","../../pmt-react-sdk/packages/modules/src/archi/store/configureStore.prod.js","../../node_modules/redux-devtools-extension/index.js","../../pmt-react-sdk/packages/modules/src/archi/store/configureStore.js","../../pmt-react-sdk/packages/utils/src/errorHandlers/index.js","../../pmt-react-sdk/packages/modules/src/archi/registerServiceWorker.js","../../node_modules/redux-persist/es/integration/react.js","../../pmt-react-sdk/packages/ui/src/ErrorBoundary/components/ErrorOccurredView.js","../../pmt-react-sdk/packages/ui/src/ErrorBoundary/ErrorBoundary.js","../../pmt-react-sdk/packages/ui/src/Layout/index.js","../../pmt-react-sdk/packages/modules/src/dev/pages/theme/index.js","../../pmt-react-sdk/packages/ui/src/Card/constants.js","../../pmt-react-sdk/packages/ui/src/svg-icons/editor/mode-edit.js","../../pmt-react-sdk/packages/ui/src/Card/components/Actions.js","../../pmt-react-sdk/packages/ui/src/Card/CardBasic.js","../../pmt-react-sdk/packages/ui/src/Card/CardPostIt.js","../../pmt-react-sdk/packages/ui/src/Card/CardSection.js","../../pmt-react-sdk/packages/ui/src/svg-icons/social/person.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/LogoGrey.js","../../pmt-react-sdk/packages/modules/src/dev/pages/styleguide/parts/calendar.js","../../pmt-react-sdk/packages/modules/src/user/constants/Allergen.js","../../pmt-react-sdk/packages/ui/src/CountryChooser/CountryChooser.js","../../pmt-react-sdk/packages/modules/src/user/constants/Diet.js","../../pmt-react-sdk/packages/modules/src/user/constants/Gender.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/celery.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/cheese.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/crab.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/egg.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/fish.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/lupine.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/milk.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/mustard.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/nut.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/peanuts.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/shellfish.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/sesame.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/soy.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/sulphites.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/wheat.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/tartrazine.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/rice.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/red_meat.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/poultry_meat.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/fruit.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/corn.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/garlic.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/balsam.js","../../pmt-react-sdk/packages/ui/src/svg-icons/food/buckwheat.js","../../pmt-react-sdk/packages/modules/src/user/constants/index.js","../../pmt-react-sdk/packages/modules/src/user/components/AllergenChooser/AllergenChooser.js","../../pmt-react-sdk/packages/modules/src/dev/pages/styleguide/parts/listChooser.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/check.js","../../pmt-react-sdk/packages/ui/src/Stepper/components/Step.js","../../pmt-react-sdk/packages/ui/src/Stepper/components/StepContent.js","../../pmt-react-sdk/packages/ui/src/Stepper/Stepper.js","../../pmt-react-sdk/packages/ui/src/svg-icons/communication/account-card-details.js","../../pmt-react-sdk/packages/modules/src/dev/pages/styleguide/parts/stepper.js","../../pmt-react-sdk/packages/modules/src/dev/components/styleguide/Resizer.js","../../pmt-react-sdk/packages/modules/src/dev/components/styleguide/ComponentList.js","../../pmt-react-sdk/packages/modules/src/dev/components/styleguide/SectionList.js","../../pmt-react-sdk/packages/modules/src/dev/pages/styleguide/index.js","../../pmt-react-sdk/packages/modules/src/dev/pages/test/index.js","../../pmt-react-sdk/packages/modules/src/archi/utils/devRoutes/devRoutes.js","../../pmt-react-sdk/packages/modules/src/archi/utils/devRoutes/index.js","../../pmt-react-sdk/packages/modules/src/archi/utils/configureRoutes.js","../../pmt-react-sdk/packages/modules/src/archi/App.js","../../pmt-react-sdk/packages/utils/src/react-loadable/index.js","../../pmt-react-sdk/packages/ui/src/LoadingPage/LoadingPage.js","../../src/components/Button/Button.js","../../src/components/Button/ButtonLink.js","../../pmt-react-sdk/packages/modules/src/appSecurity/selectors.js","../../pmt-react-sdk/packages/modules/src/appSecurity/components/AppSecurityContainer/AppSecurityContainer.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/arrow-back.js","../../node_modules/firebase/app/dist/esm/index.esm.js","../../pmt-react-sdk/packages/modules/src/firebase/actions.js","../../pmt-react-sdk/packages/modules/src/firebase/index.js","../../pmt-react-sdk/packages/modules/src/cookieConsent/components/CookieConsentBanner.js","../../src/config/analytics.js","../../src/config/environment.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/info-outline.js","../../src/components/ErrorLayout/index.js","../../src/components/Page/index.js","../../src/pages/authApp/View.js","../../pmt-react-sdk/packages/modules/src/api/calls/RestaurantsGroupApi.js","../../node_modules/fast-json-patch/module/helpers.mjs","../../node_modules/fast-json-patch/module/core.mjs","../../node_modules/fast-json-patch/module/duplex.mjs","../../node_modules/fast-json-patch/index.mjs","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/actions.js","../../node_modules/lodash/uniq.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/constants.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/format/index.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/selectors.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/components/RestaurantsGroupContainer.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/components/withRestaurantsGroup.js","../../pmt-react-sdk/packages/modules/src/userMe/actions.js","../../pmt-react-sdk/packages/modules/src/userAccount/format/index.js","../../pmt-react-sdk/packages/modules/src/user/format/dietaryPreferences.js","../../pmt-react-sdk/packages/modules/src/user/format/marketing.js","../../pmt-react-sdk/packages/modules/src/user/format/index.js","../../pmt-react-sdk/packages/modules/src/userMe/selectors.js","../../pmt-react-sdk/packages/modules/src/userMe/components/UserMeContainer/index.js","../../pmt-react-sdk/packages/modules/src/userMe/components/UserMeContainer/withUserMe.js","../../pmt-react-sdk/packages/modules/src/userMe/components/AuthStateContainer/index.js","../../pmt-react-sdk/packages/modules/src/userMe/components/AuthStateContainer/withAuthState.js","../../pmt-react-sdk/packages/modules/src/userMe/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/AuthAppErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/AuthAppApi.js","../../pmt-react-sdk/packages/modules/src/authApp/getApp/actions.js","../../pmt-react-sdk/packages/modules/src/authApp/getApp/selectors.js","../../pmt-react-sdk/packages/modules/src/authApp/authorizeApp/actions.js","../../pmt-react-sdk/packages/modules/src/authApp/getApp/middlewares.js","../../pmt-react-sdk/packages/modules/src/authApp/getApp/index.js","../../pmt-react-sdk/packages/modules/src/authApp/authorizeApp/middlewares.js","../../pmt-react-sdk/packages/modules/src/authApp/authorizeApp/selectors.js","../../pmt-react-sdk/packages/modules/src/authApp/authorizeApp/index.js","../../pmt-react-sdk/packages/modules/src/authApp/actions.js","../../pmt-react-sdk/packages/modules/src/authApp/index.js","../../src/pages/authApp/index.js","../../pmt-react-sdk/packages/modules/src/authRestaurant/utils/index.js","../../pmt-react-sdk/packages/utils/src/object/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/RestaurantErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/RestaurantApi.js","../../pmt-react-sdk/packages/modules/src/authRestaurant/index.js","../../pmt-react-sdk/packages/modules/src/restaurant/actions.js","../../node_modules/lodash/_baseFindKey.js","../../node_modules/lodash/findKey.js","../../pmt-react-sdk/packages/modules/src/userHistory/constants.js","../../pmt-react-sdk/packages/utils/src/idempotency/index.js","../../pmt-react-sdk/packages/modules/src/topUp/constants.js","../../node_modules/lodash/_baseDifference.js","../../node_modules/lodash/differenceWith.js","../../pmt-react-sdk/packages/modules/src/api/calls/HistoryApi.js","../../pmt-react-sdk/packages/modules/src/userHistory/actions.js","../../pmt-react-sdk/packages/modules/src/restaurant/selectors.js","../../pmt-react-sdk/packages/modules/src/restaurant/middlewares.js","../../pmt-react-sdk/packages/modules/src/restaurant/index.js","../../pmt-react-sdk/packages/modules/src/restaurant/components/RestaurantContainer.js","../../pmt-react-sdk/packages/modules/src/restaurant/components/withRestaurant.js","../../pmt-react-sdk/packages/modules/src/user/constants/UserType.js","../../pmt-react-sdk/packages/modules/src/api/calls/RegisterApi.js","../../pmt-react-sdk/packages/modules/src/registration/actions.js","../../pmt-react-sdk/packages/modules/src/registration/selectors.js","../../pmt-react-sdk/packages/modules/src/registration/middlewares.js","../../pmt-react-sdk/packages/modules/src/registration/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/lock.js","../../src/components/BrandedCardLayout/index.js","../../src/pages/login/constants.js","../../src/pages/login/components/AuthTabs.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/visibility.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/visibility-off.js","../../node_modules/lodash/now.js","../../node_modules/lodash/debounce.js","../../node_modules/unfetch/dist/unfetch.module.js","../../node_modules/isomorphic-unfetch/browser.js","../../node_modules/hibp/es/responses2.js","../../node_modules/hibp/es/fetchFromApi2.js","../../node_modules/hibp/es/pwnedPasswordRange.js","../../pmt-react-sdk/packages/utils/src/security/sha1.js","../../pmt-react-sdk/packages/modules/src/hibp/container/HibpPasswordRangeContainer.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/error-outline.js","../../pmt-react-sdk/packages/ui/src/MessageBlock/MessageBlock.js","../../src/components/MessageBlock/index.js","../../pmt-react-sdk/packages/ui/src/PasswordField/index.js","../../pmt-react-sdk/packages/ui/src/Menu/MenuView/MenuView.js","../../pmt-react-sdk/packages/utils/src/country/flags/ad.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ae.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/af.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ag.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ai.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/al.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/am.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ao.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/aq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ar.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/arab.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/as.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/at.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/au.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/aw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ax.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/az.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ba.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bb.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bd.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/be.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bi.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bo.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/br.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bs.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/by.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/bz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ca.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cd.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cefta.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ch.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ci.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ck.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/co.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cx.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cy.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/cz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/de.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/do.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/dz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/eac.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ec.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ee.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/eg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/eh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/er.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/es-ct.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/es-ga.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/es-pv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/es.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/et.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/eu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fi.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fo.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/fr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ga.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb-eng.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb-nir.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb-sct.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb-wls.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gb.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gd.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ge.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gi.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gs.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/gy.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ht.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/hu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ic.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/id.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ie.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/il.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/im.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/in.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/io.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/iq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ir.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/is.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/it.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/je.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/jm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/jo.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/jp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ke.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ki.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/km.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ky.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/kz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/la.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lb.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/li.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ls.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/lv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ly.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ma.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/md.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/me.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ml.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mo.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mp.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mq.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ms.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mx.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/my.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/mz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/na.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ne.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ng.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ni.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/no.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/np.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/nz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/om.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pa.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pe.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ph.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ps.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/pw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/py.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/qa.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/re.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ro.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/rs.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ru.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/rw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sa.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sb.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sd.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/se.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sh-ac.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sh-hl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sh-ta.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sh.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/si.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/so.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ss.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/st.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sx.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sy.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/sz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/td.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/th.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tj.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tl.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/to.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tr.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tv.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/tz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ua.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ug.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/um.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/un.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/us.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/uy.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/uz.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/va.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vc.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ve.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vg.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vi.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vn.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/vu.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/wf.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ws.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/xk.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/xx.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/ye.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/yt.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/za.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/zm.svg?url","../../pmt-react-sdk/packages/utils/src/country/flags/zw.svg?url","../../pmt-react-sdk/packages/utils/src/country/flag.js","../../pmt-react-sdk/packages/ui/src/PhoneField/PhoneField.js","../../pmt-react-sdk/packages/modules/src/user/forms/elements/index.js","../../pmt-react-sdk/packages/modules/src/auth/forms/login/LoginFormView.js","../../pmt-react-sdk/packages/modules/src/auth/forms/login/index.js","../../src/pages/login/components/LoginForm.js","../../pmt-react-sdk/packages/modules/src/registration/forms/register/constants.js","../../node_modules/lodash/set.js","../../pmt-react-sdk/packages/ui/src/Cgu/Cgu.js","../../pmt-react-sdk/packages/ui/src/Cgu/CguLabel.js","../../pmt-react-sdk/packages/modules/src/registration/forms/register/RegisterFormView.js","../../pmt-react-sdk/packages/modules/src/registration/forms/register/index.js","../../src/pages/login/components/RegisterForm.js","../../pmt-react-sdk/packages/modules/src/registration/forms/userLight/constants.js","../../pmt-react-sdk/packages/modules/src/registration/forms/userLight/UserLightFormView.js","../../pmt-react-sdk/packages/modules/src/registration/forms/userLight/index.js","../../src/pages/login/components/UserLightForm.js","../../pmt-react-sdk/packages/modules/src/registration/forms/incognito/constants.js","../../pmt-react-sdk/packages/modules/src/registration/forms/incognito/IncognitoFormView.js","../../pmt-react-sdk/packages/modules/src/registration/forms/incognito/index.js","../../src/pages/login/components/IncognitoForm.js","../../src/pages/login/index.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/actions.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/selectors.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/middlewares.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/index.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/forms/forgotPassword/ForgotPasswordFormView.js","../../pmt-react-sdk/packages/modules/src/forgotPassword/forms/forgotPassword/index.js","../../src/pages/forgotpassword/View.js","../../src/pages/forgotpassword/index.js","../../src/pages/register/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/CheckErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/CheckApi.js","../../pmt-react-sdk/packages/modules/src/payment/check/actions.js","../../pmt-react-sdk/packages/modules/src/payment/check/selectors.js","../../pmt-react-sdk/packages/modules/src/payment/check/index.js","../../pmt-react-sdk/packages/modules/src/payment/payment/selectors.js","../../pmt-react-sdk/packages/modules/src/payment/components/CheckContainer.js","../../pmt-react-sdk/packages/modules/src/payment/constants/PaymentStatus.js","../../pmt-react-sdk/packages/modules/src/payment/constants/TipsValueType.js","../../pmt-react-sdk/packages/modules/src/payment/constants/index.js","../../node_modules/lodash/forOwn.js","../../pmt-react-sdk/packages/modules/src/api/errors/PaymentErrorsList.js","../../pmt-react-sdk/packages/modules/src/api/calls/AsyncPaymentApi.js","../../pmt-react-sdk/packages/modules/src/asyncPayment/actions.js","../../pmt-react-sdk/packages/modules/src/asyncPayment/constants.js","../../pmt-react-sdk/packages/modules/src/asyncPayment/middlewares.js","../../pmt-react-sdk/packages/modules/src/asyncPayment/utils.js","../../pmt-react-sdk/packages/modules/src/api/calls/PaymentApi.js","../../pmt-react-sdk/packages/modules/src/payment/payment/actions.js","../../pmt-react-sdk/packages/modules/src/payment/payment/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/Table.js","../../pmt-react-sdk/packages/ui/src/svg-icons/other/audit.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/shopping-cart.js","../../pmt-react-sdk/packages/ui/src/svg-icons/action/credit-card.js","../../pmt-react-sdk/packages/ui/src/Price/index.js","../../src/components/payment/CheckList/index.js","../../src/pages/restaurant/components/Check.js","../../src/pages/restaurant/components/TableNumber.js","../../src/pages/restaurant/View.js","../../src/pages/restaurant/index.js","../../pmt-react-sdk/packages/ui/src/NumberField/NumberField.js","../../src/pages/payment/tableNumber/View.js","../../src/pages/payment/tableNumber/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/Choose.js","../../pmt-react-sdk/packages/ui/src/svg-icons/pmt/Share.js","../../src/pages/payment/check/View.js","../../src/pages/payment/check/index.js","../../pmt-react-sdk/packages/modules/src/payment/components/withCheck.js","../../node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","../../node_modules/react-dom/server.browser.js","../../pmt-react-sdk/packages/ui/src/svg-icons/content/add-circle-outline.js","../../pmt-react-sdk/packages/ui/src/svg-icons/content/remove-circle-outline.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/arrow-tuto.js","../../src/pages/payment/share/View.js","../../src/pages/payment/share/index.js","../../src/pages/payment/choose/View.js","../../src/pages/payment/choose/index.js","../../pmt-react-sdk/packages/modules/src/authenticatedUser/selectors.js","../../pmt-react-sdk/packages/modules/src/webCustomer/actions.js","../../pmt-react-sdk/packages/modules/src/api/errors/TopUpErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/TopUpApi.js","../../pmt-react-sdk/packages/modules/src/topUp/makeTopUp/actions.js","../../pmt-react-sdk/packages/modules/src/topUp/format/index.js","../../pmt-react-sdk/packages/modules/src/topUp/makeTopUp/selectors.js","../../pmt-react-sdk/packages/modules/src/topUp/components/TopUpContainer/TopUpContainer.js","../../pmt-react-sdk/packages/modules/src/topUp/components/amountCircle/index.js","../../pmt-react-sdk/packages/modules/src/topUp/components/TopUpChooseAmountView/TopUpChooseAmountView.js","../../pmt-react-sdk/packages/modules/src/topUp/makeTopUp/index.js","../../pmt-react-sdk/packages/modules/src/api/errors/UserAccountErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/UserAccountApi.js","../../pmt-react-sdk/packages/modules/src/userAccount/actions.js","../../pmt-react-sdk/packages/modules/src/webCustomer/middlewares.js","../../src/components/payment/PaymentMethod.js","../../src/components/payment/PaymentMethods.js","../../src/pages/payment/payment/components/ErrorAlert.js","../../pmt-react-sdk/packages/modules/src/payment/components/TipBar.js","../../pmt-react-sdk/packages/modules/src/payment/components/TipSlider.js","../../pmt-react-sdk/packages/modules/src/payment/components/Tips.js","../../src/pages/payment/payment/View.js","../../src/pages/payment/payment/index.js","../../src/pages/payment/verification/View.js","../../src/pages/payment/verification/index.js","../../pmt-react-sdk/packages/modules/src/userAccount/selectors.js","../../pmt-react-sdk/packages/modules/src/userAccount/components/UserAccountsContainer/UserAccountsContainer.js","../../pmt-react-sdk/packages/modules/src/userAccount/components/UserAccountContainer/UserAccountContainer.js","../../pmt-react-sdk/packages/modules/src/userAccount/components/UserAccountRemainingView/View.js","../../pmt-react-sdk/packages/modules/src/userAccount/components/UserAccountRemainingView/UserAccountRemainingView.js","../../pmt-react-sdk/packages/modules/src/proCreateUser/actions.js","../../pmt-react-sdk/packages/modules/src/proCreateUser/selectors.js","../../pmt-react-sdk/packages/modules/src/proCreateUser/index.js","../../pmt-react-sdk/packages/modules/src/userAccount/middlewares.js","../../pmt-react-sdk/packages/modules/src/userAccount/index.js","../../pmt-react-sdk/packages/ui/src/Layout/ScrollToTop.js","../../pmt-react-sdk/packages/ui/src/Layout/withScrollToTop.js","../../pmt-react-sdk/packages/ui/src/DialogContainer/index.js","../../pmt-react-sdk/packages/ui/src/PaymentAsyncRedirectTutorialDialog/LockerIcon.js","../../pmt-react-sdk/packages/ui/src/PaymentAsyncRedirectTutorialDialog/index.js","../../src/pages/payment/asyncForm/index.js","../../pmt-react-sdk/packages/modules/src/payment/pdf/actions.js","../../pmt-react-sdk/packages/modules/src/payment/pdf/selectors.js","../../pmt-react-sdk/packages/modules/src/payment/pdf/index.js","../../src/pages/payment/confirm/View.js","../../src/pages/payment/confirm/index.js","../../pmt-react-sdk/packages/ui/src/svg-icons/navigation/refresh.js","../../pmt-react-sdk/packages/ui/src/LoadingContainer/LoadingContainer.js","../../pmt-react-sdk/packages/modules/src/api/errors/ApiConsumerErrors.js","../../pmt-react-sdk/packages/modules/src/api/calls/ApiConsumerApi.js","../../pmt-react-sdk/packages/modules/src/apiConsumer/actions.js","../../pmt-react-sdk/packages/modules/src/apiConsumer/format.js","../../pmt-react-sdk/packages/modules/src/apiConsumer/selectors.js","../../pmt-react-sdk/packages/modules/src/apiConsumer/components/ApiConsumerListContainer.js","../../pmt-react-sdk/packages/modules/src/apiConsumer/index.js","../../pmt-react-sdk/packages/modules/src/userTransaction/constants.js","../../pmt-react-sdk/packages/modules/src/userTransaction/format.js","../../pmt-react-sdk/packages/modules/src/userCheck/format.js","../../pmt-react-sdk/packages/modules/src/userHistory/selectors.js","../../pmt-react-sdk/packages/modules/src/userHistory/components/HistoryTypeContainer.js","../../pmt-react-sdk/packages/modules/src/userHistory/index.js","../../node_modules/react-infinite-scroller/src/InfiniteScroll.js","../../src/pages/user/history/components/HistoryList.js","../../src/pages/user/history/components/HistoryTransactionsModeView.js","../../src/pages/user/history/OrderHistory/index.js","../../src/pages/user/history/TopUpHistory/index.js","../../src/pages/user/history/components/HistoryNormalModeView.js","../../src/pages/user/history/components/HistoryView.js","../../src/pages/user/history/View.js","../../src/pages/user/history/index.js","../../node_modules/qr.js/lib/mode.js","../../node_modules/qr.js/lib/8BitByte.js","../../node_modules/qr.js/lib/ErrorCorrectLevel.js","../../node_modules/qr.js/lib/RSBlock.js","../../node_modules/qr.js/lib/BitBuffer.js","../../node_modules/qr.js/lib/math.js","../../node_modules/qr.js/lib/Polynomial.js","../../node_modules/qr.js/lib/util.js","../../node_modules/qr.js/lib/QRCode.js","../../node_modules/qrcode.react/lib/index.js","../../pmt-react-sdk/packages/ui/src/QrCode/QrCode.js","../../src/pages/user/qrCode/components/QrCodeView.js","../../src/pages/user/qrCode/View.js","../../src/pages/user/qrCode/index.js","../../src/components/Section/index.js","../../src/pages/topUp/topUp/View.js","../../src/pages/topUp/topUp/index.js","../../src/pages/topUp/confirm/View.js","../../src/pages/topUp/confirm/index.js","../../src/config/routingEnum.js","../../src/config/routes.js","../../pmt-react-sdk/packages/modules/src/archi/ApplicationView.js","../../pmt-react-sdk/packages/modules/src/archi/Application.js","../../src/config/appConfig.js","../../src/config/dataCatcher.js","../../src/config/devMiddlewares.js","../../src/components/payment/CheckList/ChooseEntryDividerDialog.js","../../src/components/payment/GenerousPaymentDialog/index.js","../../src/config/dialogs.js","../../pmt-react-sdk/packages/modules/src/authenticatedUser/index.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/middlewares.js","../../pmt-react-sdk/packages/modules/src/restaurantsGroup/index.js","../../src/config/entities.js","../../src/config/forms.js","../../src/config/getApiManagerOptions.js","../../src/config/i18n.js","../../pmt-react-sdk/packages/modules/src/customTexts/actions.js","../../pmt-react-sdk/packages/modules/src/customTexts/middlewares.js","../../src/config/middlewares.js","../../src/config/texts.js","../../src/config/theme.js","../../src/config/firebase.js","../../src/index.js"],"sourcesContent":["/** @license React v16.14.0\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global.Immutable = factory());\n}(this, function () { 'use strict';var SLICE$0 = Array.prototype.slice;\n\n  function createClass(ctor, superClass) {\n    if (superClass) {\n      ctor.prototype = Object.create(superClass.prototype);\n    }\n    ctor.prototype.constructor = ctor;\n  }\n\n  function Iterable(value) {\n      return isIterable(value) ? value : Seq(value);\n    }\n\n\n  createClass(KeyedIterable, Iterable);\n    function KeyedIterable(value) {\n      return isKeyed(value) ? value : KeyedSeq(value);\n    }\n\n\n  createClass(IndexedIterable, Iterable);\n    function IndexedIterable(value) {\n      return isIndexed(value) ? value : IndexedSeq(value);\n    }\n\n\n  createClass(SetIterable, Iterable);\n    function SetIterable(value) {\n      return isIterable(value) && !isAssociative(value) ? value : SetSeq(value);\n    }\n\n\n\n  function isIterable(maybeIterable) {\n    return !!(maybeIterable && maybeIterable[IS_ITERABLE_SENTINEL]);\n  }\n\n  function isKeyed(maybeKeyed) {\n    return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL]);\n  }\n\n  function isIndexed(maybeIndexed) {\n    return !!(maybeIndexed && maybeIndexed[IS_INDEXED_SENTINEL]);\n  }\n\n  function isAssociative(maybeAssociative) {\n    return isKeyed(maybeAssociative) || isIndexed(maybeAssociative);\n  }\n\n  function isOrdered(maybeOrdered) {\n    return !!(maybeOrdered && maybeOrdered[IS_ORDERED_SENTINEL]);\n  }\n\n  Iterable.isIterable = isIterable;\n  Iterable.isKeyed = isKeyed;\n  Iterable.isIndexed = isIndexed;\n  Iterable.isAssociative = isAssociative;\n  Iterable.isOrdered = isOrdered;\n\n  Iterable.Keyed = KeyedIterable;\n  Iterable.Indexed = IndexedIterable;\n  Iterable.Set = SetIterable;\n\n\n  var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\n  var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\n  var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\n  var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\n\n  // Used for setting prototype methods that IE8 chokes on.\n  var DELETE = 'delete';\n\n  // Constants describing the size of trie nodes.\n  var SHIFT = 5; // Resulted in best performance after ______?\n  var SIZE = 1 << SHIFT;\n  var MASK = SIZE - 1;\n\n  // A consistent shared value representing \"not set\" which equals nothing other\n  // than itself, and nothing that could be provided externally.\n  var NOT_SET = {};\n\n  // Boolean references, Rough equivalent of `bool &`.\n  var CHANGE_LENGTH = { value: false };\n  var DID_ALTER = { value: false };\n\n  function MakeRef(ref) {\n    ref.value = false;\n    return ref;\n  }\n\n  function SetRef(ref) {\n    ref && (ref.value = true);\n  }\n\n  // A function which returns a value representing an \"owner\" for transient writes\n  // to tries. The return value will only ever equal itself, and will not equal\n  // the return of any subsequent call of this function.\n  function OwnerID() {}\n\n  // http://jsperf.com/copy-array-inline\n  function arrCopy(arr, offset) {\n    offset = offset || 0;\n    var len = Math.max(0, arr.length - offset);\n    var newArr = new Array(len);\n    for (var ii = 0; ii < len; ii++) {\n      newArr[ii] = arr[ii + offset];\n    }\n    return newArr;\n  }\n\n  function ensureSize(iter) {\n    if (iter.size === undefined) {\n      iter.size = iter.__iterate(returnTrue);\n    }\n    return iter.size;\n  }\n\n  function wrapIndex(iter, index) {\n    // This implements \"is array index\" which the ECMAString spec defines as:\n    //\n    //     A String property name P is an array index if and only if\n    //     ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal\n    //     to 2^32−1.\n    //\n    // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects\n    if (typeof index !== 'number') {\n      var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32\n      if ('' + uint32Index !== index || uint32Index === 4294967295) {\n        return NaN;\n      }\n      index = uint32Index;\n    }\n    return index < 0 ? ensureSize(iter) + index : index;\n  }\n\n  function returnTrue() {\n    return true;\n  }\n\n  function wholeSlice(begin, end, size) {\n    return (begin === 0 || (size !== undefined && begin <= -size)) &&\n      (end === undefined || (size !== undefined && end >= size));\n  }\n\n  function resolveBegin(begin, size) {\n    return resolveIndex(begin, size, 0);\n  }\n\n  function resolveEnd(end, size) {\n    return resolveIndex(end, size, size);\n  }\n\n  function resolveIndex(index, size, defaultIndex) {\n    return index === undefined ?\n      defaultIndex :\n      index < 0 ?\n        Math.max(0, size + index) :\n        size === undefined ?\n          index :\n          Math.min(size, index);\n  }\n\n  /* global Symbol */\n\n  var ITERATE_KEYS = 0;\n  var ITERATE_VALUES = 1;\n  var ITERATE_ENTRIES = 2;\n\n  var REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator';\n\n  var ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL;\n\n\n  function Iterator(next) {\n      this.next = next;\n    }\n\n    Iterator.prototype.toString = function() {\n      return '[Iterator]';\n    };\n\n\n  Iterator.KEYS = ITERATE_KEYS;\n  Iterator.VALUES = ITERATE_VALUES;\n  Iterator.ENTRIES = ITERATE_ENTRIES;\n\n  Iterator.prototype.inspect =\n  Iterator.prototype.toSource = function () { return this.toString(); }\n  Iterator.prototype[ITERATOR_SYMBOL] = function () {\n    return this;\n  };\n\n\n  function iteratorValue(type, k, v, iteratorResult) {\n    var value = type === 0 ? k : type === 1 ? v : [k, v];\n    iteratorResult ? (iteratorResult.value = value) : (iteratorResult = {\n      value: value, done: false\n    });\n    return iteratorResult;\n  }\n\n  function iteratorDone() {\n    return { value: undefined, done: true };\n  }\n\n  function hasIterator(maybeIterable) {\n    return !!getIteratorFn(maybeIterable);\n  }\n\n  function isIterator(maybeIterator) {\n    return maybeIterator && typeof maybeIterator.next === 'function';\n  }\n\n  function getIterator(iterable) {\n    var iteratorFn = getIteratorFn(iterable);\n    return iteratorFn && iteratorFn.call(iterable);\n  }\n\n  function getIteratorFn(iterable) {\n    var iteratorFn = iterable && (\n      (REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) ||\n      iterable[FAUX_ITERATOR_SYMBOL]\n    );\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  function isArrayLike(value) {\n    return value && typeof value.length === 'number';\n  }\n\n  createClass(Seq, Iterable);\n    function Seq(value) {\n      return value === null || value === undefined ? emptySequence() :\n        isIterable(value) ? value.toSeq() : seqFromValue(value);\n    }\n\n    Seq.of = function(/*...values*/) {\n      return Seq(arguments);\n    };\n\n    Seq.prototype.toSeq = function() {\n      return this;\n    };\n\n    Seq.prototype.toString = function() {\n      return this.__toString('Seq {', '}');\n    };\n\n    Seq.prototype.cacheResult = function() {\n      if (!this._cache && this.__iterateUncached) {\n        this._cache = this.entrySeq().toArray();\n        this.size = this._cache.length;\n      }\n      return this;\n    };\n\n    // abstract __iterateUncached(fn, reverse)\n\n    Seq.prototype.__iterate = function(fn, reverse) {\n      return seqIterate(this, fn, reverse, true);\n    };\n\n    // abstract __iteratorUncached(type, reverse)\n\n    Seq.prototype.__iterator = function(type, reverse) {\n      return seqIterator(this, type, reverse, true);\n    };\n\n\n\n  createClass(KeyedSeq, Seq);\n    function KeyedSeq(value) {\n      return value === null || value === undefined ?\n        emptySequence().toKeyedSeq() :\n        isIterable(value) ?\n          (isKeyed(value) ? value.toSeq() : value.fromEntrySeq()) :\n          keyedSeqFromValue(value);\n    }\n\n    KeyedSeq.prototype.toKeyedSeq = function() {\n      return this;\n    };\n\n\n\n  createClass(IndexedSeq, Seq);\n    function IndexedSeq(value) {\n      return value === null || value === undefined ? emptySequence() :\n        !isIterable(value) ? indexedSeqFromValue(value) :\n        isKeyed(value) ? value.entrySeq() : value.toIndexedSeq();\n    }\n\n    IndexedSeq.of = function(/*...values*/) {\n      return IndexedSeq(arguments);\n    };\n\n    IndexedSeq.prototype.toIndexedSeq = function() {\n      return this;\n    };\n\n    IndexedSeq.prototype.toString = function() {\n      return this.__toString('Seq [', ']');\n    };\n\n    IndexedSeq.prototype.__iterate = function(fn, reverse) {\n      return seqIterate(this, fn, reverse, false);\n    };\n\n    IndexedSeq.prototype.__iterator = function(type, reverse) {\n      return seqIterator(this, type, reverse, false);\n    };\n\n\n\n  createClass(SetSeq, Seq);\n    function SetSeq(value) {\n      return (\n        value === null || value === undefined ? emptySequence() :\n        !isIterable(value) ? indexedSeqFromValue(value) :\n        isKeyed(value) ? value.entrySeq() : value\n      ).toSetSeq();\n    }\n\n    SetSeq.of = function(/*...values*/) {\n      return SetSeq(arguments);\n    };\n\n    SetSeq.prototype.toSetSeq = function() {\n      return this;\n    };\n\n\n\n  Seq.isSeq = isSeq;\n  Seq.Keyed = KeyedSeq;\n  Seq.Set = SetSeq;\n  Seq.Indexed = IndexedSeq;\n\n  var IS_SEQ_SENTINEL = '@@__IMMUTABLE_SEQ__@@';\n\n  Seq.prototype[IS_SEQ_SENTINEL] = true;\n\n\n\n  createClass(ArraySeq, IndexedSeq);\n    function ArraySeq(array) {\n      this._array = array;\n      this.size = array.length;\n    }\n\n    ArraySeq.prototype.get = function(index, notSetValue) {\n      return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue;\n    };\n\n    ArraySeq.prototype.__iterate = function(fn, reverse) {\n      var array = this._array;\n      var maxIndex = array.length - 1;\n      for (var ii = 0; ii <= maxIndex; ii++) {\n        if (fn(array[reverse ? maxIndex - ii : ii], ii, this) === false) {\n          return ii + 1;\n        }\n      }\n      return ii;\n    };\n\n    ArraySeq.prototype.__iterator = function(type, reverse) {\n      var array = this._array;\n      var maxIndex = array.length - 1;\n      var ii = 0;\n      return new Iterator(function() \n        {return ii > maxIndex ?\n          iteratorDone() :\n          iteratorValue(type, ii, array[reverse ? maxIndex - ii++ : ii++])}\n      );\n    };\n\n\n\n  createClass(ObjectSeq, KeyedSeq);\n    function ObjectSeq(object) {\n      var keys = Object.keys(object);\n      this._object = object;\n      this._keys = keys;\n      this.size = keys.length;\n    }\n\n    ObjectSeq.prototype.get = function(key, notSetValue) {\n      if (notSetValue !== undefined && !this.has(key)) {\n        return notSetValue;\n      }\n      return this._object[key];\n    };\n\n    ObjectSeq.prototype.has = function(key) {\n      return this._object.hasOwnProperty(key);\n    };\n\n    ObjectSeq.prototype.__iterate = function(fn, reverse) {\n      var object = this._object;\n      var keys = this._keys;\n      var maxIndex = keys.length - 1;\n      for (var ii = 0; ii <= maxIndex; ii++) {\n        var key = keys[reverse ? maxIndex - ii : ii];\n        if (fn(object[key], key, this) === false) {\n          return ii + 1;\n        }\n      }\n      return ii;\n    };\n\n    ObjectSeq.prototype.__iterator = function(type, reverse) {\n      var object = this._object;\n      var keys = this._keys;\n      var maxIndex = keys.length - 1;\n      var ii = 0;\n      return new Iterator(function()  {\n        var key = keys[reverse ? maxIndex - ii : ii];\n        return ii++ > maxIndex ?\n          iteratorDone() :\n          iteratorValue(type, key, object[key]);\n      });\n    };\n\n  ObjectSeq.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n  createClass(IterableSeq, IndexedSeq);\n    function IterableSeq(iterable) {\n      this._iterable = iterable;\n      this.size = iterable.length || iterable.size;\n    }\n\n    IterableSeq.prototype.__iterateUncached = function(fn, reverse) {\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var iterable = this._iterable;\n      var iterator = getIterator(iterable);\n      var iterations = 0;\n      if (isIterator(iterator)) {\n        var step;\n        while (!(step = iterator.next()).done) {\n          if (fn(step.value, iterations++, this) === false) {\n            break;\n          }\n        }\n      }\n      return iterations;\n    };\n\n    IterableSeq.prototype.__iteratorUncached = function(type, reverse) {\n      if (reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      var iterable = this._iterable;\n      var iterator = getIterator(iterable);\n      if (!isIterator(iterator)) {\n        return new Iterator(iteratorDone);\n      }\n      var iterations = 0;\n      return new Iterator(function()  {\n        var step = iterator.next();\n        return step.done ? step : iteratorValue(type, iterations++, step.value);\n      });\n    };\n\n\n\n  createClass(IteratorSeq, IndexedSeq);\n    function IteratorSeq(iterator) {\n      this._iterator = iterator;\n      this._iteratorCache = [];\n    }\n\n    IteratorSeq.prototype.__iterateUncached = function(fn, reverse) {\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var iterator = this._iterator;\n      var cache = this._iteratorCache;\n      var iterations = 0;\n      while (iterations < cache.length) {\n        if (fn(cache[iterations], iterations++, this) === false) {\n          return iterations;\n        }\n      }\n      var step;\n      while (!(step = iterator.next()).done) {\n        var val = step.value;\n        cache[iterations] = val;\n        if (fn(val, iterations++, this) === false) {\n          break;\n        }\n      }\n      return iterations;\n    };\n\n    IteratorSeq.prototype.__iteratorUncached = function(type, reverse) {\n      if (reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      var iterator = this._iterator;\n      var cache = this._iteratorCache;\n      var iterations = 0;\n      return new Iterator(function()  {\n        if (iterations >= cache.length) {\n          var step = iterator.next();\n          if (step.done) {\n            return step;\n          }\n          cache[iterations] = step.value;\n        }\n        return iteratorValue(type, iterations, cache[iterations++]);\n      });\n    };\n\n\n\n\n  // # pragma Helper functions\n\n  function isSeq(maybeSeq) {\n    return !!(maybeSeq && maybeSeq[IS_SEQ_SENTINEL]);\n  }\n\n  var EMPTY_SEQ;\n\n  function emptySequence() {\n    return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([]));\n  }\n\n  function keyedSeqFromValue(value) {\n    var seq =\n      Array.isArray(value) ? new ArraySeq(value).fromEntrySeq() :\n      isIterator(value) ? new IteratorSeq(value).fromEntrySeq() :\n      hasIterator(value) ? new IterableSeq(value).fromEntrySeq() :\n      typeof value === 'object' ? new ObjectSeq(value) :\n      undefined;\n    if (!seq) {\n      throw new TypeError(\n        'Expected Array or iterable object of [k, v] entries, '+\n        'or keyed object: ' + value\n      );\n    }\n    return seq;\n  }\n\n  function indexedSeqFromValue(value) {\n    var seq = maybeIndexedSeqFromValue(value);\n    if (!seq) {\n      throw new TypeError(\n        'Expected Array or iterable object of values: ' + value\n      );\n    }\n    return seq;\n  }\n\n  function seqFromValue(value) {\n    var seq = maybeIndexedSeqFromValue(value) ||\n      (typeof value === 'object' && new ObjectSeq(value));\n    if (!seq) {\n      throw new TypeError(\n        'Expected Array or iterable object of values, or keyed object: ' + value\n      );\n    }\n    return seq;\n  }\n\n  function maybeIndexedSeqFromValue(value) {\n    return (\n      isArrayLike(value) ? new ArraySeq(value) :\n      isIterator(value) ? new IteratorSeq(value) :\n      hasIterator(value) ? new IterableSeq(value) :\n      undefined\n    );\n  }\n\n  function seqIterate(seq, fn, reverse, useKeys) {\n    var cache = seq._cache;\n    if (cache) {\n      var maxIndex = cache.length - 1;\n      for (var ii = 0; ii <= maxIndex; ii++) {\n        var entry = cache[reverse ? maxIndex - ii : ii];\n        if (fn(entry[1], useKeys ? entry[0] : ii, seq) === false) {\n          return ii + 1;\n        }\n      }\n      return ii;\n    }\n    return seq.__iterateUncached(fn, reverse);\n  }\n\n  function seqIterator(seq, type, reverse, useKeys) {\n    var cache = seq._cache;\n    if (cache) {\n      var maxIndex = cache.length - 1;\n      var ii = 0;\n      return new Iterator(function()  {\n        var entry = cache[reverse ? maxIndex - ii : ii];\n        return ii++ > maxIndex ?\n          iteratorDone() :\n          iteratorValue(type, useKeys ? entry[0] : ii - 1, entry[1]);\n      });\n    }\n    return seq.__iteratorUncached(type, reverse);\n  }\n\n  function fromJS(json, converter) {\n    return converter ?\n      fromJSWith(converter, json, '', {'': json}) :\n      fromJSDefault(json);\n  }\n\n  function fromJSWith(converter, json, key, parentJSON) {\n    if (Array.isArray(json)) {\n      return converter.call(parentJSON, key, IndexedSeq(json).map(function(v, k)  {return fromJSWith(converter, v, k, json)}));\n    }\n    if (isPlainObj(json)) {\n      return converter.call(parentJSON, key, KeyedSeq(json).map(function(v, k)  {return fromJSWith(converter, v, k, json)}));\n    }\n    return json;\n  }\n\n  function fromJSDefault(json) {\n    if (Array.isArray(json)) {\n      return IndexedSeq(json).map(fromJSDefault).toList();\n    }\n    if (isPlainObj(json)) {\n      return KeyedSeq(json).map(fromJSDefault).toMap();\n    }\n    return json;\n  }\n\n  function isPlainObj(value) {\n    return value && (value.constructor === Object || value.constructor === undefined);\n  }\n\n  /**\n   * An extension of the \"same-value\" algorithm as [described for use by ES6 Map\n   * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality)\n   *\n   * NaN is considered the same as NaN, however -0 and 0 are considered the same\n   * value, which is different from the algorithm described by\n   * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).\n   *\n   * This is extended further to allow Objects to describe the values they\n   * represent, by way of `valueOf` or `equals` (and `hashCode`).\n   *\n   * Note: because of this extension, the key equality of Immutable.Map and the\n   * value equality of Immutable.Set will differ from ES6 Map and Set.\n   *\n   * ### Defining custom values\n   *\n   * The easiest way to describe the value an object represents is by implementing\n   * `valueOf`. For example, `Date` represents a value by returning a unix\n   * timestamp for `valueOf`:\n   *\n   *     var date1 = new Date(1234567890000); // Fri Feb 13 2009 ...\n   *     var date2 = new Date(1234567890000);\n   *     date1.valueOf(); // 1234567890000\n   *     assert( date1 !== date2 );\n   *     assert( Immutable.is( date1, date2 ) );\n   *\n   * Note: overriding `valueOf` may have other implications if you use this object\n   * where JavaScript expects a primitive, such as implicit string coercion.\n   *\n   * For more complex types, especially collections, implementing `valueOf` may\n   * not be performant. An alternative is to implement `equals` and `hashCode`.\n   *\n   * `equals` takes another object, presumably of similar type, and returns true\n   * if the it is equal. Equality is symmetrical, so the same result should be\n   * returned if this and the argument are flipped.\n   *\n   *     assert( a.equals(b) === b.equals(a) );\n   *\n   * `hashCode` returns a 32bit integer number representing the object which will\n   * be used to determine how to store the value object in a Map or Set. You must\n   * provide both or neither methods, one must not exist without the other.\n   *\n   * Also, an important relationship between these methods must be upheld: if two\n   * values are equal, they *must* return the same hashCode. If the values are not\n   * equal, they might have the same hashCode; this is called a hash collision,\n   * and while undesirable for performance reasons, it is acceptable.\n   *\n   *     if (a.equals(b)) {\n   *       assert( a.hashCode() === b.hashCode() );\n   *     }\n   *\n   * All Immutable collections implement `equals` and `hashCode`.\n   *\n   */\n  function is(valueA, valueB) {\n    if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n      return true;\n    }\n    if (!valueA || !valueB) {\n      return false;\n    }\n    if (typeof valueA.valueOf === 'function' &&\n        typeof valueB.valueOf === 'function') {\n      valueA = valueA.valueOf();\n      valueB = valueB.valueOf();\n      if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n        return true;\n      }\n      if (!valueA || !valueB) {\n        return false;\n      }\n    }\n    if (typeof valueA.equals === 'function' &&\n        typeof valueB.equals === 'function' &&\n        valueA.equals(valueB)) {\n      return true;\n    }\n    return false;\n  }\n\n  function deepEqual(a, b) {\n    if (a === b) {\n      return true;\n    }\n\n    if (\n      !isIterable(b) ||\n      a.size !== undefined && b.size !== undefined && a.size !== b.size ||\n      a.__hash !== undefined && b.__hash !== undefined && a.__hash !== b.__hash ||\n      isKeyed(a) !== isKeyed(b) ||\n      isIndexed(a) !== isIndexed(b) ||\n      isOrdered(a) !== isOrdered(b)\n    ) {\n      return false;\n    }\n\n    if (a.size === 0 && b.size === 0) {\n      return true;\n    }\n\n    var notAssociative = !isAssociative(a);\n\n    if (isOrdered(a)) {\n      var entries = a.entries();\n      return b.every(function(v, k)  {\n        var entry = entries.next().value;\n        return entry && is(entry[1], v) && (notAssociative || is(entry[0], k));\n      }) && entries.next().done;\n    }\n\n    var flipped = false;\n\n    if (a.size === undefined) {\n      if (b.size === undefined) {\n        if (typeof a.cacheResult === 'function') {\n          a.cacheResult();\n        }\n      } else {\n        flipped = true;\n        var _ = a;\n        a = b;\n        b = _;\n      }\n    }\n\n    var allEqual = true;\n    var bSize = b.__iterate(function(v, k)  {\n      if (notAssociative ? !a.has(v) :\n          flipped ? !is(v, a.get(k, NOT_SET)) : !is(a.get(k, NOT_SET), v)) {\n        allEqual = false;\n        return false;\n      }\n    });\n\n    return allEqual && a.size === bSize;\n  }\n\n  createClass(Repeat, IndexedSeq);\n\n    function Repeat(value, times) {\n      if (!(this instanceof Repeat)) {\n        return new Repeat(value, times);\n      }\n      this._value = value;\n      this.size = times === undefined ? Infinity : Math.max(0, times);\n      if (this.size === 0) {\n        if (EMPTY_REPEAT) {\n          return EMPTY_REPEAT;\n        }\n        EMPTY_REPEAT = this;\n      }\n    }\n\n    Repeat.prototype.toString = function() {\n      if (this.size === 0) {\n        return 'Repeat []';\n      }\n      return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]';\n    };\n\n    Repeat.prototype.get = function(index, notSetValue) {\n      return this.has(index) ? this._value : notSetValue;\n    };\n\n    Repeat.prototype.includes = function(searchValue) {\n      return is(this._value, searchValue);\n    };\n\n    Repeat.prototype.slice = function(begin, end) {\n      var size = this.size;\n      return wholeSlice(begin, end, size) ? this :\n        new Repeat(this._value, resolveEnd(end, size) - resolveBegin(begin, size));\n    };\n\n    Repeat.prototype.reverse = function() {\n      return this;\n    };\n\n    Repeat.prototype.indexOf = function(searchValue) {\n      if (is(this._value, searchValue)) {\n        return 0;\n      }\n      return -1;\n    };\n\n    Repeat.prototype.lastIndexOf = function(searchValue) {\n      if (is(this._value, searchValue)) {\n        return this.size;\n      }\n      return -1;\n    };\n\n    Repeat.prototype.__iterate = function(fn, reverse) {\n      for (var ii = 0; ii < this.size; ii++) {\n        if (fn(this._value, ii, this) === false) {\n          return ii + 1;\n        }\n      }\n      return ii;\n    };\n\n    Repeat.prototype.__iterator = function(type, reverse) {var this$0 = this;\n      var ii = 0;\n      return new Iterator(function() \n        {return ii < this$0.size ? iteratorValue(type, ii++, this$0._value) : iteratorDone()}\n      );\n    };\n\n    Repeat.prototype.equals = function(other) {\n      return other instanceof Repeat ?\n        is(this._value, other._value) :\n        deepEqual(other);\n    };\n\n\n  var EMPTY_REPEAT;\n\n  function invariant(condition, error) {\n    if (!condition) throw new Error(error);\n  }\n\n  createClass(Range, IndexedSeq);\n\n    function Range(start, end, step) {\n      if (!(this instanceof Range)) {\n        return new Range(start, end, step);\n      }\n      invariant(step !== 0, 'Cannot step a Range by 0');\n      start = start || 0;\n      if (end === undefined) {\n        end = Infinity;\n      }\n      step = step === undefined ? 1 : Math.abs(step);\n      if (end < start) {\n        step = -step;\n      }\n      this._start = start;\n      this._end = end;\n      this._step = step;\n      this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1);\n      if (this.size === 0) {\n        if (EMPTY_RANGE) {\n          return EMPTY_RANGE;\n        }\n        EMPTY_RANGE = this;\n      }\n    }\n\n    Range.prototype.toString = function() {\n      if (this.size === 0) {\n        return 'Range []';\n      }\n      return 'Range [ ' +\n        this._start + '...' + this._end +\n        (this._step !== 1 ? ' by ' + this._step : '') +\n      ' ]';\n    };\n\n    Range.prototype.get = function(index, notSetValue) {\n      return this.has(index) ?\n        this._start + wrapIndex(this, index) * this._step :\n        notSetValue;\n    };\n\n    Range.prototype.includes = function(searchValue) {\n      var possibleIndex = (searchValue - this._start) / this._step;\n      return possibleIndex >= 0 &&\n        possibleIndex < this.size &&\n        possibleIndex === Math.floor(possibleIndex);\n    };\n\n    Range.prototype.slice = function(begin, end) {\n      if (wholeSlice(begin, end, this.size)) {\n        return this;\n      }\n      begin = resolveBegin(begin, this.size);\n      end = resolveEnd(end, this.size);\n      if (end <= begin) {\n        return new Range(0, 0);\n      }\n      return new Range(this.get(begin, this._end), this.get(end, this._end), this._step);\n    };\n\n    Range.prototype.indexOf = function(searchValue) {\n      var offsetValue = searchValue - this._start;\n      if (offsetValue % this._step === 0) {\n        var index = offsetValue / this._step;\n        if (index >= 0 && index < this.size) {\n          return index\n        }\n      }\n      return -1;\n    };\n\n    Range.prototype.lastIndexOf = function(searchValue) {\n      return this.indexOf(searchValue);\n    };\n\n    Range.prototype.__iterate = function(fn, reverse) {\n      var maxIndex = this.size - 1;\n      var step = this._step;\n      var value = reverse ? this._start + maxIndex * step : this._start;\n      for (var ii = 0; ii <= maxIndex; ii++) {\n        if (fn(value, ii, this) === false) {\n          return ii + 1;\n        }\n        value += reverse ? -step : step;\n      }\n      return ii;\n    };\n\n    Range.prototype.__iterator = function(type, reverse) {\n      var maxIndex = this.size - 1;\n      var step = this._step;\n      var value = reverse ? this._start + maxIndex * step : this._start;\n      var ii = 0;\n      return new Iterator(function()  {\n        var v = value;\n        value += reverse ? -step : step;\n        return ii > maxIndex ? iteratorDone() : iteratorValue(type, ii++, v);\n      });\n    };\n\n    Range.prototype.equals = function(other) {\n      return other instanceof Range ?\n        this._start === other._start &&\n        this._end === other._end &&\n        this._step === other._step :\n        deepEqual(this, other);\n    };\n\n\n  var EMPTY_RANGE;\n\n  createClass(Collection, Iterable);\n    function Collection() {\n      throw TypeError('Abstract');\n    }\n\n\n  createClass(KeyedCollection, Collection);function KeyedCollection() {}\n\n  createClass(IndexedCollection, Collection);function IndexedCollection() {}\n\n  createClass(SetCollection, Collection);function SetCollection() {}\n\n\n  Collection.Keyed = KeyedCollection;\n  Collection.Indexed = IndexedCollection;\n  Collection.Set = SetCollection;\n\n  var imul =\n    typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2 ?\n    Math.imul :\n    function imul(a, b) {\n      a = a | 0; // int\n      b = b | 0; // int\n      var c = a & 0xffff;\n      var d = b & 0xffff;\n      // Shift by 0 fixes the sign on the high part.\n      return (c * d) + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0) | 0; // int\n    };\n\n  // v8 has an optimization for storing 31-bit signed numbers.\n  // Values which have either 00 or 11 as the high order bits qualify.\n  // This function drops the highest order bit in a signed number, maintaining\n  // the sign bit.\n  function smi(i32) {\n    return ((i32 >>> 1) & 0x40000000) | (i32 & 0xBFFFFFFF);\n  }\n\n  function hash(o) {\n    if (o === false || o === null || o === undefined) {\n      return 0;\n    }\n    if (typeof o.valueOf === 'function') {\n      o = o.valueOf();\n      if (o === false || o === null || o === undefined) {\n        return 0;\n      }\n    }\n    if (o === true) {\n      return 1;\n    }\n    var type = typeof o;\n    if (type === 'number') {\n      if (o !== o || o === Infinity) {\n        return 0;\n      }\n      var h = o | 0;\n      if (h !== o) {\n        h ^= o * 0xFFFFFFFF;\n      }\n      while (o > 0xFFFFFFFF) {\n        o /= 0xFFFFFFFF;\n        h ^= o;\n      }\n      return smi(h);\n    }\n    if (type === 'string') {\n      return o.length > STRING_HASH_CACHE_MIN_STRLEN ? cachedHashString(o) : hashString(o);\n    }\n    if (typeof o.hashCode === 'function') {\n      return o.hashCode();\n    }\n    if (type === 'object') {\n      return hashJSObj(o);\n    }\n    if (typeof o.toString === 'function') {\n      return hashString(o.toString());\n    }\n    throw new Error('Value type ' + type + ' cannot be hashed.');\n  }\n\n  function cachedHashString(string) {\n    var hash = stringHashCache[string];\n    if (hash === undefined) {\n      hash = hashString(string);\n      if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) {\n        STRING_HASH_CACHE_SIZE = 0;\n        stringHashCache = {};\n      }\n      STRING_HASH_CACHE_SIZE++;\n      stringHashCache[string] = hash;\n    }\n    return hash;\n  }\n\n  // http://jsperf.com/hashing-strings\n  function hashString(string) {\n    // This is the hash from JVM\n    // The hash code for a string is computed as\n    // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1],\n    // where s[i] is the ith character of the string and n is the length of\n    // the string. We \"mod\" the result to make it between 0 (inclusive) and 2^31\n    // (exclusive) by dropping high bits.\n    var hash = 0;\n    for (var ii = 0; ii < string.length; ii++) {\n      hash = 31 * hash + string.charCodeAt(ii) | 0;\n    }\n    return smi(hash);\n  }\n\n  function hashJSObj(obj) {\n    var hash;\n    if (usingWeakMap) {\n      hash = weakMap.get(obj);\n      if (hash !== undefined) {\n        return hash;\n      }\n    }\n\n    hash = obj[UID_HASH_KEY];\n    if (hash !== undefined) {\n      return hash;\n    }\n\n    if (!canDefineProperty) {\n      hash = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY];\n      if (hash !== undefined) {\n        return hash;\n      }\n\n      hash = getIENodeHash(obj);\n      if (hash !== undefined) {\n        return hash;\n      }\n    }\n\n    hash = ++objHashUID;\n    if (objHashUID & 0x40000000) {\n      objHashUID = 0;\n    }\n\n    if (usingWeakMap) {\n      weakMap.set(obj, hash);\n    } else if (isExtensible !== undefined && isExtensible(obj) === false) {\n      throw new Error('Non-extensible objects are not allowed as keys.');\n    } else if (canDefineProperty) {\n      Object.defineProperty(obj, UID_HASH_KEY, {\n        'enumerable': false,\n        'configurable': false,\n        'writable': false,\n        'value': hash\n      });\n    } else if (obj.propertyIsEnumerable !== undefined &&\n               obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable) {\n      // Since we can't define a non-enumerable property on the object\n      // we'll hijack one of the less-used non-enumerable properties to\n      // save our hash on it. Since this is a function it will not show up in\n      // `JSON.stringify` which is what we want.\n      obj.propertyIsEnumerable = function() {\n        return this.constructor.prototype.propertyIsEnumerable.apply(this, arguments);\n      };\n      obj.propertyIsEnumerable[UID_HASH_KEY] = hash;\n    } else if (obj.nodeType !== undefined) {\n      // At this point we couldn't get the IE `uniqueID` to use as a hash\n      // and we couldn't use a non-enumerable property to exploit the\n      // dontEnum bug so we simply add the `UID_HASH_KEY` on the node\n      // itself.\n      obj[UID_HASH_KEY] = hash;\n    } else {\n      throw new Error('Unable to set a non-enumerable property on object.');\n    }\n\n    return hash;\n  }\n\n  // Get references to ES5 object methods.\n  var isExtensible = Object.isExtensible;\n\n  // True if Object.defineProperty works as expected. IE8 fails this test.\n  var canDefineProperty = (function() {\n    try {\n      Object.defineProperty({}, '@', {});\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }());\n\n  // IE has a `uniqueID` property on DOM nodes. We can construct the hash from it\n  // and avoid memory leaks from the IE cloneNode bug.\n  function getIENodeHash(node) {\n    if (node && node.nodeType > 0) {\n      switch (node.nodeType) {\n        case 1: // Element\n          return node.uniqueID;\n        case 9: // Document\n          return node.documentElement && node.documentElement.uniqueID;\n      }\n    }\n  }\n\n  // If possible, use a WeakMap.\n  var usingWeakMap = typeof WeakMap === 'function';\n  var weakMap;\n  if (usingWeakMap) {\n    weakMap = new WeakMap();\n  }\n\n  var objHashUID = 0;\n\n  var UID_HASH_KEY = '__immutablehash__';\n  if (typeof Symbol === 'function') {\n    UID_HASH_KEY = Symbol(UID_HASH_KEY);\n  }\n\n  var STRING_HASH_CACHE_MIN_STRLEN = 16;\n  var STRING_HASH_CACHE_MAX_SIZE = 255;\n  var STRING_HASH_CACHE_SIZE = 0;\n  var stringHashCache = {};\n\n  function assertNotInfinite(size) {\n    invariant(\n      size !== Infinity,\n      'Cannot perform this action with an infinite size.'\n    );\n  }\n\n  createClass(Map, KeyedCollection);\n\n    // @pragma Construction\n\n    function Map(value) {\n      return value === null || value === undefined ? emptyMap() :\n        isMap(value) && !isOrdered(value) ? value :\n        emptyMap().withMutations(function(map ) {\n          var iter = KeyedIterable(value);\n          assertNotInfinite(iter.size);\n          iter.forEach(function(v, k)  {return map.set(k, v)});\n        });\n    }\n\n    Map.of = function() {var keyValues = SLICE$0.call(arguments, 0);\n      return emptyMap().withMutations(function(map ) {\n        for (var i = 0; i < keyValues.length; i += 2) {\n          if (i + 1 >= keyValues.length) {\n            throw new Error('Missing value for key: ' + keyValues[i]);\n          }\n          map.set(keyValues[i], keyValues[i + 1]);\n        }\n      });\n    };\n\n    Map.prototype.toString = function() {\n      return this.__toString('Map {', '}');\n    };\n\n    // @pragma Access\n\n    Map.prototype.get = function(k, notSetValue) {\n      return this._root ?\n        this._root.get(0, undefined, k, notSetValue) :\n        notSetValue;\n    };\n\n    // @pragma Modification\n\n    Map.prototype.set = function(k, v) {\n      return updateMap(this, k, v);\n    };\n\n    Map.prototype.setIn = function(keyPath, v) {\n      return this.updateIn(keyPath, NOT_SET, function()  {return v});\n    };\n\n    Map.prototype.remove = function(k) {\n      return updateMap(this, k, NOT_SET);\n    };\n\n    Map.prototype.deleteIn = function(keyPath) {\n      return this.updateIn(keyPath, function()  {return NOT_SET});\n    };\n\n    Map.prototype.update = function(k, notSetValue, updater) {\n      return arguments.length === 1 ?\n        k(this) :\n        this.updateIn([k], notSetValue, updater);\n    };\n\n    Map.prototype.updateIn = function(keyPath, notSetValue, updater) {\n      if (!updater) {\n        updater = notSetValue;\n        notSetValue = undefined;\n      }\n      var updatedValue = updateInDeepMap(\n        this,\n        forceIterator(keyPath),\n        notSetValue,\n        updater\n      );\n      return updatedValue === NOT_SET ? undefined : updatedValue;\n    };\n\n    Map.prototype.clear = function() {\n      if (this.size === 0) {\n        return this;\n      }\n      if (this.__ownerID) {\n        this.size = 0;\n        this._root = null;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return emptyMap();\n    };\n\n    // @pragma Composition\n\n    Map.prototype.merge = function(/*...iters*/) {\n      return mergeIntoMapWith(this, undefined, arguments);\n    };\n\n    Map.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return mergeIntoMapWith(this, merger, iters);\n    };\n\n    Map.prototype.mergeIn = function(keyPath) {var iters = SLICE$0.call(arguments, 1);\n      return this.updateIn(\n        keyPath,\n        emptyMap(),\n        function(m ) {return typeof m.merge === 'function' ?\n          m.merge.apply(m, iters) :\n          iters[iters.length - 1]}\n      );\n    };\n\n    Map.prototype.mergeDeep = function(/*...iters*/) {\n      return mergeIntoMapWith(this, deepMerger, arguments);\n    };\n\n    Map.prototype.mergeDeepWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return mergeIntoMapWith(this, deepMergerWith(merger), iters);\n    };\n\n    Map.prototype.mergeDeepIn = function(keyPath) {var iters = SLICE$0.call(arguments, 1);\n      return this.updateIn(\n        keyPath,\n        emptyMap(),\n        function(m ) {return typeof m.mergeDeep === 'function' ?\n          m.mergeDeep.apply(m, iters) :\n          iters[iters.length - 1]}\n      );\n    };\n\n    Map.prototype.sort = function(comparator) {\n      // Late binding\n      return OrderedMap(sortFactory(this, comparator));\n    };\n\n    Map.prototype.sortBy = function(mapper, comparator) {\n      // Late binding\n      return OrderedMap(sortFactory(this, comparator, mapper));\n    };\n\n    // @pragma Mutability\n\n    Map.prototype.withMutations = function(fn) {\n      var mutable = this.asMutable();\n      fn(mutable);\n      return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this;\n    };\n\n    Map.prototype.asMutable = function() {\n      return this.__ownerID ? this : this.__ensureOwner(new OwnerID());\n    };\n\n    Map.prototype.asImmutable = function() {\n      return this.__ensureOwner();\n    };\n\n    Map.prototype.wasAltered = function() {\n      return this.__altered;\n    };\n\n    Map.prototype.__iterator = function(type, reverse) {\n      return new MapIterator(this, type, reverse);\n    };\n\n    Map.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      var iterations = 0;\n      this._root && this._root.iterate(function(entry ) {\n        iterations++;\n        return fn(entry[1], entry[0], this$0);\n      }, reverse);\n      return iterations;\n    };\n\n    Map.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this.__altered = false;\n        return this;\n      }\n      return makeMap(this.size, this._root, ownerID, this.__hash);\n    };\n\n\n  function isMap(maybeMap) {\n    return !!(maybeMap && maybeMap[IS_MAP_SENTINEL]);\n  }\n\n  Map.isMap = isMap;\n\n  var IS_MAP_SENTINEL = '@@__IMMUTABLE_MAP__@@';\n\n  var MapPrototype = Map.prototype;\n  MapPrototype[IS_MAP_SENTINEL] = true;\n  MapPrototype[DELETE] = MapPrototype.remove;\n  MapPrototype.removeIn = MapPrototype.deleteIn;\n\n\n  // #pragma Trie Nodes\n\n\n\n    function ArrayMapNode(ownerID, entries) {\n      this.ownerID = ownerID;\n      this.entries = entries;\n    }\n\n    ArrayMapNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      var entries = this.entries;\n      for (var ii = 0, len = entries.length; ii < len; ii++) {\n        if (is(key, entries[ii][0])) {\n          return entries[ii][1];\n        }\n      }\n      return notSetValue;\n    };\n\n    ArrayMapNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      var removed = value === NOT_SET;\n\n      var entries = this.entries;\n      var idx = 0;\n      for (var len = entries.length; idx < len; idx++) {\n        if (is(key, entries[idx][0])) {\n          break;\n        }\n      }\n      var exists = idx < len;\n\n      if (exists ? entries[idx][1] === value : removed) {\n        return this;\n      }\n\n      SetRef(didAlter);\n      (removed || !exists) && SetRef(didChangeSize);\n\n      if (removed && entries.length === 1) {\n        return; // undefined\n      }\n\n      if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) {\n        return createNodes(ownerID, entries, key, value);\n      }\n\n      var isEditable = ownerID && ownerID === this.ownerID;\n      var newEntries = isEditable ? entries : arrCopy(entries);\n\n      if (exists) {\n        if (removed) {\n          idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop());\n        } else {\n          newEntries[idx] = [key, value];\n        }\n      } else {\n        newEntries.push([key, value]);\n      }\n\n      if (isEditable) {\n        this.entries = newEntries;\n        return this;\n      }\n\n      return new ArrayMapNode(ownerID, newEntries);\n    };\n\n\n\n\n    function BitmapIndexedNode(ownerID, bitmap, nodes) {\n      this.ownerID = ownerID;\n      this.bitmap = bitmap;\n      this.nodes = nodes;\n    }\n\n    BitmapIndexedNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n      var bit = (1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK));\n      var bitmap = this.bitmap;\n      return (bitmap & bit) === 0 ? notSetValue :\n        this.nodes[popCount(bitmap & (bit - 1))].get(shift + SHIFT, keyHash, key, notSetValue);\n    };\n\n    BitmapIndexedNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n      var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n      var bit = 1 << keyHashFrag;\n      var bitmap = this.bitmap;\n      var exists = (bitmap & bit) !== 0;\n\n      if (!exists && value === NOT_SET) {\n        return this;\n      }\n\n      var idx = popCount(bitmap & (bit - 1));\n      var nodes = this.nodes;\n      var node = exists ? nodes[idx] : undefined;\n      var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);\n\n      if (newNode === node) {\n        return this;\n      }\n\n      if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) {\n        return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode);\n      }\n\n      if (exists && !newNode && nodes.length === 2 && isLeafNode(nodes[idx ^ 1])) {\n        return nodes[idx ^ 1];\n      }\n\n      if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) {\n        return newNode;\n      }\n\n      var isEditable = ownerID && ownerID === this.ownerID;\n      var newBitmap = exists ? newNode ? bitmap : bitmap ^ bit : bitmap | bit;\n      var newNodes = exists ? newNode ?\n        setIn(nodes, idx, newNode, isEditable) :\n        spliceOut(nodes, idx, isEditable) :\n        spliceIn(nodes, idx, newNode, isEditable);\n\n      if (isEditable) {\n        this.bitmap = newBitmap;\n        this.nodes = newNodes;\n        return this;\n      }\n\n      return new BitmapIndexedNode(ownerID, newBitmap, newNodes);\n    };\n\n\n\n\n    function HashArrayMapNode(ownerID, count, nodes) {\n      this.ownerID = ownerID;\n      this.count = count;\n      this.nodes = nodes;\n    }\n\n    HashArrayMapNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n      var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n      var node = this.nodes[idx];\n      return node ? node.get(shift + SHIFT, keyHash, key, notSetValue) : notSetValue;\n    };\n\n    HashArrayMapNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n      var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n      var removed = value === NOT_SET;\n      var nodes = this.nodes;\n      var node = nodes[idx];\n\n      if (removed && !node) {\n        return this;\n      }\n\n      var newNode = updateNode(node, ownerID, shift + SHIFT, keyHash, key, value, didChangeSize, didAlter);\n      if (newNode === node) {\n        return this;\n      }\n\n      var newCount = this.count;\n      if (!node) {\n        newCount++;\n      } else if (!newNode) {\n        newCount--;\n        if (newCount < MIN_HASH_ARRAY_MAP_SIZE) {\n          return packNodes(ownerID, nodes, newCount, idx);\n        }\n      }\n\n      var isEditable = ownerID && ownerID === this.ownerID;\n      var newNodes = setIn(nodes, idx, newNode, isEditable);\n\n      if (isEditable) {\n        this.count = newCount;\n        this.nodes = newNodes;\n        return this;\n      }\n\n      return new HashArrayMapNode(ownerID, newCount, newNodes);\n    };\n\n\n\n\n    function HashCollisionNode(ownerID, keyHash, entries) {\n      this.ownerID = ownerID;\n      this.keyHash = keyHash;\n      this.entries = entries;\n    }\n\n    HashCollisionNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      var entries = this.entries;\n      for (var ii = 0, len = entries.length; ii < len; ii++) {\n        if (is(key, entries[ii][0])) {\n          return entries[ii][1];\n        }\n      }\n      return notSetValue;\n    };\n\n    HashCollisionNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      if (keyHash === undefined) {\n        keyHash = hash(key);\n      }\n\n      var removed = value === NOT_SET;\n\n      if (keyHash !== this.keyHash) {\n        if (removed) {\n          return this;\n        }\n        SetRef(didAlter);\n        SetRef(didChangeSize);\n        return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]);\n      }\n\n      var entries = this.entries;\n      var idx = 0;\n      for (var len = entries.length; idx < len; idx++) {\n        if (is(key, entries[idx][0])) {\n          break;\n        }\n      }\n      var exists = idx < len;\n\n      if (exists ? entries[idx][1] === value : removed) {\n        return this;\n      }\n\n      SetRef(didAlter);\n      (removed || !exists) && SetRef(didChangeSize);\n\n      if (removed && len === 2) {\n        return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]);\n      }\n\n      var isEditable = ownerID && ownerID === this.ownerID;\n      var newEntries = isEditable ? entries : arrCopy(entries);\n\n      if (exists) {\n        if (removed) {\n          idx === len - 1 ? newEntries.pop() : (newEntries[idx] = newEntries.pop());\n        } else {\n          newEntries[idx] = [key, value];\n        }\n      } else {\n        newEntries.push([key, value]);\n      }\n\n      if (isEditable) {\n        this.entries = newEntries;\n        return this;\n      }\n\n      return new HashCollisionNode(ownerID, this.keyHash, newEntries);\n    };\n\n\n\n\n    function ValueNode(ownerID, keyHash, entry) {\n      this.ownerID = ownerID;\n      this.keyHash = keyHash;\n      this.entry = entry;\n    }\n\n    ValueNode.prototype.get = function(shift, keyHash, key, notSetValue) {\n      return is(key, this.entry[0]) ? this.entry[1] : notSetValue;\n    };\n\n    ValueNode.prototype.update = function(ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n      var removed = value === NOT_SET;\n      var keyMatch = is(key, this.entry[0]);\n      if (keyMatch ? value === this.entry[1] : removed) {\n        return this;\n      }\n\n      SetRef(didAlter);\n\n      if (removed) {\n        SetRef(didChangeSize);\n        return; // undefined\n      }\n\n      if (keyMatch) {\n        if (ownerID && ownerID === this.ownerID) {\n          this.entry[1] = value;\n          return this;\n        }\n        return new ValueNode(ownerID, this.keyHash, [key, value]);\n      }\n\n      SetRef(didChangeSize);\n      return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]);\n    };\n\n\n\n  // #pragma Iterators\n\n  ArrayMapNode.prototype.iterate =\n  HashCollisionNode.prototype.iterate = function (fn, reverse) {\n    var entries = this.entries;\n    for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) {\n      if (fn(entries[reverse ? maxIndex - ii : ii]) === false) {\n        return false;\n      }\n    }\n  }\n\n  BitmapIndexedNode.prototype.iterate =\n  HashArrayMapNode.prototype.iterate = function (fn, reverse) {\n    var nodes = this.nodes;\n    for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) {\n      var node = nodes[reverse ? maxIndex - ii : ii];\n      if (node && node.iterate(fn, reverse) === false) {\n        return false;\n      }\n    }\n  }\n\n  ValueNode.prototype.iterate = function (fn, reverse) {\n    return fn(this.entry);\n  }\n\n  createClass(MapIterator, Iterator);\n\n    function MapIterator(map, type, reverse) {\n      this._type = type;\n      this._reverse = reverse;\n      this._stack = map._root && mapIteratorFrame(map._root);\n    }\n\n    MapIterator.prototype.next = function() {\n      var type = this._type;\n      var stack = this._stack;\n      while (stack) {\n        var node = stack.node;\n        var index = stack.index++;\n        var maxIndex;\n        if (node.entry) {\n          if (index === 0) {\n            return mapIteratorValue(type, node.entry);\n          }\n        } else if (node.entries) {\n          maxIndex = node.entries.length - 1;\n          if (index <= maxIndex) {\n            return mapIteratorValue(type, node.entries[this._reverse ? maxIndex - index : index]);\n          }\n        } else {\n          maxIndex = node.nodes.length - 1;\n          if (index <= maxIndex) {\n            var subNode = node.nodes[this._reverse ? maxIndex - index : index];\n            if (subNode) {\n              if (subNode.entry) {\n                return mapIteratorValue(type, subNode.entry);\n              }\n              stack = this._stack = mapIteratorFrame(subNode, stack);\n            }\n            continue;\n          }\n        }\n        stack = this._stack = this._stack.__prev;\n      }\n      return iteratorDone();\n    };\n\n\n  function mapIteratorValue(type, entry) {\n    return iteratorValue(type, entry[0], entry[1]);\n  }\n\n  function mapIteratorFrame(node, prev) {\n    return {\n      node: node,\n      index: 0,\n      __prev: prev\n    };\n  }\n\n  function makeMap(size, root, ownerID, hash) {\n    var map = Object.create(MapPrototype);\n    map.size = size;\n    map._root = root;\n    map.__ownerID = ownerID;\n    map.__hash = hash;\n    map.__altered = false;\n    return map;\n  }\n\n  var EMPTY_MAP;\n  function emptyMap() {\n    return EMPTY_MAP || (EMPTY_MAP = makeMap(0));\n  }\n\n  function updateMap(map, k, v) {\n    var newRoot;\n    var newSize;\n    if (!map._root) {\n      if (v === NOT_SET) {\n        return map;\n      }\n      newSize = 1;\n      newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]);\n    } else {\n      var didChangeSize = MakeRef(CHANGE_LENGTH);\n      var didAlter = MakeRef(DID_ALTER);\n      newRoot = updateNode(map._root, map.__ownerID, 0, undefined, k, v, didChangeSize, didAlter);\n      if (!didAlter.value) {\n        return map;\n      }\n      newSize = map.size + (didChangeSize.value ? v === NOT_SET ? -1 : 1 : 0);\n    }\n    if (map.__ownerID) {\n      map.size = newSize;\n      map._root = newRoot;\n      map.__hash = undefined;\n      map.__altered = true;\n      return map;\n    }\n    return newRoot ? makeMap(newSize, newRoot) : emptyMap();\n  }\n\n  function updateNode(node, ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n    if (!node) {\n      if (value === NOT_SET) {\n        return node;\n      }\n      SetRef(didAlter);\n      SetRef(didChangeSize);\n      return new ValueNode(ownerID, keyHash, [key, value]);\n    }\n    return node.update(ownerID, shift, keyHash, key, value, didChangeSize, didAlter);\n  }\n\n  function isLeafNode(node) {\n    return node.constructor === ValueNode || node.constructor === HashCollisionNode;\n  }\n\n  function mergeIntoNode(node, ownerID, shift, keyHash, entry) {\n    if (node.keyHash === keyHash) {\n      return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]);\n    }\n\n    var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK;\n    var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n\n    var newNode;\n    var nodes = idx1 === idx2 ?\n      [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)] :\n      ((newNode = new ValueNode(ownerID, keyHash, entry)), idx1 < idx2 ? [node, newNode] : [newNode, node]);\n\n    return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes);\n  }\n\n  function createNodes(ownerID, entries, key, value) {\n    if (!ownerID) {\n      ownerID = new OwnerID();\n    }\n    var node = new ValueNode(ownerID, hash(key), [key, value]);\n    for (var ii = 0; ii < entries.length; ii++) {\n      var entry = entries[ii];\n      node = node.update(ownerID, 0, undefined, entry[0], entry[1]);\n    }\n    return node;\n  }\n\n  function packNodes(ownerID, nodes, count, excluding) {\n    var bitmap = 0;\n    var packedII = 0;\n    var packedNodes = new Array(count);\n    for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) {\n      var node = nodes[ii];\n      if (node !== undefined && ii !== excluding) {\n        bitmap |= bit;\n        packedNodes[packedII++] = node;\n      }\n    }\n    return new BitmapIndexedNode(ownerID, bitmap, packedNodes);\n  }\n\n  function expandNodes(ownerID, nodes, bitmap, including, node) {\n    var count = 0;\n    var expandedNodes = new Array(SIZE);\n    for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) {\n      expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined;\n    }\n    expandedNodes[including] = node;\n    return new HashArrayMapNode(ownerID, count + 1, expandedNodes);\n  }\n\n  function mergeIntoMapWith(map, merger, iterables) {\n    var iters = [];\n    for (var ii = 0; ii < iterables.length; ii++) {\n      var value = iterables[ii];\n      var iter = KeyedIterable(value);\n      if (!isIterable(value)) {\n        iter = iter.map(function(v ) {return fromJS(v)});\n      }\n      iters.push(iter);\n    }\n    return mergeIntoCollectionWith(map, merger, iters);\n  }\n\n  function deepMerger(existing, value, key) {\n    return existing && existing.mergeDeep && isIterable(value) ?\n      existing.mergeDeep(value) :\n      is(existing, value) ? existing : value;\n  }\n\n  function deepMergerWith(merger) {\n    return function(existing, value, key)  {\n      if (existing && existing.mergeDeepWith && isIterable(value)) {\n        return existing.mergeDeepWith(merger, value);\n      }\n      var nextValue = merger(existing, value, key);\n      return is(existing, nextValue) ? existing : nextValue;\n    };\n  }\n\n  function mergeIntoCollectionWith(collection, merger, iters) {\n    iters = iters.filter(function(x ) {return x.size !== 0});\n    if (iters.length === 0) {\n      return collection;\n    }\n    if (collection.size === 0 && !collection.__ownerID && iters.length === 1) {\n      return collection.constructor(iters[0]);\n    }\n    return collection.withMutations(function(collection ) {\n      var mergeIntoMap = merger ?\n        function(value, key)  {\n          collection.update(key, NOT_SET, function(existing )\n            {return existing === NOT_SET ? value : merger(existing, value, key)}\n          );\n        } :\n        function(value, key)  {\n          collection.set(key, value);\n        }\n      for (var ii = 0; ii < iters.length; ii++) {\n        iters[ii].forEach(mergeIntoMap);\n      }\n    });\n  }\n\n  function updateInDeepMap(existing, keyPathIter, notSetValue, updater) {\n    var isNotSet = existing === NOT_SET;\n    var step = keyPathIter.next();\n    if (step.done) {\n      var existingValue = isNotSet ? notSetValue : existing;\n      var newValue = updater(existingValue);\n      return newValue === existingValue ? existing : newValue;\n    }\n    invariant(\n      isNotSet || (existing && existing.set),\n      'invalid keyPath'\n    );\n    var key = step.value;\n    var nextExisting = isNotSet ? NOT_SET : existing.get(key, NOT_SET);\n    var nextUpdated = updateInDeepMap(\n      nextExisting,\n      keyPathIter,\n      notSetValue,\n      updater\n    );\n    return nextUpdated === nextExisting ? existing :\n      nextUpdated === NOT_SET ? existing.remove(key) :\n      (isNotSet ? emptyMap() : existing).set(key, nextUpdated);\n  }\n\n  function popCount(x) {\n    x = x - ((x >> 1) & 0x55555555);\n    x = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n    x = (x + (x >> 4)) & 0x0f0f0f0f;\n    x = x + (x >> 8);\n    x = x + (x >> 16);\n    return x & 0x7f;\n  }\n\n  function setIn(array, idx, val, canEdit) {\n    var newArray = canEdit ? array : arrCopy(array);\n    newArray[idx] = val;\n    return newArray;\n  }\n\n  function spliceIn(array, idx, val, canEdit) {\n    var newLen = array.length + 1;\n    if (canEdit && idx + 1 === newLen) {\n      array[idx] = val;\n      return array;\n    }\n    var newArray = new Array(newLen);\n    var after = 0;\n    for (var ii = 0; ii < newLen; ii++) {\n      if (ii === idx) {\n        newArray[ii] = val;\n        after = -1;\n      } else {\n        newArray[ii] = array[ii + after];\n      }\n    }\n    return newArray;\n  }\n\n  function spliceOut(array, idx, canEdit) {\n    var newLen = array.length - 1;\n    if (canEdit && idx === newLen) {\n      array.pop();\n      return array;\n    }\n    var newArray = new Array(newLen);\n    var after = 0;\n    for (var ii = 0; ii < newLen; ii++) {\n      if (ii === idx) {\n        after = 1;\n      }\n      newArray[ii] = array[ii + after];\n    }\n    return newArray;\n  }\n\n  var MAX_ARRAY_MAP_SIZE = SIZE / 4;\n  var MAX_BITMAP_INDEXED_SIZE = SIZE / 2;\n  var MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4;\n\n  createClass(List, IndexedCollection);\n\n    // @pragma Construction\n\n    function List(value) {\n      var empty = emptyList();\n      if (value === null || value === undefined) {\n        return empty;\n      }\n      if (isList(value)) {\n        return value;\n      }\n      var iter = IndexedIterable(value);\n      var size = iter.size;\n      if (size === 0) {\n        return empty;\n      }\n      assertNotInfinite(size);\n      if (size > 0 && size < SIZE) {\n        return makeList(0, size, SHIFT, null, new VNode(iter.toArray()));\n      }\n      return empty.withMutations(function(list ) {\n        list.setSize(size);\n        iter.forEach(function(v, i)  {return list.set(i, v)});\n      });\n    }\n\n    List.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    List.prototype.toString = function() {\n      return this.__toString('List [', ']');\n    };\n\n    // @pragma Access\n\n    List.prototype.get = function(index, notSetValue) {\n      index = wrapIndex(this, index);\n      if (index >= 0 && index < this.size) {\n        index += this._origin;\n        var node = listNodeFor(this, index);\n        return node && node.array[index & MASK];\n      }\n      return notSetValue;\n    };\n\n    // @pragma Modification\n\n    List.prototype.set = function(index, value) {\n      return updateList(this, index, value);\n    };\n\n    List.prototype.remove = function(index) {\n      return !this.has(index) ? this :\n        index === 0 ? this.shift() :\n        index === this.size - 1 ? this.pop() :\n        this.splice(index, 1);\n    };\n\n    List.prototype.insert = function(index, value) {\n      return this.splice(index, 0, value);\n    };\n\n    List.prototype.clear = function() {\n      if (this.size === 0) {\n        return this;\n      }\n      if (this.__ownerID) {\n        this.size = this._origin = this._capacity = 0;\n        this._level = SHIFT;\n        this._root = this._tail = null;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return emptyList();\n    };\n\n    List.prototype.push = function(/*...values*/) {\n      var values = arguments;\n      var oldSize = this.size;\n      return this.withMutations(function(list ) {\n        setListBounds(list, 0, oldSize + values.length);\n        for (var ii = 0; ii < values.length; ii++) {\n          list.set(oldSize + ii, values[ii]);\n        }\n      });\n    };\n\n    List.prototype.pop = function() {\n      return setListBounds(this, 0, -1);\n    };\n\n    List.prototype.unshift = function(/*...values*/) {\n      var values = arguments;\n      return this.withMutations(function(list ) {\n        setListBounds(list, -values.length);\n        for (var ii = 0; ii < values.length; ii++) {\n          list.set(ii, values[ii]);\n        }\n      });\n    };\n\n    List.prototype.shift = function() {\n      return setListBounds(this, 1);\n    };\n\n    // @pragma Composition\n\n    List.prototype.merge = function(/*...iters*/) {\n      return mergeIntoListWith(this, undefined, arguments);\n    };\n\n    List.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return mergeIntoListWith(this, merger, iters);\n    };\n\n    List.prototype.mergeDeep = function(/*...iters*/) {\n      return mergeIntoListWith(this, deepMerger, arguments);\n    };\n\n    List.prototype.mergeDeepWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return mergeIntoListWith(this, deepMergerWith(merger), iters);\n    };\n\n    List.prototype.setSize = function(size) {\n      return setListBounds(this, 0, size);\n    };\n\n    // @pragma Iteration\n\n    List.prototype.slice = function(begin, end) {\n      var size = this.size;\n      if (wholeSlice(begin, end, size)) {\n        return this;\n      }\n      return setListBounds(\n        this,\n        resolveBegin(begin, size),\n        resolveEnd(end, size)\n      );\n    };\n\n    List.prototype.__iterator = function(type, reverse) {\n      var index = 0;\n      var values = iterateList(this, reverse);\n      return new Iterator(function()  {\n        var value = values();\n        return value === DONE ?\n          iteratorDone() :\n          iteratorValue(type, index++, value);\n      });\n    };\n\n    List.prototype.__iterate = function(fn, reverse) {\n      var index = 0;\n      var values = iterateList(this, reverse);\n      var value;\n      while ((value = values()) !== DONE) {\n        if (fn(value, index++, this) === false) {\n          break;\n        }\n      }\n      return index;\n    };\n\n    List.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        return this;\n      }\n      return makeList(this._origin, this._capacity, this._level, this._root, this._tail, ownerID, this.__hash);\n    };\n\n\n  function isList(maybeList) {\n    return !!(maybeList && maybeList[IS_LIST_SENTINEL]);\n  }\n\n  List.isList = isList;\n\n  var IS_LIST_SENTINEL = '@@__IMMUTABLE_LIST__@@';\n\n  var ListPrototype = List.prototype;\n  ListPrototype[IS_LIST_SENTINEL] = true;\n  ListPrototype[DELETE] = ListPrototype.remove;\n  ListPrototype.setIn = MapPrototype.setIn;\n  ListPrototype.deleteIn =\n  ListPrototype.removeIn = MapPrototype.removeIn;\n  ListPrototype.update = MapPrototype.update;\n  ListPrototype.updateIn = MapPrototype.updateIn;\n  ListPrototype.mergeIn = MapPrototype.mergeIn;\n  ListPrototype.mergeDeepIn = MapPrototype.mergeDeepIn;\n  ListPrototype.withMutations = MapPrototype.withMutations;\n  ListPrototype.asMutable = MapPrototype.asMutable;\n  ListPrototype.asImmutable = MapPrototype.asImmutable;\n  ListPrototype.wasAltered = MapPrototype.wasAltered;\n\n\n\n    function VNode(array, ownerID) {\n      this.array = array;\n      this.ownerID = ownerID;\n    }\n\n    // TODO: seems like these methods are very similar\n\n    VNode.prototype.removeBefore = function(ownerID, level, index) {\n      if (index === level ? 1 << level : 0 || this.array.length === 0) {\n        return this;\n      }\n      var originIndex = (index >>> level) & MASK;\n      if (originIndex >= this.array.length) {\n        return new VNode([], ownerID);\n      }\n      var removingFirst = originIndex === 0;\n      var newChild;\n      if (level > 0) {\n        var oldChild = this.array[originIndex];\n        newChild = oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index);\n        if (newChild === oldChild && removingFirst) {\n          return this;\n        }\n      }\n      if (removingFirst && !newChild) {\n        return this;\n      }\n      var editable = editableVNode(this, ownerID);\n      if (!removingFirst) {\n        for (var ii = 0; ii < originIndex; ii++) {\n          editable.array[ii] = undefined;\n        }\n      }\n      if (newChild) {\n        editable.array[originIndex] = newChild;\n      }\n      return editable;\n    };\n\n    VNode.prototype.removeAfter = function(ownerID, level, index) {\n      if (index === (level ? 1 << level : 0) || this.array.length === 0) {\n        return this;\n      }\n      var sizeIndex = ((index - 1) >>> level) & MASK;\n      if (sizeIndex >= this.array.length) {\n        return this;\n      }\n\n      var newChild;\n      if (level > 0) {\n        var oldChild = this.array[sizeIndex];\n        newChild = oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index);\n        if (newChild === oldChild && sizeIndex === this.array.length - 1) {\n          return this;\n        }\n      }\n\n      var editable = editableVNode(this, ownerID);\n      editable.array.splice(sizeIndex + 1);\n      if (newChild) {\n        editable.array[sizeIndex] = newChild;\n      }\n      return editable;\n    };\n\n\n\n  var DONE = {};\n\n  function iterateList(list, reverse) {\n    var left = list._origin;\n    var right = list._capacity;\n    var tailPos = getTailOffset(right);\n    var tail = list._tail;\n\n    return iterateNodeOrLeaf(list._root, list._level, 0);\n\n    function iterateNodeOrLeaf(node, level, offset) {\n      return level === 0 ?\n        iterateLeaf(node, offset) :\n        iterateNode(node, level, offset);\n    }\n\n    function iterateLeaf(node, offset) {\n      var array = offset === tailPos ? tail && tail.array : node && node.array;\n      var from = offset > left ? 0 : left - offset;\n      var to = right - offset;\n      if (to > SIZE) {\n        to = SIZE;\n      }\n      return function()  {\n        if (from === to) {\n          return DONE;\n        }\n        var idx = reverse ? --to : from++;\n        return array && array[idx];\n      };\n    }\n\n    function iterateNode(node, level, offset) {\n      var values;\n      var array = node && node.array;\n      var from = offset > left ? 0 : (left - offset) >> level;\n      var to = ((right - offset) >> level) + 1;\n      if (to > SIZE) {\n        to = SIZE;\n      }\n      return function()  {\n        do {\n          if (values) {\n            var value = values();\n            if (value !== DONE) {\n              return value;\n            }\n            values = null;\n          }\n          if (from === to) {\n            return DONE;\n          }\n          var idx = reverse ? --to : from++;\n          values = iterateNodeOrLeaf(\n            array && array[idx], level - SHIFT, offset + (idx << level)\n          );\n        } while (true);\n      };\n    }\n  }\n\n  function makeList(origin, capacity, level, root, tail, ownerID, hash) {\n    var list = Object.create(ListPrototype);\n    list.size = capacity - origin;\n    list._origin = origin;\n    list._capacity = capacity;\n    list._level = level;\n    list._root = root;\n    list._tail = tail;\n    list.__ownerID = ownerID;\n    list.__hash = hash;\n    list.__altered = false;\n    return list;\n  }\n\n  var EMPTY_LIST;\n  function emptyList() {\n    return EMPTY_LIST || (EMPTY_LIST = makeList(0, 0, SHIFT));\n  }\n\n  function updateList(list, index, value) {\n    index = wrapIndex(list, index);\n\n    if (index !== index) {\n      return list;\n    }\n\n    if (index >= list.size || index < 0) {\n      return list.withMutations(function(list ) {\n        index < 0 ?\n          setListBounds(list, index).set(0, value) :\n          setListBounds(list, 0, index + 1).set(index, value)\n      });\n    }\n\n    index += list._origin;\n\n    var newTail = list._tail;\n    var newRoot = list._root;\n    var didAlter = MakeRef(DID_ALTER);\n    if (index >= getTailOffset(list._capacity)) {\n      newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter);\n    } else {\n      newRoot = updateVNode(newRoot, list.__ownerID, list._level, index, value, didAlter);\n    }\n\n    if (!didAlter.value) {\n      return list;\n    }\n\n    if (list.__ownerID) {\n      list._root = newRoot;\n      list._tail = newTail;\n      list.__hash = undefined;\n      list.__altered = true;\n      return list;\n    }\n    return makeList(list._origin, list._capacity, list._level, newRoot, newTail);\n  }\n\n  function updateVNode(node, ownerID, level, index, value, didAlter) {\n    var idx = (index >>> level) & MASK;\n    var nodeHas = node && idx < node.array.length;\n    if (!nodeHas && value === undefined) {\n      return node;\n    }\n\n    var newNode;\n\n    if (level > 0) {\n      var lowerNode = node && node.array[idx];\n      var newLowerNode = updateVNode(lowerNode, ownerID, level - SHIFT, index, value, didAlter);\n      if (newLowerNode === lowerNode) {\n        return node;\n      }\n      newNode = editableVNode(node, ownerID);\n      newNode.array[idx] = newLowerNode;\n      return newNode;\n    }\n\n    if (nodeHas && node.array[idx] === value) {\n      return node;\n    }\n\n    SetRef(didAlter);\n\n    newNode = editableVNode(node, ownerID);\n    if (value === undefined && idx === newNode.array.length - 1) {\n      newNode.array.pop();\n    } else {\n      newNode.array[idx] = value;\n    }\n    return newNode;\n  }\n\n  function editableVNode(node, ownerID) {\n    if (ownerID && node && ownerID === node.ownerID) {\n      return node;\n    }\n    return new VNode(node ? node.array.slice() : [], ownerID);\n  }\n\n  function listNodeFor(list, rawIndex) {\n    if (rawIndex >= getTailOffset(list._capacity)) {\n      return list._tail;\n    }\n    if (rawIndex < 1 << (list._level + SHIFT)) {\n      var node = list._root;\n      var level = list._level;\n      while (node && level > 0) {\n        node = node.array[(rawIndex >>> level) & MASK];\n        level -= SHIFT;\n      }\n      return node;\n    }\n  }\n\n  function setListBounds(list, begin, end) {\n    // Sanitize begin & end using this shorthand for ToInt32(argument)\n    // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n    if (begin !== undefined) {\n      begin = begin | 0;\n    }\n    if (end !== undefined) {\n      end = end | 0;\n    }\n    var owner = list.__ownerID || new OwnerID();\n    var oldOrigin = list._origin;\n    var oldCapacity = list._capacity;\n    var newOrigin = oldOrigin + begin;\n    var newCapacity = end === undefined ? oldCapacity : end < 0 ? oldCapacity + end : oldOrigin + end;\n    if (newOrigin === oldOrigin && newCapacity === oldCapacity) {\n      return list;\n    }\n\n    // If it's going to end after it starts, it's empty.\n    if (newOrigin >= newCapacity) {\n      return list.clear();\n    }\n\n    var newLevel = list._level;\n    var newRoot = list._root;\n\n    // New origin might need creating a higher root.\n    var offsetShift = 0;\n    while (newOrigin + offsetShift < 0) {\n      newRoot = new VNode(newRoot && newRoot.array.length ? [undefined, newRoot] : [], owner);\n      newLevel += SHIFT;\n      offsetShift += 1 << newLevel;\n    }\n    if (offsetShift) {\n      newOrigin += offsetShift;\n      oldOrigin += offsetShift;\n      newCapacity += offsetShift;\n      oldCapacity += offsetShift;\n    }\n\n    var oldTailOffset = getTailOffset(oldCapacity);\n    var newTailOffset = getTailOffset(newCapacity);\n\n    // New size might need creating a higher root.\n    while (newTailOffset >= 1 << (newLevel + SHIFT)) {\n      newRoot = new VNode(newRoot && newRoot.array.length ? [newRoot] : [], owner);\n      newLevel += SHIFT;\n    }\n\n    // Locate or create the new tail.\n    var oldTail = list._tail;\n    var newTail = newTailOffset < oldTailOffset ?\n      listNodeFor(list, newCapacity - 1) :\n      newTailOffset > oldTailOffset ? new VNode([], owner) : oldTail;\n\n    // Merge Tail into tree.\n    if (oldTail && newTailOffset > oldTailOffset && newOrigin < oldCapacity && oldTail.array.length) {\n      newRoot = editableVNode(newRoot, owner);\n      var node = newRoot;\n      for (var level = newLevel; level > SHIFT; level -= SHIFT) {\n        var idx = (oldTailOffset >>> level) & MASK;\n        node = node.array[idx] = editableVNode(node.array[idx], owner);\n      }\n      node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail;\n    }\n\n    // If the size has been reduced, there's a chance the tail needs to be trimmed.\n    if (newCapacity < oldCapacity) {\n      newTail = newTail && newTail.removeAfter(owner, 0, newCapacity);\n    }\n\n    // If the new origin is within the tail, then we do not need a root.\n    if (newOrigin >= newTailOffset) {\n      newOrigin -= newTailOffset;\n      newCapacity -= newTailOffset;\n      newLevel = SHIFT;\n      newRoot = null;\n      newTail = newTail && newTail.removeBefore(owner, 0, newOrigin);\n\n    // Otherwise, if the root has been trimmed, garbage collect.\n    } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) {\n      offsetShift = 0;\n\n      // Identify the new top root node of the subtree of the old root.\n      while (newRoot) {\n        var beginIndex = (newOrigin >>> newLevel) & MASK;\n        if (beginIndex !== (newTailOffset >>> newLevel) & MASK) {\n          break;\n        }\n        if (beginIndex) {\n          offsetShift += (1 << newLevel) * beginIndex;\n        }\n        newLevel -= SHIFT;\n        newRoot = newRoot.array[beginIndex];\n      }\n\n      // Trim the new sides of the new root.\n      if (newRoot && newOrigin > oldOrigin) {\n        newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift);\n      }\n      if (newRoot && newTailOffset < oldTailOffset) {\n        newRoot = newRoot.removeAfter(owner, newLevel, newTailOffset - offsetShift);\n      }\n      if (offsetShift) {\n        newOrigin -= offsetShift;\n        newCapacity -= offsetShift;\n      }\n    }\n\n    if (list.__ownerID) {\n      list.size = newCapacity - newOrigin;\n      list._origin = newOrigin;\n      list._capacity = newCapacity;\n      list._level = newLevel;\n      list._root = newRoot;\n      list._tail = newTail;\n      list.__hash = undefined;\n      list.__altered = true;\n      return list;\n    }\n    return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail);\n  }\n\n  function mergeIntoListWith(list, merger, iterables) {\n    var iters = [];\n    var maxSize = 0;\n    for (var ii = 0; ii < iterables.length; ii++) {\n      var value = iterables[ii];\n      var iter = IndexedIterable(value);\n      if (iter.size > maxSize) {\n        maxSize = iter.size;\n      }\n      if (!isIterable(value)) {\n        iter = iter.map(function(v ) {return fromJS(v)});\n      }\n      iters.push(iter);\n    }\n    if (maxSize > list.size) {\n      list = list.setSize(maxSize);\n    }\n    return mergeIntoCollectionWith(list, merger, iters);\n  }\n\n  function getTailOffset(size) {\n    return size < SIZE ? 0 : (((size - 1) >>> SHIFT) << SHIFT);\n  }\n\n  createClass(OrderedMap, Map);\n\n    // @pragma Construction\n\n    function OrderedMap(value) {\n      return value === null || value === undefined ? emptyOrderedMap() :\n        isOrderedMap(value) ? value :\n        emptyOrderedMap().withMutations(function(map ) {\n          var iter = KeyedIterable(value);\n          assertNotInfinite(iter.size);\n          iter.forEach(function(v, k)  {return map.set(k, v)});\n        });\n    }\n\n    OrderedMap.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    OrderedMap.prototype.toString = function() {\n      return this.__toString('OrderedMap {', '}');\n    };\n\n    // @pragma Access\n\n    OrderedMap.prototype.get = function(k, notSetValue) {\n      var index = this._map.get(k);\n      return index !== undefined ? this._list.get(index)[1] : notSetValue;\n    };\n\n    // @pragma Modification\n\n    OrderedMap.prototype.clear = function() {\n      if (this.size === 0) {\n        return this;\n      }\n      if (this.__ownerID) {\n        this.size = 0;\n        this._map.clear();\n        this._list.clear();\n        return this;\n      }\n      return emptyOrderedMap();\n    };\n\n    OrderedMap.prototype.set = function(k, v) {\n      return updateOrderedMap(this, k, v);\n    };\n\n    OrderedMap.prototype.remove = function(k) {\n      return updateOrderedMap(this, k, NOT_SET);\n    };\n\n    OrderedMap.prototype.wasAltered = function() {\n      return this._map.wasAltered() || this._list.wasAltered();\n    };\n\n    OrderedMap.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return this._list.__iterate(\n        function(entry ) {return entry && fn(entry[1], entry[0], this$0)},\n        reverse\n      );\n    };\n\n    OrderedMap.prototype.__iterator = function(type, reverse) {\n      return this._list.fromEntrySeq().__iterator(type, reverse);\n    };\n\n    OrderedMap.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      var newMap = this._map.__ensureOwner(ownerID);\n      var newList = this._list.__ensureOwner(ownerID);\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this._map = newMap;\n        this._list = newList;\n        return this;\n      }\n      return makeOrderedMap(newMap, newList, ownerID, this.__hash);\n    };\n\n\n  function isOrderedMap(maybeOrderedMap) {\n    return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap);\n  }\n\n  OrderedMap.isOrderedMap = isOrderedMap;\n\n  OrderedMap.prototype[IS_ORDERED_SENTINEL] = true;\n  OrderedMap.prototype[DELETE] = OrderedMap.prototype.remove;\n\n\n\n  function makeOrderedMap(map, list, ownerID, hash) {\n    var omap = Object.create(OrderedMap.prototype);\n    omap.size = map ? map.size : 0;\n    omap._map = map;\n    omap._list = list;\n    omap.__ownerID = ownerID;\n    omap.__hash = hash;\n    return omap;\n  }\n\n  var EMPTY_ORDERED_MAP;\n  function emptyOrderedMap() {\n    return EMPTY_ORDERED_MAP || (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList()));\n  }\n\n  function updateOrderedMap(omap, k, v) {\n    var map = omap._map;\n    var list = omap._list;\n    var i = map.get(k);\n    var has = i !== undefined;\n    var newMap;\n    var newList;\n    if (v === NOT_SET) { // removed\n      if (!has) {\n        return omap;\n      }\n      if (list.size >= SIZE && list.size >= map.size * 2) {\n        newList = list.filter(function(entry, idx)  {return entry !== undefined && i !== idx});\n        newMap = newList.toKeyedSeq().map(function(entry ) {return entry[0]}).flip().toMap();\n        if (omap.__ownerID) {\n          newMap.__ownerID = newList.__ownerID = omap.__ownerID;\n        }\n      } else {\n        newMap = map.remove(k);\n        newList = i === list.size - 1 ? list.pop() : list.set(i, undefined);\n      }\n    } else {\n      if (has) {\n        if (v === list.get(i)[1]) {\n          return omap;\n        }\n        newMap = map;\n        newList = list.set(i, [k, v]);\n      } else {\n        newMap = map.set(k, list.size);\n        newList = list.set(list.size, [k, v]);\n      }\n    }\n    if (omap.__ownerID) {\n      omap.size = newMap.size;\n      omap._map = newMap;\n      omap._list = newList;\n      omap.__hash = undefined;\n      return omap;\n    }\n    return makeOrderedMap(newMap, newList);\n  }\n\n  createClass(ToKeyedSequence, KeyedSeq);\n    function ToKeyedSequence(indexed, useKeys) {\n      this._iter = indexed;\n      this._useKeys = useKeys;\n      this.size = indexed.size;\n    }\n\n    ToKeyedSequence.prototype.get = function(key, notSetValue) {\n      return this._iter.get(key, notSetValue);\n    };\n\n    ToKeyedSequence.prototype.has = function(key) {\n      return this._iter.has(key);\n    };\n\n    ToKeyedSequence.prototype.valueSeq = function() {\n      return this._iter.valueSeq();\n    };\n\n    ToKeyedSequence.prototype.reverse = function() {var this$0 = this;\n      var reversedSequence = reverseFactory(this, true);\n      if (!this._useKeys) {\n        reversedSequence.valueSeq = function()  {return this$0._iter.toSeq().reverse()};\n      }\n      return reversedSequence;\n    };\n\n    ToKeyedSequence.prototype.map = function(mapper, context) {var this$0 = this;\n      var mappedSequence = mapFactory(this, mapper, context);\n      if (!this._useKeys) {\n        mappedSequence.valueSeq = function()  {return this$0._iter.toSeq().map(mapper, context)};\n      }\n      return mappedSequence;\n    };\n\n    ToKeyedSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      var ii;\n      return this._iter.__iterate(\n        this._useKeys ?\n          function(v, k)  {return fn(v, k, this$0)} :\n          ((ii = reverse ? resolveSize(this) : 0),\n            function(v ) {return fn(v, reverse ? --ii : ii++, this$0)}),\n        reverse\n      );\n    };\n\n    ToKeyedSequence.prototype.__iterator = function(type, reverse) {\n      if (this._useKeys) {\n        return this._iter.__iterator(type, reverse);\n      }\n      var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n      var ii = reverse ? resolveSize(this) : 0;\n      return new Iterator(function()  {\n        var step = iterator.next();\n        return step.done ? step :\n          iteratorValue(type, reverse ? --ii : ii++, step.value, step);\n      });\n    };\n\n  ToKeyedSequence.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n  createClass(ToIndexedSequence, IndexedSeq);\n    function ToIndexedSequence(iter) {\n      this._iter = iter;\n      this.size = iter.size;\n    }\n\n    ToIndexedSequence.prototype.includes = function(value) {\n      return this._iter.includes(value);\n    };\n\n    ToIndexedSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      var iterations = 0;\n      return this._iter.__iterate(function(v ) {return fn(v, iterations++, this$0)}, reverse);\n    };\n\n    ToIndexedSequence.prototype.__iterator = function(type, reverse) {\n      var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n      var iterations = 0;\n      return new Iterator(function()  {\n        var step = iterator.next();\n        return step.done ? step :\n          iteratorValue(type, iterations++, step.value, step)\n      });\n    };\n\n\n\n  createClass(ToSetSequence, SetSeq);\n    function ToSetSequence(iter) {\n      this._iter = iter;\n      this.size = iter.size;\n    }\n\n    ToSetSequence.prototype.has = function(key) {\n      return this._iter.includes(key);\n    };\n\n    ToSetSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return this._iter.__iterate(function(v ) {return fn(v, v, this$0)}, reverse);\n    };\n\n    ToSetSequence.prototype.__iterator = function(type, reverse) {\n      var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n      return new Iterator(function()  {\n        var step = iterator.next();\n        return step.done ? step :\n          iteratorValue(type, step.value, step.value, step);\n      });\n    };\n\n\n\n  createClass(FromEntriesSequence, KeyedSeq);\n    function FromEntriesSequence(entries) {\n      this._iter = entries;\n      this.size = entries.size;\n    }\n\n    FromEntriesSequence.prototype.entrySeq = function() {\n      return this._iter.toSeq();\n    };\n\n    FromEntriesSequence.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return this._iter.__iterate(function(entry ) {\n        // Check if entry exists first so array access doesn't throw for holes\n        // in the parent iteration.\n        if (entry) {\n          validateEntry(entry);\n          var indexedIterable = isIterable(entry);\n          return fn(\n            indexedIterable ? entry.get(1) : entry[1],\n            indexedIterable ? entry.get(0) : entry[0],\n            this$0\n          );\n        }\n      }, reverse);\n    };\n\n    FromEntriesSequence.prototype.__iterator = function(type, reverse) {\n      var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n      return new Iterator(function()  {\n        while (true) {\n          var step = iterator.next();\n          if (step.done) {\n            return step;\n          }\n          var entry = step.value;\n          // Check if entry exists first so array access doesn't throw for holes\n          // in the parent iteration.\n          if (entry) {\n            validateEntry(entry);\n            var indexedIterable = isIterable(entry);\n            return iteratorValue(\n              type,\n              indexedIterable ? entry.get(0) : entry[0],\n              indexedIterable ? entry.get(1) : entry[1],\n              step\n            );\n          }\n        }\n      });\n    };\n\n\n  ToIndexedSequence.prototype.cacheResult =\n  ToKeyedSequence.prototype.cacheResult =\n  ToSetSequence.prototype.cacheResult =\n  FromEntriesSequence.prototype.cacheResult =\n    cacheResultThrough;\n\n\n  function flipFactory(iterable) {\n    var flipSequence = makeSequence(iterable);\n    flipSequence._iter = iterable;\n    flipSequence.size = iterable.size;\n    flipSequence.flip = function()  {return iterable};\n    flipSequence.reverse = function () {\n      var reversedSequence = iterable.reverse.apply(this); // super.reverse()\n      reversedSequence.flip = function()  {return iterable.reverse()};\n      return reversedSequence;\n    };\n    flipSequence.has = function(key ) {return iterable.includes(key)};\n    flipSequence.includes = function(key ) {return iterable.has(key)};\n    flipSequence.cacheResult = cacheResultThrough;\n    flipSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n      return iterable.__iterate(function(v, k)  {return fn(k, v, this$0) !== false}, reverse);\n    }\n    flipSequence.__iteratorUncached = function(type, reverse) {\n      if (type === ITERATE_ENTRIES) {\n        var iterator = iterable.__iterator(type, reverse);\n        return new Iterator(function()  {\n          var step = iterator.next();\n          if (!step.done) {\n            var k = step.value[0];\n            step.value[0] = step.value[1];\n            step.value[1] = k;\n          }\n          return step;\n        });\n      }\n      return iterable.__iterator(\n        type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES,\n        reverse\n      );\n    }\n    return flipSequence;\n  }\n\n\n  function mapFactory(iterable, mapper, context) {\n    var mappedSequence = makeSequence(iterable);\n    mappedSequence.size = iterable.size;\n    mappedSequence.has = function(key ) {return iterable.has(key)};\n    mappedSequence.get = function(key, notSetValue)  {\n      var v = iterable.get(key, NOT_SET);\n      return v === NOT_SET ?\n        notSetValue :\n        mapper.call(context, v, key, iterable);\n    };\n    mappedSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n      return iterable.__iterate(\n        function(v, k, c)  {return fn(mapper.call(context, v, k, c), k, this$0) !== false},\n        reverse\n      );\n    }\n    mappedSequence.__iteratorUncached = function (type, reverse) {\n      var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n      return new Iterator(function()  {\n        var step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n        var entry = step.value;\n        var key = entry[0];\n        return iteratorValue(\n          type,\n          key,\n          mapper.call(context, entry[1], key, iterable),\n          step\n        );\n      });\n    }\n    return mappedSequence;\n  }\n\n\n  function reverseFactory(iterable, useKeys) {\n    var reversedSequence = makeSequence(iterable);\n    reversedSequence._iter = iterable;\n    reversedSequence.size = iterable.size;\n    reversedSequence.reverse = function()  {return iterable};\n    if (iterable.flip) {\n      reversedSequence.flip = function () {\n        var flipSequence = flipFactory(iterable);\n        flipSequence.reverse = function()  {return iterable.flip()};\n        return flipSequence;\n      };\n    }\n    reversedSequence.get = function(key, notSetValue) \n      {return iterable.get(useKeys ? key : -1 - key, notSetValue)};\n    reversedSequence.has = function(key )\n      {return iterable.has(useKeys ? key : -1 - key)};\n    reversedSequence.includes = function(value ) {return iterable.includes(value)};\n    reversedSequence.cacheResult = cacheResultThrough;\n    reversedSequence.__iterate = function (fn, reverse) {var this$0 = this;\n      return iterable.__iterate(function(v, k)  {return fn(v, k, this$0)}, !reverse);\n    };\n    reversedSequence.__iterator =\n      function(type, reverse)  {return iterable.__iterator(type, !reverse)};\n    return reversedSequence;\n  }\n\n\n  function filterFactory(iterable, predicate, context, useKeys) {\n    var filterSequence = makeSequence(iterable);\n    if (useKeys) {\n      filterSequence.has = function(key ) {\n        var v = iterable.get(key, NOT_SET);\n        return v !== NOT_SET && !!predicate.call(context, v, key, iterable);\n      };\n      filterSequence.get = function(key, notSetValue)  {\n        var v = iterable.get(key, NOT_SET);\n        return v !== NOT_SET && predicate.call(context, v, key, iterable) ?\n          v : notSetValue;\n      };\n    }\n    filterSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n      var iterations = 0;\n      iterable.__iterate(function(v, k, c)  {\n        if (predicate.call(context, v, k, c)) {\n          iterations++;\n          return fn(v, useKeys ? k : iterations - 1, this$0);\n        }\n      }, reverse);\n      return iterations;\n    };\n    filterSequence.__iteratorUncached = function (type, reverse) {\n      var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n      var iterations = 0;\n      return new Iterator(function()  {\n        while (true) {\n          var step = iterator.next();\n          if (step.done) {\n            return step;\n          }\n          var entry = step.value;\n          var key = entry[0];\n          var value = entry[1];\n          if (predicate.call(context, value, key, iterable)) {\n            return iteratorValue(type, useKeys ? key : iterations++, value, step);\n          }\n        }\n      });\n    }\n    return filterSequence;\n  }\n\n\n  function countByFactory(iterable, grouper, context) {\n    var groups = Map().asMutable();\n    iterable.__iterate(function(v, k)  {\n      groups.update(\n        grouper.call(context, v, k, iterable),\n        0,\n        function(a ) {return a + 1}\n      );\n    });\n    return groups.asImmutable();\n  }\n\n\n  function groupByFactory(iterable, grouper, context) {\n    var isKeyedIter = isKeyed(iterable);\n    var groups = (isOrdered(iterable) ? OrderedMap() : Map()).asMutable();\n    iterable.__iterate(function(v, k)  {\n      groups.update(\n        grouper.call(context, v, k, iterable),\n        function(a ) {return (a = a || [], a.push(isKeyedIter ? [k, v] : v), a)}\n      );\n    });\n    var coerce = iterableClass(iterable);\n    return groups.map(function(arr ) {return reify(iterable, coerce(arr))});\n  }\n\n\n  function sliceFactory(iterable, begin, end, useKeys) {\n    var originalSize = iterable.size;\n\n    // Sanitize begin & end using this shorthand for ToInt32(argument)\n    // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n    if (begin !== undefined) {\n      begin = begin | 0;\n    }\n    if (end !== undefined) {\n      if (end === Infinity) {\n        end = originalSize;\n      } else {\n        end = end | 0;\n      }\n    }\n\n    if (wholeSlice(begin, end, originalSize)) {\n      return iterable;\n    }\n\n    var resolvedBegin = resolveBegin(begin, originalSize);\n    var resolvedEnd = resolveEnd(end, originalSize);\n\n    // begin or end will be NaN if they were provided as negative numbers and\n    // this iterable's size is unknown. In that case, cache first so there is\n    // a known size and these do not resolve to NaN.\n    if (resolvedBegin !== resolvedBegin || resolvedEnd !== resolvedEnd) {\n      return sliceFactory(iterable.toSeq().cacheResult(), begin, end, useKeys);\n    }\n\n    // Note: resolvedEnd is undefined when the original sequence's length is\n    // unknown and this slice did not supply an end and should contain all\n    // elements after resolvedBegin.\n    // In that case, resolvedSize will be NaN and sliceSize will remain undefined.\n    var resolvedSize = resolvedEnd - resolvedBegin;\n    var sliceSize;\n    if (resolvedSize === resolvedSize) {\n      sliceSize = resolvedSize < 0 ? 0 : resolvedSize;\n    }\n\n    var sliceSeq = makeSequence(iterable);\n\n    // If iterable.size is undefined, the size of the realized sliceSeq is\n    // unknown at this point unless the number of items to slice is 0\n    sliceSeq.size = sliceSize === 0 ? sliceSize : iterable.size && sliceSize || undefined;\n\n    if (!useKeys && isSeq(iterable) && sliceSize >= 0) {\n      sliceSeq.get = function (index, notSetValue) {\n        index = wrapIndex(this, index);\n        return index >= 0 && index < sliceSize ?\n          iterable.get(index + resolvedBegin, notSetValue) :\n          notSetValue;\n      }\n    }\n\n    sliceSeq.__iterateUncached = function(fn, reverse) {var this$0 = this;\n      if (sliceSize === 0) {\n        return 0;\n      }\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var skipped = 0;\n      var isSkipping = true;\n      var iterations = 0;\n      iterable.__iterate(function(v, k)  {\n        if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) {\n          iterations++;\n          return fn(v, useKeys ? k : iterations - 1, this$0) !== false &&\n                 iterations !== sliceSize;\n        }\n      });\n      return iterations;\n    };\n\n    sliceSeq.__iteratorUncached = function(type, reverse) {\n      if (sliceSize !== 0 && reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      // Don't bother instantiating parent iterator if taking 0.\n      var iterator = sliceSize !== 0 && iterable.__iterator(type, reverse);\n      var skipped = 0;\n      var iterations = 0;\n      return new Iterator(function()  {\n        while (skipped++ < resolvedBegin) {\n          iterator.next();\n        }\n        if (++iterations > sliceSize) {\n          return iteratorDone();\n        }\n        var step = iterator.next();\n        if (useKeys || type === ITERATE_VALUES) {\n          return step;\n        } else if (type === ITERATE_KEYS) {\n          return iteratorValue(type, iterations - 1, undefined, step);\n        } else {\n          return iteratorValue(type, iterations - 1, step.value[1], step);\n        }\n      });\n    }\n\n    return sliceSeq;\n  }\n\n\n  function takeWhileFactory(iterable, predicate, context) {\n    var takeSequence = makeSequence(iterable);\n    takeSequence.__iterateUncached = function(fn, reverse) {var this$0 = this;\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var iterations = 0;\n      iterable.__iterate(function(v, k, c) \n        {return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$0)}\n      );\n      return iterations;\n    };\n    takeSequence.__iteratorUncached = function(type, reverse) {var this$0 = this;\n      if (reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n      var iterating = true;\n      return new Iterator(function()  {\n        if (!iterating) {\n          return iteratorDone();\n        }\n        var step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n        var entry = step.value;\n        var k = entry[0];\n        var v = entry[1];\n        if (!predicate.call(context, v, k, this$0)) {\n          iterating = false;\n          return iteratorDone();\n        }\n        return type === ITERATE_ENTRIES ? step :\n          iteratorValue(type, k, v, step);\n      });\n    };\n    return takeSequence;\n  }\n\n\n  function skipWhileFactory(iterable, predicate, context, useKeys) {\n    var skipSequence = makeSequence(iterable);\n    skipSequence.__iterateUncached = function (fn, reverse) {var this$0 = this;\n      if (reverse) {\n        return this.cacheResult().__iterate(fn, reverse);\n      }\n      var isSkipping = true;\n      var iterations = 0;\n      iterable.__iterate(function(v, k, c)  {\n        if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) {\n          iterations++;\n          return fn(v, useKeys ? k : iterations - 1, this$0);\n        }\n      });\n      return iterations;\n    };\n    skipSequence.__iteratorUncached = function(type, reverse) {var this$0 = this;\n      if (reverse) {\n        return this.cacheResult().__iterator(type, reverse);\n      }\n      var iterator = iterable.__iterator(ITERATE_ENTRIES, reverse);\n      var skipping = true;\n      var iterations = 0;\n      return new Iterator(function()  {\n        var step, k, v;\n        do {\n          step = iterator.next();\n          if (step.done) {\n            if (useKeys || type === ITERATE_VALUES) {\n              return step;\n            } else if (type === ITERATE_KEYS) {\n              return iteratorValue(type, iterations++, undefined, step);\n            } else {\n              return iteratorValue(type, iterations++, step.value[1], step);\n            }\n          }\n          var entry = step.value;\n          k = entry[0];\n          v = entry[1];\n          skipping && (skipping = predicate.call(context, v, k, this$0));\n        } while (skipping);\n        return type === ITERATE_ENTRIES ? step :\n          iteratorValue(type, k, v, step);\n      });\n    };\n    return skipSequence;\n  }\n\n\n  function concatFactory(iterable, values) {\n    var isKeyedIterable = isKeyed(iterable);\n    var iters = [iterable].concat(values).map(function(v ) {\n      if (!isIterable(v)) {\n        v = isKeyedIterable ?\n          keyedSeqFromValue(v) :\n          indexedSeqFromValue(Array.isArray(v) ? v : [v]);\n      } else if (isKeyedIterable) {\n        v = KeyedIterable(v);\n      }\n      return v;\n    }).filter(function(v ) {return v.size !== 0});\n\n    if (iters.length === 0) {\n      return iterable;\n    }\n\n    if (iters.length === 1) {\n      var singleton = iters[0];\n      if (singleton === iterable ||\n          isKeyedIterable && isKeyed(singleton) ||\n          isIndexed(iterable) && isIndexed(singleton)) {\n        return singleton;\n      }\n    }\n\n    var concatSeq = new ArraySeq(iters);\n    if (isKeyedIterable) {\n      concatSeq = concatSeq.toKeyedSeq();\n    } else if (!isIndexed(iterable)) {\n      concatSeq = concatSeq.toSetSeq();\n    }\n    concatSeq = concatSeq.flatten(true);\n    concatSeq.size = iters.reduce(\n      function(sum, seq)  {\n        if (sum !== undefined) {\n          var size = seq.size;\n          if (size !== undefined) {\n            return sum + size;\n          }\n        }\n      },\n      0\n    );\n    return concatSeq;\n  }\n\n\n  function flattenFactory(iterable, depth, useKeys) {\n    var flatSequence = makeSequence(iterable);\n    flatSequence.__iterateUncached = function(fn, reverse) {\n      var iterations = 0;\n      var stopped = false;\n      function flatDeep(iter, currentDepth) {var this$0 = this;\n        iter.__iterate(function(v, k)  {\n          if ((!depth || currentDepth < depth) && isIterable(v)) {\n            flatDeep(v, currentDepth + 1);\n          } else if (fn(v, useKeys ? k : iterations++, this$0) === false) {\n            stopped = true;\n          }\n          return !stopped;\n        }, reverse);\n      }\n      flatDeep(iterable, 0);\n      return iterations;\n    }\n    flatSequence.__iteratorUncached = function(type, reverse) {\n      var iterator = iterable.__iterator(type, reverse);\n      var stack = [];\n      var iterations = 0;\n      return new Iterator(function()  {\n        while (iterator) {\n          var step = iterator.next();\n          if (step.done !== false) {\n            iterator = stack.pop();\n            continue;\n          }\n          var v = step.value;\n          if (type === ITERATE_ENTRIES) {\n            v = v[1];\n          }\n          if ((!depth || stack.length < depth) && isIterable(v)) {\n            stack.push(iterator);\n            iterator = v.__iterator(type, reverse);\n          } else {\n            return useKeys ? step : iteratorValue(type, iterations++, v, step);\n          }\n        }\n        return iteratorDone();\n      });\n    }\n    return flatSequence;\n  }\n\n\n  function flatMapFactory(iterable, mapper, context) {\n    var coerce = iterableClass(iterable);\n    return iterable.toSeq().map(\n      function(v, k)  {return coerce(mapper.call(context, v, k, iterable))}\n    ).flatten(true);\n  }\n\n\n  function interposeFactory(iterable, separator) {\n    var interposedSequence = makeSequence(iterable);\n    interposedSequence.size = iterable.size && iterable.size * 2 -1;\n    interposedSequence.__iterateUncached = function(fn, reverse) {var this$0 = this;\n      var iterations = 0;\n      iterable.__iterate(function(v, k) \n        {return (!iterations || fn(separator, iterations++, this$0) !== false) &&\n        fn(v, iterations++, this$0) !== false},\n        reverse\n      );\n      return iterations;\n    };\n    interposedSequence.__iteratorUncached = function(type, reverse) {\n      var iterator = iterable.__iterator(ITERATE_VALUES, reverse);\n      var iterations = 0;\n      var step;\n      return new Iterator(function()  {\n        if (!step || iterations % 2) {\n          step = iterator.next();\n          if (step.done) {\n            return step;\n          }\n        }\n        return iterations % 2 ?\n          iteratorValue(type, iterations++, separator) :\n          iteratorValue(type, iterations++, step.value, step);\n      });\n    };\n    return interposedSequence;\n  }\n\n\n  function sortFactory(iterable, comparator, mapper) {\n    if (!comparator) {\n      comparator = defaultComparator;\n    }\n    var isKeyedIterable = isKeyed(iterable);\n    var index = 0;\n    var entries = iterable.toSeq().map(\n      function(v, k)  {return [k, v, index++, mapper ? mapper(v, k, iterable) : v]}\n    ).toArray();\n    entries.sort(function(a, b)  {return comparator(a[3], b[3]) || a[2] - b[2]}).forEach(\n      isKeyedIterable ?\n      function(v, i)  { entries[i].length = 2; } :\n      function(v, i)  { entries[i] = v[1]; }\n    );\n    return isKeyedIterable ? KeyedSeq(entries) :\n      isIndexed(iterable) ? IndexedSeq(entries) :\n      SetSeq(entries);\n  }\n\n\n  function maxFactory(iterable, comparator, mapper) {\n    if (!comparator) {\n      comparator = defaultComparator;\n    }\n    if (mapper) {\n      var entry = iterable.toSeq()\n        .map(function(v, k)  {return [v, mapper(v, k, iterable)]})\n        .reduce(function(a, b)  {return maxCompare(comparator, a[1], b[1]) ? b : a});\n      return entry && entry[0];\n    } else {\n      return iterable.reduce(function(a, b)  {return maxCompare(comparator, a, b) ? b : a});\n    }\n  }\n\n  function maxCompare(comparator, a, b) {\n    var comp = comparator(b, a);\n    // b is considered the new max if the comparator declares them equal, but\n    // they are not equal and b is in fact a nullish value.\n    return (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) || comp > 0;\n  }\n\n\n  function zipWithFactory(keyIter, zipper, iters) {\n    var zipSequence = makeSequence(keyIter);\n    zipSequence.size = new ArraySeq(iters).map(function(i ) {return i.size}).min();\n    // Note: this a generic base implementation of __iterate in terms of\n    // __iterator which may be more generically useful in the future.\n    zipSequence.__iterate = function(fn, reverse) {\n      /* generic:\n      var iterator = this.__iterator(ITERATE_ENTRIES, reverse);\n      var step;\n      var iterations = 0;\n      while (!(step = iterator.next()).done) {\n        iterations++;\n        if (fn(step.value[1], step.value[0], this) === false) {\n          break;\n        }\n      }\n      return iterations;\n      */\n      // indexed:\n      var iterator = this.__iterator(ITERATE_VALUES, reverse);\n      var step;\n      var iterations = 0;\n      while (!(step = iterator.next()).done) {\n        if (fn(step.value, iterations++, this) === false) {\n          break;\n        }\n      }\n      return iterations;\n    };\n    zipSequence.__iteratorUncached = function(type, reverse) {\n      var iterators = iters.map(function(i )\n        {return (i = Iterable(i), getIterator(reverse ? i.reverse() : i))}\n      );\n      var iterations = 0;\n      var isDone = false;\n      return new Iterator(function()  {\n        var steps;\n        if (!isDone) {\n          steps = iterators.map(function(i ) {return i.next()});\n          isDone = steps.some(function(s ) {return s.done});\n        }\n        if (isDone) {\n          return iteratorDone();\n        }\n        return iteratorValue(\n          type,\n          iterations++,\n          zipper.apply(null, steps.map(function(s ) {return s.value}))\n        );\n      });\n    };\n    return zipSequence\n  }\n\n\n  // #pragma Helper Functions\n\n  function reify(iter, seq) {\n    return isSeq(iter) ? seq : iter.constructor(seq);\n  }\n\n  function validateEntry(entry) {\n    if (entry !== Object(entry)) {\n      throw new TypeError('Expected [K, V] tuple: ' + entry);\n    }\n  }\n\n  function resolveSize(iter) {\n    assertNotInfinite(iter.size);\n    return ensureSize(iter);\n  }\n\n  function iterableClass(iterable) {\n    return isKeyed(iterable) ? KeyedIterable :\n      isIndexed(iterable) ? IndexedIterable :\n      SetIterable;\n  }\n\n  function makeSequence(iterable) {\n    return Object.create(\n      (\n        isKeyed(iterable) ? KeyedSeq :\n        isIndexed(iterable) ? IndexedSeq :\n        SetSeq\n      ).prototype\n    );\n  }\n\n  function cacheResultThrough() {\n    if (this._iter.cacheResult) {\n      this._iter.cacheResult();\n      this.size = this._iter.size;\n      return this;\n    } else {\n      return Seq.prototype.cacheResult.call(this);\n    }\n  }\n\n  function defaultComparator(a, b) {\n    return a > b ? 1 : a < b ? -1 : 0;\n  }\n\n  function forceIterator(keyPath) {\n    var iter = getIterator(keyPath);\n    if (!iter) {\n      // Array might not be iterable in this environment, so we need a fallback\n      // to our wrapped type.\n      if (!isArrayLike(keyPath)) {\n        throw new TypeError('Expected iterable or array-like: ' + keyPath);\n      }\n      iter = getIterator(Iterable(keyPath));\n    }\n    return iter;\n  }\n\n  createClass(Record, KeyedCollection);\n\n    function Record(defaultValues, name) {\n      var hasInitialized;\n\n      var RecordType = function Record(values) {\n        if (values instanceof RecordType) {\n          return values;\n        }\n        if (!(this instanceof RecordType)) {\n          return new RecordType(values);\n        }\n        if (!hasInitialized) {\n          hasInitialized = true;\n          var keys = Object.keys(defaultValues);\n          setProps(RecordTypePrototype, keys);\n          RecordTypePrototype.size = keys.length;\n          RecordTypePrototype._name = name;\n          RecordTypePrototype._keys = keys;\n          RecordTypePrototype._defaultValues = defaultValues;\n        }\n        this._map = Map(values);\n      };\n\n      var RecordTypePrototype = RecordType.prototype = Object.create(RecordPrototype);\n      RecordTypePrototype.constructor = RecordType;\n\n      return RecordType;\n    }\n\n    Record.prototype.toString = function() {\n      return this.__toString(recordName(this) + ' {', '}');\n    };\n\n    // @pragma Access\n\n    Record.prototype.has = function(k) {\n      return this._defaultValues.hasOwnProperty(k);\n    };\n\n    Record.prototype.get = function(k, notSetValue) {\n      if (!this.has(k)) {\n        return notSetValue;\n      }\n      var defaultVal = this._defaultValues[k];\n      return this._map ? this._map.get(k, defaultVal) : defaultVal;\n    };\n\n    // @pragma Modification\n\n    Record.prototype.clear = function() {\n      if (this.__ownerID) {\n        this._map && this._map.clear();\n        return this;\n      }\n      var RecordType = this.constructor;\n      return RecordType._empty || (RecordType._empty = makeRecord(this, emptyMap()));\n    };\n\n    Record.prototype.set = function(k, v) {\n      if (!this.has(k)) {\n        throw new Error('Cannot set unknown key \"' + k + '\" on ' + recordName(this));\n      }\n      if (this._map && !this._map.has(k)) {\n        var defaultVal = this._defaultValues[k];\n        if (v === defaultVal) {\n          return this;\n        }\n      }\n      var newMap = this._map && this._map.set(k, v);\n      if (this.__ownerID || newMap === this._map) {\n        return this;\n      }\n      return makeRecord(this, newMap);\n    };\n\n    Record.prototype.remove = function(k) {\n      if (!this.has(k)) {\n        return this;\n      }\n      var newMap = this._map && this._map.remove(k);\n      if (this.__ownerID || newMap === this._map) {\n        return this;\n      }\n      return makeRecord(this, newMap);\n    };\n\n    Record.prototype.wasAltered = function() {\n      return this._map.wasAltered();\n    };\n\n    Record.prototype.__iterator = function(type, reverse) {var this$0 = this;\n      return KeyedIterable(this._defaultValues).map(function(_, k)  {return this$0.get(k)}).__iterator(type, reverse);\n    };\n\n    Record.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return KeyedIterable(this._defaultValues).map(function(_, k)  {return this$0.get(k)}).__iterate(fn, reverse);\n    };\n\n    Record.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      var newMap = this._map && this._map.__ensureOwner(ownerID);\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this._map = newMap;\n        return this;\n      }\n      return makeRecord(this, newMap, ownerID);\n    };\n\n\n  var RecordPrototype = Record.prototype;\n  RecordPrototype[DELETE] = RecordPrototype.remove;\n  RecordPrototype.deleteIn =\n  RecordPrototype.removeIn = MapPrototype.removeIn;\n  RecordPrototype.merge = MapPrototype.merge;\n  RecordPrototype.mergeWith = MapPrototype.mergeWith;\n  RecordPrototype.mergeIn = MapPrototype.mergeIn;\n  RecordPrototype.mergeDeep = MapPrototype.mergeDeep;\n  RecordPrototype.mergeDeepWith = MapPrototype.mergeDeepWith;\n  RecordPrototype.mergeDeepIn = MapPrototype.mergeDeepIn;\n  RecordPrototype.setIn = MapPrototype.setIn;\n  RecordPrototype.update = MapPrototype.update;\n  RecordPrototype.updateIn = MapPrototype.updateIn;\n  RecordPrototype.withMutations = MapPrototype.withMutations;\n  RecordPrototype.asMutable = MapPrototype.asMutable;\n  RecordPrototype.asImmutable = MapPrototype.asImmutable;\n\n\n  function makeRecord(likeRecord, map, ownerID) {\n    var record = Object.create(Object.getPrototypeOf(likeRecord));\n    record._map = map;\n    record.__ownerID = ownerID;\n    return record;\n  }\n\n  function recordName(record) {\n    return record._name || record.constructor.name || 'Record';\n  }\n\n  function setProps(prototype, names) {\n    try {\n      names.forEach(setProp.bind(undefined, prototype));\n    } catch (error) {\n      // Object.defineProperty failed. Probably IE8.\n    }\n  }\n\n  function setProp(prototype, name) {\n    Object.defineProperty(prototype, name, {\n      get: function() {\n        return this.get(name);\n      },\n      set: function(value) {\n        invariant(this.__ownerID, 'Cannot set on an immutable record.');\n        this.set(name, value);\n      }\n    });\n  }\n\n  createClass(Set, SetCollection);\n\n    // @pragma Construction\n\n    function Set(value) {\n      return value === null || value === undefined ? emptySet() :\n        isSet(value) && !isOrdered(value) ? value :\n        emptySet().withMutations(function(set ) {\n          var iter = SetIterable(value);\n          assertNotInfinite(iter.size);\n          iter.forEach(function(v ) {return set.add(v)});\n        });\n    }\n\n    Set.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    Set.fromKeys = function(value) {\n      return this(KeyedIterable(value).keySeq());\n    };\n\n    Set.prototype.toString = function() {\n      return this.__toString('Set {', '}');\n    };\n\n    // @pragma Access\n\n    Set.prototype.has = function(value) {\n      return this._map.has(value);\n    };\n\n    // @pragma Modification\n\n    Set.prototype.add = function(value) {\n      return updateSet(this, this._map.set(value, true));\n    };\n\n    Set.prototype.remove = function(value) {\n      return updateSet(this, this._map.remove(value));\n    };\n\n    Set.prototype.clear = function() {\n      return updateSet(this, this._map.clear());\n    };\n\n    // @pragma Composition\n\n    Set.prototype.union = function() {var iters = SLICE$0.call(arguments, 0);\n      iters = iters.filter(function(x ) {return x.size !== 0});\n      if (iters.length === 0) {\n        return this;\n      }\n      if (this.size === 0 && !this.__ownerID && iters.length === 1) {\n        return this.constructor(iters[0]);\n      }\n      return this.withMutations(function(set ) {\n        for (var ii = 0; ii < iters.length; ii++) {\n          SetIterable(iters[ii]).forEach(function(value ) {return set.add(value)});\n        }\n      });\n    };\n\n    Set.prototype.intersect = function() {var iters = SLICE$0.call(arguments, 0);\n      if (iters.length === 0) {\n        return this;\n      }\n      iters = iters.map(function(iter ) {return SetIterable(iter)});\n      var originalSet = this;\n      return this.withMutations(function(set ) {\n        originalSet.forEach(function(value ) {\n          if (!iters.every(function(iter ) {return iter.includes(value)})) {\n            set.remove(value);\n          }\n        });\n      });\n    };\n\n    Set.prototype.subtract = function() {var iters = SLICE$0.call(arguments, 0);\n      if (iters.length === 0) {\n        return this;\n      }\n      iters = iters.map(function(iter ) {return SetIterable(iter)});\n      var originalSet = this;\n      return this.withMutations(function(set ) {\n        originalSet.forEach(function(value ) {\n          if (iters.some(function(iter ) {return iter.includes(value)})) {\n            set.remove(value);\n          }\n        });\n      });\n    };\n\n    Set.prototype.merge = function() {\n      return this.union.apply(this, arguments);\n    };\n\n    Set.prototype.mergeWith = function(merger) {var iters = SLICE$0.call(arguments, 1);\n      return this.union.apply(this, iters);\n    };\n\n    Set.prototype.sort = function(comparator) {\n      // Late binding\n      return OrderedSet(sortFactory(this, comparator));\n    };\n\n    Set.prototype.sortBy = function(mapper, comparator) {\n      // Late binding\n      return OrderedSet(sortFactory(this, comparator, mapper));\n    };\n\n    Set.prototype.wasAltered = function() {\n      return this._map.wasAltered();\n    };\n\n    Set.prototype.__iterate = function(fn, reverse) {var this$0 = this;\n      return this._map.__iterate(function(_, k)  {return fn(k, k, this$0)}, reverse);\n    };\n\n    Set.prototype.__iterator = function(type, reverse) {\n      return this._map.map(function(_, k)  {return k}).__iterator(type, reverse);\n    };\n\n    Set.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      var newMap = this._map.__ensureOwner(ownerID);\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this._map = newMap;\n        return this;\n      }\n      return this.__make(newMap, ownerID);\n    };\n\n\n  function isSet(maybeSet) {\n    return !!(maybeSet && maybeSet[IS_SET_SENTINEL]);\n  }\n\n  Set.isSet = isSet;\n\n  var IS_SET_SENTINEL = '@@__IMMUTABLE_SET__@@';\n\n  var SetPrototype = Set.prototype;\n  SetPrototype[IS_SET_SENTINEL] = true;\n  SetPrototype[DELETE] = SetPrototype.remove;\n  SetPrototype.mergeDeep = SetPrototype.merge;\n  SetPrototype.mergeDeepWith = SetPrototype.mergeWith;\n  SetPrototype.withMutations = MapPrototype.withMutations;\n  SetPrototype.asMutable = MapPrototype.asMutable;\n  SetPrototype.asImmutable = MapPrototype.asImmutable;\n\n  SetPrototype.__empty = emptySet;\n  SetPrototype.__make = makeSet;\n\n  function updateSet(set, newMap) {\n    if (set.__ownerID) {\n      set.size = newMap.size;\n      set._map = newMap;\n      return set;\n    }\n    return newMap === set._map ? set :\n      newMap.size === 0 ? set.__empty() :\n      set.__make(newMap);\n  }\n\n  function makeSet(map, ownerID) {\n    var set = Object.create(SetPrototype);\n    set.size = map ? map.size : 0;\n    set._map = map;\n    set.__ownerID = ownerID;\n    return set;\n  }\n\n  var EMPTY_SET;\n  function emptySet() {\n    return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap()));\n  }\n\n  createClass(OrderedSet, Set);\n\n    // @pragma Construction\n\n    function OrderedSet(value) {\n      return value === null || value === undefined ? emptyOrderedSet() :\n        isOrderedSet(value) ? value :\n        emptyOrderedSet().withMutations(function(set ) {\n          var iter = SetIterable(value);\n          assertNotInfinite(iter.size);\n          iter.forEach(function(v ) {return set.add(v)});\n        });\n    }\n\n    OrderedSet.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    OrderedSet.fromKeys = function(value) {\n      return this(KeyedIterable(value).keySeq());\n    };\n\n    OrderedSet.prototype.toString = function() {\n      return this.__toString('OrderedSet {', '}');\n    };\n\n\n  function isOrderedSet(maybeOrderedSet) {\n    return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet);\n  }\n\n  OrderedSet.isOrderedSet = isOrderedSet;\n\n  var OrderedSetPrototype = OrderedSet.prototype;\n  OrderedSetPrototype[IS_ORDERED_SENTINEL] = true;\n\n  OrderedSetPrototype.__empty = emptyOrderedSet;\n  OrderedSetPrototype.__make = makeOrderedSet;\n\n  function makeOrderedSet(map, ownerID) {\n    var set = Object.create(OrderedSetPrototype);\n    set.size = map ? map.size : 0;\n    set._map = map;\n    set.__ownerID = ownerID;\n    return set;\n  }\n\n  var EMPTY_ORDERED_SET;\n  function emptyOrderedSet() {\n    return EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap()));\n  }\n\n  createClass(Stack, IndexedCollection);\n\n    // @pragma Construction\n\n    function Stack(value) {\n      return value === null || value === undefined ? emptyStack() :\n        isStack(value) ? value :\n        emptyStack().unshiftAll(value);\n    }\n\n    Stack.of = function(/*...values*/) {\n      return this(arguments);\n    };\n\n    Stack.prototype.toString = function() {\n      return this.__toString('Stack [', ']');\n    };\n\n    // @pragma Access\n\n    Stack.prototype.get = function(index, notSetValue) {\n      var head = this._head;\n      index = wrapIndex(this, index);\n      while (head && index--) {\n        head = head.next;\n      }\n      return head ? head.value : notSetValue;\n    };\n\n    Stack.prototype.peek = function() {\n      return this._head && this._head.value;\n    };\n\n    // @pragma Modification\n\n    Stack.prototype.push = function(/*...values*/) {\n      if (arguments.length === 0) {\n        return this;\n      }\n      var newSize = this.size + arguments.length;\n      var head = this._head;\n      for (var ii = arguments.length - 1; ii >= 0; ii--) {\n        head = {\n          value: arguments[ii],\n          next: head\n        };\n      }\n      if (this.__ownerID) {\n        this.size = newSize;\n        this._head = head;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return makeStack(newSize, head);\n    };\n\n    Stack.prototype.pushAll = function(iter) {\n      iter = IndexedIterable(iter);\n      if (iter.size === 0) {\n        return this;\n      }\n      assertNotInfinite(iter.size);\n      var newSize = this.size;\n      var head = this._head;\n      iter.reverse().forEach(function(value ) {\n        newSize++;\n        head = {\n          value: value,\n          next: head\n        };\n      });\n      if (this.__ownerID) {\n        this.size = newSize;\n        this._head = head;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return makeStack(newSize, head);\n    };\n\n    Stack.prototype.pop = function() {\n      return this.slice(1);\n    };\n\n    Stack.prototype.unshift = function(/*...values*/) {\n      return this.push.apply(this, arguments);\n    };\n\n    Stack.prototype.unshiftAll = function(iter) {\n      return this.pushAll(iter);\n    };\n\n    Stack.prototype.shift = function() {\n      return this.pop.apply(this, arguments);\n    };\n\n    Stack.prototype.clear = function() {\n      if (this.size === 0) {\n        return this;\n      }\n      if (this.__ownerID) {\n        this.size = 0;\n        this._head = undefined;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return emptyStack();\n    };\n\n    Stack.prototype.slice = function(begin, end) {\n      if (wholeSlice(begin, end, this.size)) {\n        return this;\n      }\n      var resolvedBegin = resolveBegin(begin, this.size);\n      var resolvedEnd = resolveEnd(end, this.size);\n      if (resolvedEnd !== this.size) {\n        // super.slice(begin, end);\n        return IndexedCollection.prototype.slice.call(this, begin, end);\n      }\n      var newSize = this.size - resolvedBegin;\n      var head = this._head;\n      while (resolvedBegin--) {\n        head = head.next;\n      }\n      if (this.__ownerID) {\n        this.size = newSize;\n        this._head = head;\n        this.__hash = undefined;\n        this.__altered = true;\n        return this;\n      }\n      return makeStack(newSize, head);\n    };\n\n    // @pragma Mutability\n\n    Stack.prototype.__ensureOwner = function(ownerID) {\n      if (ownerID === this.__ownerID) {\n        return this;\n      }\n      if (!ownerID) {\n        this.__ownerID = ownerID;\n        this.__altered = false;\n        return this;\n      }\n      return makeStack(this.size, this._head, ownerID, this.__hash);\n    };\n\n    // @pragma Iteration\n\n    Stack.prototype.__iterate = function(fn, reverse) {\n      if (reverse) {\n        return this.reverse().__iterate(fn);\n      }\n      var iterations = 0;\n      var node = this._head;\n      while (node) {\n        if (fn(node.value, iterations++, this) === false) {\n          break;\n        }\n        node = node.next;\n      }\n      return iterations;\n    };\n\n    Stack.prototype.__iterator = function(type, reverse) {\n      if (reverse) {\n        return this.reverse().__iterator(type);\n      }\n      var iterations = 0;\n      var node = this._head;\n      return new Iterator(function()  {\n        if (node) {\n          var value = node.value;\n          node = node.next;\n          return iteratorValue(type, iterations++, value);\n        }\n        return iteratorDone();\n      });\n    };\n\n\n  function isStack(maybeStack) {\n    return !!(maybeStack && maybeStack[IS_STACK_SENTINEL]);\n  }\n\n  Stack.isStack = isStack;\n\n  var IS_STACK_SENTINEL = '@@__IMMUTABLE_STACK__@@';\n\n  var StackPrototype = Stack.prototype;\n  StackPrototype[IS_STACK_SENTINEL] = true;\n  StackPrototype.withMutations = MapPrototype.withMutations;\n  StackPrototype.asMutable = MapPrototype.asMutable;\n  StackPrototype.asImmutable = MapPrototype.asImmutable;\n  StackPrototype.wasAltered = MapPrototype.wasAltered;\n\n\n  function makeStack(size, head, ownerID, hash) {\n    var map = Object.create(StackPrototype);\n    map.size = size;\n    map._head = head;\n    map.__ownerID = ownerID;\n    map.__hash = hash;\n    map.__altered = false;\n    return map;\n  }\n\n  var EMPTY_STACK;\n  function emptyStack() {\n    return EMPTY_STACK || (EMPTY_STACK = makeStack(0));\n  }\n\n  /**\n   * Contributes additional methods to a constructor\n   */\n  function mixin(ctor, methods) {\n    var keyCopier = function(key ) { ctor.prototype[key] = methods[key]; };\n    Object.keys(methods).forEach(keyCopier);\n    Object.getOwnPropertySymbols &&\n      Object.getOwnPropertySymbols(methods).forEach(keyCopier);\n    return ctor;\n  }\n\n  function isProtoKey(key) {\n    return (\n      typeof key === 'string' && (key === '__proto__' || key === 'constructor')\n    );\n  }\n\n  Iterable.Iterator = Iterator;\n\n  mixin(Iterable, {\n\n    // ### Conversion to other types\n\n    toArray: function() {\n      assertNotInfinite(this.size);\n      var array = new Array(this.size || 0);\n      this.valueSeq().__iterate(function(v, i)  { array[i] = v; });\n      return array;\n    },\n\n    toIndexedSeq: function() {\n      return new ToIndexedSequence(this);\n    },\n\n    toJS: function() {\n      return this.toSeq().map(\n        function(value ) {return value && typeof value.toJS === 'function' ? value.toJS() : value}\n      ).__toJS();\n    },\n\n    toJSON: function() {\n      return this.toSeq().map(\n        function(value ) {return value && typeof value.toJSON === 'function' ? value.toJSON() : value}\n      ).__toJS();\n    },\n\n    toKeyedSeq: function() {\n      return new ToKeyedSequence(this, true);\n    },\n\n    toMap: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return Map(this.toKeyedSeq());\n    },\n\n    toObject: function() {\n      assertNotInfinite(this.size);\n      var object = {};\n      this.__iterate(function(v, k)  {\n        if (isProtoKey(k)) {\n          return;\n        }\n        \n        object[k] = v;\n      });\n      return object;\n    },\n\n    toOrderedMap: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return OrderedMap(this.toKeyedSeq());\n    },\n\n    toOrderedSet: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return OrderedSet(isKeyed(this) ? this.valueSeq() : this);\n    },\n\n    toSet: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return Set(isKeyed(this) ? this.valueSeq() : this);\n    },\n\n    toSetSeq: function() {\n      return new ToSetSequence(this);\n    },\n\n    toSeq: function() {\n      return isIndexed(this) ? this.toIndexedSeq() :\n        isKeyed(this) ? this.toKeyedSeq() :\n        this.toSetSeq();\n    },\n\n    toStack: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return Stack(isKeyed(this) ? this.valueSeq() : this);\n    },\n\n    toList: function() {\n      // Use Late Binding here to solve the circular dependency.\n      return List(isKeyed(this) ? this.valueSeq() : this);\n    },\n\n\n    // ### Common JavaScript methods and properties\n\n    toString: function() {\n      return '[Iterable]';\n    },\n\n    __toString: function(head, tail) {\n      if (this.size === 0) {\n        return head + tail;\n      }\n      return head + ' ' + this.toSeq().map(this.__toStringMapper).join(', ') + ' ' + tail;\n    },\n\n\n    // ### ES6 Collection methods (ES6 Array and Map)\n\n    concat: function() {var values = SLICE$0.call(arguments, 0);\n      return reify(this, concatFactory(this, values));\n    },\n\n    includes: function(searchValue) {\n      return this.some(function(value ) {return is(value, searchValue)});\n    },\n\n    entries: function() {\n      return this.__iterator(ITERATE_ENTRIES);\n    },\n\n    every: function(predicate, context) {\n      assertNotInfinite(this.size);\n      var returnValue = true;\n      this.__iterate(function(v, k, c)  {\n        if (!predicate.call(context, v, k, c)) {\n          returnValue = false;\n          return false;\n        }\n      });\n      return returnValue;\n    },\n\n    filter: function(predicate, context) {\n      return reify(this, filterFactory(this, predicate, context, true));\n    },\n\n    find: function(predicate, context, notSetValue) {\n      var entry = this.findEntry(predicate, context);\n      return entry ? entry[1] : notSetValue;\n    },\n\n    forEach: function(sideEffect, context) {\n      assertNotInfinite(this.size);\n      return this.__iterate(context ? sideEffect.bind(context) : sideEffect);\n    },\n\n    join: function(separator) {\n      assertNotInfinite(this.size);\n      separator = separator !== undefined ? '' + separator : ',';\n      var joined = '';\n      var isFirst = true;\n      this.__iterate(function(v ) {\n        isFirst ? (isFirst = false) : (joined += separator);\n        joined += v !== null && v !== undefined ? v.toString() : '';\n      });\n      return joined;\n    },\n\n    keys: function() {\n      return this.__iterator(ITERATE_KEYS);\n    },\n\n    map: function(mapper, context) {\n      return reify(this, mapFactory(this, mapper, context));\n    },\n\n    reduce: function(reducer, initialReduction, context) {\n      assertNotInfinite(this.size);\n      var reduction;\n      var useFirst;\n      if (arguments.length < 2) {\n        useFirst = true;\n      } else {\n        reduction = initialReduction;\n      }\n      this.__iterate(function(v, k, c)  {\n        if (useFirst) {\n          useFirst = false;\n          reduction = v;\n        } else {\n          reduction = reducer.call(context, reduction, v, k, c);\n        }\n      });\n      return reduction;\n    },\n\n    reduceRight: function(reducer, initialReduction, context) {\n      var reversed = this.toKeyedSeq().reverse();\n      return reversed.reduce.apply(reversed, arguments);\n    },\n\n    reverse: function() {\n      return reify(this, reverseFactory(this, true));\n    },\n\n    slice: function(begin, end) {\n      return reify(this, sliceFactory(this, begin, end, true));\n    },\n\n    some: function(predicate, context) {\n      return !this.every(not(predicate), context);\n    },\n\n    sort: function(comparator) {\n      return reify(this, sortFactory(this, comparator));\n    },\n\n    values: function() {\n      return this.__iterator(ITERATE_VALUES);\n    },\n\n\n    // ### More sequential methods\n\n    butLast: function() {\n      return this.slice(0, -1);\n    },\n\n    isEmpty: function() {\n      return this.size !== undefined ? this.size === 0 : !this.some(function()  {return true});\n    },\n\n    count: function(predicate, context) {\n      return ensureSize(\n        predicate ? this.toSeq().filter(predicate, context) : this\n      );\n    },\n\n    countBy: function(grouper, context) {\n      return countByFactory(this, grouper, context);\n    },\n\n    equals: function(other) {\n      return deepEqual(this, other);\n    },\n\n    entrySeq: function() {\n      var iterable = this;\n      if (iterable._cache) {\n        // We cache as an entries array, so we can just return the cache!\n        return new ArraySeq(iterable._cache);\n      }\n      var entriesSequence = iterable.toSeq().map(entryMapper).toIndexedSeq();\n      entriesSequence.fromEntrySeq = function()  {return iterable.toSeq()};\n      return entriesSequence;\n    },\n\n    filterNot: function(predicate, context) {\n      return this.filter(not(predicate), context);\n    },\n\n    findEntry: function(predicate, context, notSetValue) {\n      var found = notSetValue;\n      this.__iterate(function(v, k, c)  {\n        if (predicate.call(context, v, k, c)) {\n          found = [k, v];\n          return false;\n        }\n      });\n      return found;\n    },\n\n    findKey: function(predicate, context) {\n      var entry = this.findEntry(predicate, context);\n      return entry && entry[0];\n    },\n\n    findLast: function(predicate, context, notSetValue) {\n      return this.toKeyedSeq().reverse().find(predicate, context, notSetValue);\n    },\n\n    findLastEntry: function(predicate, context, notSetValue) {\n      return this.toKeyedSeq().reverse().findEntry(predicate, context, notSetValue);\n    },\n\n    findLastKey: function(predicate, context) {\n      return this.toKeyedSeq().reverse().findKey(predicate, context);\n    },\n\n    first: function() {\n      return this.find(returnTrue);\n    },\n\n    flatMap: function(mapper, context) {\n      return reify(this, flatMapFactory(this, mapper, context));\n    },\n\n    flatten: function(depth) {\n      return reify(this, flattenFactory(this, depth, true));\n    },\n\n    fromEntrySeq: function() {\n      return new FromEntriesSequence(this);\n    },\n\n    get: function(searchKey, notSetValue) {\n      return this.find(function(_, key)  {return is(key, searchKey)}, undefined, notSetValue);\n    },\n\n    getIn: function(searchKeyPath, notSetValue) {\n      var nested = this;\n      // Note: in an ES6 environment, we would prefer:\n      // for (var key of searchKeyPath) {\n      var iter = forceIterator(searchKeyPath);\n      var step;\n      while (!(step = iter.next()).done) {\n        var key = step.value;\n        nested = nested && nested.get ? nested.get(key, NOT_SET) : NOT_SET;\n        if (nested === NOT_SET) {\n          return notSetValue;\n        }\n      }\n      return nested;\n    },\n\n    groupBy: function(grouper, context) {\n      return groupByFactory(this, grouper, context);\n    },\n\n    has: function(searchKey) {\n      return this.get(searchKey, NOT_SET) !== NOT_SET;\n    },\n\n    hasIn: function(searchKeyPath) {\n      return this.getIn(searchKeyPath, NOT_SET) !== NOT_SET;\n    },\n\n    isSubset: function(iter) {\n      iter = typeof iter.includes === 'function' ? iter : Iterable(iter);\n      return this.every(function(value ) {return iter.includes(value)});\n    },\n\n    isSuperset: function(iter) {\n      iter = typeof iter.isSubset === 'function' ? iter : Iterable(iter);\n      return iter.isSubset(this);\n    },\n\n    keyOf: function(searchValue) {\n      return this.findKey(function(value ) {return is(value, searchValue)});\n    },\n\n    keySeq: function() {\n      return this.toSeq().map(keyMapper).toIndexedSeq();\n    },\n\n    last: function() {\n      return this.toSeq().reverse().first();\n    },\n\n    lastKeyOf: function(searchValue) {\n      return this.toKeyedSeq().reverse().keyOf(searchValue);\n    },\n\n    max: function(comparator) {\n      return maxFactory(this, comparator);\n    },\n\n    maxBy: function(mapper, comparator) {\n      return maxFactory(this, comparator, mapper);\n    },\n\n    min: function(comparator) {\n      return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator);\n    },\n\n    minBy: function(mapper, comparator) {\n      return maxFactory(this, comparator ? neg(comparator) : defaultNegComparator, mapper);\n    },\n\n    rest: function() {\n      return this.slice(1);\n    },\n\n    skip: function(amount) {\n      return this.slice(Math.max(0, amount));\n    },\n\n    skipLast: function(amount) {\n      return reify(this, this.toSeq().reverse().skip(amount).reverse());\n    },\n\n    skipWhile: function(predicate, context) {\n      return reify(this, skipWhileFactory(this, predicate, context, true));\n    },\n\n    skipUntil: function(predicate, context) {\n      return this.skipWhile(not(predicate), context);\n    },\n\n    sortBy: function(mapper, comparator) {\n      return reify(this, sortFactory(this, comparator, mapper));\n    },\n\n    take: function(amount) {\n      return this.slice(0, Math.max(0, amount));\n    },\n\n    takeLast: function(amount) {\n      return reify(this, this.toSeq().reverse().take(amount).reverse());\n    },\n\n    takeWhile: function(predicate, context) {\n      return reify(this, takeWhileFactory(this, predicate, context));\n    },\n\n    takeUntil: function(predicate, context) {\n      return this.takeWhile(not(predicate), context);\n    },\n\n    valueSeq: function() {\n      return this.toIndexedSeq();\n    },\n\n\n    // ### Hashable Object\n\n    hashCode: function() {\n      return this.__hash || (this.__hash = hashIterable(this));\n    }\n\n\n    // ### Internal\n\n    // abstract __iterate(fn, reverse)\n\n    // abstract __iterator(type, reverse)\n  });\n\n  // var IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\n  // var IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\n  // var IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\n  // var IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\n\n  var IterablePrototype = Iterable.prototype;\n  IterablePrototype[IS_ITERABLE_SENTINEL] = true;\n  IterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.values;\n  IterablePrototype.__toJS = IterablePrototype.toArray;\n  IterablePrototype.__toStringMapper = quoteString;\n  IterablePrototype.inspect =\n  IterablePrototype.toSource = function() { return this.toString(); };\n  IterablePrototype.chain = IterablePrototype.flatMap;\n  IterablePrototype.contains = IterablePrototype.includes;\n\n  mixin(KeyedIterable, {\n\n    // ### More sequential methods\n\n    flip: function() {\n      return reify(this, flipFactory(this));\n    },\n\n    mapEntries: function(mapper, context) {var this$0 = this;\n      var iterations = 0;\n      return reify(this,\n        this.toSeq().map(\n          function(v, k)  {return mapper.call(context, [k, v], iterations++, this$0)}\n        ).fromEntrySeq()\n      );\n    },\n\n    mapKeys: function(mapper, context) {var this$0 = this;\n      return reify(this,\n        this.toSeq().flip().map(\n          function(k, v)  {return mapper.call(context, k, v, this$0)}\n        ).flip()\n      );\n    }\n\n  });\n\n  var KeyedIterablePrototype = KeyedIterable.prototype;\n  KeyedIterablePrototype[IS_KEYED_SENTINEL] = true;\n  KeyedIterablePrototype[ITERATOR_SYMBOL] = IterablePrototype.entries;\n  KeyedIterablePrototype.__toJS = IterablePrototype.toObject;\n  KeyedIterablePrototype.__toStringMapper = function(v, k)  {return JSON.stringify(k) + ': ' + quoteString(v)};\n\n\n\n  mixin(IndexedIterable, {\n\n    // ### Conversion to other types\n\n    toKeyedSeq: function() {\n      return new ToKeyedSequence(this, false);\n    },\n\n\n    // ### ES6 Collection methods (ES6 Array and Map)\n\n    filter: function(predicate, context) {\n      return reify(this, filterFactory(this, predicate, context, false));\n    },\n\n    findIndex: function(predicate, context) {\n      var entry = this.findEntry(predicate, context);\n      return entry ? entry[0] : -1;\n    },\n\n    indexOf: function(searchValue) {\n      var key = this.keyOf(searchValue);\n      return key === undefined ? -1 : key;\n    },\n\n    lastIndexOf: function(searchValue) {\n      var key = this.lastKeyOf(searchValue);\n      return key === undefined ? -1 : key;\n    },\n\n    reverse: function() {\n      return reify(this, reverseFactory(this, false));\n    },\n\n    slice: function(begin, end) {\n      return reify(this, sliceFactory(this, begin, end, false));\n    },\n\n    splice: function(index, removeNum /*, ...values*/) {\n      var numArgs = arguments.length;\n      removeNum = Math.max(removeNum | 0, 0);\n      if (numArgs === 0 || (numArgs === 2 && !removeNum)) {\n        return this;\n      }\n      // If index is negative, it should resolve relative to the size of the\n      // collection. However size may be expensive to compute if not cached, so\n      // only call count() if the number is in fact negative.\n      index = resolveBegin(index, index < 0 ? this.count() : this.size);\n      var spliced = this.slice(0, index);\n      return reify(\n        this,\n        numArgs === 1 ?\n          spliced :\n          spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum))\n      );\n    },\n\n\n    // ### More collection methods\n\n    findLastIndex: function(predicate, context) {\n      var entry = this.findLastEntry(predicate, context);\n      return entry ? entry[0] : -1;\n    },\n\n    first: function() {\n      return this.get(0);\n    },\n\n    flatten: function(depth) {\n      return reify(this, flattenFactory(this, depth, false));\n    },\n\n    get: function(index, notSetValue) {\n      index = wrapIndex(this, index);\n      return (index < 0 || (this.size === Infinity ||\n          (this.size !== undefined && index > this.size))) ?\n        notSetValue :\n        this.find(function(_, key)  {return key === index}, undefined, notSetValue);\n    },\n\n    has: function(index) {\n      index = wrapIndex(this, index);\n      return index >= 0 && (this.size !== undefined ?\n        this.size === Infinity || index < this.size :\n        this.indexOf(index) !== -1\n      );\n    },\n\n    interpose: function(separator) {\n      return reify(this, interposeFactory(this, separator));\n    },\n\n    interleave: function(/*...iterables*/) {\n      var iterables = [this].concat(arrCopy(arguments));\n      var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, iterables);\n      var interleaved = zipped.flatten(true);\n      if (zipped.size) {\n        interleaved.size = zipped.size * iterables.length;\n      }\n      return reify(this, interleaved);\n    },\n\n    keySeq: function() {\n      return Range(0, this.size);\n    },\n\n    last: function() {\n      return this.get(-1);\n    },\n\n    skipWhile: function(predicate, context) {\n      return reify(this, skipWhileFactory(this, predicate, context, false));\n    },\n\n    zip: function(/*, ...iterables */) {\n      var iterables = [this].concat(arrCopy(arguments));\n      return reify(this, zipWithFactory(this, defaultZipper, iterables));\n    },\n\n    zipWith: function(zipper/*, ...iterables */) {\n      var iterables = arrCopy(arguments);\n      iterables[0] = this;\n      return reify(this, zipWithFactory(this, zipper, iterables));\n    }\n\n  });\n\n  IndexedIterable.prototype[IS_INDEXED_SENTINEL] = true;\n  IndexedIterable.prototype[IS_ORDERED_SENTINEL] = true;\n\n\n\n  mixin(SetIterable, {\n\n    // ### ES6 Collection methods (ES6 Array and Map)\n\n    get: function(value, notSetValue) {\n      return this.has(value) ? value : notSetValue;\n    },\n\n    includes: function(value) {\n      return this.has(value);\n    },\n\n\n    // ### More sequential methods\n\n    keySeq: function() {\n      return this.valueSeq();\n    }\n\n  });\n\n  SetIterable.prototype.has = IterablePrototype.includes;\n  SetIterable.prototype.contains = SetIterable.prototype.includes;\n\n\n  // Mixin subclasses\n\n  mixin(KeyedSeq, KeyedIterable.prototype);\n  mixin(IndexedSeq, IndexedIterable.prototype);\n  mixin(SetSeq, SetIterable.prototype);\n\n  mixin(KeyedCollection, KeyedIterable.prototype);\n  mixin(IndexedCollection, IndexedIterable.prototype);\n  mixin(SetCollection, SetIterable.prototype);\n\n\n  // #pragma Helper functions\n\n  function keyMapper(v, k) {\n    return k;\n  }\n\n  function entryMapper(v, k) {\n    return [k, v];\n  }\n\n  function not(predicate) {\n    return function() {\n      return !predicate.apply(this, arguments);\n    }\n  }\n\n  function neg(predicate) {\n    return function() {\n      return -predicate.apply(this, arguments);\n    }\n  }\n\n  function quoteString(value) {\n    return typeof value === 'string' ? JSON.stringify(value) : String(value);\n  }\n\n  function defaultZipper() {\n    return arrCopy(arguments);\n  }\n\n  function defaultNegComparator(a, b) {\n    return a < b ? 1 : a > b ? -1 : 0;\n  }\n\n  function hashIterable(iterable) {\n    if (iterable.size === Infinity) {\n      return 0;\n    }\n    var ordered = isOrdered(iterable);\n    var keyed = isKeyed(iterable);\n    var h = ordered ? 1 : 0;\n    var size = iterable.__iterate(\n      keyed ?\n        ordered ?\n          function(v, k)  { h = 31 * h + hashMerge(hash(v), hash(k)) | 0; } :\n          function(v, k)  { h = h + hashMerge(hash(v), hash(k)) | 0; } :\n        ordered ?\n          function(v ) { h = 31 * h + hash(v) | 0; } :\n          function(v ) { h = h + hash(v) | 0; }\n    );\n    return murmurHashOfSize(size, h);\n  }\n\n  function murmurHashOfSize(size, h) {\n    h = imul(h, 0xCC9E2D51);\n    h = imul(h << 15 | h >>> -15, 0x1B873593);\n    h = imul(h << 13 | h >>> -13, 5);\n    h = (h + 0xE6546B64 | 0) ^ size;\n    h = imul(h ^ h >>> 16, 0x85EBCA6B);\n    h = imul(h ^ h >>> 13, 0xC2B2AE35);\n    h = smi(h ^ h >>> 16);\n    return h;\n  }\n\n  function hashMerge(a, b) {\n    return a ^ b + 0x9E3779B9 + (a << 6) + (a >> 2) | 0; // int\n  }\n\n  var Immutable = {\n\n    Iterable: Iterable,\n\n    Seq: Seq,\n    Collection: Collection,\n    Map: Map,\n    OrderedMap: OrderedMap,\n    List: List,\n    Stack: Stack,\n    Set: Set,\n    OrderedSet: OrderedSet,\n\n    Record: Record,\n    Range: Range,\n    Repeat: Repeat,\n\n    is: is,\n    fromJS: fromJS\n\n  };\n\n  return Immutable;\n\n}));","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n  return value == null;\n}\n\nmodule.exports = isNil;\n","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n","function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to) {\n  var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n  var toParts = to && to.split('/') || [];\n  var fromParts = from && from.split('/') || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash = void 0;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) {\n    fromParts.unshift('..');\n  }if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nexport default resolvePathname;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction valueEqual(a, b) {\n  if (a === b) return true;\n\n  if (a == null || b == null) return false;\n\n  if (Array.isArray(a)) {\n    return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n      return valueEqual(item, b[index]);\n    });\n  }\n\n  var aType = typeof a === 'undefined' ? 'undefined' : _typeof(a);\n  var bType = typeof b === 'undefined' ? 'undefined' : _typeof(b);\n\n  if (aType !== bType) return false;\n\n  if (aType === 'object') {\n    var aValue = a.valueOf();\n    var bValue = b.valueOf();\n\n    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n    var aKeys = Object.keys(a);\n    var bKeys = Object.keys(b);\n\n    if (aKeys.length !== bKeys.length) return false;\n\n    return aKeys.every(function (key) {\n      return valueEqual(a[key], b[key]);\n    });\n  }\n\n  return false;\n}\n\nexport default valueEqual;","'use strict';\n\nexports.__esModule = true;\nvar addLeadingSlash = exports.addLeadingSlash = function addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n};\n\nvar stripLeadingSlash = exports.stripLeadingSlash = function stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n};\n\nvar hasBasename = exports.hasBasename = function hasBasename(path, prefix) {\n  return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n};\n\nvar stripBasename = exports.stripBasename = function stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n};\n\nvar stripTrailingSlash = exports.stripTrailingSlash = function stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n};\n\nvar parsePath = exports.parsePath = function parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n\n  var hashIndex = pathname.indexOf('#');\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n};\n\nvar createPath = exports.createPath = function createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n\n\n  var path = pathname || '/';\n\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n\n  return path;\n};","'use strict';\n\nexports.__esModule = true;\nexports.locationsAreEqual = exports.createLocation = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _resolvePathname = require('resolve-pathname');\n\nvar _resolvePathname2 = _interopRequireDefault(_resolvePathname);\n\nvar _valueEqual = require('value-equal');\n\nvar _valueEqual2 = _interopRequireDefault(_valueEqual);\n\nvar _PathUtils = require('./PathUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createLocation = exports.createLocation = function createLocation(path, state, key, currentLocation) {\n  var location = void 0;\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = (0, _PathUtils.parsePath)(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = _extends({}, path);\n\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = (0, _resolvePathname2.default)(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n};\n\nvar locationsAreEqual = exports.locationsAreEqual = function locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && (0, _valueEqual2.default)(a.state, b.state);\n};","'use strict';\n\nexports.__esModule = true;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar createTransitionManager = function createTransitionManager() {\n  var prompt = null;\n\n  var setPrompt = function setPrompt(nextPrompt) {\n    (0, _warning2.default)(prompt == null, 'A history supports only one prompt at a time');\n\n    prompt = nextPrompt;\n\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  };\n\n  var confirmTransitionTo = function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n          (0, _warning2.default)(false, 'A history needs a getUserConfirmation function in order to use a prompt message');\n\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  };\n\n  var listeners = [];\n\n  var appendListener = function appendListener(fn) {\n    var isActive = true;\n\n    var listener = function listener() {\n      if (isActive) fn.apply(undefined, arguments);\n    };\n\n    listeners.push(listener);\n\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  };\n\n  var notifyListeners = function notifyListeners() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(undefined, args);\n    });\n  };\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n};\n\nexports.default = createTransitionManager;","'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = exports.canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nvar addEventListener = exports.addEventListener = function addEventListener(node, event, listener) {\n  return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\n\nvar removeEventListener = exports.removeEventListener = function removeEventListener(node, event, listener) {\n  return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\n\nvar getConfirmation = exports.getConfirmation = function getConfirmation(message, callback) {\n  return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nvar supportsHistory = exports.supportsHistory = function supportsHistory() {\n  var ua = window.navigator.userAgent;\n\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n\n  return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nvar supportsPopStateOnHashChange = exports.supportsPopStateOnHashChange = function supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nvar supportsGoWithoutReloadUsingHash = exports.supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nvar isExtraneousPopstateEvent = exports.isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};","'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _LocationUtils = require('./LocationUtils');\n\nvar _PathUtils = require('./PathUtils');\n\nvar _createTransitionManager = require('./createTransitionManager');\n\nvar _createTransitionManager2 = _interopRequireDefault(_createTransitionManager);\n\nvar _DOMUtils = require('./DOMUtils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nvar getHistoryState = function getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n};\n\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\nvar createBrowserHistory = function createBrowserHistory() {\n  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n  (0, _invariant2.default)(_DOMUtils.canUseDOM, 'Browser history needs a DOM');\n\n  var globalHistory = window.history;\n  var canUseHistory = (0, _DOMUtils.supportsHistory)();\n  var needsHashChangeListener = !(0, _DOMUtils.supportsPopStateOnHashChange)();\n\n  var _props$forceRefresh = props.forceRefresh,\n      forceRefresh = _props$forceRefresh === undefined ? false : _props$forceRefresh,\n      _props$getUserConfirm = props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === undefined ? _DOMUtils.getConfirmation : _props$getUserConfirm,\n      _props$keyLength = props.keyLength,\n      keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n\n  var basename = props.basename ? (0, _PathUtils.stripTrailingSlash)((0, _PathUtils.addLeadingSlash)(props.basename)) : '';\n\n  var getDOMLocation = function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n\n\n    var path = pathname + search + hash;\n\n    (0, _warning2.default)(!basename || (0, _PathUtils.hasBasename)(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n\n    if (basename) path = (0, _PathUtils.stripBasename)(path, basename);\n\n    return (0, _LocationUtils.createLocation)(path, state, key);\n  };\n\n  var createKey = function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  };\n\n  var transitionManager = (0, _createTransitionManager2.default)();\n\n  var setState = function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n\n    transitionManager.notifyListeners(history.location, history.action);\n  };\n\n  var handlePopState = function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if ((0, _DOMUtils.isExtraneousPopstateEvent)(event)) return;\n\n    handlePop(getDOMLocation(event.state));\n  };\n\n  var handleHashChange = function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  };\n\n  var forceNextPop = false;\n\n  var handlePop = function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({ action: action, location: location });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  };\n\n  var revertPop = function revertPop(fromLocation) {\n    var toLocation = history.location;\n\n    // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n\n    if (toIndex === -1) toIndex = 0;\n\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n\n    if (fromIndex === -1) fromIndex = 0;\n\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  };\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key];\n\n  // Public interface\n\n  var createHref = function createHref(location) {\n    return basename + (0, _PathUtils.createPath)(location);\n  };\n\n  var push = function push(path, state) {\n    (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n    var action = 'PUSH';\n    var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n\n      if (canUseHistory) {\n        globalHistory.pushState({ key: key, state: state }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n\n          setState({ action: action, location: location });\n        }\n      } else {\n        (0, _warning2.default)(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history');\n\n        window.location.href = href;\n      }\n    });\n  };\n\n  var replace = function replace(path, state) {\n    (0, _warning2.default)(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n\n    var action = 'REPLACE';\n    var location = (0, _LocationUtils.createLocation)(path, state, createKey(), history.location);\n\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n\n      if (canUseHistory) {\n        globalHistory.replaceState({ key: key, state: state }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n\n          setState({ action: action, location: location });\n        }\n      } else {\n        (0, _warning2.default)(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history');\n\n        window.location.replace(href);\n      }\n    });\n  };\n\n  var go = function go(n) {\n    globalHistory.go(n);\n  };\n\n  var goBack = function goBack() {\n    return go(-1);\n  };\n\n  var goForward = function goForward() {\n    return go(1);\n  };\n\n  var listenerCount = 0;\n\n  var checkDOMListeners = function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1) {\n      (0, _DOMUtils.addEventListener)(window, PopStateEvent, handlePopState);\n\n      if (needsHashChangeListener) (0, _DOMUtils.addEventListener)(window, HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      (0, _DOMUtils.removeEventListener)(window, PopStateEvent, handlePopState);\n\n      if (needsHashChangeListener) (0, _DOMUtils.removeEventListener)(window, HashChangeEvent, handleHashChange);\n    }\n  };\n\n  var isBlocked = false;\n\n  var block = function block() {\n    var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  };\n\n  var listen = function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  };\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n\n  return history;\n};\n\nexports.default = createBrowserHistory;","// Action key that carries API call info interpreted by this Redux middleware.\r\n// The data have to be formatted like:\r\n// {\r\n//  TYPES: {},\r\n//  REQUEST: {}\r\n// }\r\n//\r\n//\r\n//\r\nexport const API_CALL = 'API::API_CALL'\r\n\r\n//\r\n// The constants to attach to the actions\r\n// have to contains three constants: [ requestType, successType, failureType ]\r\n// Example: types: [ LOGIN_REQUEST, LOGIN_SUCCESS, LOGIN_FAILURE ]\r\n// Have to be set on API_CALL\r\nexport const TYPES = 'API::API_CALL::TYPES'\r\n\r\n//  REQUEST: {\r\n//   type: 'GET',\r\n//   schema: OAuthSchema,\r\n//   endpoint: ApiEndpoints.LOGIN,\r\n//   headers: {\r\n//     'Accept': 'application/x-www-form-urlencoded',\r\n//   },\r\n//   data: {\r\n//   }\r\n//   }\r\n//\r\n// See api/UserApi.login for example\r\nexport const REQUEST = 'API::API_CALL::REQUEST'\r\n\r\n/**\r\n * Additional data to attach to each action.\r\n * This data is used on reducers when handling request actions. It allows modification of the\r\n * state before the API call ended.\r\n * For non-critical requests that should not fail, use it to update the state directly without\r\n * waiting for the request response.\r\n * It allows a 'instant ui modification' look alike for out app.\r\n */\r\nexport const DATA = 'API::API_CALL::DATA'\r\n\r\n// Action key that carries API call info interpreted by this Redux middleware.\r\n// The data have to be formatted like:\r\n// {\r\n//  TYPES: {},\r\n//  REQUEST: {}\r\n// }\r\n//\r\nexport const API_CALL_TEST = 'API::API_CALL::TEST'\r\n\r\n/**\r\n * The object data to send as `response` on success\r\n */\r\nexport const SUCCESS_DATA = 'API::API_CALL::SUCCESS_DATA'\r\n\r\n/**\r\n * The object data to send as `error` on failure\r\n */\r\nexport const FAILURE_DATA = 'API::API_CALL::FAILURE_DATA'\r\n\r\n/**\r\n * Defines if the request is successfull\r\n */\r\nexport const REQUEST_IS_SUCCESS = 'API::API_CALL::REQUEST_IS_SUCCESS'\r\n\r\nexport const DAYS = {\r\n  MONDAY: 0,\r\n  TUESDAY: 1,\r\n  WEDNESDAY: 2,\r\n  THURSDAY: 3,\r\n  FRIDAY: 4,\r\n  SATURDAY: 5,\r\n  SUNDAY: 6,\r\n}\r\n\r\n/**\r\n * Custom generated api error (eg: when api returns empty result)\r\n */\r\nexport const GENERATED_API_ERROR = -1\r\n","import {\r\n  API_CALL,\r\n  TYPES,\r\n  REQUEST,\r\n  DATA,\r\n  API_CALL_TEST,\r\n  REQUEST_IS_SUCCESS,\r\n  SUCCESS_DATA,\r\n  FAILURE_DATA,\r\n} from './constants'\r\n\r\nexport const createUserLightBasic = email => `Basic ${btoa(`user_light_${email}:`)}`\r\n\r\nexport const createIncognitoBasic = userId => `Basic ${btoa(`incognito_${userId}:`)}`\r\n\r\nexport const createRestaurantBasic = (restaurantId, password) =>\r\n  `Basic ${btoa(`restaurant_${restaurantId}:${password}`)}`\r\n\r\n/**\r\n * returns true if the given `action` is an API_CALL action.\r\n */\r\nexport const isActionApiCall = action => {\r\n  const apiCall = action[API_CALL]\r\n\r\n  return typeof apiCall !== 'undefined'\r\n}\r\n/**\r\n * returns true if the given `action` is an API_CALL_TEST action.\r\n */\r\nexport const isActionApiCallTest = action => {\r\n  const apiCallTest = action[API_CALL_TEST]\r\n\r\n  return typeof apiCallTest !== 'undefined'\r\n}\r\n\r\n/**\r\n * Create an action for an api call.\r\n * See middleware `api`\r\n *\r\n * @param  {Object} typeEnum    the enum that define the action. Create with `createApiEnumAction`\r\n * @param  {Object} request     the request data. Ex: `ApiRestaurant.getRestaurant(restaurantId)`\r\n * @param  {Object} [data=null] data to attach to all the actions. Ex: { restaurantId }\r\n * @return {ApiAction}             ApiAction\r\n */\r\nexport const createApiCallAction = (typeEnum, request, data = null) => {\r\n  return {\r\n    type: API_CALL, // type is mandatory by redux-thunk\r\n    [API_CALL]: {\r\n      [TYPES]: [typeEnum.REQUEST, typeEnum.SUCCESS, typeEnum.FAILURE],\r\n      [REQUEST]: request,\r\n      [DATA]: data,\r\n    },\r\n  }\r\n}\r\n\r\n/**\r\n * Create an action for an api call.\r\n * See middleware `api`\r\n *\r\n * @param  {Object} typeEnum    the enum that define the action. Create with `createApiEnumAction`\r\n * @param  {boolean} isSuccess  should the mocked request be successfull or not ?\r\n * @param  {Object} mockData  data to attach to all the actions. Can contains the subobjects:\r\n *                                - data: the data to attach to each action of the api call\r\n *                                (REQUEST, SUCCESS, FAILURE)\r\n *                                - response: the data to attach to the success response action\r\n *                                - error: the data to attach to the failure response action\r\n * @return {ApiAction}             ApiAction\r\n */\r\nexport const createTestApiCallAction = (typeEnum, isSuccess, mockData = null) => ({\r\n  type: API_CALL_TEST, // type is mandatory by redux-thunk\r\n  [API_CALL_TEST]: {\r\n    [TYPES]: [typeEnum.REQUEST, typeEnum.SUCCESS, typeEnum.FAILURE],\r\n    [REQUEST]: null, // TODO: handle request for tests ?\r\n    [DATA]: mockData.data,\r\n    [REQUEST_IS_SUCCESS]: isSuccess,\r\n    [SUCCESS_DATA]: mockData.response,\r\n    [FAILURE_DATA]: mockData.error,\r\n  },\r\n})\r\n\r\n/**\r\n * Create an enum to use for an Api request action\r\n */\r\nexport const createApiEnumAction = prefix => ({\r\n  REQUEST: `${prefix}::REQUEST`,\r\n  SUCCESS: `${prefix}::SUCCESS`,\r\n  FAILURE: `${prefix}::FAILURE`,\r\n})\r\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n *   'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n *   'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","//\r\n// default environment variables for our sdk\r\n//\r\n\r\nconst defaultEnv = {\r\n}\r\n\r\nexport default defaultEnv\r\n","//\r\n// Note: this file should never be import directly. Use a getter via getters.js\r\n//\r\n\r\nimport merge from 'lodash/merge'\r\n\r\nimport defaultEnv from './defaultEnv'\r\n\r\n//\r\n// The currentEnv is set by the front.\r\n// It is given to our `Application` that call `setCurrentEnv`\r\n//\r\nlet _currentEnv = {}\r\n\r\nexport const setCurrentEnv = (currentEnv) => {\r\n  _currentEnv = merge({}, defaultEnv, currentEnv)\r\n}\r\n\r\nexport const getEnv = () => _currentEnv\r\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isBuffer = require('./isBuffer'),\n    isPrototype = require('./_isPrototype'),\n    isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = isEmpty;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","var isNumber = require('./isNumber');\n\n/**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\nfunction isNaN(value) {\n  // An `NaN` primitive is the only value that is not equal to itself.\n  // Perform the `toStringTag` check first to avoid errors with some\n  // ActiveX objects in IE.\n  return isNumber(value) && value != +value;\n}\n\nmodule.exports = isNaN;\n","var baseGetTag = require('./_baseGetTag'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = baseFindIndex;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n    baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\nmodule.exports = baseIsMatch;\n","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n","var isStrictComparable = require('./_isStrictComparable'),\n    keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\nmodule.exports = getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\nmodule.exports = matchesStrictComparable;\n","var baseIsMatch = require('./_baseIsMatch'),\n    getMatchData = require('./_getMatchData'),\n    matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\nmodule.exports = baseMatches;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isIndex = require('./_isIndex'),\n    isLength = require('./isLength'),\n    toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      result = false;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result || ++index != length) {\n    return result;\n  }\n  length = object == null ? 0 : object.length;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n    hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var baseIsEqual = require('./_baseIsEqual'),\n    get = require('./get'),\n    hasIn = require('./hasIn'),\n    isKey = require('./_isKey'),\n    isStrictComparable = require('./_isStrictComparable'),\n    matchesStrictComparable = require('./_matchesStrictComparable'),\n    toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n  };\n}\n\nmodule.exports = baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = baseProperty;\n","var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\nmodule.exports = basePropertyDeep;\n","var baseProperty = require('./_baseProperty'),\n    basePropertyDeep = require('./_basePropertyDeep'),\n    isKey = require('./_isKey'),\n    toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n","var baseMatches = require('./_baseMatches'),\n    baseMatchesProperty = require('./_baseMatchesProperty'),\n    identity = require('./identity'),\n    isArray = require('./isArray'),\n    property = require('./property');\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\nmodule.exports = baseIteratee;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n  if (!value) {\n    return value === 0 ? value : 0;\n  }\n  value = toNumber(value);\n  if (value === INFINITY || value === -INFINITY) {\n    var sign = (value < 0 ? -1 : 1);\n    return sign * MAX_INTEGER;\n  }\n  return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIteratee = require('./_baseIteratee'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'active': false },\n *   { 'user': 'fred',    'active': false },\n *   { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = strictIndexOf;\n","var baseFindIndex = require('./_baseFindIndex'),\n    baseIsNaN = require('./_baseIsNaN'),\n    strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","var baseIndexOf = require('./_baseIndexOf'),\n    toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\nfunction indexOf(array, value, fromIndex) {\n  var length = array == null ? 0 : array.length;\n  if (!length) {\n    return -1;\n  }\n  var index = fromIndex == null ? 0 : toInteger(fromIndex);\n  if (index < 0) {\n    index = nativeMax(length + index, 0);\n  }\n  return baseIndexOf(array, value, index);\n}\n\nmodule.exports = indexOf;\n","var baseIteratee = require('./_baseIteratee'),\n    isArrayLike = require('./isArrayLike'),\n    keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(predicate, 3);\n      collection = keys(collection);\n      predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n    }\n    var index = findIndexFunc(collection, predicate, fromIndex);\n    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n  };\n}\n\nmodule.exports = createFind;\n","var createFind = require('./_createFind'),\n    findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n *   { 'user': 'barney',  'age': 36, 'active': true },\n *   { 'user': 'fred',    'age': 40, 'active': false },\n *   { 'user': 'pebbles', 'age': 1,  'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","var baseFor = require('./_baseFor'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n","var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nmodule.exports = createBaseEach;\n","var baseForOwn = require('./_baseForOwn'),\n    createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var arrayEach = require('./_arrayEach'),\n    baseEach = require('./_baseEach'),\n    castFunction = require('./_castFunction'),\n    isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n  return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","/**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\nfunction isNull(value) {\n  return value === null;\n}\n\nmodule.exports = isNull;\n","var baseEach = require('./_baseEach'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nmodule.exports = baseMap;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n *   return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = clone;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n  var length = array == null ? 0 : array.length;\n  return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (comparator(value, array[index])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nmodule.exports = noop;\n","var Set = require('./_Set'),\n    noop = require('./noop'),\n    setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n  return new Set(values);\n};\n\nmodule.exports = createSet;\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    cacheHas = require('./_cacheHas'),\n    createSet = require('./_createSet'),\n    setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      length = array.length,\n      isCommon = true,\n      result = [],\n      seen = result;\n\n  if (comparator) {\n    isCommon = false;\n    includes = arrayIncludesWith;\n  }\n  else if (length >= LARGE_ARRAY_SIZE) {\n    var set = iteratee ? null : createSet(array);\n    if (set) {\n      return setToArray(set);\n    }\n    isCommon = false;\n    includes = cacheHas;\n    seen = new SetCache;\n  }\n  else {\n    seen = iteratee ? [] : result;\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee ? iteratee(value) : value;\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var seenIndex = seen.length;\n      while (seenIndex--) {\n        if (seen[seenIndex] === computed) {\n          continue outer;\n        }\n      }\n      if (iteratee) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n    else if (!includes(seen, computed, comparator)) {\n      if (seen !== result) {\n        seen.push(computed);\n      }\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseUniq;\n","var baseIteratee = require('./_baseIteratee'),\n    baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n  return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nmodule.exports = baseValues;\n","var baseValues = require('./_baseValues'),\n    keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nmodule.exports = baseSortBy;\n","var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nmodule.exports = compareAscending;\n","var compareAscending = require('./_compareAscending');\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n","var arrayMap = require('./_arrayMap'),\n    baseGet = require('./_baseGet'),\n    baseIteratee = require('./_baseIteratee'),\n    baseMap = require('./_baseMap'),\n    baseSortBy = require('./_baseSortBy'),\n    baseUnary = require('./_baseUnary'),\n    compareMultiple = require('./_compareMultiple'),\n    identity = require('./identity'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  if (iteratees.length) {\n    iteratees = arrayMap(iteratees, function(iteratee) {\n      if (isArray(iteratee)) {\n        return function(value) {\n          return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n        }\n      }\n      return iteratee;\n    });\n  } else {\n    iteratees = [identity];\n  }\n\n  var index = -1;\n  iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nmodule.exports = baseOrderBy;\n","var baseFlatten = require('./_baseFlatten'),\n    baseOrderBy = require('./_baseOrderBy'),\n    baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 30 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n","import invariant from 'invariant'\r\nimport findIndex from 'lodash/findIndex'\r\nimport indexOf from 'lodash/indexOf'\r\nimport find from 'lodash/find'\r\nimport forEach from 'lodash/forEach'\r\nimport get from 'lodash/get'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport isNull from 'lodash/isNull'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isArray from 'lodash/isArray'\r\nimport map from 'lodash/map'\r\nimport clone from 'lodash/clone'\r\nimport uniqBy from 'lodash/uniqBy'\r\nimport values from 'lodash/values'\r\nimport sortBy from 'lodash/sortBy'\r\n\r\nexport const compare = (comparator, item, toCompare = null) => {\r\n  if (isNil(comparator)) {\r\n    // no comparator we try ours.\r\n    if (!isNil(item['id'])) {\r\n      // try to compare ids\r\n      invariant(toCompare !== null, 'A comparator is required if there is no object to compare to')\r\n      return item['id'] === toCompare['id']\r\n    }\r\n  } else {\r\n    if (isFunction(comparator)) {\r\n      return comparator(item, toCompare)\r\n    } else {\r\n      // comparator is not a function, it contains a value (fallback id)\r\n      // TODO: comparator is an object suchs as { id: 3, test: 'toto' }\r\n      invariant(\r\n        !isNil(item['id']),\r\n        `A string comparator will be compared with the item 'id'. No id found on item object`\r\n      )\r\n      return item['id'] === comparator\r\n    }\r\n  }\r\n\r\n  invariant(false, 'array compare not handled')\r\n  return false\r\n}\r\n\r\nexport const copyArray = array => map(array, clone)\r\n\r\n/**\r\n * https://stackoverflow.com/questions/13518343/sort-array-containing-objects-based-on-another-array\r\n *\r\n * @param  {[type]} keysOrder   array of the keys in the order you want.\r\n * @param  {[type]} arrayToSort array to sort\r\n * @param  {[type]} comparator  func(keyToFind, currentObject): boolean\r\n *                              currentObject is the object taken from the arrayToSort\r\n * @return {[type]}             a sorted array\r\n */\r\nexport const getOrderedArray = (keysOrder, arrayToSort, comparator) => {\r\n  const comparatorFunc = current => key => comparator(key, current)\r\n  let orderedArray = []\r\n  let len = arrayToSort.length\r\n  let index\r\n  let current\r\n\r\n  for (; len--; ) {\r\n    current = arrayToSort[len]\r\n    index = findIndex(keysOrder, comparatorFunc(current))\r\n    orderedArray[index] = current\r\n  }\r\n\r\n  //change the arrayToSort\r\n  return orderedArray\r\n}\r\n\r\nexport const sortArray = (arrayParam, propertyGetter) => {\r\n  return sortBy(arrayParam, propertyGetter)\r\n}\r\n\r\nexport const findOnArray = (array, comparator) => {\r\n  const match = find(array, item => compare(comparator, item))\r\n\r\n  return isUndefined(match) ? null : match\r\n}\r\n\r\nexport const findIndexOnArray = (array, comparator) => {\r\n  const match = findIndex(array, item => compare(comparator, item))\r\n\r\n  return isUndefined(match) ? null : match\r\n}\r\n\r\nexport const existsOnArray = (array, comparator) => {\r\n  const match = findOnArray(array, comparator)\r\n\r\n  return !isNull(match)\r\n}\r\n\r\nexport const deleteObjectAtIndexOnArray = (arrayParam, index) => {\r\n  const array = copyArray(arrayParam)\r\n  array.splice(index, 1)\r\n  return array\r\n}\r\n\r\nexport const deleteObjectOnArray = (arrayParam, comparator) => {\r\n  const array = copyArray(arrayParam)\r\n  const match = findOnArray(array, comparator)\r\n\r\n  if (match) {\r\n    // Find item index using indexOf+find\r\n    const index = indexOf(array, match)\r\n\r\n    // Replace item at index using native splice\r\n    array.splice(index, 1)\r\n  }\r\n\r\n  return array\r\n}\r\n\r\nexport const toggleArrayObject = (arrayParam, obj, comparator) => {\r\n  const array = copyArray(arrayParam)\r\n  if (existsOnArray(array, comparator)) {\r\n    return deleteObjectOnArray(array, comparator)\r\n  }\r\n\r\n  array.push(obj)\r\n  return array\r\n}\r\n\r\nexport const updateArrayObjectAtIndex = (arrayParam, obj, index) => {\r\n  const array = arrayParam\r\n  array[index] = obj\r\n  return array\r\n}\r\n\r\nexport const updateArrayObject = (arrayParam, obj, comparator) => {\r\n  const array = arrayParam\r\n\r\n  return array.map(item => (compare(comparator, item) === true ? obj : item))\r\n}\r\n\r\nexport const updateArrayObjectOrCreate = (arrayParam, obj, comparator) => {\r\n  const array = arrayParam || []\r\n\r\n  if (existsOnArray(array, comparator)) {\r\n    return updateArrayObject(array, obj, comparator)\r\n  }\r\n\r\n  array.push(obj)\r\n  return array\r\n}\r\n\r\nexport const addUniqueOnArray = (arrayParam, obj, comparator) => {\r\n  const array = copyArray(arrayParam)\r\n  if (!existsOnArray(array, comparator)) {\r\n    array.push(obj)\r\n  }\r\n  return array\r\n}\r\n\r\nexport const removeArrayDuplicates = (arrayParam, getter) => {\r\n  return uniqBy(arrayParam, function(e) {\r\n    if (!getter) {\r\n      return e\r\n    }\r\n    return getter(e)\r\n  })\r\n}\r\n\r\n/**\r\n * @param array {Array} the new array\r\n * @param source {Array} the old array\r\n * @param appendMode {boolean} true to merge array with the new data append on the old array (use it\r\n *  for pagination)\r\n */\r\nexport const mergeArray = (array, source, getValueFunc, appendMode = false) => {\r\n  // merge new array and source and remove duplicate data\r\n  const mergedArray = appendMode ? [...source, ...array] : [...array, ...source]\r\n  const newArray = uniqBy(mergedArray, getValueFunc)\r\n  // update the data\r\n  const res = newArray.map(object => {\r\n    const updatedObject = findOnArray(array, a => {\r\n      return getValueFunc(object) === getValueFunc(a)\r\n    })\r\n    return updatedObject ? updatedObject : object\r\n  })\r\n  return res\r\n}\r\n\r\nexport const toggleArrayValue = (arrayParam, value) => {\r\n  const array = copyArray(arrayParam)\r\n\r\n  if (array.includes(value)) {\r\n    array.splice(indexOf(array, value), 1)\r\n  } else {\r\n    array.push(value)\r\n  }\r\n\r\n  return array\r\n}\r\n\r\nexport const asArray = param => (isArray(param) ? param : [param])\r\n\r\n/**\r\n * Modify the given target array, to add the source array on it, with an optimize way.\r\n *\r\n * /!\\ It modifies the target array !\r\n *\r\n * see https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki\r\n */\r\nexport const addToArray = (target, source) => {\r\n  const targetLength = target.length\r\n  const sourceLength = source.length\r\n\r\n  // pre-allocate\r\n  target.length = targetLength + sourceLength\r\n\r\n  // Add arr2 items to arr1\r\n  for (let i = 0; i < source.length; i++) {\r\n    target[targetLength + i] = source[i]\r\n  }\r\n  return target\r\n}\r\n\r\n/**\r\n * Filter duplicates from the given array. The array sorting is not preserved.\r\n *\r\n * @param getId function that returns the id of the given object\r\n * @param comparator function(object, other). returns true if other must replace the given object\r\n */\r\nexport const filterDuplicates = (arrayParam, getId, comparator) => {\r\n  const objects = {}\r\n\r\n  arrayParam.forEach(other => {\r\n    const id = getId(other)\r\n\r\n    const object = objects[id]\r\n    if (!object) {\r\n      objects[id] = other\r\n    } else {\r\n      // duplicate, compare which one we keep\r\n      if (comparator(object, other)) {\r\n        objects[id] = other\r\n      }\r\n    }\r\n  })\r\n\r\n  // the purpose here is to keep the returned array in the same order of keys as it was before\r\n  return getOrderedArray(\r\n    arrayParam,\r\n    values(objects),\r\n    (value, other) => value.id === other.id\r\n  ).filter(Boolean)\r\n}\r\n\r\n/**\r\n * flattenArrayTree\r\n */\r\nexport const flattenArrayTree = (children, path) => {\r\n  const flattenedArray = []\r\n\r\n  const flattenArrayTreeInternal = (flattenedArray, children, path) => {\r\n    forEach(children, cat => {\r\n      flattenedArray.push(cat)\r\n      flattenArrayTreeInternal(flattenedArray, get(cat, path, null), path)\r\n    })\r\n  }\r\n\r\n  flattenArrayTreeInternal(flattenedArray, children, path)\r\n  return flattenedArray\r\n}\r\n\r\n/**\r\n * Creates an array of items without id (new) or different from original (updated)\r\n *\r\n * @param array The array to inspect.\r\n * @param comparator The comparator invoked per element.\r\n * @param diffKeys The array of keys to watch.\r\n */\r\nexport const differenceByKeys = (array, comparator, diffKeys) => {\r\n  const newArray = []\r\n\r\n  forEach(array, iteratee => {\r\n    if (!iteratee.id) {\r\n      newArray.push(iteratee)\r\n    } else {\r\n      let hasDiff = false\r\n      const current = comparator(iteratee)\r\n      diffKeys.forEach(key => {\r\n        if (iteratee[key] !== current[key]) {\r\n          hasDiff = true\r\n        }\r\n      })\r\n\r\n      if (hasDiff) {\r\n        newArray.push(iteratee)\r\n      }\r\n    }\r\n  })\r\n\r\n  return newArray\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport isNaN from 'lodash/isNaN'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport invariant from 'invariant'\r\nimport isString from 'lodash/isString'\r\n\r\nimport { asArray } from '../array'\r\n\r\nexport const getHostname = uri => {\r\n  const reg = /^(?:https?:\\/\\/)(?:[^@/\\n]+@)?(?:www\\.)?([^:/?\\n]+)/gim\r\n  const matches = reg.exec(uri)\r\n  return (matches && matches[1]) || null\r\n}\r\n\r\nexport const getRelativePath = uri => uri.replace(/^(?:\\/\\/|[^/]+)*\\//, '')\r\n\r\n/**\r\n * Parse the given `uri` and returns its query params as an object.\r\n * @param  {string} uri\r\n */\r\nexport const getQueryFromUri = uri => {\r\n  uri = uri.replace(/%3D/gi, '=').replace(/%3F/i, '?')\r\n\r\n  if (uri.indexOf('?') === -1) {\r\n    return {}\r\n  }\r\n\r\n  // Checking if there is at least one parameter\r\n  const uriBase = uri.substr(uri.indexOf('?') + 1)\r\n  if (uriBase === '') {\r\n    return {}\r\n  }\r\n\r\n  return uriBase.split('&').reduce((prev, curr) => {\r\n    const p = curr.split('=')\r\n    const key = decodeURIComponent(p[0])\r\n    prev[key] = decodeURIComponent(getQueryParam(key, uri))\r\n    return prev\r\n  }, {})\r\n}\r\n\r\n/**\r\n * Append the given `parameters` to the `uri`\r\n * if the `uri` already contains query parameters\r\n */\r\nexport const formatQueryParams = (uri, parameters) => {\r\n  if (isNil(uri)) {\r\n    return null\r\n  }\r\n\r\n  // get query on uri\r\n  const uriParameters = getQueryFromUri(uri)\r\n\r\n  // merge query from uri and parameters\r\n  parameters = {\r\n    ...uriParameters,\r\n    ...parameters,\r\n  }\r\n\r\n  // remove query\r\n  uri = uri.split('?')[0]\r\n\r\n  let qs = ''\r\n  for (let key in parameters) {\r\n    let value = parameters[key]\r\n    qs += key + '=' + value + '&'\r\n  }\r\n\r\n  if (qs.length > 0) {\r\n    qs = encodeURI(qs)\r\n    qs = qs.substring(0, qs.length - 1) // chop off last '&'\r\n\r\n    if (uri.indexOf('?') === -1) {\r\n      // does not have a query param yet\r\n      return `${uri}?${qs}`\r\n    }\r\n\r\n    return `${uri}&${qs}`\r\n  }\r\n\r\n  return uri\r\n}\r\n\r\n/**\r\n * see https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\r\n */\r\nexport const getQueryParam = (name, url) => {\r\n  if (!url) url = window.location.href\r\n  name = name.replace(/[[\\]]/g, '\\\\$&')\r\n\r\n  const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n    results = regex.exec(url)\r\n  if (!results) {\r\n    return null\r\n  }\r\n  if (!results[2]) {\r\n    return ''\r\n  }\r\n\r\n  const component = decodeURIComponent(results[2].replace(/\\+/g, ' '))\r\n\r\n  if (component) {\r\n    // remove hash '#'\r\n    // ex: tableNumber=1#entrees must return 1 for `tableNumber` name\r\n    const hashIndex = component.lastIndexOf('#')\r\n    if (hashIndex !== -1) {\r\n      return component.substr(0, hashIndex)\r\n    }\r\n  }\r\n\r\n  return component\r\n}\r\n\r\nexport const getQueryParamAsArray = (name, url) => {\r\n  const queryParam = getQueryParam(name, url)\r\n\r\n  if (isEmpty(queryParam)) {\r\n    return []\r\n  }\r\n\r\n  const data = decodeURIComponent(queryParam)\r\n  return data.split(',')\r\n}\r\n\r\nexport const getHash = url => {\r\n  if (!url) {\r\n    return window.location.hash\r\n  }\r\n\r\n  const component = decodeURIComponent(url.replace(/\\+/g, ' '))\r\n\r\n  const hashIndex = component.lastIndexOf('#')\r\n  if (hashIndex !== -1) {\r\n    return component.substr(hashIndex + 1)\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nexport const CALLBACK_EVENTS = {\r\n  INVALID_ACCESS_TOKEN: 'INVALID_ACCESS_TOKEN',\r\n  NO_PREVIOUS_PAGE: 'NO_PREVIOUS_PAGE',\r\n  NEW_ORDER: 'NEW_ORDER',\r\n}\r\n\r\nexport const getCallbackUri = (callbackUri, event) =>\r\n  callbackUri.indexOf('?') === -1\r\n    ? `${callbackUri}?event=${event}`\r\n    : `${callbackUri}&event=${event}`\r\n\r\nexport const removeUrlParameter = (url, queryToRemoveParam) => {\r\n  const queryToRemove = asArray(queryToRemoveParam)\r\n\r\n  // let finalUrl = decodeURI(url)\r\n\r\n  let queries = getQueryFromUri(url)\r\n\r\n  const baseUrl = url.replace(/%3F/i, '?').split('?')[0]\r\n\r\n  queryToRemove.forEach(query => {\r\n    // finalUrl = removeQueryParamFromUrl(finalUrl, query)\r\n    delete queries[query]\r\n  })\r\n\r\n  return formatQueryParams(baseUrl, queries)\r\n}\r\n\r\nexport const queryParamToInt = str => {\r\n  const intValue = parseInt(str, 10)\r\n  if (isNaN(intValue)) {\r\n    return null\r\n  }\r\n  return intValue\r\n}\r\n\r\n/**\r\n * format a given path to an absolute url\r\n *\r\n * @param {*} path can be either an object like getRoute('XXX') or a path as string directly\r\n */\r\nexport const getAbsolutePath = (path, queryParams = {}) => {\r\n  const base = `${window.location.protocol}//${window.location.host}`\r\n\r\n  // keep api consumer query param\r\n  const apiConsumerQueryParam = getQueryParam('apiConsumer')\r\n  if (!isEmpty(apiConsumerQueryParam)) {\r\n    queryParams.apiConsumer = apiConsumerQueryParam\r\n  }\r\n\r\n  if (isString(path)) {\r\n    return formatQueryParams(`${base}${path}`, queryParams)\r\n  }\r\n  if (!isNil(path.path)) {\r\n    return formatQueryParams(`${base}${path.path}`, queryParams)\r\n  }\r\n  invariant(`[getAbsolutePath] unable to dertermine path`)\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\n//\r\n// The environment should never be called directly.\r\n// We provides via this file methods to access to the getEnv()ironment configuration.\r\n//\r\nimport { getEnv } from './environment'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst apiVersionQueryParam = getQueryParam('apiVersion')\r\n\r\nexport const QUERY_PARAM_API_CONSUMER = 'apiConsumer'\r\nexport const QUERY_PARAM_API_CONSUMER_DEPRECATED = 'apiconsumer'\r\n\r\nexport const getQueryApiConsumer = () =>\r\n  getQueryParam(QUERY_PARAM_API_CONSUMER) || getQueryParam(QUERY_PARAM_API_CONSUMER_DEPRECATED)\r\n\r\nexport const getApiConsumer = () =>\r\n  (window.globalEnvironmentSettings && window.globalEnvironmentSettings.apiConsumer) ||\r\n  getQueryApiConsumer() ||\r\n  getEnv().API_CONSUMER\r\n\r\nexport const getApiUrl = () => {\r\n  let apiUrl = getEnv().API_URL\r\n  // handle the 'apiVersion' query param, that allows to specify which api version we wants to use\r\n  if (!isEmpty(apiVersionQueryParam)) {\r\n    apiUrl = apiUrl.replace(/https:\\/\\/[\\w-]*paymytable/, '')\r\n    apiUrl = 'https://' + apiVersionQueryParam + '-dot-paymytable' + apiUrl\r\n  }\r\n  return apiUrl\r\n}\r\n\r\nexport const getApiDocUrl = () => {\r\n  // for trying the webservices, we want Rapidoc to use the API url (including the apiVersion if any) used by the current BO V2 instance\r\n  // except in production where we don't want to use the \"bo\" apiVersion, but the default one\r\n  if (isProd()) {\r\n    return getEnv().API_DOC_URL\r\n  }\r\n  return getApiUrl()\r\n}\r\n\r\nexport const isLocal = () => getEnv().IS_LOCAL\r\n\r\nexport const isDev = () => getEnv().IS_DEV\r\n\r\nexport const isPreprod = () => getEnv().IS_PREPROD\r\n\r\nexport const isProd = () => getEnv().IS_PROD\r\n\r\nexport const isWebCustomer = () => getEnv().IS_WEB_CUSTOMER\r\n\r\nexport const isKiosk = () => getEnv().IS_KIOSK\r\n\r\nexport const isBo = () => getEnv().IS_BO\r\n\r\nexport const isOrderPlugin = () => getEnv().IS_ORDER_PLUGIN\r\n\r\nexport const isWebGlobal = () => getEnv().IS_WEB_GLOBAL\r\n\r\nexport const isEmbeddedFront = () => isWebCustomer() || isOrderPlugin()\r\n\r\nexport const getGoogleMapApiUrl = () => getEnv().Google.Map.API_URL\r\n\r\nexport const getGoogleMapApiVersion = () => getEnv().Google.Map.API_VERSION\r\n\r\nexport const getGoogleMapApiKey = () => getEnv().Google.Map.API_KEY\r\n\r\nexport const hasAuthEnabled = () => getEnv().HAS_AUTH_ENABLED || (!isBo() && !isKiosk())\r\n\r\nexport const shouldUseAppConfig = () => {\r\n  // we do not want to load app config on kiosk login page, since we define the api consumer to use\r\n  // on the login page, not before\r\n  if (isKiosk() && window.location.pathname.endsWith('/login')) {\r\n    return false\r\n  }\r\n  return getEnv().SHOULD_USE_APP_CONFIG || false\r\n}\r\n\r\nexport const isLocalhost = () => window.location.hostname === 'localhost'\r\n\r\n/**\r\n * Check if the current hostname is localhost or a private local IP address (IPv4 or IPv6).\r\n *\r\n * @returns {boolean}\r\n */\r\nexport const isLocalhostOrPrivateIp = () => {\r\n  const hostname = window.location.hostname\r\n\r\n  // Localhost\r\n  if (hostname === 'localhost') {\r\n    return true\r\n  }\r\n\r\n  // Private IPv4 (RFC 1918)\r\n  if (hostname.startsWith('10.')) {\r\n    return true\r\n  }\r\n  if (hostname.startsWith('192.168.')) {\r\n    return true\r\n  }\r\n  if (hostname.startsWith('172.')) {\r\n    const secondOctet = parseInt(hostname.split('.')[1], 10)\r\n    if (secondOctet >= 16 && secondOctet <= 31) {\r\n      return true\r\n    }\r\n  }\r\n\r\n  // IPv6 localhost\r\n  if (hostname === '::1') {\r\n    return true\r\n  }\r\n\r\n  // IPv6 link-local (fe80::)\r\n  if (hostname.startsWith('fe80:')) {\r\n    return true\r\n  }\r\n\r\n  // IPv6 unique local (fc00::)\r\n  if (hostname.startsWith('fc00::')) {\r\n    return true\r\n  }\r\n\r\n  return false\r\n}\r\n\r\nexport const __DEV__ = process.env.__DEV__\r\n\r\nexport const __VERSION__ = process.env.__VERSION__\r\n\r\nexport const __SDK_GIT_COMMIT__ = process.env.__SDK_GIT_COMMIT__\r\nexport const __APP_GIT_COMMIT__ = process.env.__APP_GIT_COMMIT__\r\n\r\nexport const __SDK_GIT_BRANCH__ = process.env.__SDK_GIT_BRANCH__\r\nexport const __APP_GIT_BRANCH__ = process.env.__APP_GIT_BRANCH__\r\n\r\nexport const __VERSION_GIT_HASH__ = `${__APP_GIT_COMMIT__}_${__SDK_GIT_COMMIT__}`\r\n\r\nexport const getPublicUrl = () => (isLocalhostOrPrivateIp() ? '' : 'https://' + getEnv().HOSTNAME)\r\n\r\nexport const shouldDisplayReportDialog = () => getEnv().Logger.DISPLAY_REPORT_DIALOG\r\n\r\nexport const getSentryUrl = () => getEnv().Logger.SENTRY_URL\r\n","\r\n\r\n//\r\n// Reference for our redux store\r\n//\r\n\r\nlet _store\r\n\r\nexport const registerStore = (store) => {\r\n  _store = store\r\n}\r\n\r\nexport const getStore = () => _store\r\n","import invariant from 'invariant'\r\n\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nconst createAction = (type, data, callback = null) => dispatch => {\r\n  if (callback !== null) {\r\n    callback()\r\n  }\r\n\r\n  invariant(isNil(data) || isUndefined(data.type), 'data cannot contain a type parameter')\r\n\r\n  invariant(!isNil(type), 'type is nil')\r\n  invariant(\r\n    isFunction(dispatch),\r\n    'action is not correctly initialized: const myAction = () => creatAction(...'\r\n  )\r\n\r\n  return dispatch({\r\n    type,\r\n    ...data,\r\n  })\r\n}\r\n\r\nexport default createAction\r\n","const createReducer = (initialState, fnMap) => (state = initialState, action) => {\r\n  const handler = fnMap[action.type]\r\n\r\n  return handler ? handler(state, action) : state\r\n}\r\n\r\nexport default createReducer\r\n","function defaultEqualityCheck(a, b) {\n  return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n  if (prev === null || next === null || prev.length !== next.length) {\n    return false;\n  }\n\n  // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n  var length = prev.length;\n  for (var i = 0; i < length; i++) {\n    if (!equalityCheck(prev[i], next[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexport function defaultMemoize(func) {\n  var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n  var lastArgs = null;\n  var lastResult = null;\n  // we reference arguments instead of spreading them for performance reasons\n  return function () {\n    if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n      // apply arguments instead of spreading for performance.\n      lastResult = func.apply(null, arguments);\n    }\n\n    lastArgs = arguments;\n    return lastResult;\n  };\n}\n\nfunction getDependencies(funcs) {\n  var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n  if (!dependencies.every(function (dep) {\n    return typeof dep === 'function';\n  })) {\n    var dependencyTypes = dependencies.map(function (dep) {\n      return typeof dep;\n    }).join(', ');\n    throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n  }\n\n  return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n  for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    memoizeOptions[_key - 1] = arguments[_key];\n  }\n\n  return function () {\n    for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      funcs[_key2] = arguments[_key2];\n    }\n\n    var recomputations = 0;\n    var resultFunc = funcs.pop();\n    var dependencies = getDependencies(funcs);\n\n    var memoizedResultFunc = memoize.apply(undefined, [function () {\n      recomputations++;\n      // apply arguments instead of spreading for performance.\n      return resultFunc.apply(null, arguments);\n    }].concat(memoizeOptions));\n\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n    var selector = memoize(function () {\n      var params = [];\n      var length = dependencies.length;\n\n      for (var i = 0; i < length; i++) {\n        // apply arguments instead of spreading and mutate a local list of params for performance.\n        params.push(dependencies[i].apply(null, arguments));\n      }\n\n      // apply arguments instead of spreading for performance.\n      return memoizedResultFunc.apply(null, params);\n    });\n\n    selector.resultFunc = resultFunc;\n    selector.dependencies = dependencies;\n    selector.recomputations = function () {\n      return recomputations;\n    };\n    selector.resetRecomputations = function () {\n      return recomputations = 0;\n    };\n    return selector;\n  };\n}\n\nexport var createSelector = createSelectorCreator(defaultMemoize);\n\nexport function createStructuredSelector(selectors) {\n  var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n  if (typeof selectors !== 'object') {\n    throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n  }\n  var objectKeys = Object.keys(selectors);\n  return selectorCreator(objectKeys.map(function (key) {\n    return selectors[key];\n  }), function () {\n    for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      values[_key3] = arguments[_key3];\n    }\n\n    return values.reduce(function (composition, value, index) {\n      composition[objectKeys[index]] = value;\n      return composition;\n    }, {});\n  });\n}","var arrayPush = require('./_arrayPush'),\n    baseFlatten = require('./_baseFlatten'),\n    copyArray = require('./_copyArray'),\n    isArray = require('./isArray');\n\n/**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\nfunction concat() {\n  var length = arguments.length;\n  if (!length) {\n    return [];\n  }\n  var args = Array(length - 1),\n      array = arguments[0],\n      index = length;\n\n  while (index--) {\n    args[index - 1] = arguments[index];\n  }\n  return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n}\n\nmodule.exports = concat;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\nfunction uniqWith(array, comparator) {\n  comparator = typeof comparator == 'function' ? comparator : undefined;\n  return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n}\n\nmodule.exports = uniqWith;\n","import Immutable from 'immutable'\r\nimport invariant from 'invariant'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport concat from 'lodash/concat'\r\nimport uniqWith from 'lodash/uniqWith'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\n/**\r\n * Generate a simple reducer with basic REQUEST / SUCCESS / FAILURE\r\n * @param  {string} actionType  Action to be reduced\r\n * @return {Immutable}          Updated state\r\n */\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  data: null,\r\n  pagination: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\n/**\r\n * @param options\r\n *  - onShouldReset. By default when the cursor 'before' is null, we reset the data, since it is the\r\n *    first page. On certains cases, we do not want to reset the data, even if our pagination has\r\n *    changed. This method should return false in this case. It receives the Api action reponse.\r\n */\r\nconst createPaginateReducer = (\r\n  actionType,\r\n  reducer = null,\r\n  options = {\r\n    isTypeCursor: true,\r\n    isTypePage: false,\r\n  }\r\n) => (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case actionType.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        error: null,\r\n      })\r\n\r\n    case actionType.SUCCESS:\r\n      let newList = []\r\n\r\n      /**\r\n       * A null before cursor means we ran the action to load the first\r\n       * data page. In this case, we don't merge the data,\r\n       * we reset it.\r\n       */\r\n\r\n      let isFirstPage = false\r\n      switch (true) {\r\n        case options.isTypeCursor === true:\r\n          isFirstPage =\r\n            isEmpty(action.response?.paging?.cursors?.before) &&\r\n            (!options.onShouldReset || options.onShouldReset(action) === true)\r\n          break\r\n\r\n        case options.isTypePage === true:\r\n          isFirstPage =\r\n            action.response?.paging?.page === 0 &&\r\n            (!options.onShouldReset || options.onShouldReset(action) === true)\r\n          break\r\n\r\n        default:\r\n      }\r\n\r\n      if (isFirstPage) {\r\n        newList = action.response.data\r\n      } else {\r\n        let currentList = state.getIn(['data'])\r\n        if (!isNil(currentList)) {\r\n          currentList = currentList\r\n            .valueSeq()\r\n            .toArray()\r\n            .map(item => {\r\n              return item.toJS()\r\n            })\r\n        } else {\r\n          currentList = []\r\n        }\r\n\r\n        newList = concat(currentList, action.response.data)\r\n        // TODO: provide option that gives a callback instead of comparing id\r\n        newList = uniqWith(newList, (a, b) => a.id === b.id)\r\n      }\r\n\r\n      return state.merge({\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n        data: Immutable.fromJS(newList),\r\n        paging: action.response.paging,\r\n      })\r\n\r\n    case actionType.FAILURE:\r\n      return state.merge({\r\n        data: null,\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      if (reducer !== null) {\r\n        invariant(\r\n          isFunction(reducer) || isObject(reducer),\r\n          'reducer must be a function or an object'\r\n        )\r\n        let res\r\n        if (isFunction(reducer)) {\r\n          res = reducer(state, action)\r\n        } else {\r\n          const func = reducer[action.type]\r\n          if (!func) {\r\n            // no reducer function found for the action type.\r\n            return state\r\n          }\r\n          res = func(state, action)\r\n        }\r\n        invariant(!isUndefined(res), 'reducer returned undefined')\r\n        return res\r\n      }\r\n      return state\r\n  }\r\n}\r\n\r\ncreatePaginateReducer.DEFAULT_STATE = DEFAULT_STATE\r\n\r\nexport default createPaginateReducer\r\n","// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n  return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n  return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n  return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isNaN(wat) {\n  return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n  try {\n    return wat instanceof base;\n  } catch (_e) {\n    return false;\n  }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isNaN, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { isVueViewModel, isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction safeJoin(input, delimiter) {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if (isVueViewModel(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n  value,\n  pattern,\n  requireExactStringMatch = false,\n) {\n  if (!isString(value)) {\n    return false;\n  }\n\n  if (isRegExp(pattern)) {\n    return pattern.test(value);\n  }\n  if (isString(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n  testString,\n  patterns = [],\n  requireExactStringMatch = false,\n) {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","import { isInstanceOf } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nfunction applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation,\n  parser,\n  maxValueLimit = 250,\n  key,\n  limit,\n  event,\n  hint,\n) {\n  if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = truncateAggregateExceptions(\n      aggregateExceptionsFromError(\n        exceptionFromErrorImplementation,\n        parser,\n        limit,\n        hint.originalException ,\n        key,\n        event.exception.values,\n        originalException,\n        0,\n      ),\n      maxValueLimit,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation,\n  parser,\n  limit,\n  error,\n  key,\n  prevExceptions,\n  exception,\n  exceptionId,\n) {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  // Recursively call this function in order to walk down a chain of errors\n  if (isInstanceOf(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if (isInstanceOf(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId) {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception,\n  source,\n  exceptionId,\n  parentId,\n) {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions, maxValueLength) {\n  return exceptions.map(exception => {\n    if (exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n    return exception;\n  });\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","/** Internal global with common properties and Sentry extensions  */\n\n// The code below for 'isGlobalObj' and 'GLOBAL_OBJ' was copied from core-js before modification\n// https://github.com/zloirock/core-js/blob/1b944df55282cdc99c90db5f49eb0b6eda2cc0a3/packages/core-js/internals/global.js\n// core-js has the following licence:\n//\n// Copyright (c) 2014-2022 Denis Pushkarev\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n/** Returns 'obj' if it's the global object, otherwise returns undefined */\nfunction isGlobalObj(obj) {\n  return obj && obj.Math == Math ? obj : undefined;\n}\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ =\n  (typeof globalThis == 'object' && isGlobalObj(globalThis)) ||\n  // eslint-disable-next-line no-restricted-globals\n  (typeof window == 'object' && isGlobalObj(window)) ||\n  (typeof self == 'object' && isGlobalObj(self)) ||\n  (typeof global == 'object' && isGlobalObj(global)) ||\n  (function () {\n    return this;\n  })() ||\n  {};\n\n/**\n * @deprecated Use GLOBAL_OBJ instead or WINDOW from @sentry/browser. This will be removed in v8\n */\nfunction getGlobalObject() {\n  return GLOBAL_OBJ ;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n  const gbl = (obj || GLOBAL_OBJ) ;\n  const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n  const singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n  return singleton;\n}\n\nexport { GLOBAL_OBJ, getGlobalObject, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","import { isString } from './is.js';\nimport { getGlobalObject } from './worldwide.js';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n  elem,\n  options = {},\n) {\n  if (!elem) {\n    return '<unknown>';\n  }\n\n  // try/catch both:\n  // - accessing event.target (see getsentry/raven-js#838, #768)\n  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n  // - can throw an exception in some circumstances.\n  try {\n    let currentElem = elem ;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n  const elem = el\n\n;\n\n  const out = [];\n  let className;\n  let classes;\n  let key;\n  let attr;\n  let i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  // @ts-expect-error WINDOW has HTMLElement\n  if (WINDOW.HTMLElement) {\n    // If using the component name annotation plugin, this value may be available on the DOM node\n    if (elem instanceof HTMLElement && elem.dataset && elem.dataset['sentryComponent']) {\n      return elem.dataset['sentryComponent'];\n    }\n  }\n\n  out.push(elem.tagName.toLowerCase());\n\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs =\n    keyAttrs && keyAttrs.length\n      ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n      : null;\n\n  if (keyAttrPairs && keyAttrPairs.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\n\n    // eslint-disable-next-line prefer-const\n    className = elem.className;\n    if (className && isString(className)) {\n      classes = className.split(/\\s+/);\n      for (i = 0; i < classes.length; i++) {\n        out.push(`.${classes[i]}`);\n      }\n    }\n  }\n  const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n  for (i = 0; i < allowedAttrs.length; i++) {\n    key = allowedAttrs[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push(`[${key}=\"${attr}\"]`);\n    }\n  }\n  return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n  try {\n    return WINDOW.document.location.href;\n  } catch (oO) {\n    return '';\n  }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getDomElement(selector) {\n  if (WINDOW.document && WINDOW.document.querySelector) {\n    return WINDOW.document.querySelector(selector) ;\n  }\n  return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` attribute. This attribute is added at build-time\n * by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nfunction getComponentName(elem) {\n  // @ts-expect-error WINDOW has HTMLElement\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n\n  let currentElem = elem ;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n    if (!currentElem) {\n      return null;\n    }\n\n    if (currentElem instanceof HTMLElement && currentElem.dataset['sentryComponent']) {\n      return currentElem.dataset['sentryComponent'];\n    }\n\n    currentElem = currentElem.parentNode;\n  }\n\n  return null;\n}\n\nexport { getComponentName, getDomElement, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** JSDoc */\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n  if (!('console' in GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = GLOBAL_OBJ.console ;\n  const wrappedFuncs = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level] ;\n    wrappedFuncs[level] = console[level] ;\n    console[level] = originalConsoleMethod;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] ;\n    });\n  }\n}\n\nfunction makeLogger() {\n  let enabled = false;\n  const logger = {\n    enable: () => {\n      enabled = true;\n    },\n    disable: () => {\n      enabled = false;\n    },\n    isEnabled: () => enabled,\n  };\n\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach(name => {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      logger[name] = (...args) => {\n        if (enabled) {\n          consoleSandbox(() => {\n            GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n          });\n        }\n      };\n    });\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      logger[name] = () => undefined;\n    });\n  }\n\n  return logger ;\n}\n\nconst logger = makeLogger();\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { consoleSandbox, logger } from './logger.js';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nfunction dsnToString(dsn, withPassword = false) {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nfunction dsnFromString(str) {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    consoleSandbox(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() ;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol , publicKey });\n}\n\nfunction dsnFromComponents(components) {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn) {\n  if (!DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      logger.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nfunction makeDsn(from) {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n\nexport { dsnFromString, dsnToString, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","/** An error emitted by Sentry SDKs and related utilities. */\nclass SentryError extends Error {\n  /** Display name of this error instance. */\n\n   constructor( message, logLevel = 'warn') {\n    super(message);this.message = message;\n    this.name = new.target.prototype.constructor.name;\n    // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n    // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n    // instances of `SentryError` fail `obj instanceof SentryError` checks.\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.logLevel = logLevel;\n  }\n}\n\nexport { SentryError };\n//# sourceMappingURL=error.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n  if (!(name in source)) {\n    return;\n  }\n\n  const original = source[name] ;\n  const wrapped = replacementFactory(original) ;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    markFunctionWrapped(wrapped, original);\n  }\n\n  source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value: value,\n      writable: true,\n      configurable: true,\n    });\n  } catch (o_O) {\n    DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nfunction getOriginalFunction(func) {\n  return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nfunction urlEncode(object) {\n  return Object.keys(object)\n    .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n    .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n *  an Error.\n */\nfunction convertToPlainObject(\n  value,\n)\n\n {\n  if (isError(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if (isEvent(value)) {\n    const newObj\n\n = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n  try {\n    return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n  } catch (_oO) {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj )[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  if (!keys.length) {\n    return '[object has no keys]';\n  }\n\n  if (keys[0].length >= maxLength) {\n    return truncate(keys[0], maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n  if (isPojo(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal ;\n    }\n\n    const returnValue = {};\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    for (const key of Object.keys(inputValue)) {\n      if (typeof inputValue[key] !== 'undefined') {\n        returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n      }\n    }\n\n    return returnValue ;\n  }\n\n  if (Array.isArray(inputValue)) {\n    // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n    const memoVal = memoizationMap.get(inputValue);\n    if (memoVal !== undefined) {\n      return memoVal ;\n    }\n\n    const returnValue = [];\n    // Store the mapping of this value in case we visit it again, in case of circular data\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach((item) => {\n      returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n    });\n\n    return returnValue ;\n  }\n\n  return inputValue;\n}\n\nfunction isPojo(input) {\n  if (!isPlainObject(input)) {\n    return false;\n  }\n\n  try {\n    const name = (Object.getPrototypeOf(input) ).constructor.name;\n    return !name || name === 'Object';\n  } catch (e) {\n    return true;\n  }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n  let objectified;\n  switch (true) {\n    case wat === undefined || wat === null:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case isPrimitive(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat ).constructor(wat);\n      break;\n\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","import { node } from './node-stack-trace.js';\nexport { filenameIsInApp } from './node-stack-trace.js';\n\nconst STACKTRACE_FRAME_LIMIT = 50;\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack, skipFirst = 0) => {\n    const frames = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirst; i < lines.length; i++) {\n      const line = lines[i];\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames);\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the hub itself, making it:\n    //\n    //   Sentry.captureException()\n    //   getCurrentHub().captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || localStack[localStack.length - 1].filename,\n    function: frame.function || '?',\n  }));\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nfunction nodeStackLineParser(getModule) {\n  return [90, node(getModule)];\n}\n\nexport { createStackParser, getFunctionName, nodeStackLineParser, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { DEBUG_BUILD } from '../debug-build.js';\nimport { logger } from '../logger.js';\nimport { getFunctionName } from '../stacktrace.js';\n\n// We keep the handlers globally\nconst handlers = {};\nconst instrumented = {};\n\n/** Add a handler function. */\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] ).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nfunction resetInstrumentationHandlers() {\n  Object.keys(handlers).forEach(key => {\n    handlers[key ] = undefined;\n  });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nfunction maybeInstrument(type, instrumentFn) {\n  if (!instrumented[type]) {\n    instrumentFn();\n    instrumented[type] = true;\n  }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nfunction triggerHandlers(type, data) {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      DEBUG_BUILD &&\n        logger.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers };\n//# sourceMappingURL=_handlers.js.map\n","import { CONSOLE_LEVELS, originalConsoleMethods } from '../logger.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addConsoleInstrumentationHandler(handler) {\n  const type = 'console';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole() {\n  if (!('console' in GLOBAL_OBJ)) {\n    return;\n  }\n\n  CONSOLE_LEVELS.forEach(function (level) {\n    if (!(level in GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod) {\n      originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args) {\n        const handlerData = { args, level };\n        triggerHandlers('console', handlerData);\n\n        const log = originalConsoleMethods[level];\n        log && log.apply(GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n\nexport { addConsoleInstrumentationHandler };\n//# sourceMappingURL=console.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n  const gbl = GLOBAL_OBJ ;\n  const crypto = gbl.crypto || gbl.msCrypto;\n\n  let getRandomByte = () => Math.random() * 16;\n  try {\n    if (crypto && crypto.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto && crypto.getRandomValues) {\n      getRandomByte = () => {\n        // crypto.getRandomValues might return undefined instead of the typed array\n        // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n        // However, `typedArray` is still filled in-place.\n        // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n        const typedArray = new Uint8Array(1);\n        crypto.getRandomValues(typedArray);\n        return typedArray[0];\n      };\n    }\n  } catch (_) {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event) {\n  return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || '<unknown>';\n  }\n  return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const firstException = (values[0] = values[0] || {});\n  if (!firstException.value) {\n    firstException.value = value || '';\n  }\n  if (!firstException.type) {\n    firstException.type = type || 'Error';\n  }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = parseInt(match[1], 10);\n  const minor = parseInt(match[2], 10);\n  const patch = parseInt(match[3], 10);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line) => snipLine(line, 0));\n\n  frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (exception && (exception ).__sentry_captured__) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    addNonEnumerableProperty(exception , '__sentry_captured__', true);\n  } catch (err) {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nfunction arrayify(maybeArray) {\n  return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { uuid4 } from '../misc.js';\nimport { fill, addNonEnumerableProperty } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nconst WINDOW = GLOBAL_OBJ ;\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addClickKeypressInstrumentationHandler(handler) {\n  const type = 'dom';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nfunction instrumentDOM() {\n  if (!WINDOW.document) {\n    return;\n  }\n\n  // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n  // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n  // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n  const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n  // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n  // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n  // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n  // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n  // guaranteed to fire at least once.)\n  ['EventTarget', 'Node'].forEach((target) => {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const proto = (WINDOW )[target] && (WINDOW )[target].prototype;\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n    if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n      return;\n    }\n\n    fill(proto, 'addEventListener', function (originalAddEventListener) {\n      return function (\n\n        type,\n        listener,\n        options,\n      ) {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const el = this ;\n            const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\n          } catch (e) {\n            // Accessing dom properties is always fragile.\n            // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n          }\n        }\n\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    fill(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener) {\n        return function (\n\n          type,\n          listener,\n          options,\n        ) {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const el = this ;\n              const handlers = el.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\n                // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = undefined;\n                  delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete el.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch (e) {\n              // Accessing dom properties is always fragile.\n              // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n            }\n          }\n\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event) {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n\n  try {\n    // If both events have the same type, it's still possible that actions were performed on different targets.\n    // e.g. 2 clicks on different buttons.\n    if (!event.target || (event.target )._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n  // to which an event listener was attached), we treat them as the same action, as we want to capture\n  // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n  return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType, target) {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\n\n  if (!target || !target.tagName) {\n    return true;\n  }\n\n  // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n  // e.g.tabbing through elements, hotkeys, etc.\n  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n  handler,\n  globalListener = false,\n) {\n  return (event) => {\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors).\n    // Ignore if we've already captured that event.\n    if (!event || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      addNonEnumerableProperty(target, '_sentryId', uuid4());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n    // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\n    }\n\n    // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n    clearTimeout(debounceTimerID);\n    debounceTimerID = WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\nfunction getEventTarget(event) {\n  try {\n    return event.target ;\n  } catch (e) {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n    return null;\n  }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { logger } from './logger.js';\nimport { getGlobalObject } from './worldwide.js';\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMError() {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMException() {\n  try {\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsFetch() {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFetch(func) {\n  return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nfunction supportsNativeFetch() {\n  if (typeof EdgeRuntime === 'string') {\n    return true;\n  }\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFetch(WINDOW.fetch)) {\n    return true;\n  }\n\n  // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n  // so create a \"pure\" iframe to see if that has native fetch\n  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement ) === 'function') {\n    try {\n      const sandbox = doc.createElement('iframe');\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        result = isNativeFetch(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      DEBUG_BUILD &&\n        logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReportingObserver() {\n  return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReferrerPolicy() {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n  // (see https://caniuse.com/#feat=referrer-policy),\n  // it doesn't. And it throws an exception instead of ignoring this parameter...\n  // REF: https://github.com/getsentry/raven-js/issues/1233\n\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' ,\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport { isNativeFetch, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver };\n//# sourceMappingURL=supports.js.map\n","import { fill } from '../object.js';\nimport { supportsNativeFetch } from '../supports.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addFetchInstrumentationHandler(handler) {\n  const type = 'fetch';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentFetch);\n}\n\nfunction instrumentFetch() {\n  if (!supportsNativeFetch()) {\n    return;\n  }\n\n  fill(GLOBAL_OBJ, 'fetch', function (originalFetch) {\n    return function (...args) {\n      const { method, url } = parseFetchArgs(args);\n\n      const handlerData = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: Date.now(),\n      };\n\n      triggerHandlers('fetch', {\n        ...handlerData,\n      });\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(GLOBAL_OBJ, args).then(\n        (response) => {\n          const finishedHandlerData = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            response,\n          };\n\n          triggerHandlers('fetch', finishedHandlerData);\n          return response;\n        },\n        (error) => {\n          const erroredHandlerData = {\n            ...handlerData,\n            endTimestamp: Date.now(),\n            error,\n          };\n\n          triggerHandlers('fetch', erroredHandlerData);\n          // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n          //       it means the sentry.javascript SDK caught an error invoking your application code.\n          //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n          throw error;\n        },\n      );\n    };\n  });\n}\n\nfunction hasProp(obj, prop) {\n  return !!obj && typeof obj === 'object' && !!(obj )[prop];\n}\n\nfunction getUrlFromResource(resource) {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nfunction parseFetchArgs(fetchArgs) {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs ;\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg ),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n\nexport { addFetchInstrumentationHandler, parseFetchArgs };\n//# sourceMappingURL=fetch.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nlet _oldOnErrorHandler = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalErrorInstrumentationHandler(handler) {\n  const type = 'error';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError() {\n  _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n  GLOBAL_OBJ.onerror = function (\n    msg,\n    url,\n    line,\n    column,\n    error,\n  ) {\n    const handlerData = {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    };\n    triggerHandlers('error', handlerData);\n\n    if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalErrorInstrumentationHandler };\n//# sourceMappingURL=globalError.js.map\n","import { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nlet _oldOnUnhandledRejectionHandler = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalUnhandledRejectionInstrumentationHandler(\n  handler,\n) {\n  const type = 'unhandledrejection';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection() {\n  _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n  GLOBAL_OBJ.onunhandledrejection = function (e) {\n    const handlerData = e;\n    triggerHandlers('unhandledrejection', handlerData);\n\n    if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\nexport { addGlobalUnhandledRejectionInstrumentationHandler };\n//# sourceMappingURL=globalUnhandledRejection.js.map\n","import { getGlobalObject } from '../worldwide.js';\n\n// Based on https://github.com/angular/angular.js/pull/13945/files\n\n// eslint-disable-next-line deprecation/deprecation\nconst WINDOW = getGlobalObject();\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsHistory() {\n  // NOTE: in Chrome App environment, touching history.pushState, *even inside\n  //       a try/catch block*, will cause Chrome to output an error to console.error\n  // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n  /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const chromeVar = (WINDOW ).chrome;\n  const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime;\n  /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n  const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n  return !isChromePackagedApp && hasHistoryApi;\n}\n\nexport { supportsHistory };\n//# sourceMappingURL=supportsHistory.js.map\n","import { fill } from '../object.js';\nimport '../debug-build.js';\nimport '../logger.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { supportsHistory } from '../vendor/supportsHistory.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet lastHref;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addHistoryInstrumentationHandler(handler) {\n  const type = 'history';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory() {\n  if (!supportsHistory()) {\n    return;\n  }\n\n  const oldOnPopState = WINDOW.onpopstate;\n  WINDOW.onpopstate = function ( ...args) {\n    const to = WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n    const handlerData = { from, to };\n    triggerHandlers('history', handlerData);\n    if (oldOnPopState) {\n      // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n      // https://github.com/getsentry/sentry-javascript/issues/3344\n      // https://github.com/bugsnag/bugsnag-js/issues/469\n      try {\n        return oldOnPopState.apply(this, args);\n      } catch (_oO) {\n        // no-empty\n      }\n    }\n  };\n\n  function historyReplacementFunction(originalHistoryFunction) {\n    return function ( ...args) {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        // coerce to string (this is what pushState does)\n        const from = lastHref;\n        const to = String(url);\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n        const handlerData = { from, to };\n        triggerHandlers('history', handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  fill(WINDOW.history, 'pushState', historyReplacementFunction);\n  fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nexport { addHistoryInstrumentationHandler };\n//# sourceMappingURL=history.js.map\n","import { isString } from '../is.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './_handlers.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addXhrInstrumentationHandler(handler) {\n  const type = 'xhr';\n  addHandler(type, handler);\n  maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nfunction instrumentXHR() {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  if (!(WINDOW ).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  fill(xhrproto, 'open', function (originalOpen) {\n    return function ( ...args) {\n      const startTimestamp = Date.now();\n\n      // open() should always be called with two or more arguments\n      // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n      const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n      const url = parseUrl(args[1]);\n\n      if (!method || !url) {\n        return originalOpen.apply(this, args);\n      }\n\n      this[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {},\n      };\n\n      // if Sentry key appears in URL, don't capture it as a request\n      if (method === 'POST' && url.match(/sentry_key/)) {\n        this.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (this.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = this.status;\n          } catch (e) {\n            /* do nothing */\n          }\n\n          const handlerData = {\n            args: [method, url],\n            endTimestamp: Date.now(),\n            startTimestamp,\n            xhr: this,\n          };\n          triggerHandlers('xhr', handlerData);\n        }\n      };\n\n      if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n        fill(this, 'onreadystatechange', function (original) {\n          return function ( ...readyStateArgs) {\n            onreadystatechangeHandler();\n            return original.apply(this, readyStateArgs);\n          };\n        });\n      } else {\n        this.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      fill(this, 'setRequestHeader', function (original) {\n        return function ( ...setRequestHeaderArgs) {\n          const [header, value] = setRequestHeaderArgs;\n\n          const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo && isString(header) && isString(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return original.apply(this, setRequestHeaderArgs);\n        };\n      });\n\n      return originalOpen.apply(this, args);\n    };\n  });\n\n  fill(xhrproto, 'send', function (originalSend) {\n    return function ( ...args) {\n      const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n\n      if (!sentryXhrData) {\n        return originalSend.apply(this, args);\n      }\n\n      if (args[0] !== undefined) {\n        sentryXhrData.body = args[0];\n      }\n\n      const handlerData = {\n        args: [sentryXhrData.method, sentryXhrData.url],\n        startTimestamp: Date.now(),\n        xhr: this,\n      };\n      triggerHandlers('xhr', handlerData);\n\n      return originalSend.apply(this, args);\n    };\n  });\n}\n\nfunction parseUrl(url) {\n  if (isString(url)) {\n    return url;\n  }\n\n  try {\n    // url can be a string or URL\n    // but since URL is not available in IE11, we do not check for it,\n    // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n    // If that fails, we just return undefined\n    return (url ).toString();\n  } catch (e2) {} // eslint-disable-line no-empty\n\n  return undefined;\n}\n\nexport { SENTRY_XHR_DATA_KEY, addXhrInstrumentationHandler, instrumentXHR };\n//# sourceMappingURL=xhr.js.map\n","/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nfunction getSDKSource() {\n  // @ts-expect-error \"npm\" is injected by rollup during build process\n  return \"npm\";\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n  const hasWeakSet = typeof WeakSet === 'function';\n  const inner = hasWeakSet ? new WeakSet() : [];\n  function memoize(obj) {\n    if (hasWeakSet) {\n      if (inner.has(obj)) {\n        return true;\n      }\n      inner.add(obj);\n      return false;\n    }\n    // eslint-disable-next-line @typescript-eslint/prefer-for-of\n    for (let i = 0; i < inner.length; i++) {\n      const value = inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    inner.push(obj);\n    return false;\n  }\n\n  function unmemoize(obj) {\n    if (hasWeakSet) {\n      inner.delete(obj);\n    } else {\n      for (let i = 0; i < inner.length; i++) {\n        if (inner[i] === obj) {\n          inner.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n  return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.js.map\n","import { isNaN, isVueViewModel, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object,\n  // Default Node.js REPL depth\n  depth = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize = 100 * 1024,\n) {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key,\n  value,\n  depth = +Infinity,\n  maxProperties = +Infinity,\n  memo = memoBuilder(),\n) {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))\n  ) {\n    return value ;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value )['__sentry_skip_normalization__']) {\n    return value ;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value )['__sentry_override_normalization_depth__'] )\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value ;\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch (err) {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) ;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = convertToPlainObject(value );\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value,\n) {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if (isVueViewModel(value)) {\n      return '[VueViewModel]';\n    }\n\n    // React's SyntheticEvent thingy\n    if (isSyntheticEvent(value)) {\n      return '[SyntheticEvent]';\n    }\n\n    if (typeof value === 'number' && value !== value) {\n      return '[NaN]';\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${getFunctionName(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n  const prototype = Object.getPrototypeOf(value);\n\n  return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n  return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nfunction normalizeUrlToBase(url, basePath) {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch (_Oo) {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase, visit as walk };\n//# sourceMappingURL=normalize.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n  /** Pending */\n  const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n  /** Resolved / OK */\n  const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n  /** Rejected / Error */\n  const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n   constructor(\n    executor,\n  ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);\n    this._state = States.PENDING;\n    this._handlers = [];\n\n    try {\n      executor(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\n   then(\n    onfulfilled,\n    onrejected,\n  ) {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result );\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        reason => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n      ]);\n      this._executeHandlers();\n    });\n  }\n\n  /** JSDoc */\n   catch(\n    onrejected,\n  ) {\n    return this.then(val => val, onrejected);\n  }\n\n  /** JSDoc */\n   finally(onfinally) {\n    return new SyncPromise((resolve, reject) => {\n      let val;\n      let isRejected;\n\n      return this.then(\n        value => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        reason => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n\n        resolve(val );\n      });\n    });\n  }\n\n  /** JSDoc */\n    __init() {this._resolve = (value) => {\n    this._setResult(States.RESOLVED, value);\n  };}\n\n  /** JSDoc */\n    __init2() {this._reject = (reason) => {\n    this._setResult(States.REJECTED, reason);\n  };}\n\n  /** JSDoc */\n    __init3() {this._setResult = (state, value) => {\n    if (this._state !== States.PENDING) {\n      return;\n    }\n\n    if (isThenable(value)) {\n      void (value ).then(this._resolve, this._reject);\n      return;\n    }\n\n    this._state = state;\n    this._value = value;\n\n    this._executeHandlers();\n  };}\n\n  /** JSDoc */\n    __init4() {this._executeHandlers = () => {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === States.RESOLVED) {\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        handler[1](this._value );\n      }\n\n      if (this._state === States.REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { SentryError } from './error.js';\nimport { rejectedSyncPromise, SyncPromise, resolvedSyncPromise } from './syncpromise.js';\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nfunction makePromiseBuffer(limit) {\n  const buffer = [];\n\n  function isReady() {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task) {\n    return buffer.splice(buffer.indexOf(task), 1)[0];\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer) {\n    if (!isReady()) {\n      return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout) {\n    return new SyncPromise((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void resolvedSyncPromise(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n\nexport { makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nfunction parseUrl(url) {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nfunction stripUrlQueryAndFragment(urlPath) {\n  // eslint-disable-next-line no-useless-escape\n  return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nfunction getNumberOfUrlSegments(url) {\n  // split at '/' or at '\\/' to split regex urls correctly\n  return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span description\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nfunction getSanitizedUrlString(url) {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    (host &&\n      host\n        // Always filter out authority\n        .replace(/^.*@/, '[filtered]:[filtered]@')\n        // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n        // TODO: Use new URL global if it exists\n        .replace(/(:80)$/, '')\n        .replace(/(:443)$/, '')) ||\n    '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n\nexport { getNumberOfUrlSegments, getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment };\n//# sourceMappingURL=url.js.map\n","// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nconst validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nfunction severityFromString(level) {\n  return severityLevelFromString(level) ;\n}\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nfunction severityLevelFromString(level) {\n  return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') ;\n}\n\nexport { severityFromString, severityLevelFromString, validSeverityLevels };\n//# sourceMappingURL=severity.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nfunction dateTimestampInSeconds() {\n  return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n  const { performance } = GLOBAL_OBJ ;\n  if (!performance || !performance.now) {\n    return dateTimestampInSeconds;\n  }\n\n  // Some browser and environments don't have a timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  const approxStartingTimeOrigin = Date.now() - performance.now();\n  const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n  };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nconst timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Re-exported with an old name for backwards-compatibility.\n * TODO (v8): Remove this\n *\n * @deprecated Use `timestampInSeconds` instead.\n */\nconst timestampWithMs = timestampInSeconds;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nconst browserPerformanceTimeOrigin = (() => {\n  // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n  // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n  // data as reliable if they are within a reasonable threshold of the current time.\n\n  const { performance } = GLOBAL_OBJ ;\n  if (!performance || !performance.now) {\n    _browserPerformanceTimeOriginMode = 'none';\n    return undefined;\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  const navigationStart = performance.timing && performance.timing.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      _browserPerformanceTimeOriginMode = 'timeOrigin';\n      return performance.timeOrigin;\n    } else {\n      _browserPerformanceTimeOriginMode = 'navigationStart';\n      return navigationStart;\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n  _browserPerformanceTimeOriginMode = 'dateNow';\n  return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds, timestampWithMs };\n//# sourceMappingURL=time.js.map\n","import { dsnToString } from './dsn.js';\nimport { normalize } from './normalize.js';\nimport { dropUndefinedKeys } from './object.js';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction createEnvelope(headers, items = []) {\n  return [headers, items] ;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction addItemToEnvelope(envelope, newItem) {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]] ;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nfunction forEachEnvelopeItem(\n  envelope,\n  callback,\n) {\n  const envelopeItems = envelope[1];\n\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n\n    if (result) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nfunction envelopeContainsItemType(envelope, types) {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8.\n */\nfunction encodeUTF8(input, textEncoder) {\n  const utf8 = textEncoder || new TextEncoder();\n  return utf8.encode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nfunction serializeEnvelope(envelope, textEncoder) {\n  const [envHeaders, items] = envelope;\n\n  // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n  let parts = JSON.stringify(envHeaders);\n\n  function append(next) {\n    if (typeof parts === 'string') {\n      parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next];\n    } else {\n      parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next);\n    }\n  }\n\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n\n    append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n    if (typeof payload === 'string' || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch (e) {\n        // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n        // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n        // performance impact but in this case a performance hit is better than throwing.\n        stringifiedPayload = JSON.stringify(normalize(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n\n  return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers) {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n\n  return merged;\n}\n\n/**\n * Parses an envelope\n */\nfunction parseEnvelope(\n  env,\n  textEncoder,\n  textDecoder,\n) {\n  let buffer = typeof env === 'string' ? textEncoder.encode(env) : env;\n\n  function readBinary(length) {\n    const bin = buffer.subarray(0, length);\n    // Replace the buffer with the remaining data excluding trailing newline\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n\n  function readJson() {\n    let i = buffer.indexOf(0xa);\n    // If we couldn't find a newline, we must have found the end of the buffer\n    if (i < 0) {\n      i = buffer.length;\n    }\n\n    return JSON.parse(textDecoder.decode(readBinary(i))) ;\n  }\n\n  const envelopeHeader = readJson();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const items = [];\n\n  while (buffer.length) {\n    const itemHeader = readJson();\n    const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n\n  return [envelopeHeader, items];\n}\n\n/**\n * Creates attachment envelope items\n */\nfunction createAttachmentEnvelopeItem(\n  attachment,\n  textEncoder,\n) {\n  const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data;\n\n  return [\n    dropUndefinedKeys({\n      type: 'attachment',\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType,\n    }),\n    buffer,\n  ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP = {\n  session: 'session',\n  sessions: 'session',\n  attachment: 'attachment',\n  transaction: 'transaction',\n  event: 'error',\n  client_report: 'internal',\n  user_report: 'default',\n  profile: 'profile',\n  replay_event: 'replay',\n  replay_recording: 'replay',\n  check_in: 'monitor',\n  feedback: 'feedback',\n  span: 'span',\n  statsd: 'metric_bucket',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nfunction envelopeItemTypeToDataCategory(type) {\n  return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n  if (!metadataOrEvent || !metadataOrEvent.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nfunction createEventEnvelopeHeaders(\n  event,\n  sdkInfo,\n  tunnel,\n  dsn,\n) {\n  const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n  return {\n    event_id: event.event_id ,\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n    ...(dynamicSamplingContext && {\n      trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n    }),\n  };\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nfunction createClientReportEnvelope(\n  discarded_events,\n  dsn,\n  timestamp,\n) {\n  const clientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || dateTimestampInSeconds(),\n      discarded_events,\n    },\n  ];\n  return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nconst DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nfunction parseRetryAfterHeader(header, now = Date.now()) {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nfunction disabledUntil(limits, dataCategory) {\n  return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, dataCategory, now = Date.now()) {\n  return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nfunction updateRateLimits(\n  limits,\n  { statusCode, headers },\n  now = Date.now(),\n) {\n  const updatedRateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n  const retryAfterHeader = headers && headers['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     *     <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n     *         Only present if rate limit applies to the metric_bucket data category.\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories, , , namespaces] = limit.split(':', 5);\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          if (category === 'metric_bucket') {\n            // namespaces will be present when category === 'metric_bucket'\n            if (!namespaces || namespaces.split(';').includes('custom')) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { SyncPromise, logger, isThenable, getGlobalSingleton } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/**\n * Returns the global event processors.\n * @deprecated Global event processors will be removed in v8.\n */\nfunction getGlobalEventProcessors() {\n  return getGlobalSingleton('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @deprecated Use `addEventProcessor` instead. Global event processors will be removed in v8.\n */\nfunction addGlobalEventProcessor(callback) {\n  // eslint-disable-next-line deprecation/deprecation\n  getGlobalEventProcessors().push(callback);\n}\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n  processors,\n  event,\n  hint,\n  index = 0,\n) {\n  return new SyncPromise((resolve, reject) => {\n    const processor = processors[index];\n    if (event === null || typeof processor !== 'function') {\n      resolve(event);\n    } else {\n      const result = processor({ ...event }, hint) ;\n\n      DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if (isThenable(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n\nexport { addGlobalEventProcessor, getGlobalEventProcessors, notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { timestampInSeconds, uuid4, dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = timestampInSeconds();\n\n  const session = {\n    sid: uuid4(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || timestampInSeconds();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : uuid4();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n  return dropUndefinedKeys({\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds } from '@sentry/utils';\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n */\nfunction spanToTraceContext(span) {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, tags, origin } = spanToJSON(span);\n\n  return dropUndefinedKeys({\n    data,\n    op,\n    parent_span_id,\n    span_id,\n    status,\n    tags,\n    trace_id,\n    origin,\n  });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n * Note that all fields returned here are optional and need to be guarded against.\n *\n * Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n * This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n * And `spanToJSON` needs the Span class from `span.ts` to check here.\n * TODO v8: When we remove the deprecated stuff from `span.ts`, we can remove the circular dependency again.\n */\nfunction spanToJSON(span) {\n  if (spanIsSpanClass(span)) {\n    return span.getSpanJSON();\n  }\n\n  // Fallback: We also check for `.toJSON()` here...\n  // eslint-disable-next-line deprecation/deprecation\n  if (typeof span.toJSON === 'function') {\n    // eslint-disable-next-line deprecation/deprecation\n    return span.toJSON();\n  }\n\n  return {};\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSpanClass(span) {\n  return typeof (span ).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nfunction spanIsSampled(span) {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  // eslint-disable-next-line no-bitwise\n  return Boolean(traceFlags & TRACE_FLAG_SAMPLED);\n}\n\nexport { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, spanIsSampled, spanTimeInputToSeconds, spanToJSON, spanToTraceContext, spanToTraceHeader };\n//# sourceMappingURL=spanUtils.js.map\n","import { uuid4, dateTimestampInSeconds, addExceptionMechanism, truncate, GLOBAL_OBJ, normalize } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getGlobalEventProcessors, notifyEventProcessors } from '../eventProcessors.js';\nimport { getGlobalScope, Scope } from '../scope.js';\nimport { mergeScopeData, applyScopeDataToEvent } from './applyScopeDataToEvent.js';\nimport { spanToJSON } from './spanUtils.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * Note: This also triggers callbacks for `addGlobalEventProcessor`, but not `beforeSend`.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n  options,\n  event,\n  hint,\n  scope,\n  client,\n  isolationScope,\n) {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n  const prepared = {\n    ...event,\n    event_id: event.event_id || hint.event_id || uuid4(),\n    timestamp: event.timestamp || dateTimestampInSeconds(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    addExceptionMechanism(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client && client.getEventProcessors ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Hub.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = getGlobalScope().getScopeData();\n\n  if (isolationScope) {\n    const isolationData = isolationScope.getScopeData();\n    mergeScopeData(data, isolationData);\n  }\n\n  if (finalScope) {\n    const finalScopeData = finalScope.getScopeData();\n    mergeScopeData(data, finalScopeData);\n  }\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  applyScopeDataToEvent(prepared, data);\n\n  // TODO (v8): Update this order to be: Global > Client > Scope\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // eslint-disable-next-line deprecation/deprecation\n    ...getGlobalEventProcessors(),\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n *  Enhances event using the client configuration.\n *  It takes care of all \"static\" values like environment, release and `dist`,\n *  as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  if (!('environment' in event)) {\n    event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n  }\n\n  if (event.release === undefined && release !== undefined) {\n    event.release = release;\n  }\n\n  if (event.dist === undefined && dist !== undefined) {\n    event.dist = dist;\n  }\n\n  if (event.message) {\n    event.message = truncate(event.message, maxValueLength);\n  }\n\n  const exception = event.exception && event.exception.values && event.exception.values[0];\n  if (exception && exception.value) {\n    exception.value = truncate(exception.value, maxValueLength);\n  }\n\n  const request = event.request;\n  if (request && request.url) {\n    request.url = truncate(request.url, maxValueLength);\n  }\n}\n\nconst debugIdStackParserCache = new WeakMap();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n  const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n  if (!debugIdMap) {\n    return;\n  }\n\n  let debugIdStackFramesCache;\n  const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n  if (cachedDebugIdStackFrameCache) {\n    debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n  } else {\n    debugIdStackFramesCache = new Map();\n    debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n  }\n\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = Object.keys(debugIdMap).reduce((acc, debugIdStackTrace) => {\n    let parsedStack;\n    const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n    if (cachedParsedStack) {\n      parsedStack = cachedParsedStack;\n    } else {\n      parsedStack = stackParser(debugIdStackTrace);\n      debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n    }\n\n    for (let i = parsedStack.length - 1; i >= 0; i--) {\n      const stackFrame = parsedStack[i];\n      if (stackFrame.filename) {\n        acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n        break;\n      }\n    }\n    return acc;\n  }, {});\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception.values.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace.frames.forEach(frame => {\n        if (frame.filename) {\n          frame.debug_id = filenameDebugIdMap[frame.filename];\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap = {};\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception.values.forEach(exception => {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      exception.stacktrace.frames.forEach(frame => {\n        if (frame.debug_id) {\n          if (frame.abs_path) {\n            filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n          } else if (frame.filename) {\n            filenameDebugIdMap[frame.filename] = frame.debug_id;\n          }\n          delete frame.debug_id;\n        }\n      });\n    });\n  } catch (e) {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.keys(filenameDebugIdMap).forEach(filename => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id: filenameDebugIdMap[filename],\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n  if (!event) {\n    return null;\n  }\n\n  const normalized = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: normalize(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: normalize(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: normalize(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: normalize(event.extra, depth, maxBreadth),\n    }),\n  };\n\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts && event.contexts.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      const data = spanToJSON(span).data;\n\n      if (data) {\n        // This is a bit weird, as we generally have `Span` instances here, but to be safe we do not assume so\n        // eslint-disable-next-line deprecation/deprecation\n        span.data = normalize(data, depth, maxBreadth);\n      }\n\n      return span;\n    });\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope, captureContext) {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n  hint,\n) {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(\n  hint,\n) {\n  return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'requestSession',\n  'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { logger, uuid4, timestampInSeconds, isThenable, GLOBAL_OBJ } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { getCurrentHub, runWithAsyncContext, getIsolationScope } from './hub.js';\nimport { makeSession, updateSession, closeSession } from './session.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  exception,\n  hint,\n) {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(\n  message,\n  // eslint-disable-next-line deprecation/deprecation\n  captureContext,\n) {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param exception The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n *\n * @deprecated Use getCurrentScope() directly.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction configureScope(callback) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().configureScope(callback);\n}\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction addBreadcrumb(breadcrumb, hint) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().addBreadcrumb(breadcrumb, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, deprecation/deprecation\nfunction setContext(name, context) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setExtras(extras) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setExtra(key, extra) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setTags(tags) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setTag(key, value) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setUser(user) {\n  // eslint-disable-next-line deprecation/deprecation\n  getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n *     pushScope();\n *     callback();\n *     popScope();\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n  ...rest\n) {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n    if (!scope) {\n      // eslint-disable-next-line deprecation/deprecation\n      return hub.withScope(callback);\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    return hub.withScope(() => {\n      // eslint-disable-next-line deprecation/deprecation\n      hub.getStackTop().scope = scope ;\n      return callback(scope );\n    });\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  return hub.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * @param callback The callback in which the passed isolation scope is active. (Note: In environments without async\n * context strategy, the currently active isolation scope may change within execution of the callback.)\n * @returns The same value that `callback` returns.\n */\nfunction withIsolationScope(callback) {\n  return runWithAsyncContext(() => {\n    return callback(getIsolationScope());\n  });\n}\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback.\n *\n * @param span Spans started in the context of the provided callback will be children of this span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nfunction withActiveSpan(span, callback) {\n  return withScope(scope => {\n    // eslint-disable-next-line deprecation/deprecation\n    scope.setSpan(span);\n    return callback(scope);\n  });\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n *\n * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n */\nfunction startTransaction(\n  context,\n  customSamplingContext,\n  // eslint-disable-next-line deprecation/deprecation\n) {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().startTransaction({ ...context }, customSamplingContext);\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n  const scope = getCurrentScope();\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n  monitorSlug,\n  callback,\n  upsertMonitorConfig,\n) {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status) {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  let maybePromiseResult;\n  try {\n    maybePromiseResult = callback();\n  } catch (e) {\n    finishCheckIn('error');\n    throw e;\n  }\n\n  if (isThenable(maybePromiseResult)) {\n    Promise.resolve(maybePromiseResult).then(\n      () => {\n        finishCheckIn('ok');\n      },\n      () => {\n        finishCheckIn('error');\n      },\n    );\n  } else {\n    finishCheckIn('ok');\n  }\n\n  return maybePromiseResult;\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nfunction lastEventId() {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().lastEventId();\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getClient();\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n  return !!getClient();\n}\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getScope();\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n  const session = makeSession({\n    release,\n    environment,\n    user: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession && currentSession.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n  const client = getClient();\n  // TODO (v8): Remove currentScope and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session && client && client.captureSession) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nfunction captureSession(end = false) {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n\nexport { addBreadcrumb, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, configureScope, endSession, flush, getClient, getCurrentScope, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, startTransaction, withActiveSpan, withIsolationScope, withMonitor, withScope };\n//# sourceMappingURL=exports.js.map\n","/**\n * Returns the root span of a given span.\n *\n * As long as we use `Transaction`s internally, the returned root span\n * will be a `Transaction` but be aware that this might change in the future.\n *\n * If the given span has no root span or transaction, `undefined` is returned.\n */\nfunction getRootSpan(span) {\n  // TODO (v8): Remove this check and just return span\n  // eslint-disable-next-line deprecation/deprecation\n  return span.transaction;\n}\n\nexport { getRootSpan };\n//# sourceMappingURL=getRootSpan.js.map\n","import { dropUndefinedKeys } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getClient, getCurrentScope } from '../exports.js';\nimport { getRootSpan } from '../utils/getRootSpan.js';\nimport { spanToJSON, spanIsSampled } from '../utils/spanUtils.js';\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(\n  trace_id,\n  client,\n  scope,\n) {\n  const options = client.getOptions();\n\n  const { publicKey: public_key } = client.getDsn() || {};\n  // TODO(v8): Remove segment from User\n  // eslint-disable-next-line deprecation/deprecation\n  const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n  const dsc = dropUndefinedKeys({\n    environment: options.environment || DEFAULT_ENVIRONMENT,\n    release: options.release,\n    user_segment,\n    public_key,\n    trace_id,\n  }) ;\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\n/**\n * A Span with a frozen dynamic sampling context.\n */\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nfunction getDynamicSamplingContextFromSpan(span) {\n  const client = getClient();\n  if (!client) {\n    return {};\n  }\n\n  // passing emit=false here to only emit later once the DSC is actually populated\n  const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client, getCurrentScope());\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  const txn = getRootSpan(span) ;\n  if (!txn) {\n    return dsc;\n  }\n\n  // TODO (v8): Remove v7FrozenDsc as a Transaction will no longer have _frozenDynamicSamplingContext\n  // For now we need to avoid breaking users who directly created a txn with a DSC, where this field is still set.\n  // @see Transaction class constructor\n  const v7FrozenDsc = txn && txn._frozenDynamicSamplingContext;\n  if (v7FrozenDsc) {\n    return v7FrozenDsc;\n  }\n\n  // TODO (v8): Replace txn.metadata with txn.attributes[]\n  // We can't do this yet because attributes aren't always set yet.\n  // eslint-disable-next-line deprecation/deprecation\n  const { sampleRate: maybeSampleRate, source } = txn.metadata;\n  if (maybeSampleRate != null) {\n    dsc.sample_rate = `${maybeSampleRate}`;\n  }\n\n  // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n  const jsonSpan = spanToJSON(txn);\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  if (source && source !== 'url') {\n    dsc.transaction = jsonSpan.description;\n  }\n\n  dsc.sampled = String(spanIsSampled(txn));\n\n  client.emit && client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\nexport { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { dropUndefinedKeys, arrayify } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { getRootSpan } from './getRootSpan.js';\nimport { spanToTraceContext, spanToJSON } from './spanUtils.js';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\n\n  // We want to set the trace context for normal events only if there isn't already\n  // a trace context on the event. There is a product feature in place where we link\n  // errors with transaction and it relies on that.\n  if (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nfunction mergeScopeData(data, mergeData) {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n    span,\n  } = mergeData;\n\n  mergeAndOverwriteScopeData(data, 'extra', extra);\n  mergeAndOverwriteScopeData(data, 'tags', tags);\n  mergeAndOverwriteScopeData(data, 'user', user);\n  mergeAndOverwriteScopeData(data, 'contexts', contexts);\n  mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    // eslint-disable-next-line deprecation/deprecation\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n  if (mergeVal && Object.keys(mergeVal).length) {\n    // Clone object\n    data[prop] = { ...data[prop] };\n    for (const key in mergeVal) {\n      if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n        data[prop][key] = mergeVal[key];\n      }\n    }\n  }\n}\n\nfunction applyDataToEvent(event, data) {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    // eslint-disable-next-line deprecation/deprecation\n    transactionName,\n  } = data;\n\n  const cleanedExtra = dropUndefinedKeys(extra);\n  if (cleanedExtra && Object.keys(cleanedExtra).length) {\n    event.extra = { ...cleanedExtra, ...event.extra };\n  }\n\n  const cleanedTags = dropUndefinedKeys(tags);\n  if (cleanedTags && Object.keys(cleanedTags).length) {\n    event.tags = { ...cleanedTags, ...event.tags };\n  }\n\n  const cleanedUser = dropUndefinedKeys(user);\n  if (cleanedUser && Object.keys(cleanedUser).length) {\n    event.user = { ...cleanedUser, ...event.user };\n  }\n\n  const cleanedContexts = dropUndefinedKeys(contexts);\n  if (cleanedContexts && Object.keys(cleanedContexts).length) {\n    event.contexts = { ...cleanedContexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  if (transactionName) {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n  };\n}\n\nfunction applySpanToEvent(event, span) {\n  event.contexts = { trace: spanToTraceContext(span), ...event.contexts };\n  const rootSpan = getRootSpan(span);\n  if (rootSpan) {\n    event.sdkProcessingMetadata = {\n      dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n      ...event.sdkProcessingMetadata,\n    };\n    const transactionName = spanToJSON(rootSpan).description;\n    if (transactionName) {\n      event.tags = { transaction: transactionName, ...event.tags };\n    }\n  }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event, fingerprint) {\n  // Make sure it's an array first and we actually have something in place\n  event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n  // If we have something on the scope, then merge it with event\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\n\n  // If we have no data at all, remove empty array default\n  if (event.fingerprint && !event.fingerprint.length) {\n    delete event.fingerprint;\n  }\n}\n\nexport { applyScopeDataToEvent, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n","import { isPlainObject, dateTimestampInSeconds, uuid4, logger } from '@sentry/utils';\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors.js';\nimport { updateSession } from './session.js';\nimport { applyScopeDataToEvent } from './utils/applyScopeDataToEvent.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * The global scope is kept in this module.\n * When accessing this via `getGlobalScope()` we'll make sure to set one if none is currently present.\n */\nlet globalScope;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nclass Scope  {\n  /** Flag if notifying is happening. */\n\n  /** Callback for client to receive scope changes. */\n\n  /** Callback list that will be called after {@link applyToEvent}. */\n\n  /** Array of breadcrumbs. */\n\n  /** User */\n\n  /** Tags */\n\n  /** Extra */\n\n  /** Contexts */\n\n  /** Attachments */\n\n  /** Propagation Context for distributed tracing */\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n\n  /** Fingerprint */\n\n  /** Severity */\n  // eslint-disable-next-line deprecation/deprecation\n\n  /**\n   * Transaction Name\n   */\n\n  /** Span */\n\n  /** Session */\n\n  /** Request Mode Session Status */\n\n  /** The client on this scope */\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n   constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = generatePropagationContext();\n  }\n\n  /**\n   * Inherit values from the parent scope.\n   * @deprecated Use `scope.clone()` and `new Scope()` instead.\n   */\n   static clone(scope) {\n    return scope ? scope.clone() : new Scope();\n  }\n\n  /**\n   * Clone this scope instance.\n   */\n   clone() {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._span = this._span;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._requestSession = this._requestSession;\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n\n    return newScope;\n  }\n\n  /** Update the client on the scope. */\n   setClient(client) {\n    this._client = client;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   *\n   * It is generally recommended to use the global function `Sentry.getClient()` instead, unless you know what you are doing.\n   */\n   getClient() {\n    return this._client;\n  }\n\n  /**\n   * Add internal on change listener. Used for sub SDKs that need to store the scope.\n   * @hidden\n   */\n   addScopeListener(callback) {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addEventProcessor(callback) {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setUser(user) {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      segment: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      updateSession(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getUser() {\n    return this._user;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getRequestSession() {\n    return this._requestSession;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setRequestSession(requestSession) {\n    this._requestSession = requestSession;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTags(tags) {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setTag(key, value) {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setExtras(extras) {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setExtra(key, extra) {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setFingerprint(fingerprint) {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setLevel(\n    // eslint-disable-next-line deprecation/deprecation\n    level,\n  ) {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the transaction name on the scope for future events.\n   */\n   setTransactionName(name) {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setContext(key, context) {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the Span on the scope.\n   * @param span Span\n   * @deprecated Instead of setting a span on a scope, use `startSpan()`/`startSpanManual()` instead.\n   */\n   setSpan(span) {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Returns the `Span` if there is one.\n   * @deprecated Use `getActiveSpan()` instead.\n   */\n   getSpan() {\n    return this._span;\n  }\n\n  /**\n   * Returns the `Transaction` attached to the scope (if there is one).\n   * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n   */\n   getTransaction() {\n    // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n    // have a pointer to the currently-active transaction.\n    const span = this._span;\n    // Cannot replace with getRootSpan because getRootSpan returns a span, not a transaction\n    // Also, this method will be removed anyway.\n    // eslint-disable-next-line deprecation/deprecation\n    return span && span.transaction;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setSession(session) {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getSession() {\n    return this._session;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   update(captureContext) {\n    if (!captureContext) {\n      return this;\n    }\n\n    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    if (scopeToMerge instanceof Scope) {\n      const scopeData = scopeToMerge.getScopeData();\n\n      this._tags = { ...this._tags, ...scopeData.tags };\n      this._extra = { ...this._extra, ...scopeData.extra };\n      this._contexts = { ...this._contexts, ...scopeData.contexts };\n      if (scopeData.user && Object.keys(scopeData.user).length) {\n        this._user = scopeData.user;\n      }\n      if (scopeData.level) {\n        this._level = scopeData.level;\n      }\n      if (scopeData.fingerprint.length) {\n        this._fingerprint = scopeData.fingerprint;\n      }\n      if (scopeToMerge.getRequestSession()) {\n        this._requestSession = scopeToMerge.getRequestSession();\n      }\n      if (scopeData.propagationContext) {\n        this._propagationContext = scopeData.propagationContext;\n      }\n    } else if (isPlainObject(scopeToMerge)) {\n      const scopeContext = captureContext ;\n      this._tags = { ...this._tags, ...scopeContext.tags };\n      this._extra = { ...this._extra, ...scopeContext.extra };\n      this._contexts = { ...this._contexts, ...scopeContext.contexts };\n      if (scopeContext.user) {\n        this._user = scopeContext.user;\n      }\n      if (scopeContext.level) {\n        this._level = scopeContext.level;\n      }\n      if (scopeContext.fingerprint) {\n        this._fingerprint = scopeContext.fingerprint;\n      }\n      if (scopeContext.requestSession) {\n        this._requestSession = scopeContext.requestSession;\n      }\n      if (scopeContext.propagationContext) {\n        this._propagationContext = scopeContext.propagationContext;\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clear() {\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._requestSession = undefined;\n    this._span = undefined;\n    this._session = undefined;\n    this._notifyScopeListeners();\n    this._attachments = [];\n    this._propagationContext = generatePropagationContext();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: dateTimestampInSeconds(),\n      ...breadcrumb,\n    };\n\n    const breadcrumbs = this._breadcrumbs;\n    breadcrumbs.push(mergedBreadcrumb);\n    this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getLastBreadcrumb() {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clearBreadcrumbs() {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addAttachment(attachment) {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `getScopeData()` instead.\n   */\n   getAttachments() {\n    const data = this.getScopeData();\n\n    return data.attachments;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   clearAttachments() {\n    this._attachments = [];\n    return this;\n  }\n\n  /** @inheritDoc */\n   getScopeData() {\n    const {\n      _breadcrumbs,\n      _attachments,\n      _contexts,\n      _tags,\n      _extra,\n      _user,\n      _level,\n      _fingerprint,\n      _eventProcessors,\n      _propagationContext,\n      _sdkProcessingMetadata,\n      _transactionName,\n      _span,\n    } = this;\n\n    return {\n      breadcrumbs: _breadcrumbs,\n      attachments: _attachments,\n      contexts: _contexts,\n      tags: _tags,\n      extra: _extra,\n      user: _user,\n      level: _level,\n      fingerprint: _fingerprint || [],\n      eventProcessors: _eventProcessors,\n      propagationContext: _propagationContext,\n      sdkProcessingMetadata: _sdkProcessingMetadata,\n      transactionName: _transactionName,\n      span: _span,\n    };\n  }\n\n  /**\n   * Applies data from the scope to the event and runs all event processors on it.\n   *\n   * @param event Event\n   * @param hint Object containing additional information about the original exception, for use by the event processors.\n   * @hidden\n   * @deprecated Use `applyScopeDataToEvent()` directly\n   */\n   applyToEvent(\n    event,\n    hint = {},\n    additionalEventProcessors = [],\n  ) {\n    applyScopeDataToEvent(event, this.getScopeData());\n\n    // TODO (v8): Update this order to be: Global > Client > Scope\n    const eventProcessors = [\n      ...additionalEventProcessors,\n      // eslint-disable-next-line deprecation/deprecation\n      ...getGlobalEventProcessors(),\n      ...this._eventProcessors,\n    ];\n\n    return notifyEventProcessors(eventProcessors, event, hint);\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry\n   */\n   setSDKProcessingMetadata(newData) {\n    this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setPropagationContext(context) {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getPropagationContext() {\n    return this._propagationContext;\n  }\n\n  /**\n   * Capture an exception for this scope.\n   *\n   * @param exception The exception to capture.\n   * @param hint Optinal additional data to attach to the Sentry event.\n   * @returns the id of the captured Sentry event.\n   */\n   captureException(exception, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @param message The message to capture.\n   * @param level An optional severity level to report the message with.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured message.\n   */\n   captureMessage(message, level, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Captures a manually created event for this scope and sends it to Sentry.\n   *\n   * @param exception The event to capture.\n   * @param hint Optional additional data to attach to the Sentry event.\n   * @returns the id of the captured event.\n   */\n   captureEvent(event, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n    if (!this._client) {\n      logger.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n   _notifyScopeListeners() {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n  if (!globalScope) {\n    globalScope = new Scope();\n  }\n\n  return globalScope;\n}\n\n/**\n * This is mainly needed for tests.\n * DO NOT USE this, as this is an internal API and subject to change.\n * @hidden\n */\nfunction setGlobalScope(scope) {\n  globalScope = scope;\n}\n\nfunction generatePropagationContext() {\n  return {\n    traceId: uuid4(),\n    spanId: uuid4().substring(16),\n  };\n}\n\nexport { Scope, getGlobalScope, setGlobalScope };\n//# sourceMappingURL=scope.js.map\n","const SDK_VERSION = '7.120.4';\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { isThenable, uuid4, dateTimestampInSeconds, consoleSandbox, logger, GLOBAL_OBJ, getGlobalSingleton } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { Scope } from './scope.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\nimport { SDK_VERSION } from './version.js';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nconst API_VERSION = parseFloat(SDK_VERSION);\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * @deprecated The `Hub` class will be removed in version 8 of the SDK in favour of `Scope` and `Client` objects.\n *\n * If you previously used the `Hub` class directly, replace it with `Scope` and `Client` objects. More information:\n * - [Multiple Sentry Instances](https://docs.sentry.io/platforms/javascript/best-practices/multiple-sentry-instances/)\n * - [Browser Extensions](https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/)\n *\n * Some of our APIs are typed with the Hub class instead of the interface (e.g. `getCurrentHub`). Most of them are deprecated\n * themselves and will also be removed in version 8. More information:\n * - [Migration Guide](https://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md#deprecate-hub)\n */\n// eslint-disable-next-line deprecation/deprecation\nclass Hub  {\n  /** Is a {@link Layer}[] containing the client and scope */\n\n  /** Contains the last event id of a captured event.  */\n\n  /**\n   * Creates a new instance of the hub, will push one {@link Layer} into the\n   * internal stack on creation.\n   *\n   * @param client bound to the hub.\n   * @param scope bound to the hub.\n   * @param version number, higher number means higher priority.\n   *\n   * @deprecated Instantiation of Hub objects is deprecated and the constructor will be removed in version 8 of the SDK.\n   *\n   * If you are currently using the Hub for multi-client use like so:\n   *\n   * ```\n   * // OLD\n   * const hub = new Hub();\n   * hub.bindClient(client);\n   * makeMain(hub)\n   * ```\n   *\n   * instead initialize the client as follows:\n   *\n   * ```\n   * // NEW\n   * Sentry.withIsolationScope(() => {\n   *    Sentry.setCurrentClient(client);\n   *    client.init();\n   * });\n   * ```\n   *\n   * If you are using the Hub to capture events like so:\n   *\n   * ```\n   * // OLD\n   * const client = new Client();\n   * const hub = new Hub(client);\n   * hub.captureException()\n   * ```\n   *\n   * instead capture isolated events as follows:\n   *\n   * ```\n   * // NEW\n   * const client = new Client();\n   * const scope = new Scope();\n   * scope.setClient(client);\n   * scope.captureException();\n   * ```\n   */\n   constructor(\n    client,\n    scope,\n    isolationScope,\n      _version = API_VERSION,\n  ) {this._version = _version;\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new Scope();\n      assignedScope.setClient(client);\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new Scope();\n      assignedIsolationScope.setClient(client);\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    this._stack = [{ scope: assignedScope }];\n\n    if (client) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.bindClient(client);\n    }\n\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Checks if this hub's version is older than the given version.\n   *\n   * @param version A version number to compare to.\n   * @return True if the given version is newer; otherwise false.\n   *\n   * @deprecated This will be removed in v8.\n   */\n   isOlderThan(version) {\n    return this._version < version;\n  }\n\n  /**\n   * This binds the given client to the current scope.\n   * @param client An SDK client (client) instance.\n   *\n   * @deprecated Use `initAndBind()` directly, or `setCurrentClient()` and/or `client.init()` instead.\n   */\n   bindClient(client) {\n    // eslint-disable-next-line deprecation/deprecation\n    const top = this.getStackTop();\n    top.client = client;\n    top.scope.setClient(client);\n    // eslint-disable-next-line deprecation/deprecation\n    if (client && client.setupIntegrations) {\n      // eslint-disable-next-line deprecation/deprecation\n      client.setupIntegrations();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n   pushScope() {\n    // We want to clone the content of prev scope\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.getScope().clone();\n    // eslint-disable-next-line deprecation/deprecation\n    this.getStack().push({\n      // eslint-disable-next-line deprecation/deprecation\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `withScope` instead.\n   */\n   popScope() {\n    // eslint-disable-next-line deprecation/deprecation\n    if (this.getStack().length <= 1) return false;\n    // eslint-disable-next-line deprecation/deprecation\n    return !!this.getStack().pop();\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.withScope()` instead.\n   */\n   withScope(callback) {\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = this.pushScope();\n\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      // eslint-disable-next-line deprecation/deprecation\n      this.popScope();\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          return res;\n        },\n        e => {\n          // eslint-disable-next-line deprecation/deprecation\n          this.popScope();\n          throw e;\n        },\n      );\n    }\n\n    // eslint-disable-next-line deprecation/deprecation\n    this.popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.getClient()` instead.\n   */\n   getClient() {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().client ;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   *\n   * @deprecated Use `Sentry.getCurrentScope()` instead.\n   */\n   getScope() {\n    // eslint-disable-next-line deprecation/deprecation\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * @deprecated Use `Sentry.getIsolationScope()` instead.\n   */\n   getIsolationScope() {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the scope stack for domains or the process.\n   * @deprecated This will be removed in v8.\n   */\n   getStack() {\n    return this._stack;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   * @deprecated This will be removed in v8.\n   */\n   getStackTop() {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureException()` instead.\n   */\n   captureException(exception, hint) {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error('Sentry syntheticException');\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureException(exception, {\n      originalException: exception,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use  `Sentry.captureMessage()` instead.\n   */\n   captureMessage(\n    message,\n    // eslint-disable-next-line deprecation/deprecation\n    level,\n    hint,\n  ) {\n    const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n    const syntheticException = new Error(message);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureMessage(message, level, {\n      originalException: message,\n      syntheticException,\n      ...hint,\n      event_id: eventId,\n    });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.captureEvent()` instead.\n   */\n   captureEvent(event, hint) {\n    const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n    if (!event.type) {\n      this._lastEventId = eventId;\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().captureEvent(event, { ...hint, event_id: eventId });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated This will be removed in v8.\n   */\n   lastEventId() {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `Sentry.addBreadcrumb()` instead.\n   */\n   addBreadcrumb(breadcrumb, hint) {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n\n    if (!client) return;\n\n    const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n      (client.getOptions && client.getOptions()) || {};\n\n    if (maxBreadcrumbs <= 0) return;\n\n    const timestamp = dateTimestampInSeconds();\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n    const finalBreadcrumb = beforeBreadcrumb\n      ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n      : mergedBreadcrumb;\n\n    if (finalBreadcrumb === null) return;\n\n    if (client.emit) {\n      client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n    }\n\n    // TODO(v8): I know this comment doesn't make much sense because the hub will be deprecated but I still wanted to\n    // write it down. In theory, we would have to add the breadcrumbs to the isolation scope here, however, that would\n    // duplicate all of the breadcrumbs. There was the possibility of adding breadcrumbs to both, the isolation scope\n    // and the normal scope, and deduplicating it down the line in the event processing pipeline. However, that would\n    // have been very fragile, because the breadcrumb objects would have needed to keep their identity all throughout\n    // the event processing pipeline.\n    // In the new implementation, the top level `Sentry.addBreadcrumb()` should ONLY write to the isolation scope.\n\n    scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setUser()` instead.\n   */\n   setUser(user) {\n    // TODO(v8): The top level `Sentry.setUser()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setUser(user);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTags()` instead.\n   */\n   setTags(tags) {\n    // TODO(v8): The top level `Sentry.setTags()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTags(tags);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtras()` instead.\n   */\n   setExtras(extras) {\n    // TODO(v8): The top level `Sentry.setExtras()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtras(extras);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setTag()` instead.\n   */\n   setTag(key, value) {\n    // TODO(v8): The top level `Sentry.setTag()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setTag(key, value);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setExtra()` instead.\n   */\n   setExtra(key, extra) {\n    // TODO(v8): The top level `Sentry.setExtra()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setExtra(key, extra);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.setContext()` instead.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n   setContext(name, context) {\n    // TODO(v8): The top level `Sentry.setContext()` function should write ONLY to the isolation scope.\n    // eslint-disable-next-line deprecation/deprecation\n    this.getScope().setContext(name, context);\n    // eslint-disable-next-line deprecation/deprecation\n    this.getIsolationScope().setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use `getScope()` directly.\n   */\n   configureScope(callback) {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    if (client) {\n      callback(scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line deprecation/deprecation\n   run(callback) {\n    // eslint-disable-next-line deprecation/deprecation\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      // eslint-disable-next-line deprecation/deprecation\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `Sentry.getClient().getIntegrationByName()` instead.\n   */\n   getIntegration(integration) {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    if (!client) return null;\n    try {\n      // eslint-disable-next-line deprecation/deprecation\n      return client.getIntegration(integration);\n    } catch (_oO) {\n      DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\n\n  /**\n   * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n   *\n   * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n   * new child span within the transaction or any span, call the respective `.startChild()` method.\n   *\n   * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n   *\n   * The transaction must be finished with a call to its `.end()` method, at which point the transaction with all its\n   * finished child spans will be sent to Sentry.\n   *\n   * @param context Properties of the new `Transaction`.\n   * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n   * default values). See {@link Options.tracesSampler}.\n   *\n   * @returns The transaction which was just started\n   *\n   * @deprecated Use `startSpan()`, `startSpanManual()` or `startInactiveSpan()` instead.\n   */\n   startTransaction(context, customSamplingContext) {\n    const result = this._callExtensionMethod('startTransaction', context, customSamplingContext);\n\n    if (DEBUG_BUILD && !result) {\n      // eslint-disable-next-line deprecation/deprecation\n      const client = this.getClient();\n      if (!client) {\n        logger.warn(\n          \"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'\",\n        );\n      } else {\n        logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\nSentry.addTracingExtensions();\nSentry.init({...});\n`);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use `spanToTraceHeader()` instead.\n   */\n   traceHeaders() {\n    return this._callExtensionMethod('traceHeaders');\n  }\n\n  /**\n   * @inheritDoc\n   *\n   * @deprecated Use top level `captureSession` instead.\n   */\n   captureSession(endSession = false) {\n    // both send the update and pull the session from the scope\n    if (endSession) {\n      // eslint-disable-next-line deprecation/deprecation\n      return this.endSession();\n    }\n\n    // only send the update\n    this._sendSessionUpdate();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `endSession` instead.\n   */\n   endSession() {\n    // eslint-disable-next-line deprecation/deprecation\n    const layer = this.getStackTop();\n    const scope = layer.scope;\n    const session = scope.getSession();\n    if (session) {\n      closeSession(session);\n    }\n    this._sendSessionUpdate();\n\n    // the session is over; take it off of the scope\n    scope.setSession();\n  }\n\n  /**\n   * @inheritDoc\n   * @deprecated Use top level `startSession` instead.\n   */\n   startSession(context) {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n    const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n    // Will fetch userAgent if called from browser sdk\n    const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n    const session = makeSession({\n      release,\n      environment,\n      user: scope.getUser(),\n      ...(userAgent && { userAgent }),\n      ...context,\n    });\n\n    // End existing session if there's one\n    const currentSession = scope.getSession && scope.getSession();\n    if (currentSession && currentSession.status === 'ok') {\n      updateSession(currentSession, { status: 'exited' });\n    }\n    // eslint-disable-next-line deprecation/deprecation\n    this.endSession();\n\n    // Afterwards we set the new session on the scope\n    scope.setSession(session);\n\n    return session;\n  }\n\n  /**\n   * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n   * when Tracing is used.\n   *\n   * @deprecated Use top-level `getClient().getOptions().sendDefaultPii` instead. This function\n   * only unnecessarily increased API surface but only wrapped accessing the option.\n   */\n   shouldSendDefaultPii() {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = this.getClient();\n    const options = client && client.getOptions();\n    return Boolean(options && options.sendDefaultPii);\n  }\n\n  /**\n   * Sends the current Session on the scope\n   */\n   _sendSessionUpdate() {\n    // eslint-disable-next-line deprecation/deprecation\n    const { scope, client } = this.getStackTop();\n\n    const session = scope.getSession();\n    if (session && client && client.captureSession) {\n      client.captureSession(session);\n    }\n  }\n\n  /**\n   * Calls global extension method and binding current instance to the function call\n   */\n  // @ts-expect-error Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n   _callExtensionMethod(method, ...args) {\n    const carrier = getMainCarrier();\n    const sentry = carrier.__SENTRY__;\n    if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n      return sentry.extensions[method].apply(this, args);\n    }\n    DEBUG_BUILD && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n  }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n  GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n    extensions: {},\n    hub: undefined,\n  };\n  return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n *\n * @deprecated Use `setCurrentClient()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction makeMain(hub) {\n  const registry = getMainCarrier();\n  const oldHub = getHubFromCarrier(registry);\n  setHubOnCarrier(registry, hub);\n  return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n *\n * @deprecated Use the respective replacement method directly instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction getCurrentHub() {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    const hub = registry.__SENTRY__.acs.getCurrentHub();\n\n    if (hub) {\n      return hub;\n    }\n  }\n\n  // Return hub that lives on a global object\n  return getGlobalHub(registry);\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context,\n * meaning that it will remain stable for the same Hub.\n */\nfunction getIsolationScope() {\n  // eslint-disable-next-line deprecation/deprecation\n  return getCurrentHub().getIsolationScope();\n}\n\n// eslint-disable-next-line deprecation/deprecation\nfunction getGlobalHub(registry = getMainCarrier()) {\n  // If there's no hub, or its an old API, assign a new one\n\n  if (\n    !hasHubOnCarrier(registry) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(registry).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\n    setHubOnCarrier(registry, new Hub());\n  }\n\n  // Return hub that lives on a global object\n  return getHubFromCarrier(registry);\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * If the carrier does not contain a hub, a new hub is created with the global hub client and scope.\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction ensureHubOnCarrier(carrier, parent = getGlobalHub()) {\n  // If there's no hub on current domain, or it's an old API, assign a new one\n  if (\n    !hasHubOnCarrier(carrier) ||\n    // eslint-disable-next-line deprecation/deprecation\n    getHubFromCarrier(carrier).isOlderThan(API_VERSION)\n  ) {\n    // eslint-disable-next-line deprecation/deprecation\n    const client = parent.getClient();\n    // eslint-disable-next-line deprecation/deprecation\n    const scope = parent.getScope();\n    // eslint-disable-next-line deprecation/deprecation\n    const isolationScope = parent.getIsolationScope();\n    // eslint-disable-next-line deprecation/deprecation\n    setHubOnCarrier(carrier, new Hub(client, scope.clone(), isolationScope.clone()));\n  }\n}\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n  // Get main carrier (global for every environment)\n  const registry = getMainCarrier();\n  registry.__SENTRY__ = registry.__SENTRY__ || {};\n  registry.__SENTRY__.acs = strategy;\n}\n\n/**\n * Runs the supplied callback in its own async context. Async Context strategies are defined per SDK.\n *\n * @param callback The callback to run in its own async context\n * @param options Options to pass to the async context strategy\n * @returns The result of the callback\n */\nfunction runWithAsyncContext(callback, options = {}) {\n  const registry = getMainCarrier();\n\n  if (registry.__SENTRY__ && registry.__SENTRY__.acs) {\n    return registry.__SENTRY__.acs.runWithAsyncContext(callback, options);\n  }\n\n  // if there was no strategy, fallback to just calling the callback\n  return callback();\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n  return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction getHubFromCarrier(carrier) {\n  // eslint-disable-next-line deprecation/deprecation\n  return getGlobalSingleton('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\n// eslint-disable-next-line deprecation/deprecation\nfunction setHubOnCarrier(carrier, hub) {\n  if (!carrier) return false;\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n  __SENTRY__.hub = hub;\n  return true;\n}\n\nexport { API_VERSION, Hub, ensureHubOnCarrier, getCurrentHub, getHubFromCarrier, getIsolationScope, getMainCarrier, makeMain, runWithAsyncContext, setAsyncContextStrategy, setHubOnCarrier };\n//# sourceMappingURL=hub.js.map\n","import { getSdkMetadataForEnvelopeHeader, dsnToString, createEnvelope, createEventEnvelopeHeaders } from '@sentry/utils';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n  if (!sdkInfo) {\n    return event;\n  }\n  event.sdk = event.sdk || {};\n  event.sdk.name = event.sdk.name || sdkInfo.name;\n  event.sdk.version = event.sdk.version || sdkInfo.version;\n  event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n  event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n  return event;\n}\n\n/** Creates an envelope from a Session */\nfunction createSessionEnvelope(\n  session,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n  };\n\n  const envelopeItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nfunction createEventEnvelope(\n  event,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjut a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n  const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem = [{ type: eventType }, event];\n  return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\nexport { createEventEnvelope, createSessionEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { makeDsn, dsnToString, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn) {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn, sdkInfo) {\n  return urlEncode({\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    sentry_key: dsn.publicKey,\n    sentry_version: SENTRY_API_VERSION,\n    ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n  });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(\n  dsn,\n  // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n  // options: ClientOptions = {} as ClientOptions,\n  tunnelOrOptions = {} ,\n) {\n  // TODO (v8): Use this code instead\n  // const { tunnel, _metadata = {} } = options;\n  // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n  const tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n  const sdkInfo =\n    typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(\n  dsnLike,\n  dialogOptions\n\n,\n) {\n  const dsn = makeDsn(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${dsnToString(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] )}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { arrayify, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { addGlobalEventProcessor } from './eventProcessors.js';\nimport { getClient } from './exports.js';\nimport { getCurrentHub } from './hub.js';\n\nconst installedIntegrations = [];\n\n/** Map of integrations assigned to a client */\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations) {\n  const integrationsByName = {};\n\n  integrations.forEach(currentInstance => {\n    const { name } = currentInstance;\n\n    const existingInstance = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nfunction getIntegrationsToSetup(options) {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach(integration => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations;\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    integrations = arrayify(userIntegrations(defaultIntegrations));\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  const finalIntegrations = filterDuplicates(integrations);\n\n  // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n  // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n  // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n  // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n  const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n  if (debugIndex !== -1) {\n    const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n    finalIntegrations.push(debugInstance);\n  }\n\n  return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nfunction setupIntegrations(client, integrations) {\n  const integrationIndex = {};\n\n  integrations.forEach(integration => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nfunction afterSetupIntegrations(client, integrations) {\n  for (const integration of integrations) {\n    // guard against empty provided integrations\n    if (integration && integration.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\n\n/** Setup a single integration.  */\nfunction setupIntegration(client, integration, integrationIndex) {\n  if (integrationIndex[integration.name]) {\n    DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n\n  // `setupOnce` is only called the first time\n  if (installedIntegrations.indexOf(integration.name) === -1) {\n    // eslint-disable-next-line deprecation/deprecation\n    integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (client.on && typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) ;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (client.addEventProcessor && typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) ;\n\n    const processor = (event, hint) =>\n      callback(event, hint, client);\n    processor.id = integration.name;\n\n    client.addEventProcessor(processor);\n  }\n\n  DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current hub's client. */\nfunction addIntegration(integration) {\n  const client = getClient();\n\n  if (!client || !client.addIntegration) {\n    DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex(arr, callback) {\n  for (let i = 0; i < arr.length; i++) {\n    if (callback(arr[i]) === true) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\n/**\n * Convert a new integration function to the legacy class syntax.\n * In v8, we can remove this and instead export the integration functions directly.\n *\n * @deprecated This will be removed in v8!\n */\nfunction convertIntegrationFnToClass(\n  name,\n  fn,\n) {\n  const ConvertedIntegration = function ConvertedIntegration(...args) {\n    return fn(...args);\n  };\n  ConvertedIntegration.id = name;\n  return ConvertedIntegration ;\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nfunction defineIntegration(fn) {\n  return fn;\n}\n\nexport { addIntegration, afterSetupIntegrations, convertIntegrationFnToClass, defineIntegration, getIntegrationsToSetup, installedIntegrations, setupIntegration, setupIntegrations };\n//# sourceMappingURL=integration.js.map\n","import { dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Generate bucket key from metric properties.\n */\nfunction getBucketKey(\n  metricType,\n  name,\n  unit,\n  tags,\n) {\n  const stringifiedTags = Object.entries(dropUndefinedKeys(tags)).sort((a, b) => a[0].localeCompare(b[0]));\n  return `${metricType}${name}${unit}${stringifiedTags}`;\n}\n\n/* eslint-disable no-bitwise */\n/**\n * Simple hash function for strings.\n */\nfunction simpleHash(s) {\n  let rv = 0;\n  for (let i = 0; i < s.length; i++) {\n    const c = s.charCodeAt(i);\n    rv = (rv << 5) - rv + c;\n    rv &= rv;\n  }\n  return rv >>> 0;\n}\n/* eslint-enable no-bitwise */\n\n/**\n * Serialize metrics buckets into a string based on statsd format.\n *\n * Example of format:\n * metric.name@second:1:1.2|d|#a:value,b:anothervalue|T12345677\n * Segments:\n * name: metric.name\n * unit: second\n * value: [1, 1.2]\n * type of metric: d (distribution)\n * tags: { a: value, b: anothervalue }\n * timestamp: 12345677\n */\nfunction serializeMetricBuckets(metricBucketItems) {\n  let out = '';\n  for (const item of metricBucketItems) {\n    const tagEntries = Object.entries(item.tags);\n    const maybeTags = tagEntries.length > 0 ? `|#${tagEntries.map(([key, value]) => `${key}:${value}`).join(',')}` : '';\n    out += `${item.name}@${item.unit}:${item.metric}|${item.metricType}${maybeTags}|T${item.timestamp}\\n`;\n  }\n  return out;\n}\n\n/** Sanitizes units */\nfunction sanitizeUnit(unit) {\n  return unit.replace(/[^\\w]+/gi, '_');\n}\n\n/** Sanitizes metric keys */\nfunction sanitizeMetricKey(key) {\n  return key.replace(/[^\\w\\-.]+/gi, '_');\n}\n\nfunction sanitizeTagKey(key) {\n  return key.replace(/[^\\w\\-./]+/gi, '');\n}\n\nconst tagValueReplacements = [\n  ['\\n', '\\\\n'],\n  ['\\r', '\\\\r'],\n  ['\\t', '\\\\t'],\n  ['\\\\', '\\\\\\\\'],\n  ['|', '\\\\u{7c}'],\n  [',', '\\\\u{2c}'],\n];\n\nfunction getCharOrReplacement(input) {\n  for (const [search, replacement] of tagValueReplacements) {\n    if (input === search) {\n      return replacement;\n    }\n  }\n\n  return input;\n}\n\nfunction sanitizeTagValue(value) {\n  return [...value].reduce((acc, char) => acc + getCharOrReplacement(char), '');\n}\n\n/**\n * Sanitizes tags.\n */\nfunction sanitizeTags(unsanitizedTags) {\n  const tags = {};\n  for (const key in unsanitizedTags) {\n    if (Object.prototype.hasOwnProperty.call(unsanitizedTags, key)) {\n      const sanitizedKey = sanitizeTagKey(key);\n      tags[sanitizedKey] = sanitizeTagValue(String(unsanitizedTags[key]));\n    }\n  }\n  return tags;\n}\n\nexport { getBucketKey, sanitizeMetricKey, sanitizeTags, sanitizeUnit, serializeMetricBuckets, simpleHash };\n//# sourceMappingURL=utils.js.map\n","import { dsnToString, createEnvelope } from '@sentry/utils';\nimport { serializeMetricBuckets } from './utils.js';\n\n/**\n * Create envelope from a metric aggregate.\n */\nfunction createMetricEnvelope(\n  metricBucketItems,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const headers = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (metadata && metadata.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && dsn) {\n    headers.dsn = dsnToString(dsn);\n  }\n\n  const item = createMetricEnvelopeItem(metricBucketItems);\n  return createEnvelope(headers, [item]);\n}\n\nfunction createMetricEnvelopeItem(metricBucketItems) {\n  const payload = serializeMetricBuckets(metricBucketItems);\n  const metricHeaders = {\n    type: 'statsd',\n    length: payload.length,\n  };\n  return [metricHeaders, payload];\n}\n\nexport { createMetricEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { makeDsn, logger, checkOrSetAlreadyCaught, isParameterizedString, isPrimitive, resolvedSyncPromise, addItemToEnvelope, createAttachmentEnvelopeItem, SyncPromise, rejectedSyncPromise, SentryError, isThenable, isPlainObject } from '@sentry/utils';\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { getClient } from './exports.js';\nimport { getIsolationScope } from './hub.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { createMetricEnvelope } from './metrics/envelope.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nclass BaseClient {\n  /**\n   * A reference to a metrics aggregator\n   *\n   * @experimental Note this is alpha API. It may experience breaking changes in the future.\n   */\n\n  /** Options passed to the SDK. */\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n\n  /** Array of set up integrations. */\n\n  /** Indicates whether this client's integrations have been set up. */\n\n  /** Number of calls being processed */\n\n  /** Holds flushable  */\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n   constructor(options) {\n    this._options = options;\n    this._integrations = {};\n    this._integrationsInitialized = false;\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = makeDsn(options.dsn);\n    } else {\n      DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n   captureException(exception, hint, scope) {\n    // ensure we haven't captured this very object before\n    if (checkOrSetAlreadyCaught(exception)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId = hint && hint.event_id;\n\n    this._process(\n      this.eventFromException(exception, hint)\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureMessage(\n    message,\n    // eslint-disable-next-line deprecation/deprecation\n    level,\n    hint,\n    scope,\n  ) {\n    let eventId = hint && hint.event_id;\n\n    const eventMessage = isParameterizedString(message) ? message : String(message);\n\n    const promisedEvent = isPrimitive(message)\n      ? this.eventFromMessage(eventMessage, level, hint)\n      : this.eventFromException(message, hint);\n\n    this._process(\n      promisedEvent\n        .then(event => this._captureEvent(event, hint, scope))\n        .then(result => {\n          eventId = result;\n        }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureEvent(event, hint, scope) {\n    // ensure we haven't captured this very object before\n    if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n      DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n      return;\n    }\n\n    let eventId = hint && hint.event_id;\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n\n    this._process(\n      this._captureEvent(event, hint, capturedSpanScope || scope).then(result => {\n        eventId = result;\n      }),\n    );\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureSession(session) {\n    if (!(typeof session.release === 'string')) {\n      DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n    } else {\n      this.sendSession(session);\n      // After sending, we set init false to indicate it's not the first occurrence\n      updateSession(session, { init: false });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getDsn() {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getOptions() {\n    return this._options;\n  }\n\n  /**\n   * @see SdkMetadata in @sentry/types\n   *\n   * @return The metadata of the SDK\n   */\n   getSdkMetadata() {\n    return this._options._metadata;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   getTransport() {\n    return this._transport;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   flush(timeout) {\n    const transport = this._transport;\n    if (transport) {\n      if (this.metricsAggregator) {\n        this.metricsAggregator.flush();\n      }\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return resolvedSyncPromise(true);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   close(timeout) {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      if (this.metricsAggregator) {\n        this.metricsAggregator.close();\n      }\n      return result;\n    });\n  }\n\n  /** Get all installed event processors. */\n   getEventProcessors() {\n    return this._eventProcessors;\n  }\n\n  /** @inheritDoc */\n   addEventProcessor(eventProcessor) {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * This is an internal function to setup all integrations that should run on the client.\n   * @deprecated Use `client.init()` instead.\n   */\n   setupIntegrations(forceInitialize) {\n    if ((forceInitialize && !this._integrationsInitialized) || (this._isEnabled() && !this._integrationsInitialized)) {\n      this._setupIntegrations();\n    }\n  }\n\n  /** @inheritdoc */\n   init() {\n    if (this._isEnabled()) {\n      this._setupIntegrations();\n    }\n  }\n\n  /**\n   * Gets an installed integration by its `id`.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n   * @deprecated Use `getIntegrationByName()` instead.\n   */\n   getIntegrationById(integrationId) {\n    return this.getIntegrationByName(integrationId);\n  }\n\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n   getIntegrationByName(integrationName) {\n    return this._integrations[integrationName] ;\n  }\n\n  /**\n   * Returns the client's instance of the given integration class, it any.\n   * @deprecated Use `getIntegrationByName()` instead.\n   */\n   getIntegration(integration) {\n    try {\n      return (this._integrations[integration.id] ) || null;\n    } catch (_oO) {\n      DEBUG_BUILD && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addIntegration(integration) {\n    const isAlreadyInstalled = this._integrations[integration.name];\n\n    // This hook takes care of only installing if not already installed\n    setupIntegration(this, integration, this._integrations);\n    // Here we need to check manually to make sure to not run this multiple times\n    if (!isAlreadyInstalled) {\n      afterSetupIntegrations(this, [integration]);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   sendEvent(event, hint = {}) {\n    this.emit('beforeSendEvent', event, hint);\n\n    let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    for (const attachment of hint.attachments || []) {\n      env = addItemToEnvelope(\n        env,\n        createAttachmentEnvelopeItem(\n          attachment,\n          this._options.transportOptions && this._options.transportOptions.textEncoder,\n        ),\n      );\n    }\n\n    const promise = this._sendEnvelope(env);\n    if (promise) {\n      promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   sendSession(session) {\n    const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(env);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   recordDroppedEvent(reason, category, eventOrCount) {\n    if (this._options.sendClientReports) {\n      // TODO v9: We do not need the `event` passed as third argument anymore, and can possibly remove this overload\n      // If event is passed as third argument, we assume this is a count of 1\n      const count = typeof eventOrCount === 'number' ? eventOrCount : 1;\n\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureAggregateMetrics(metricBucketItems) {\n    DEBUG_BUILD && logger.log(`Flushing aggregated metrics, number of metrics: ${metricBucketItems.length}`);\n    const metricsEnvelope = createMetricEnvelope(\n      metricBucketItems,\n      this._dsn,\n      this._options._metadata,\n      this._options.tunnel,\n    );\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(metricsEnvelope);\n  }\n\n  // Keep on() & emit() signatures in sync with types' client.ts interface\n  /* eslint-disable @typescript-eslint/unified-signatures */\n\n  /** @inheritdoc */\n\n  /** @inheritdoc */\n   on(hook, callback) {\n    if (!this._hooks[hook]) {\n      this._hooks[hook] = [];\n    }\n\n    // @ts-expect-error We assue the types are correct\n    this._hooks[hook].push(callback);\n  }\n\n  /** @inheritdoc */\n\n  /** @inheritdoc */\n   emit(hook, ...rest) {\n    if (this._hooks[hook]) {\n      this._hooks[hook].forEach(callback => callback(...rest));\n    }\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Setup integrations for this client. */\n   _setupIntegrations() {\n    const { integrations } = this._options;\n    this._integrations = setupIntegrations(this, integrations);\n    afterSetupIntegrations(this, integrations);\n\n    // TODO v8: We don't need this flag anymore\n    this._integrationsInitialized = true;\n  }\n\n  /** Updates existing session based on the provided event */\n   _updateSessionFromEvent(session, event) {\n    let crashed = false;\n    let errored = false;\n    const exceptions = event.exception && event.exception.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism && mechanism.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      updateSession(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n   _isClientDoneProcessing(timeout) {\n    return new SyncPromise(resolve => {\n      let ticked = 0;\n      const tick = 1;\n\n      const interval = setInterval(() => {\n        if (this._numProcessing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n   _isEnabled() {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\n\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n   _prepareEvent(\n    event,\n    hint,\n    scope,\n    isolationScope = getIsolationScope(),\n  ) {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations.length > 0) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    return prepareEvent(options, event, hint, scope, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      const propagationContext = {\n        ...isolationScope.getPropagationContext(),\n        ...(scope ? scope.getPropagationContext() : undefined),\n      };\n\n      const trace = evt.contexts && evt.contexts.trace;\n      if (!trace && propagationContext) {\n        const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;\n        evt.contexts = {\n          trace: {\n            trace_id,\n            span_id: spanId,\n            parent_span_id: parentSpanId,\n          },\n          ...evt.contexts,\n        };\n\n        const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this, scope);\n\n        evt.sdkProcessingMetadata = {\n          dynamicSamplingContext,\n          ...evt.sdkProcessingMetadata,\n        };\n      }\n      return evt;\n    });\n  }\n\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n   _captureEvent(event, hint = {}, scope) {\n    return this._processEvent(event, hint, scope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        if (DEBUG_BUILD) {\n          // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n          // control flow, log just the message (no stack) as a log-level log.\n          const sentryError = reason ;\n          if (sentryError.logLevel === 'log') {\n            logger.log(sentryError.message);\n          } else {\n            logger.warn(sentryError);\n          }\n        }\n        return undefined;\n      },\n    );\n  }\n\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n   _processEvent(event, hint, scope) {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    if (isError && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error', event);\n      return rejectedSyncPromise(\n        new SentryError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n          'log',\n        ),\n      );\n    }\n\n    const dataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n    return this._prepareEvent(event, hint, scope, capturedSpanIsolationScope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory, event);\n          throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n        }\n\n        const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory, event);\n          if (isTransaction) {\n            const spans = event.spans || [];\n            // the transaction itself counts as one span, plus all the child spans that are added\n            const spanCount = 1 + spans.length;\n            this.recordDroppedEvent('before_send', 'span', spanCount);\n          }\n          throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n        }\n\n        const session = scope && scope.getSession();\n        if (!isTransaction && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        if (isTransaction) {\n          const spanCountBefore =\n            (processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing) ||\n            0;\n          const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n          const droppedSpanCount = spanCountBefore - spanCountAfter;\n          if (droppedSpanCount > 0) {\n            this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n          }\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (reason instanceof SentryError) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason,\n        });\n        throw new SentryError(\n          `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n        );\n      });\n  }\n\n  /**\n   * Occupies the client with processing and event\n   */\n   _process(promise) {\n    this._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n   _sendEnvelope(envelope) {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      return this._transport.send(envelope).then(null, reason => {\n        DEBUG_BUILD && logger.error('Error while sending event:', reason);\n      });\n    } else {\n      DEBUG_BUILD && logger.error('Transport disabled');\n    }\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n   _clearOutcomes() {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.keys(outcomes).map(key => {\n      const [reason, category] = key.split(':') ;\n      return {\n        reason,\n        category,\n        quantity: outcomes[key],\n      };\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult,\n  beforeSendLabel,\n) {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if (isThenable(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!isPlainObject(event) && event !== null) {\n          throw new SentryError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n    throw new SentryError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  options,\n  event,\n  hint,\n) {\n  const { beforeSend, beforeSendTransaction } = options;\n\n  if (isErrorEvent(event) && beforeSend) {\n    return beforeSend(event, hint);\n  }\n\n  if (isTransactionEvent(event) && beforeSendTransaction) {\n    if (event.spans) {\n      // We store the # of spans before processing in SDK metadata,\n      // so we can compare it afterwards to determine how many spans were dropped\n      const spanCountBefore = event.spans.length;\n      event.sdkProcessingMetadata = {\n        ...event.sdkProcessingMetadata,\n        spanCountBeforeProcessing: spanCountBefore,\n      };\n    }\n    return beforeSendTransaction(event, hint);\n  }\n\n  return event;\n}\n\nfunction isErrorEvent(event) {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event) {\n  return event.type === 'transaction';\n}\n\n/**\n * Add an event processor to the current client.\n * This event processor will run for all events processed by this client.\n */\nfunction addEventProcessor(callback) {\n  const client = getClient();\n\n  if (!client || !client.addEventProcessor) {\n    return;\n  }\n\n  client.addEventProcessor(callback);\n}\n\nexport { BaseClient, addEventProcessor };\n//# sourceMappingURL=baseclient.js.map\n","import { logger, consoleSandbox } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { getCurrentScope } from './exports.js';\nimport { getCurrentHub } from './hub.js';\n\n/** A class object that can instantiate Client objects. */\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nfunction initAndBind(\n  clientClass,\n  options,\n) {\n  if (options.debug === true) {\n    if (DEBUG_BUILD) {\n      logger.enable();\n    } else {\n      // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n      consoleSandbox(() => {\n        // eslint-disable-next-line no-console\n        console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n      });\n    }\n  }\n  const scope = getCurrentScope();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  initializeClient(client);\n}\n\n/**\n * Make the given client the current client.\n */\nfunction setCurrentClient(client) {\n  // eslint-disable-next-line deprecation/deprecation\n  const hub = getCurrentHub();\n  // eslint-disable-next-line deprecation/deprecation\n  const top = hub.getStackTop();\n  top.client = client;\n  top.scope.setClient(client);\n}\n\n/**\n * Initialize the client for the current scope.\n * Make sure to call this after `setCurrentClient()`.\n */\nfunction initializeClient(client) {\n  if (client.init) {\n    client.init();\n    // TODO v8: Remove this fallback\n    // eslint-disable-next-line deprecation/deprecation\n  } else if (client.setupIntegrations) {\n    // eslint-disable-next-line deprecation/deprecation\n    client.setupIntegrations();\n  }\n}\n\nexport { initAndBind, setCurrentClient };\n//# sourceMappingURL=sdk.js.map\n","import { makePromiseBuffer, forEachEnvelopeItem, envelopeItemTypeToDataCategory, isRateLimited, resolvedSyncPromise, createEnvelope, SentryError, logger, serializeEnvelope, updateRateLimits } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nfunction createTransport(\n  options,\n  makeRequest,\n  buffer = makePromiseBuffer(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n) {\n  let rateLimits = {};\n  const flush = (timeout) => buffer.drain(timeout);\n\n  function send(envelope) {\n    const filteredEnvelopeItems = [];\n\n    // Drop rate limited items from envelope\n    forEachEnvelopeItem(envelope, (item, type) => {\n      const dataCategory = envelopeItemTypeToDataCategory(type);\n      if (isRateLimited(rateLimits, dataCategory)) {\n        const event = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return resolvedSyncPromise();\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems );\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason) => {\n      forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n        const event = getEventForEnvelopeItem(item, type);\n        options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n      });\n    };\n\n    const requestTask = () =>\n      makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = updateRateLimits(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error instanceof SentryError) {\n          DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return resolvedSyncPromise();\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  // We use this to identifify if the transport is the base transport\n  // TODO (v8): Remove this again as we'll no longer need it\n  send.__sentry__baseTransport__ = true;\n\n  return {\n    send,\n    flush,\n  };\n}\n\nfunction getEventForEnvelopeItem(item, type) {\n  if (type !== 'event' && type !== 'transaction') {\n    return undefined;\n  }\n\n  return Array.isArray(item) ? (item )[1] : undefined;\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { SDK_VERSION } from '../version.js';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nfunction applySdkMetadata(options, name, names = [name], source = 'npm') {\n  const metadata = options._metadata || {};\n\n  if (!metadata.sdk) {\n    metadata.sdk = {\n      name: `sentry.javascript.${name}`,\n      packages: names.map(name => ({\n        name: `${source}:@sentry/${name}`,\n        version: SDK_VERSION,\n      })),\n      version: SDK_VERSION,\n    };\n  }\n\n  options._metadata = metadata;\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { logger, getEventDescription, stringMatchesSomePattern } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration, convertIntegrationFnToClass } from '../integration.js';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/,\n  /^Cannot redefine property: googletag$/,\n];\n\nconst DEFAULT_IGNORE_TRANSACTIONS = [\n  /^.*\\/healthcheck$/,\n  /^.*\\/healthy$/,\n  /^.*\\/live$/,\n  /^.*\\/ready$/,\n  /^.*\\/heartbeat$/,\n  /^.*\\/health$/,\n  /^.*\\/healthz$/,\n];\n\n/** Options for the InboundFilters integration */\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options = {}) => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(event, _hint, client) {\n      const clientOptions = client.getOptions();\n      const mergedOptions = _mergeOptions(options, clientOptions);\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    },\n  };\n}) ;\n\nconst inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\n/**\n * Inbound filters configurable by the user.\n * @deprecated Use `inboundFiltersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst InboundFilters = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  inboundFiltersIntegration,\n)\n\n;\n\nfunction _mergeOptions(\n  internalOptions = {},\n  clientOptions = {},\n) {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [\n      ...(internalOptions.ignoreTransactions || []),\n      ...(clientOptions.ignoreTransactions || []),\n      ...(internalOptions.disableTransactionDefaults ? [] : DEFAULT_IGNORE_TRANSACTIONS),\n    ],\n    ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n  };\n}\n\nfunction _shouldDropEvent(event, options) {\n  if (options.ignoreInternal && _isSentryError(event)) {\n    DEBUG_BUILD &&\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n    return true;\n  }\n  if (_isIgnoredError(event, options.ignoreErrors)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n    return true;\n  }\n  if (_isDeniedUrl(event, options.denyUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  if (!_isAllowedUrl(event, options.allowUrls)) {\n    DEBUG_BUILD &&\n      logger.warn(\n        `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n      );\n    return true;\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event, ignoreErrors) {\n  // If event.type, this is not an error\n  if (event.type || !ignoreErrors || !ignoreErrors.length) {\n    return false;\n  }\n\n  return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n  if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n  // TODO: Use Glob instead?\n  if (!denyUrls || !denyUrls.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n  // TODO: Use Glob instead?\n  if (!allowUrls || !allowUrls.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event) {\n  const possibleMessages = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  let lastException;\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    lastException = event.exception.values[event.exception.values.length - 1];\n  } catch (e) {\n    // try catching to save bundle size checking existence of variables\n  }\n\n  if (lastException) {\n    if (lastException.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  }\n\n  if (DEBUG_BUILD && possibleMessages.length === 0) {\n    logger.error(`Could not extract message for event ${getEventDescription(event)}`);\n  }\n\n  return possibleMessages;\n}\n\nfunction _isSentryError(event) {\n  try {\n    // @ts-expect-error can't be a sentry error if undefined\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return event.exception.values[0].type === 'SentryError';\n  } catch (e) {\n    // ignore\n  }\n  return false;\n}\n\nfunction _getLastValidUrl(frames = []) {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event) {\n  try {\n    let frames;\n    try {\n      // @ts-expect-error we only care about frames if the whole thing here is defined\n      frames = event.exception.values[0].stacktrace.frames;\n    } catch (e) {\n      // ignore\n    }\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch (oO) {\n    DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n    return null;\n  }\n}\n\nexport { InboundFilters, inboundFiltersIntegration };\n//# sourceMappingURL=inboundfilters.js.map\n","import { getOriginalFunction } from '@sentry/utils';\nimport { getClient } from '../exports.js';\nimport { defineIntegration, convertIntegrationFnToClass } from '../integration.js';\n\nlet originalFunctionToString;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      originalFunctionToString = Function.prototype.toString;\n\n      // intrinsics (like Function.prototype) might be immutable in some environments\n      // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n      try {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        Function.prototype.toString = function ( ...args) {\n          const originalFunction = getOriginalFunction(this);\n          const context =\n            SETUP_CLIENTS.has(getClient() ) && originalFunction !== undefined ? originalFunction : this;\n          return originalFunctionToString.apply(context, args);\n        };\n      } catch (e) {\n        // ignore errors here, just don't patch this\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) ;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n *   integrations: [\n *     functionToStringIntegration(),\n *   ],\n * });\n * ```\n */\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * @deprecated Use `functionToStringIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst FunctionToString = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  functionToStringIntegration,\n) ;\n\n// eslint-disable-next-line deprecation/deprecation\n\nexport { FunctionToString, functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import '@sentry-internal/tracing';\nimport { withScope, captureException } from '@sentry/core';\nimport { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, addExceptionTypeValue, addExceptionMechanism } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n  fn,\n  options\n\n = {},\n  before,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  if (typeof fn !== 'function') {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = fn.__sentry_wrapped__;\n    if (wrapper) {\n      if (typeof wrapper === 'function') {\n        return wrapper;\n      } else {\n        // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n        // that something messed with it. In that case we want to return the originally passed function.\n        return fn;\n      }\n    }\n\n    // We don't wanna wrap it twice\n    if (getOriginalFunction(fn)) {\n      return fn;\n    }\n  } catch (e) {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    // Bail on wrapping and return the function as-is (defers to window.onerror).\n    return fn;\n  }\n\n  /* eslint-disable prefer-rest-params */\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped = function () {\n    const args = Array.prototype.slice.call(arguments);\n\n    try {\n      if (before && typeof before === 'function') {\n        before.apply(this, arguments);\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n      const wrappedArguments = args.map((arg) => wrap(arg, options));\n\n      // Attempt to invoke user-land function\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n      //       means the sentry.javascript SDK caught an error invoking your application code. This\n      //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope(scope => {\n        scope.addEventProcessor(event => {\n          if (options.mechanism) {\n            addExceptionTypeValue(event, undefined, undefined);\n            addExceptionMechanism(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        captureException(ex);\n      });\n\n      throw ex;\n    }\n  };\n  /* eslint-enable prefer-rest-params */\n\n  // Accessing some objects may throw\n  // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch (_oO) {} // eslint-disable-line no-empty\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  markFunctionWrapped(sentryWrapped, fn);\n\n  addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') ;\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get() {\n          return fn.name;\n        },\n      });\n    }\n    // eslint-disable-next-line no-empty\n  } catch (_oO) {}\n\n  return sentryWrapped;\n}\n\nexport { WINDOW, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { getClient } from '@sentry/core';\nimport { addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, isParameterizedString, normalizeToSize, extractExceptionKeysForMessage } from '@sentry/utils';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\n  // Get the frames first since Opera can lose the stack if we touch anything else first\n  const frames = parseStackFrames(stackParser, ex);\n\n  const exception = {\n    type: ex && ex.name,\n    value: extractMessage(ex),\n  };\n\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\n/**\n * @hidden\n */\nfunction eventFromPlainObject(\n  stackParser,\n  exception,\n  syntheticException,\n  isUnhandledRejection,\n) {\n  const client = getClient();\n  const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n        },\n      ],\n    },\n    extra: {\n      __serialized__: normalizeToSize(exception, normalizeDepth),\n    },\n  };\n\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      // event.exception.values[0] has been set above\n      (event.exception ).values[0].stacktrace = { frames };\n    }\n  }\n\n  return event;\n}\n\n/**\n * @hidden\n */\nfunction eventFromError(stackParser, ex) {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n  stackParser,\n  ex,\n) {\n  // Access and store the stacktrace property before doing ANYTHING\n  // else to it because Opera is not very good at providing it\n  // reliably in other circumstances.\n  const stacktrace = ex.stacktrace || ex.stack || '';\n\n  const popSize = getPopSize(ex);\n\n  try {\n    return stackParser(stacktrace, popSize);\n  } catch (e) {\n    // no-empty\n  }\n\n  return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex) {\n  if (ex) {\n    if (typeof ex.framesToPop === 'number') {\n      return ex.framesToPop;\n    }\n\n    if (reactMinifiedRegexp.test(ex.message)) {\n      return 1;\n    }\n  }\n\n  return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n  const message = ex && ex.message;\n  if (!message) {\n    return 'No error message';\n  }\n  if (message.error && typeof message.error.message === 'string') {\n    return message.error.message;\n  }\n  return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n  stackParser,\n  exception,\n  hint,\n  attachStacktrace,\n) {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n  event.level = 'error';\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n  stackParser,\n  message,\n  // eslint-disable-next-line deprecation/deprecation\n  level = 'info',\n  hint,\n  attachStacktrace,\n) {\n  const syntheticException = (hint && hint.syntheticException) || undefined;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint && hint.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n  stackParser,\n  exception,\n  syntheticException,\n  attachStacktrace,\n  isUnhandledRejection,\n) {\n  let event;\n\n  if (isErrorEvent(exception ) && (exception ).error) {\n    // If it is an ErrorEvent with `error` property, extract it to get actual Error\n    const errorEvent = exception ;\n    return eventFromError(stackParser, errorEvent.error );\n  }\n\n  // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n  // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n  // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n  //\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n  // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n  if (isDOMError(exception) || isDOMException(exception )) {\n    const domException = exception ;\n\n    if ('stack' in (exception )) {\n      event = eventFromError(stackParser, exception );\n    } else {\n      const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      addExceptionTypeValue(event, message);\n    }\n    if ('code' in domException) {\n      // eslint-disable-next-line deprecation/deprecation\n      event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n    }\n\n    return event;\n  }\n  if (isError(exception)) {\n    // we have a real Error object, do nothing\n    return eventFromError(stackParser, exception);\n  }\n  if (isPlainObject(exception) || isEvent(exception)) {\n    // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n    // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n    // group on any key/value change.\n    const objectException = exception ;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    addExceptionMechanism(event, {\n      synthetic: true,\n    });\n    return event;\n  }\n\n  // If none of previous checks were valid, then it means that it's not:\n  // - an instance of DOMError\n  // - an instance of DOMException\n  // - an instance of Event\n  // - an instance of Error\n  // - a valid ErrorEvent (one with an error property)\n  // - a plain Object\n  //\n  // So bail out and capture it as a simple message:\n  event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n  addExceptionTypeValue(event, `${exception}`, undefined);\n  addExceptionMechanism(event, {\n    synthetic: true,\n  });\n\n  return event;\n}\n\n/**\n * @hidden\n */\nfunction eventFromString(\n  stackParser,\n  message,\n  syntheticException,\n  attachStacktrace,\n) {\n  const event = {};\n\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }],\n      };\n    }\n  }\n\n  if (isParameterizedString(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n  exception,\n  { isUnhandledRejection },\n) {\n  const keys = extractExceptionKeysForMessage(exception);\n  const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if (isErrorEvent(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n\n  if (isEvent(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch (e) {\n    // ignore errors here\n  }\n}\n\nexport { eventFromError, eventFromException, eventFromMessage, eventFromPlainObject, eventFromString, eventFromUnknownInput, exceptionFromError, parseStackFrames };\n//# sourceMappingURL=eventbuilder.js.map\n","import { dsnToString, createEnvelope } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nfunction createUserFeedbackEnvelope(\n  feedback,\n  {\n    metadata,\n    tunnel,\n    dsn,\n  }\n\n,\n) {\n  const headers = {\n    event_id: feedback.event_id,\n    sent_at: new Date().toISOString(),\n    ...(metadata &&\n      metadata.sdk && {\n        sdk: {\n          name: metadata.sdk.name,\n          version: metadata.sdk.version,\n        },\n      }),\n    ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n  };\n  const item = createUserFeedbackEnvelopeItem(feedback);\n\n  return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback) {\n  const feedbackHeaders = {\n    type: 'user_report',\n  };\n  return [feedbackHeaders, feedback];\n}\n\nexport { createUserFeedbackEnvelope };\n//# sourceMappingURL=userfeedback.js.map\n","import { BaseClient, applySdkMetadata } from '@sentry/core';\nimport { getSDKSource, logger, createClientReportEnvelope, dsnToString } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\nimport { createUserFeedbackEnvelope } from './userfeedback.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends BaseClient {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n   constructor(options) {\n    const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n    applySdkMetadata(options, 'browser', ['browser'], sdkSource);\n\n    super(options);\n\n    if (options.sendClientReports && WINDOW.document) {\n      WINDOW.document.addEventListener('visibilitychange', () => {\n        if (WINDOW.document.visibilityState === 'hidden') {\n          this._flushOutcomes();\n        }\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromException(exception, hint) {\n    return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromMessage(\n    message,\n    // eslint-disable-next-line deprecation/deprecation\n    level = 'info',\n    hint,\n  ) {\n    return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * Sends user feedback to Sentry.\n   */\n   captureUserFeedback(feedback) {\n    if (!this._isEnabled()) {\n      DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n      return;\n    }\n\n    const envelope = createUserFeedbackEnvelope(feedback, {\n      metadata: this.getSdkMetadata(),\n      dsn: this.getDsn(),\n      tunnel: this.getOptions().tunnel,\n    });\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   _prepareEvent(event, hint, scope) {\n    event.platform = event.platform || 'javascript';\n    return super._prepareEvent(event, hint, scope);\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n   _flushOutcomes() {\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      DEBUG_BUILD && logger.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n    const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n    // _sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this._sendEnvelope(envelope);\n  }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map\n","import { isNativeFetch, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nlet cachedFetchImpl = undefined;\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n *   const p = f.apply(this, arguments);\n *\n *   p.then(function() {\n *     console.log('hi.');\n *   });\n *\n *   return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome:  Failed to fetch\n * Edge:    Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari:  resource blocked by content blocker\n */\nfunction getNativeFetchImplementation() {\n  if (cachedFetchImpl) {\n    return cachedFetchImpl;\n  }\n\n  /* eslint-disable @typescript-eslint/unbound-method */\n\n  // Fast path to avoid DOM I/O\n  if (isNativeFetch(WINDOW.fetch)) {\n    return (cachedFetchImpl = WINDOW.fetch.bind(WINDOW));\n  }\n\n  const document = WINDOW.document;\n  let fetchImpl = WINDOW.fetch;\n  // eslint-disable-next-line deprecation/deprecation\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow.fetch) {\n        fetchImpl = contentWindow.fetch;\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      DEBUG_BUILD && logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n    }\n  }\n\n  return (cachedFetchImpl = fetchImpl.bind(WINDOW));\n  /* eslint-enable @typescript-eslint/unbound-method */\n}\n\n/** Clears cached fetch impl */\nfunction clearCachedFetchImplementation() {\n  cachedFetchImpl = undefined;\n}\n\nexport { clearCachedFetchImplementation, getNativeFetchImplementation };\n//# sourceMappingURL=utils.js.map\n","import { createTransport } from '@sentry/core';\nimport { rejectedSyncPromise } from '@sentry/utils';\nimport { getNativeFetchImplementation, clearCachedFetchImplementation } from './utils.js';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n  options,\n  nativeFetch = getNativeFetchImplementation(),\n) {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n\n  function makeRequest(request) {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n\n    const requestOptions = {\n      body: request.body,\n      method: 'POST',\n      referrerPolicy: 'origin',\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 60000 && pendingCount < 15,\n      ...options.fetchOptions,\n    };\n\n    try {\n      return nativeFetch(options.url, requestOptions).then(response => {\n        pendingBodySize -= requestSize;\n        pendingCount--;\n        return {\n          statusCode: response.status,\n          headers: {\n            'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n            'retry-after': response.headers.get('Retry-After'),\n          },\n        };\n      });\n    } catch (e) {\n      clearCachedFetchImplementation();\n      pendingBodySize -= requestSize;\n      pendingCount--;\n      return rejectedSyncPromise(e);\n    }\n  }\n\n  return createTransport(options, makeRequest);\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { createTransport } from '@sentry/core';\nimport { SyncPromise } from '@sentry/utils';\n\n/**\n * The DONE ready state for XmlHttpRequest\n *\n * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined\n * (e.g. during testing, it is `undefined`)\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}\n */\nconst XHR_READYSTATE_DONE = 4;\n\n/**\n * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.\n */\nfunction makeXHRTransport(options) {\n  function makeRequest(request) {\n    return new SyncPromise((resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n\n      xhr.onerror = reject;\n\n      xhr.onreadystatechange = () => {\n        if (xhr.readyState === XHR_READYSTATE_DONE) {\n          resolve({\n            statusCode: xhr.status,\n            headers: {\n              'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),\n              'retry-after': xhr.getResponseHeader('Retry-After'),\n            },\n          });\n        }\n      };\n\n      xhr.open('POST', options.url);\n\n      for (const header in options.headers) {\n        if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n          xhr.setRequestHeader(header, options.headers[header]);\n        }\n      }\n\n      xhr.send(request.body);\n    });\n  }\n\n  return createTransport(options, makeRequest);\n}\n\nexport { makeXHRTransport };\n//# sourceMappingURL=xhr.js.map\n","import { createStackParser } from '@sentry/utils';\n\n// global reference to slice\nconst UNKNOWN_FUNCTION = '?';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n  const frame = {\n    filename,\n    function: func,\n    in_app: true, // All browser frames are considered in_app\n  };\n\n  if (lineno !== undefined) {\n    frame.lineno = lineno;\n  }\n\n  if (colno !== undefined) {\n    frame.colno = colno;\n  }\n\n  return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n  /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn = line => {\n  const parts = chromeRegex.exec(line);\n\n  if (parts) {\n    const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]);\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = subMatch[1]; // url\n        parts[3] = subMatch[2]; // line\n        parts[4] = subMatch[3]; // column\n      }\n    }\n\n    // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n    // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n    return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n  }\n\n  return;\n};\n\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko = line => {\n  const parts = geckoREgex.exec(line);\n\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]);\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line number\n        parts[1] = parts[1] || 'eval';\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = ''; // no column when eval\n      }\n    }\n\n    let filename = parts[3];\n    let func = parts[1] || UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n\n    return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n  }\n\n  return;\n};\n\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs = line => {\n  const parts = winjsRegex.exec(line);\n\n  return parts\n    ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n    : undefined;\n};\n\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10 = line => {\n  const parts = opera10Regex.exec(line);\n  return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n  / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11 = line => {\n  const parts = opera11Regex.exec(line);\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];\n\nconst defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n *   at function@url:row:col\n *   at function@url:row:col\n *   at function@url:row:col\n *\n * it produces something like:\n *\n *   function@url:row:col\n *   function@url:row:col\n *   function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func, filename) => {\n  const isSafariExtension = func.indexOf('safari-extension') !== -1;\n  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n  return isSafariExtension || isSafariWebExtension\n    ? [\n        func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n        isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n      ]\n    : [func, filename];\n};\n\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { defineIntegration, convertIntegrationFnToClass, getClient, addBreadcrumb } from '@sentry/core';\nimport { addConsoleInstrumentationHandler, addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addFetchInstrumentationHandler, addHistoryInstrumentationHandler, getEventDescription, logger, htmlTreeAsString, getComponentName, severityLevelFromString, safeJoin, SENTRY_XHR_DATA_KEY, parseUrl } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/* eslint-disable max-lines */\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options = {}) => {\n  const _options = {\n    console: true,\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    setup(client) {\n      if (_options.console) {\n        addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n      }\n      if (_options.dom) {\n        addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry && client.on) {\n        client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n      }\n    },\n  };\n}) ;\n\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Default Breadcrumbs instrumentations\n *\n * @deprecated Use `breadcrumbsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst Breadcrumbs = convertIntegrationFnToClass(INTEGRATION_NAME, breadcrumbsIntegration)\n\n;\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client) {\n  return function addSentryBreadcrumb(event) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    addBreadcrumb(\n      {\n        category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: getEventDescription(event),\n      },\n      {\n        event,\n      },\n    );\n  };\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n  client,\n  dom,\n) {\n  return function _innerDomBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n    let maxStringLength =\n      typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      DEBUG_BUILD &&\n        logger.warn(\n          `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n        );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n\n    if (typeof keyAttrs === 'string') {\n      keyAttrs = [keyAttrs];\n    }\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      const event = handlerData.event ;\n      const element = _isEvent(event) ? event.target : event;\n\n      target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n      componentName = getComponentName(element);\n    } catch (e) {\n      target = '<unknown>';\n    }\n\n    if (target.length === 0) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target,\n    };\n\n    if (componentName) {\n      breadcrumb.data = { 'ui.component_name': componentName };\n    }\n\n    addBreadcrumb(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client) {\n  return function _consoleBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: 'console',\n      data: {\n        arguments: handlerData.args,\n        logger: 'console',\n      },\n      level: severityLevelFromString(handlerData.level),\n      message: safeJoin(handlerData.args, ' '),\n    };\n\n    if (handlerData.level === 'assert') {\n      if (handlerData.args[0] === false) {\n        breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n        breadcrumb.data.arguments = handlerData.args.slice(1);\n      } else {\n        // Don't capture a breadcrumb for passed assertions\n        return;\n      }\n    }\n\n    addBreadcrumb(breadcrumb, {\n      input: handlerData.args,\n      level: handlerData.level,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client) {\n  return function _xhrBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n    // We only capture complete, non-sentry requests\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n\n    const { method, url, status_code, body } = sentryXhrData;\n\n    const data = {\n      method,\n      url,\n      status_code,\n    };\n\n    const hint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp,\n    };\n\n    addBreadcrumb(\n      {\n        category: 'xhr',\n        data,\n        type: 'http',\n      },\n      hint,\n    );\n  };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client) {\n  return function _fetchBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    // We only capture complete fetch requests\n    if (!endTimestamp) {\n      return;\n    }\n\n    if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n      // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n      return;\n    }\n\n    if (handlerData.error) {\n      const data = handlerData.fetchData;\n      const hint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          level: 'error',\n          type: 'http',\n        },\n        hint,\n      );\n    } else {\n      const response = handlerData.response ;\n      const data = {\n        ...handlerData.fetchData,\n        status_code: response && response.status,\n      };\n      const hint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp,\n      };\n      addBreadcrumb(\n        {\n          category: 'fetch',\n          data,\n          type: 'http',\n        },\n        hint,\n      );\n    }\n  };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client) {\n  return function _historyBreadcrumb(handlerData) {\n    if (getClient() !== client) {\n      return;\n    }\n\n    let from = handlerData.from;\n    let to = handlerData.to;\n    const parsedLoc = parseUrl(WINDOW.location.href);\n    let parsedFrom = from ? parseUrl(from) : undefined;\n    const parsedTo = parseUrl(to);\n\n    // Initial pushState doesn't provide `from` information\n    if (!parsedFrom || !parsedFrom.path) {\n      parsedFrom = parsedLoc;\n    }\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n      to = parsedTo.relative;\n    }\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n      from = parsedFrom.relative;\n    }\n\n    addBreadcrumb({\n      category: 'navigation',\n      data: {\n        from,\n        to,\n      },\n    });\n  };\n}\n\nfunction _isEvent(event) {\n  return !!event && !!(event ).target;\n}\n\nexport { Breadcrumbs, breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration, convertIntegrationFnToClass } from '@sentry/core';\nimport { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n  let previousEvent;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    processEvent(currentEvent) {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against as _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n          return null;\n        }\n      } catch (_oO) {} // eslint-disable-line no-empty\n\n      return (previousEvent = currentEvent);\n    },\n  };\n}) ;\n\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/**\n * Deduplication filter.\n * @deprecated Use `dedupeIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst Dedupe = convertIntegrationFnToClass(INTEGRATION_NAME, dedupeIntegration)\n\n;\n\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n  let currentFrames = _getFramesFromEvent(currentEvent);\n  let previousFrames = _getFramesFromEvent(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames ;\n  previousFrames = previousFrames ;\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    const frameA = previousFrames[i];\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint ;\n  previousFingerprint = previousFingerprint ;\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch (_oO) {\n    return false;\n  }\n}\n\nfunction _getExceptionFromEvent(event) {\n  return event.exception && event.exception.values && event.exception.values[0];\n}\n\nfunction _getFramesFromEvent(event) {\n  const exception = event.exception;\n\n  if (exception) {\n    try {\n      // @ts-expect-error Object could be undefined\n      return exception.values[0].stacktrace.frames;\n    } catch (_oO) {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n\nexport { Dedupe, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { defineIntegration, convertIntegrationFnToClass, getClient, captureEvent } from '@sentry/core';\nimport { addGlobalErrorInstrumentationHandler, isString, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, isErrorEvent, getLocationHref, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog('onerror');\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog('onunhandledrejection');\n      }\n    },\n  };\n}) ;\n\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\n/**\n * Global handlers.\n * @deprecated Use `globalHandlersIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst GlobalHandlers = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  globalHandlersIntegration,\n)\n\n;\n\nfunction _installGlobalOnErrorHandler(client) {\n  addGlobalErrorInstrumentationHandler(data => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const { msg, url, line, column, error } = data;\n\n    const event =\n      error === undefined && isString(msg)\n        ? _eventFromIncompleteOnError(msg, url, line, column)\n        : _enhanceEventWithInitialFrame(\n            eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n            url,\n            line,\n            column,\n          );\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onerror',\n      },\n    });\n  });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n  addGlobalUnhandledRejectionInstrumentationHandler(e => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if (getClient() !== client || shouldIgnoreOnError()) {\n      return;\n    }\n\n    const error = _getUnhandledRejectionError(e );\n\n    const event = isPrimitive(error)\n      ? _eventFromRejectionWithPrimitive(error)\n      : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n    event.level = 'error';\n\n    captureEvent(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onunhandledrejection',\n      },\n    });\n  });\n}\n\nfunction _getUnhandledRejectionError(error) {\n  if (isPrimitive(error)) {\n    return error;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const e = error ;\n\n  // dig the object of the rejection out of known event types\n  try {\n    // PromiseRejectionEvents store the object of the rejection under 'reason'\n    // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n    if ('reason' in e) {\n      return e.reason;\n    }\n\n    // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n    // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n    // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n    // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n    // https://github.com/getsentry/sentry-javascript/issues/2380\n    else if ('detail' in e && 'reason' in e.detail) {\n      return e.detail.reason;\n    }\n  } catch (e2) {} // eslint-disable-line no-empty\n\n  return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason) {\n  return {\n    exception: {\n      values: [\n        {\n          type: 'UnhandledRejection',\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n        },\n      ],\n    },\n  };\n}\n\n/**\n * This function creates a stack from an old, error-less onerror handler.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _eventFromIncompleteOnError(msg, url, line, column) {\n  const ERROR_TYPES_RE =\n    /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n  // If 'message' is ErrorEvent, get real message from inside\n  let message = isErrorEvent(msg) ? msg.message : msg;\n  let name = 'Error';\n\n  const groups = message.match(ERROR_TYPES_RE);\n  if (groups) {\n    name = groups[1];\n    message = groups[2];\n  }\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: name,\n          value: message,\n        },\n      ],\n    },\n  };\n\n  return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event, url, line, column) {\n  // event.exception\n  const e = (event.exception = event.exception || {});\n  // event.exception.values\n  const ev = (e.values = e.values || []);\n  // event.exception.values[0]\n  const ev0 = (ev[0] = ev[0] || {});\n  // event.exception.values[0].stacktrace\n  const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n  // event.exception.values[0].stacktrace.frames\n  const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n  const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n  const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n  const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n  // event.exception.values[0].stacktrace.frames\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      filename,\n      function: '?',\n      in_app: true,\n      lineno,\n    });\n  }\n\n  return event;\n}\n\nfunction globalHandlerLog(type) {\n  DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions() {\n  const client = getClient();\n  const options = (client && client.getOptions()) || {\n    stackParser: () => [],\n    attachStacktrace: false,\n  };\n  return options;\n}\n\nexport { GlobalHandlers, globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration, convertIntegrationFnToClass } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\nconst INTEGRATION_NAME = 'HttpContext';\n\nconst _httpContextIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event) {\n      // if none of the information we want exists, don't bother\n      if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n        return;\n      }\n\n      // grab as much info as exists and add it to the event\n      const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n      const { referrer } = WINDOW.document || {};\n      const { userAgent } = WINDOW.navigator || {};\n\n      const headers = {\n        ...(event.request && event.request.headers),\n        ...(referrer && { Referer: referrer }),\n        ...(userAgent && { 'User-Agent': userAgent }),\n      };\n      const request = { ...event.request, ...(url && { url }), headers };\n\n      event.request = request;\n    },\n  };\n}) ;\n\nconst httpContextIntegration = defineIntegration(_httpContextIntegration);\n\n/**\n * HttpContext integration collects information about HTTP request headers.\n * @deprecated Use `httpContextIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst HttpContext = convertIntegrationFnToClass(INTEGRATION_NAME, httpContextIntegration)\n\n;\n\nexport { HttpContext, httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration, convertIntegrationFnToClass } from '@sentry/core';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO v8: Remove this\n    setupOnce() {}, // eslint-disable-line @typescript-eslint/no-empty-function\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      applyAggregateErrorsToEvent(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        exceptionFromError,\n        options.stackParser,\n        options.maxValueLength,\n        key,\n        limit,\n        event,\n        hint,\n      );\n    },\n  };\n}) ;\n\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\n/**\n * Aggregrate linked errors in an event.\n * @deprecated Use `linkedErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration)\n\n;\n\nexport { LinkedErrors, linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { defineIntegration, convertIntegrationFnToClass } from '@sentry/core';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\nimport { WINDOW, wrap } from '../helpers.js';\n\nconst DEFAULT_EVENT_TARGET = [\n  'EventTarget',\n  'Window',\n  'Node',\n  'ApplicationCache',\n  'AudioTrackList',\n  'BroadcastChannel',\n  'ChannelMergerNode',\n  'CryptoOperation',\n  'EventSource',\n  'FileReader',\n  'HTMLUnknownElement',\n  'IDBDatabase',\n  'IDBRequest',\n  'IDBTransaction',\n  'KeyOperation',\n  'MediaController',\n  'MessagePort',\n  'ModalWindow',\n  'Notification',\n  'SVGElementInstance',\n  'Screen',\n  'SharedWorker',\n  'TextTrack',\n  'TextTrackCue',\n  'TextTrackList',\n  'WebSocket',\n  'WebSocketWorker',\n  'Worker',\n  'XMLHttpRequest',\n  'XMLHttpRequestEventTarget',\n  'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'TryCatch';\n\nconst _browserApiErrorsIntegration = ((options = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n      }\n\n      if (_options.setInterval) {\n        fill(WINDOW, 'setInterval', _wrapTimeFunction);\n      }\n\n      if (_options.requestAnimationFrame) {\n        fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n      }\n\n      if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n        fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n      }\n\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach(_wrapEventTarget);\n      }\n    },\n  };\n}) ;\n\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n * @deprecated Use `browserApiErrorsIntegration()` instead.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst TryCatch = convertIntegrationFnToClass(\n  INTEGRATION_NAME,\n  browserApiErrorsIntegration,\n)\n\n;\n\nfunction _wrapTimeFunction(original) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( ...args) {\n    const originalCallback = args[0];\n    args[0] = wrap(originalCallback, {\n      mechanism: {\n        data: { function: getFunctionName(original) },\n        handled: false,\n        type: 'instrument',\n      },\n    });\n    return original.apply(this, args);\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( callback) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    return original.apply(this, [\n      wrap(callback, {\n        mechanism: {\n          data: {\n            function: 'requestAnimationFrame',\n            handler: getFunctionName(original),\n          },\n          handled: false,\n          type: 'instrument',\n        },\n      }),\n    ]);\n  };\n}\n\nfunction _wrapXHR(originalSend) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return function ( ...args) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const xhr = this;\n    const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n    xmlHttpRequestProps.forEach(prop => {\n      if (prop in xhr && typeof xhr[prop] === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        fill(xhr, prop, function (original) {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: getFunctionName(original),\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          };\n\n          // If Instrument integration has been called before TryCatch, get the name of original function\n          const originalFunction = getOriginalFunction(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n          }\n\n          // Otherwise wrap directly\n          return wrap(original, wrapOptions);\n        });\n      }\n    });\n\n    return originalSend.apply(this, args);\n  };\n}\n\nfunction _wrapEventTarget(target) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const globalObject = WINDOW ;\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  const proto = globalObject[target] && globalObject[target].prototype;\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n  if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n    return;\n  }\n\n  fill(proto, 'addEventListener', function (original,)\n\n {\n    return function (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n      eventName,\n      fn,\n      options,\n    ) {\n      try {\n        if (typeof fn.handleEvent === 'function') {\n          // ESlint disable explanation:\n          //  First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n          //  introduce a bug here, because bind returns a new function that doesn't have our\n          //  flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n          //  Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          fn.handleEvent = wrap(fn.handleEvent, {\n            mechanism: {\n              data: {\n                function: 'handleEvent',\n                handler: getFunctionName(fn),\n                target,\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          });\n        }\n      } catch (err) {\n        // can sometimes get 'Permission denied to access property \"handle Event'\n      }\n\n      return original.apply(this, [\n        eventName,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        wrap(fn , {\n          mechanism: {\n            data: {\n              function: 'addEventListener',\n              handler: getFunctionName(fn),\n              target,\n            },\n            handled: false,\n            type: 'instrument',\n          },\n        }),\n        options,\n      ]);\n    };\n  });\n\n  fill(\n    proto,\n    'removeEventListener',\n    function (\n      originalRemoveEventListener,\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ) {\n      return function (\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n        eventName,\n        fn,\n        options,\n      ) {\n        /**\n         * There are 2 possible scenarios here:\n         *\n         * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n         * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n         * as a pass-through, and call original `removeEventListener` with it.\n         *\n         * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n         * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n         * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n         * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n         * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n         *\n         * When someone adds a handler prior to initialization, and then do it again, but after,\n         * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n         * to get rid of the initial handler and it'd stick there forever.\n         */\n        const wrappedEventHandler = fn ;\n        try {\n          const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n          if (originalEventHandler) {\n            originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n          }\n        } catch (e) {\n          // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n        }\n        return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n      };\n    },\n  );\n}\n\nexport { TryCatch, browserApiErrorsIntegration };\n//# sourceMappingURL=trycatch.js.map\n","import { inboundFiltersIntegration, functionToStringIntegration, getIntegrationsToSetup, initAndBind, getReportDialogEndpoint, getCurrentHub, startSession, captureSession, getClient } from '@sentry/core';\nimport { stackParserFromStackParserOptions, supportsFetch, logger, addHistoryInstrumentationHandler } from '@sentry/utils';\nimport { BrowserClient } from './client.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW, wrap as wrap$1 } from './helpers.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { dedupeIntegration } from './integrations/dedupe.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { browserApiErrorsIntegration } from './integrations/trycatch.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\nimport { makeXHRTransport } from './transports/xhr.js';\n\n/** @deprecated Use `getDefaultIntegrations(options)` instead. */\nconst defaultIntegrations = [\n  inboundFiltersIntegration(),\n  functionToStringIntegration(),\n  browserApiErrorsIntegration(),\n  breadcrumbsIntegration(),\n  globalHandlersIntegration(),\n  linkedErrorsIntegration(),\n  dedupeIntegration(),\n  httpContextIntegration(),\n];\n\n/** Get the default integrations for the browser SDK. */\nfunction getDefaultIntegrations(_options) {\n  // We return a copy of the defaultIntegrations here to avoid mutating this\n  return [\n    // eslint-disable-next-line deprecation/deprecation\n    ...defaultIntegrations,\n  ];\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n *   dsn: '__DSN__',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n *   scope.setExtra({ battery: 0.7 });\n *   scope.setTag({ user_mode: 'admin' });\n *   scope.setUser({ id: '4711' });\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n *   message: 'My Breadcrumb',\n *   // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n *   message: 'Manual',\n *   stacktrace: [\n *     // ...\n *   ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nfunction init(options = {}) {\n  if (options.defaultIntegrations === undefined) {\n    options.defaultIntegrations = getDefaultIntegrations();\n  }\n  if (options.release === undefined) {\n    // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n    if (typeof __SENTRY_RELEASE__ === 'string') {\n      options.release = __SENTRY_RELEASE__;\n    }\n\n    // This supports the variable that sentry-webpack-plugin injects\n    if (WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id) {\n      options.release = WINDOW.SENTRY_RELEASE.id;\n    }\n  }\n  if (options.autoSessionTracking === undefined) {\n    options.autoSessionTracking = true;\n  }\n  if (options.sendClientReports === undefined) {\n    options.sendClientReports = true;\n  }\n\n  const clientOptions = {\n    ...options,\n    stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n    integrations: getIntegrationsToSetup(options),\n    transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n  };\n\n  initAndBind(BrowserClient, clientOptions);\n\n  if (options.autoSessionTracking) {\n    startSessionTracking();\n  }\n}\n\nconst showReportDialog = (\n  // eslint-disable-next-line deprecation/deprecation\n  options = {},\n  // eslint-disable-next-line deprecation/deprecation\n  hub = getCurrentHub(),\n) => {\n  // doesn't work without a document (React Native)\n  if (!WINDOW.document) {\n    DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n    return;\n  }\n\n  // eslint-disable-next-line deprecation/deprecation\n  const { client, scope } = hub.getStackTop();\n  const dsn = options.dsn || (client && client.getDsn());\n  if (!dsn) {\n    DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n    return;\n  }\n\n  if (scope) {\n    options.user = {\n      ...scope.getUser(),\n      ...options.user,\n    };\n  }\n\n  if (!options.eventId) {\n    // eslint-disable-next-line deprecation/deprecation\n    options.eventId = hub.lastEventId();\n  }\n\n  const script = WINDOW.document.createElement('script');\n  script.async = true;\n  script.crossOrigin = 'anonymous';\n  script.src = getReportDialogEndpoint(dsn, options);\n\n  if (options.onLoad) {\n    script.onload = options.onLoad;\n  }\n\n  const { onClose } = options;\n  if (onClose) {\n    const reportDialogClosedMessageHandler = (event) => {\n      if (event.data === '__sentry_reportdialog_closed__') {\n        try {\n          onClose();\n        } finally {\n          WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n        }\n      }\n    };\n    WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n  }\n\n  const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n  if (injectionPoint) {\n    injectionPoint.appendChild(script);\n  } else {\n    DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n  }\n};\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction forceLoad() {\n  // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction onLoad(callback) {\n  callback();\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @deprecated This function will be removed in v8.\n * It is not part of Sentry's official API and it's easily replaceable by using a try/catch block\n * and calling Sentry.captureException.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\n// TODO(v8): Remove this function\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrap(fn) {\n  return wrap$1(fn)();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking() {\n  if (typeof WINDOW.document === 'undefined') {\n    DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n    return;\n  }\n\n  // The session duration for browser sessions does not track a meaningful\n  // concept that can be used as a metric.\n  // Automatically captured sessions are akin to page views, and thus we\n  // discard their duration.\n  startSession({ ignoreDuration: true });\n  captureSession();\n\n  // We want to create a session for every navigation as well\n  addHistoryInstrumentationHandler(({ from, to }) => {\n    // Don't create an additional session for the initial route or if the location did not change\n    if (from !== undefined && from !== to) {\n      startSession({ ignoreDuration: true });\n      captureSession();\n    }\n  });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\nfunction captureUserFeedback(feedback) {\n  const client = getClient();\n  if (client) {\n    client.captureUserFeedback(feedback);\n  }\n}\n\nexport { captureUserFeedback, defaultIntegrations, forceLoad, getDefaultIntegrations, init, onLoad, showReportDialog, wrap };\n//# sourceMappingURL=sdk.js.map\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n  randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return unsafeStringify(rnds);\n}\n\nexport default v4;","import { v4 as uuidv4 } from 'uuid'\r\n\r\nexport const generateUUID = () => uuidv4()\r\n","import isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\nimport isNaN from 'lodash/isNaN'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { isLocalhostOrPrivateIp } from 'pmt-modules/environment'\r\n\r\n//\r\n// ------------------------------------------------------------------------------------------------\r\n//        STORAGE\r\n// ------------------------------------------------------------------------------------------------\r\n//\r\n\r\n//\r\n// local storage abstraction functions\r\n//\r\n\r\nconst getObjectFromStorage = (key, defaultValue = null) => {\r\n  try {\r\n    if (!localStorage) {\r\n      return null\r\n    }\r\n    const obj = localStorage.getItem(key)\r\n\r\n    let value = null\r\n\r\n    // default value\r\n    if (isUndefined(obj) || isNull(obj)) {\r\n      if (!isUndefined(defaultValue) && !isNull(defaultValue)) {\r\n        value = defaultValue\r\n      }\r\n    } else {\r\n      try {\r\n        value = JSON.parse(obj)\r\n      } catch (e) {\r\n        value = obj\r\n      }\r\n    }\r\n\r\n    // saved values as null are set as a string 'null', not null\r\n    if (value === 'null') {\r\n      return null\r\n    }\r\n\r\n    return value\r\n  } catch {}\r\n}\r\n\r\n//\r\n// setters\r\n//\r\n\r\nexport const saveToStorage = (key, object) => {\r\n  try {\r\n    const json = JSON.stringify(object)\r\n    localStorage.setItem(key, json)\r\n  } catch {}\r\n}\r\n\r\n//\r\n// getters\r\n//\r\n\r\nexport const getFromStorage = (key, defaultValue = null) => {\r\n  const value = getObjectFromStorage(key, defaultValue)\r\n  return value\r\n}\r\n\r\nexport const getFloatFromStorage = (key, defaultReturn = 0) => {\r\n  let value = getObjectFromStorage(key)\r\n\r\n  // default value\r\n  if (isNil(value) || isNaN(value)) {\r\n    if (!isUndefined(defaultReturn) && !isNull(defaultReturn)) {\r\n      value = defaultReturn\r\n    } else {\r\n      value = 0\r\n    }\r\n  }\r\n\r\n  const intValue = parseFloat(value)\r\n  if (isNaN(intValue)) {\r\n    return defaultReturn\r\n  }\r\n  return intValue\r\n}\r\n\r\nexport const getIntFromStorage = (key, defaultReturn = 0) => {\r\n  try {\r\n    let value = localStorage.getItem(key)\r\n\r\n    // default value\r\n    if (isUndefined(value) || isNull(value) || isNaN(value)) {\r\n      if (!isUndefined(defaultReturn) && !isNull(defaultReturn)) {\r\n        value = defaultReturn\r\n      } else {\r\n        value = 0\r\n      }\r\n    }\r\n\r\n    const intValue = parseInt(value, 10)\r\n    if (isNaN(intValue)) {\r\n      return defaultReturn\r\n    }\r\n    return intValue\r\n  } catch {}\r\n}\r\n\r\n//\r\n// remove\r\n//\r\n\r\nexport const removeFromStorage = key => {\r\n  try {\r\n    localStorage.removeItem(key)\r\n  } catch {}\r\n}\r\n\r\n//\r\n// ------------------------------------------------------------------------------------------------\r\n//        SESSION\r\n// ------------------------------------------------------------------------------------------------\r\n//\r\n\r\n//\r\n// session storage abstraction functions\r\n//\r\n\r\nconst getObjectFromSession = (key, defaultValue = null) => {\r\n  if (!sessionStorage) {\r\n    return null\r\n  }\r\n  const obj = sessionStorage.getItem(key)\r\n\r\n  let value = null\r\n\r\n  // default value\r\n  if (isUndefined(obj) || isNull(obj)) {\r\n    if (!isUndefined(defaultValue) && !isNull(defaultValue)) {\r\n      value = defaultValue\r\n    }\r\n  } else {\r\n    try {\r\n      value = JSON.parse(obj)\r\n    } catch (e) {\r\n      value = obj\r\n    }\r\n  }\r\n\r\n  // saved values as null are set as a string 'null', not null\r\n  if (value === 'null') {\r\n    return null\r\n  }\r\n\r\n  return value\r\n}\r\n\r\n//\r\n// setters\r\n//\r\n\r\nexport const saveToSession = (key, object) => {\r\n  const json = JSON.stringify(object)\r\n  sessionStorage.setItem(key, json)\r\n}\r\n\r\n//\r\n// getters\r\n//\r\n\r\nexport const getFromSession = (key, defaultValue = null) => {\r\n  const value = getObjectFromSession(key, defaultValue)\r\n  return value\r\n}\r\n\r\nexport const getFloatFromSession = (key, defaultReturn = 0) => {\r\n  let value = getObjectFromStorage(key)\r\n\r\n  // default value\r\n  if (isNil(value) || isNaN(value)) {\r\n    if (!isUndefined(defaultReturn) && !isNull(defaultReturn)) {\r\n      value = defaultReturn\r\n    } else {\r\n      value = 0\r\n    }\r\n  }\r\n\r\n  const intValue = parseFloat(value)\r\n  if (isNaN(intValue)) {\r\n    return defaultReturn\r\n  }\r\n  return intValue\r\n}\r\n\r\nexport const getIntFromSession = (key, defaultReturn = 0) => {\r\n  let value = sessionStorage.getItem(key)\r\n\r\n  // default value\r\n  if (isUndefined(value) || isNull(value) || isNaN(value)) {\r\n    if (!isUndefined(defaultReturn) && !isNull(defaultReturn)) {\r\n      value = defaultReturn\r\n    } else {\r\n      value = 0\r\n    }\r\n  }\r\n\r\n  const intValue = parseInt(value, 10)\r\n  if (isNaN(intValue)) {\r\n    return defaultReturn\r\n  }\r\n  return intValue\r\n}\r\n\r\n//\r\n// remove\r\n//\r\n\r\nexport const removeFromSession = key => {\r\n  sessionStorage.removeItem(key)\r\n}\r\n\r\n//\r\n// ------------------------------------------------------------------------------------------------\r\n//        COOKIES\r\n// ------------------------------------------------------------------------------------------------\r\n//\r\n\r\n/**\r\n * Set Cookie\r\n * Cookies are saved in name-value pairs like: key = value\r\n *\r\n * @param {string} key\r\n * @param {string} value\r\n * @param {number} [expTime=86400000] expiration time when cookie will expire (default: 1 day)\r\n * @param {string} [domain=null] tell the browser what domain the cookie belongs to\r\n * @param {string} [path='/'] tell the browser what path the cookie belongs to\r\n */\r\nexport const setCookie = (key, value, expTime = 86400000, domain = null, path = '/') => {\r\n  const d = new Date()\r\n  d.setTime(d.getTime() + expTime)\r\n  const expires = d.toUTCString()\r\n\r\n  /**\r\n   * domains must start with a dot, so we remove it for localhost\r\n   * https://www.ietf.org/rfc/rfc2109.txt\r\n   */\r\n  if (isNull(domain)) {\r\n    const hostname = window.location.hostname\r\n    domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1)\r\n    domain = `.${domain}`\r\n  }\r\n\r\n  // encodeURIComponent: because accents and special characters should not trigger issues (for example with Safari)\r\n  // encodeURIComponent and not encode in base64: to have retrocompatibility with existing cookies\r\n  document.cookie = `${key}=${encodeURIComponent(value)}; expires=${expires};${\r\n    !isLocalhostOrPrivateIp() ? ` domain=${domain}; Secure;` : ''\r\n  } path=${path}`\r\n}\r\n\r\n/**\r\n * Get cookie value by key\r\n *\r\n * @param {string} key\r\n * @returns\r\n */\r\nexport const getCookie = key => {\r\n  const name = `${key}=`\r\n  const decodedCookie = decodeURIComponent(document.cookie)\r\n  const ca = decodedCookie.split(';')\r\n\r\n  for (let i = 0; i < ca.length; i++) {\r\n    let c = ca[i]\r\n\r\n    while (c.charAt(0) === ' ') {\r\n      c = c.substring(1)\r\n    }\r\n\r\n    if (c.indexOf(name) === 0) {\r\n      return c.substring(name.length, c.length)\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * Delete cookie\r\n *\r\n * @param {string} key\r\n * @param {string} [domain=null] tell the browser what domain the cookie belongs to\r\n * @param {string} [path='/'] tell the browser what path the cookie belongs to\r\n */\r\nexport const deleteCookie = (key, domain = null, path = '/') => {\r\n  /**\r\n   * domains must start with a dot, so we remove it for localhost\r\n   * https://www.ietf.org/rfc/rfc2109.txt\r\n   */\r\n  if (isNull(domain)) {\r\n    const hostname = window.location.hostname\r\n    domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1)\r\n    domain = `.${domain}`\r\n  }\r\n\r\n  document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; ${\r\n    !isLocalhostOrPrivateIp() ? ` domain=${domain};` : ''\r\n  } path=${path};`\r\n}\r\n\r\n/**\r\n * Detect if a storage type is available or not\r\n *\r\n * you can test this by blocking cookies in via chrome://settings/content/cookies\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Testing_for_availability\r\n\r\n * @param {String} type can be 'localStorage' or 'sessionStorage'\r\n * @returns\r\n */\r\nexport const storageAvailable = type => {\r\n  let storage = null\r\n  try {\r\n    storage = window[type]\r\n    const x = '__storage_test__'\r\n    storage.setItem(x, x)\r\n    storage.removeItem(x)\r\n    return true\r\n  } catch (e) {\r\n    return (\r\n      e instanceof DOMException &&\r\n      // everything except Firefox\r\n      (e.code === 22 ||\r\n        // Firefox\r\n        e.code === 1014 ||\r\n        // test name field too, because code might not be present\r\n        // everything except Firefox\r\n        e.name === 'QuotaExceededError' ||\r\n        // Firefox\r\n        e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\r\n      // acknowledge QuotaExceededError only if there's something already stored\r\n      storage &&\r\n      storage.length !== 0\r\n    )\r\n  }\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport { getFromSession, saveToSession } from 'pmt-modules/storage'\r\n\r\n//\r\n// The front can define a unique \"session\" id for the current user session and send it on the\r\n// 'p-front-session-id' header to the API.\r\n// It allows the API to link different API calls to a single front session.\r\n//\r\n\r\n// generate front session id for the session\r\n// It is saved on the sessionStorage: The sessionStorage object stores data for only one session\r\n// (the data is deleted when the browser tab is closed).\r\nlet _frontSessionId = null\r\n\r\nconst SessionStorageKey = 'P_FRONT_SESSSION_ID'\r\n\r\nexport const FRONT_SESSION_ID_HEADER = 'p-front-session-id'\r\n\r\nexport const initFrontSessionId = () => {\r\n  _frontSessionId = getFromSession(SessionStorageKey)\r\n\r\n  if (isEmpty(_frontSessionId)) {\r\n    _frontSessionId = `${Date.now()}_${generateUUID()}`\r\n    saveToSession(SessionStorageKey, _frontSessionId)\r\n  }\r\n}\r\n\r\nexport const getFrontSessionId = () => _frontSessionId\r\n","import * as Sentry from '@sentry/browser'\r\n\r\nimport isString from 'lodash/isString'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getFrontSessionId } from 'pmt-modules/frontSession'\r\n\r\n//import { getStore } from 'pmt-modules/store'\r\n\r\n// contains current logged in user info\r\nlet _userData = null\r\n\r\nlet _loggerConfig = {\r\n  SENTRY_URL: '',\r\n\r\n  DISPLAY_REPORT_DIALOG: true,\r\n\r\n  APP_VERSION: '',\r\n}\r\n\r\nexport default class Logger {\r\n  static LoggerLevel = {\r\n    INFO: 'info',\r\n    WARNING: 'warning',\r\n    ERROR: 'error',\r\n  }\r\n\r\n  //\r\n  // Define the different contexts\r\n  //\r\n\r\n  static UserContext = {\r\n    ANONYMOUS: 'ANONYMOUS',\r\n    USER: 'USER',\r\n  }\r\n\r\n  static ProContext = {\r\n    ANONYMOUS: 'ANONYMOUS',\r\n    PRO: 'PRO',\r\n  }\r\n\r\n  static RestaurantContext = {\r\n    ANONYMOUS: 'ANONYMOUS',\r\n    RESTAURANT: 'RESTAURANT',\r\n  }\r\n\r\n  // https://github.com/getsentry/sentry-javascript/issues/2027\r\n  static isSetup() {\r\n    const hub = Sentry.getCurrentHub()\r\n    if (!isNil(hub)) {\r\n      return !isNil(hub.getClient())\r\n    }\r\n    return false\r\n  }\r\n\r\n  //\r\n  //\r\n  //\r\n\r\n  /**\r\n   * Configure sentry logging\r\n   * @param  {[type]} config [description]\r\n   * @return {[type]}        [description]\r\n   */\r\n  static configure(config) {\r\n    _loggerConfig = config\r\n\r\n    // Do not send errors to sentry if we are on localhost.\r\n    if (document.location.hostname === 'localhost') {\r\n      return\r\n    }\r\n\r\n    if (!Logger.isSetup()) {\r\n      Sentry.init({\r\n        dsn: _loggerConfig.SENTRY_URL,\r\n        debug: true,\r\n        // see https://docs.sentry.io/clients/javascript/config/\r\n        release: _loggerConfig.APP_VERSION,\r\n        environment: _loggerConfig.ENV,\r\n        // Enables/disables automatic collection of breadcrumbs. default: true\r\n        autoBreadcrumbs: {\r\n          xhr: true, // XMLHttpRequest\r\n          console: true, // console logging\r\n          dom: true, // DOM interactions, i.e. clicks/typing\r\n          location: true, // url changes, including pushState/popState\r\n          sentry: true, // sentry events\r\n        },\r\n        // Maximum number of levels that normalization algorithm will traverse in objects and arrays.\r\n        normalizeDepth: 11,\r\n        // see https://docs.sentry.io/clients/javascript/tips/\r\n        ignoreErrors: [\r\n          // fetch\r\n          // https://stackoverflow.com/questions/55738408/javascript-typeerror-cancelled-error-when-calling-fetch-on-ios\r\n          //'TypeError: Failed to fetch',\r\n          'TypeError: NetworkError when attempting to fetch resource.',\r\n          'TypeError: Cancelled',\r\n          // Random plugins/extensions\r\n          'top.GLOBALS',\r\n          // See: http://blog.errorception.com/2012/03/tale-of-unfindable-js-error. html\r\n          'originalCreateNotification',\r\n          'canvas.contentDocument',\r\n          // Facebook borked\r\n          'fb_xd_fragment',\r\n        ],\r\n        ignoreUrls: [\r\n          // Facebook flakiness\r\n          /graph\\.facebook\\.com/i,\r\n          // Facebook blocked\r\n          /connect\\.facebook\\.net\\/en_US\\/all\\.js/i,\r\n          // Chrome extensions\r\n          /extensions\\//i,\r\n          /^chrome:\\/\\//i,\r\n        ],\r\n      })\r\n\r\n      Sentry.setTag('appCommit', _loggerConfig.__APP_GIT_COMMIT__)\r\n      Sentry.setTag('sdkCommit', _loggerConfig.__SDK_GIT_COMMIT__)\r\n      Sentry.setTag('sdkBranch', _loggerConfig.__SDK_GIT_BRANCH__)\r\n      Sentry.setTag('appBranch', _loggerConfig.__APP_GIT_BRANCH__)\r\n      Sentry.setTag('frontSessionId', getFrontSessionId())\r\n    }\r\n  }\r\n\r\n  static notImplemented(key, detail = '', extra = {}) {\r\n    console.error(key, detail, extra)\r\n\r\n    if (Logger.isSetup()) {\r\n      const message = `[${key}] ${Logger.formatObject(detail)}`\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.WARNING)\r\n        scope.setExtra('userData', _userData)\r\n        scope.setExtra('extra', extra)\r\n        Sentry.captureMessage(message)\r\n      })\r\n\r\n      Sentry.showReportDialog()\r\n    }\r\n  }\r\n\r\n  static info(key, detail, extra = {}) {\r\n    if (Logger.isSetup()) {\r\n      const message = `[${key}] ${Logger.formatObject(detail)}`\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.INFO)\r\n        scope.setExtra('userData', _userData)\r\n        scope.setExtra('extra', extra)\r\n        Sentry.captureMessage(message)\r\n      })\r\n    }\r\n  }\r\n\r\n  static warn(key, detail, extra = {}) {\r\n    Logger.warning(key, detail, extra)\r\n  }\r\n\r\n  static warning(key, detail, extra = {}) {\r\n    console.warn(key, detail)\r\n\r\n    if (Logger.isSetup()) {\r\n      const message = `[${key}] ${Logger.formatObject(detail)}`\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.WARNING)\r\n        scope.setExtra('userData', _userData)\r\n        scope.setExtra('extra', extra)\r\n        Sentry.captureMessage(message)\r\n      })\r\n    }\r\n  }\r\n\r\n  static error(key, detail, extra = {}) {\r\n    console.error(key, detail, extra)\r\n\r\n    if (Logger.isSetup()) {\r\n      const message = `[${key}] ${Logger.formatObject(detail)}`\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.ERROR)\r\n        scope.setExtra('userData', _userData)\r\n        scope.setExtra('extra', extra)\r\n        Sentry.captureMessage(message)\r\n      })\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Called when an exception is thrown during an action.\r\n   *\r\n   * See crashReporter.js\r\n   *\r\n   * @param  {[type]} err    exception thrown\r\n   * @param  {[type]} action action dispatched when the error occurred\r\n   */\r\n  static reduxException(err, action) {\r\n    console.error('action exception', err)\r\n\r\n    if (Logger.isSetup()) {\r\n      Sentry.withScope(scope => {\r\n        scope.setLevel(Logger.LoggerLevel.ERROR)\r\n        scope.setExtra('action', {\r\n          response: action.response,\r\n        })\r\n        scope.setExtra('userData', _userData)\r\n        Sentry.captureException(err)\r\n      })\r\n\r\n      Logger.runReportDialog()\r\n    }\r\n  }\r\n\r\n  static formatObject(object) {\r\n    if (!isString(object)) {\r\n      try {\r\n        return JSON.stringify(object)\r\n      } catch (e) {}\r\n    }\r\n\r\n    return object\r\n  }\r\n\r\n  static componentDidCatch(error, info) {\r\n    if (Logger.isSetup()) {\r\n      Sentry.withScope(scope => {\r\n        // see https://docs.sentry.io/platforms/javascript/#extra-context\r\n        scope.setExtra('info', info)\r\n        scope.setExtra('userData', _userData)\r\n        Sentry.captureException(error)\r\n      })\r\n\r\n      Logger.runReportDialog()\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Log an exception to the console and send it to our tracker (raven).\r\n   * @see https://github.com/getsentry/raven-js/blob/master/docs/integrations/react.rst\r\n   *\r\n   * @param ex\r\n   * @param context\r\n   */\r\n  static logException(ex, context) {\r\n    if (Logger.isSetup()) {\r\n      Sentry.withScope(scope => {\r\n        // see https://docs.sentry.io/platforms/javascript/#extra-context\r\n        scope.setExtra('context', context)\r\n        scope.setExtra('userData', _userData)\r\n        Sentry.captureException(ex)\r\n      })\r\n\r\n      Logger.runReportDialog()\r\n    }\r\n    /* eslint no-console:0 */\r\n    if (window.console && console.error) {\r\n      console.error(ex)\r\n    }\r\n  }\r\n\r\n  static runReportDialog() {\r\n    if (_loggerConfig.DISPLAY_REPORT_DIALOG === true) {\r\n      const data = {\r\n        eventId: Logger.lastEventId(),\r\n        name: _userData ? `${_userData.firstName} ${_userData.lastName}` : '',\r\n        email: _userData ? _userData.email : '',\r\n        comments: '',\r\n      }\r\n\r\n      // do not show if already displayed\r\n      // Note: in most cases, the dialog is ask to show multiple times in a row. In this case the\r\n      // following code does not work.\r\n      const sentryClass = 'sentry-error-embed-wrapper'\r\n      const classes = document.getElementsByClassName(sentryClass)\r\n      if (classes && classes.length > 0) {\r\n        return\r\n      }\r\n\r\n      // see https://docs.getsentry.com/hosted/clients/javascript/usage/#user-feedback\r\n      Sentry.showReportDialog(data)\r\n\r\n      // put some default data on report dialog, need to wait for the dialog to appear.\r\n      // Note: we wait for ~1s, it is completely arbitrary and some browsers don't display the\r\n      // dialog before this timeout ends.\r\n      // In this case, we attempt one retry.\r\n      const prefillReportDialogData = (data, shouldRetryIfNotLoadedYet = false) => {\r\n        const nameElem = document.getElementById('id_name')\r\n        const emailElem = document.getElementById('id_email')\r\n        const idElem = document.getElementById('id_comments')\r\n\r\n        // if all elements are null, the modal isn't display yet.\r\n        if (isNil(idElem) && isNil(nameElem) && isNil(emailElem)) {\r\n          // not loaded yet, should we retry ?\r\n          if (shouldRetryIfNotLoadedYet === true) {\r\n            setTimeout(() => {\r\n              // false to avoid infinite loop\r\n              prefillReportDialogData(data, false)\r\n            }, 1200)\r\n          }\r\n        } else {\r\n          if (!isNil(nameElem) && !isNil(data.name)) {\r\n            nameElem.value = data.name\r\n          }\r\n\r\n          if (!isNil(emailElem) && !isNil(data.email)) {\r\n            emailElem.value = data.email\r\n          }\r\n\r\n          if (!isNil(idElem) && !isNil(data.comments)) {\r\n            idElem.value = data.comments\r\n          }\r\n        }\r\n      }\r\n\r\n      // first try after 1s\r\n      setTimeout(() => {\r\n        prefillReportDialogData(data, true)\r\n      }, 1000) // 1s\r\n    }\r\n  }\r\n\r\n  //\r\n  //\r\n  //\r\n\r\n  /**\r\n   * https://docs.sentry.io/platforms/javascript/#capturing-the-user\r\n   * @param see Logger.UserContext\r\n   * @param userId\r\n   */\r\n  static setUserContext(userContext, userData = {}) {\r\n    if (Logger.isSetup()) {\r\n      _userData = userData\r\n\r\n      Sentry.configureScope(scope => {\r\n        scope.setUser({\r\n          userContext,\r\n          id: userData.id,\r\n          email: userData.email,\r\n          restaurantsGroup: userData.restaurantsGroup,\r\n          name: `${userData.firstName} ${userData.lastName}`,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  /**\r\n   * https://docs.sentry.io/platforms/javascript/#capturing-the-user\r\n   * @param see Logger.UserContext\r\n   * @param userId\r\n   */\r\n  static setProContext(proContext, proData) {\r\n    _userData = proData\r\n\r\n    if (Logger.isSetup()) {\r\n      Sentry.configureScope(scope => {\r\n        scope.setUser({\r\n          userContext: proContext,\r\n          id: proData.id,\r\n          email: proData.email,\r\n          name: `${proData.firstName} ${proData.lastName}`,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  /**\r\n   * https://docs.sentry.io/platforms/javascript/#capturing-the-user\r\n   * @param see Logger.UserContext\r\n   * @param userId\r\n   */\r\n  static setRestaurantContext(restaurantContext, restaurantData) {\r\n    _userData = restaurantData\r\n\r\n    if (Logger.isSetup()) {\r\n      Sentry.configureScope(scope => {\r\n        scope.setUser({\r\n          userContext: restaurantContext,\r\n          restaurantId: restaurantData.restaurantId,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  //\r\n  // Raven utils\r\n  //\r\n\r\n  static clearUserContext() {\r\n    // TODO: do we really want to clear the user data here?\r\n    _userData = null\r\n\r\n    if (Logger.isSetup()) {\r\n      // https://docs.sentry.io/platforms/javascript/#unsetting-context\r\n      Sentry.configureScope(scope => scope.clear())\r\n    }\r\n  }\r\n\r\n  static lastEventId() {\r\n    if (Logger.isSetup()) {\r\n      return Sentry.lastEventId()\r\n    }\r\n    return null\r\n  }\r\n\r\n  //\r\n  // utils\r\n  //\r\n\r\n  /**\r\n   * Get a strack trice as an object.\r\n   * @type {[type]}\r\n   */\r\n  static getStackTrace = () => {\r\n    const obj = {}\r\n\r\n    if (Error.captureStackTrace) {\r\n      Error.captureStackTrace(obj, Logger.getStackTrace)\r\n      return obj.stack\r\n    }\r\n\r\n    return null\r\n  }\r\n}\r\n","import { createSelector } from 'reselect'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\n/**\r\n * Generate a simple selector with basic isFetching / getData / getErrors\r\n * @param  {function} getState  Function to retrieve entity from state\r\n *                              state => state.entities.ENTITY_NAME\r\n * @param  {function} formatData  Callback function to format data\r\n * @return {object}             Object with 3 selectors\r\n *                              isFetching / getData / getErrors\r\n * TODO: rename to `createSimpleSelectors`\r\n */\r\nconst createSimpleSelector = (getState, formatData = null) => ({\r\n  isFetching: createSelector(\r\n    [getState],\r\n    dataState => (isNil(dataState) ? false : dataState.get('isFetching') || false)\r\n  ),\r\n\r\n  getData: createSelector([getState], dataState => {\r\n    if (isNil(dataState)) {\r\n      return null\r\n    }\r\n\r\n    const data = dataState.get('data')\r\n\r\n    if (isNil(data)) {\r\n      return null\r\n    }\r\n\r\n    if (!data.toJS) {\r\n      // Can happen when the API did not sent back a JSON object.\r\n      throw new Error('Invalid data on createSimpleSelector, toJS does not exists: ' + data)\r\n    }\r\n\r\n    const dataJs = data.toJS()\r\n\r\n    // add action payload data if exists\r\n    const actionData = dataState.get('actionData', null)\r\n\r\n    return formatData !== null && typeof formatData === 'function'\r\n      ? formatData(dataJs, { data: dataJs, actionData: actionData ? actionData.toJS() : null })\r\n      : dataJs\r\n  }),\r\n\r\n  getError: createSelector([getState], dataState => {\r\n    if (isNil(dataState)) {\r\n      return null\r\n    }\r\n\r\n    const error = dataState.get('error')\r\n\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n\r\n    if (!isFunction(error.toJS)) {\r\n      Logger.warn('Create Simple Selector', 'data is not immutable', { error })\r\n    }\r\n\r\n    return error.toJS ? error.toJS() : error\r\n  }),\r\n})\r\n\r\nexport default createSimpleSelector\r\n","import Immutable from 'immutable'\r\nimport invariant from 'invariant'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\n/**\r\n * Generate a simple reducer with basic REQUEST / SUCCESS / FAILURE\r\n * @param  {string} actionType  Action to be reduced\r\n * @return {Immutable}          Updated state\r\n */\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  data: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\nconst createSimpleReducer = (actionType, reducer = null) => (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case actionType.REQUEST:\r\n      return state\r\n        .merge({\r\n          actionData: action.data,\r\n          isFetching: true,\r\n          error: null,\r\n        })\r\n        .merge(\r\n          action?.data?.resetDataOnRequest ?? true\r\n            ? {\r\n                data: null,\r\n              }\r\n            : {}\r\n        )\r\n\r\n    case actionType.SUCCESS:\r\n      return state.merge({\r\n        data: action.response,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case actionType.FAILURE:\r\n      return state.merge({\r\n        data: null,\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      if (reducer !== null) {\r\n        invariant(\r\n          isFunction(reducer) || isObject(reducer),\r\n          'reducer must be a function or an object'\r\n        )\r\n        let res\r\n        if (isFunction(reducer)) {\r\n          res = reducer(state, action)\r\n        } else {\r\n          const func = reducer[action.type]\r\n          if (!func) {\r\n            // no reducer function found for the action type.\r\n            return state\r\n          }\r\n          res = func(state, action)\r\n        }\r\n        invariant(!isUndefined(res), 'reducer returned undefined')\r\n        return res\r\n      }\r\n      return state\r\n  }\r\n}\r\n\r\ncreateSimpleReducer.DEFAULT_STATE = DEFAULT_STATE\r\n\r\nexport default createSimpleReducer\r\n","//\r\n// utility to create a middleware function. Avoid boilerplate.\r\n//\r\n// Example:\r\n//\r\n// ```\r\n// const middleware = createMiddleware(Action.REQUEST, ({ getState, dispatch, next, action }) => {\r\n//\r\n// })\r\n// ```\r\n//\r\n//\r\nimport findIndex from 'lodash/findIndex'\r\nimport isArray from 'lodash/isArray'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\nimport invariant from 'invariant'\r\nimport { __DEV__ } from '../environment'\r\n\r\nconst STOP_PROPAGATION = -1\r\n\r\n/**\r\n *\r\n * @param  {any} actionsToHandleParam can either be:\r\n *                                    - function: (action) -> bool\r\n *                                    - array of `type` constants\r\n *                                    - `type` constant\r\n * @param  {func} func                the body of the middleware\r\n */\r\nconst createMiddleware = (actionsToHandleParam, func) => ({\r\n  getState,\r\n  dispatch,\r\n}) => next => action => {\r\n  if (__DEV__) {\r\n    invariant(isFunction(func), 'middleware must be a function')\r\n    invariant(!isNil(actionsToHandleParam), 'actionsToHandleParam nil for ' + func)\r\n  }\r\n\r\n  let res = null\r\n\r\n  //\r\n  if (typeof action === 'object' && action.hasOwnProperty('type')) {\r\n    // handle actionsToHandleParam as array of actions and as a single action\r\n    let actionsToHandle = actionsToHandleParam\r\n    if (isFunction(actionsToHandleParam) && actionsToHandleParam.TYPE) {\r\n      // the user gives an action as actionsToHandleParam, we need to use the type\r\n      actionsToHandle = actionsToHandleParam.TYPE\r\n    }\r\n\r\n    let toHandle = false\r\n\r\n    if (isFunction(actionsToHandle)) {\r\n      toHandle = actionsToHandle(action)\r\n    } else {\r\n      // handle actionsToHandleParam as array of actions and as a single action: we pass it to an\r\n      // array\r\n      if (!isArray(actionsToHandle)) {\r\n        actionsToHandle = [actionsToHandle]\r\n      }\r\n\r\n      toHandle =\r\n        findIndex(actionsToHandle, actionToHandle => {\r\n          return action.type === actionToHandle\r\n        }) !== -1\r\n    }\r\n\r\n    if (toHandle) {\r\n      try {\r\n        res = func({\r\n          getState,\r\n          dispatch,\r\n          next,\r\n          action,\r\n        })\r\n      } catch (e) {\r\n        console.error(`Error on middleware`, { action })\r\n        console.error(e)\r\n      }\r\n\r\n      // action should stop if we get a null result\r\n      if (res !== STOP_PROPAGATION) {\r\n        return isNil(res) // in case we forgot the final `return next(action)` on the middleware\r\n          ? next(action)\r\n          : res\r\n      }\r\n    }\r\n  }\r\n\r\n  //\r\n  if (isNull(res) || res !== STOP_PROPAGATION) {\r\n    return next(action)\r\n  }\r\n}\r\n\r\ncreateMiddleware.STOP_PROPAGATION = STOP_PROPAGATION\r\n\r\nexport default createMiddleware\r\n","import Immutable from 'immutable'\r\nimport invariant from 'invariant'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\n/**\r\n * Generate a simple reducer with basic REQUEST / SUCCESS / FAILURE\r\n * @param  {string} actionType  Action to be reduced\r\n * @return {Immutable}          Updated state\r\n */\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  data: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\nconst onRequest = (state, action, getProp) =>\r\n  state.mergeIn([getProp(action)], {\r\n    data: null,\r\n    isFetching: true,\r\n    error: null,\r\n    actionData: action.data,\r\n  })\r\n\r\nconst onSuccess = (state, action, getProp) =>\r\n  state.mergeIn([getProp(action)], {\r\n    data: action.response,\r\n    isFetching: false,\r\n    error: null,\r\n  })\r\n\r\nconst onFailure = (state, action, getProp) =>\r\n  state.mergeIn([getProp(action)], {\r\n    data: null,\r\n    isFetching: false,\r\n    error: action.error,\r\n  })\r\n\r\n// options:\r\n//  - override: { onSuccess: }\r\nconst createReducerPerObject = (actionType, getProp, reducer = null, options = {}) => (\r\n  state = DEFAULT_STATE,\r\n  action\r\n) => {\r\n  switch (action.type) {\r\n    case actionType.REQUEST:\r\n      return (options?.override?.onRequest || onRequest)(state, action, getProp)\r\n\r\n    case actionType.SUCCESS:\r\n      return (options?.override?.onSuccess || onSuccess)(state, action, getProp)\r\n\r\n    case actionType.FAILURE:\r\n      return (options?.override?.onFailure || onFailure)(state, action, getProp)\r\n\r\n    default:\r\n      if (reducer !== null) {\r\n        invariant(\r\n          isFunction(reducer) || isObject(reducer),\r\n          'reducer must be a function or an object'\r\n        )\r\n        let res\r\n        if (isFunction(reducer)) {\r\n          res = reducer(state, action)\r\n        } else {\r\n          const func = reducer[action.type]\r\n          if (!func) {\r\n            // no reducer function found for the action type.\r\n            return state\r\n          }\r\n          res = func(state, action)\r\n        }\r\n        invariant(!isUndefined(res), 'reducer returned undefined')\r\n        return res\r\n      }\r\n      return state\r\n  }\r\n}\r\n\r\ncreateReducerPerObject.DEFAULT_STATE = DEFAULT_STATE\r\n\r\nexport default createReducerPerObject\r\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n  root = self;\n} else if (typeof window !== 'undefined') {\n  root = window;\n} else if (typeof global !== 'undefined') {\n  root = global;\n} else if (typeof module !== 'undefined') {\n  root = module;\n} else {\n  root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error('Expected the enhancer to be a function.');\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error('Expected the reducer to be a function.');\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('Expected the listener to be a function.');\n    }\n\n    if (isDispatching) {\n      throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n    }\n\n    if (isDispatching) {\n      throw new Error('Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error('Expected the nextReducer to be a function.');\n    }\n\n    currentReducer = nextReducer;\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new TypeError('Expected the observer to be an object.');\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n  var actionType = action && action.type;\n  var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n  return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n      }\n    }\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers);\n  var unexpectedKeyCache;\n\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var errorMessage = getUndefinedStateErrorMessage(_key, action);\n        throw new Error(errorMessage);\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass a single function as the first argument,\n * and get a function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var keys = Object.keys(actionCreators);\n  var boundActionCreators = {};\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction _objectSpread(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n    var ownKeys = Object.keys(source);\n\n    if (typeof Object.getOwnPropertySymbols === 'function') {\n      ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n      }));\n    }\n\n    ownKeys.forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    });\n  }\n\n  return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error(\"Dispatching while constructing your middleware is not allowed. \" + \"Other middleware would not be applied to this dispatch.\");\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread({}, store, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n  warning('You are currently using minified code outside of NODE_ENV === \"production\". ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or setting mode to production in webpack (https://webpack.js.org/concepts/mode/) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { createStore, combineReducers, bindActionCreators, applyMiddleware, compose, ActionTypes as __DO_NOT_USE__ActionTypes };\n","import { createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { isOrderPlugin, isKiosk, isWebCustomer, isBo, isWebGlobal } from 'pmt-modules/environment'\r\nimport { getStore } from 'pmt-modules/store'\r\nimport { createAction } from '../redux'\r\n\r\nexport const I18nFetchingLocale = createApiEnumAction('I18n::FETCHING_LOCALE')\r\n\r\n// the require.context is needed for webpack to bundle translation files\r\n// without it, the translation are not loaded when the app is hosted on a custom domain and displayed via iframe\r\n// eg. the translations were not loaded on https://order.preprod.leon-de-bruxelles.paymytable.com/restaurant/17000107/catalog\r\n// despite being loaded on https://order2.pluginweb.preprod.paymytable.com/restaurant/17000107/catalog?apiConsumer=NTY4MTEzNDk5MDAwMDEyODpBTnc0VkZlODNqMFpiZw==\r\n// Vite alternative to require.context is import.meta.glob\r\nconst translationsContext = import.meta.glob(\r\n  '/pmt-react-sdk/packages/modules/src/i18n/labels/**/*.json',\r\n  {\r\n    eager: true,\r\n  }\r\n)\r\n\r\nasync function loadTranslationFile(locale) {\r\n  const appName =\r\n    isOrderPlugin()\r\n      ? 'pmt-order-plugin'\r\n      : isWebCustomer()\r\n        ? 'pmt_web_customer'\r\n        : isKiosk()\r\n          ? 'pmt-web-kiosk'\r\n          : isBo()\r\n            ? 'pmt-backoffice'\r\n            : isWebGlobal()\r\n              ? 'pmt-web-global'\r\n              : null\r\n\r\n  return loadTranslationFileForApp(appName, locale)\r\n}\r\n\r\nexport async function loadTranslationFileForApp(appName, locale) {\r\n  if (!appName) {\r\n    console.error(`Unknown webapp: cannot determine appName to load the translations`)\r\n    throw new Error('Unknown webapp: cannot determine appName to load the translations')\r\n  }\r\n\r\n  const fileKey = `/pmt-react-sdk/packages/modules/src/i18n/labels/${appName}/${locale}.json`\r\n  const module = translationsContext[fileKey]\r\n\r\n  if (!module) {\r\n    const error = new Error(`Translation file not found: ${fileKey}`)\r\n    console.error(error)\r\n    throw error\r\n  }\r\n\r\n  return module.default || module\r\n}\r\n\r\nexport const retrieveMessages = languageParam => {\r\n  const locale = languageParam === 'debug' ? 'en' : languageParam\r\n\r\n  getStore().dispatch({\r\n    type: I18nFetchingLocale.REQUEST,\r\n    locale: locale,\r\n  })\r\n\r\n  loadTranslationFile(locale)\r\n    .then(labels => {\r\n      getStore().dispatch({\r\n        type: I18nFetchingLocale.SUCCESS,\r\n        locale: locale,\r\n        phrases: labels,\r\n      })\r\n    })\r\n    .catch(err => {\r\n      console.log('[i18n] retrieveMessages FAILURE for locale:', locale, err)\r\n      getStore().dispatch({\r\n        type: I18nFetchingLocale.FAILURE,\r\n        locale: locale,\r\n      })\r\n    })\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const CHOOSE_LOCALE = 'I18n::CHOOSE_LOCALE'\r\n\r\nexport const chooseLocale = locale => createAction(CHOOSE_LOCALE, { locale })\r\n","\r\n\r\n// to avoid infinit loop of fetching texts.\r\nexport const RETRIEVE_MESSAGES_LIMIT = 4\r\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nmodule.exports = baseSlice;\n","var baseSlice = require('./_baseSlice');\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nmodule.exports = castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\nmodule.exports = hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\nmodule.exports = asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\nmodule.exports = unicodeToArray;\n","var asciiToArray = require('./_asciiToArray'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeToArray = require('./_unicodeToArray');\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\nmodule.exports = stringToArray;\n","var castSlice = require('./_castSlice'),\n    hasUnicode = require('./_hasUnicode'),\n    stringToArray = require('./_stringToArray'),\n    toString = require('./toString');\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\nmodule.exports = createCaseFirst;\n","var createCaseFirst = require('./_createCaseFirst');\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\nmodule.exports = upperFirst;\n","var toString = require('./toString'),\n    upperFirst = require('./upperFirst');\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\nmodule.exports = capitalize;\n","import find from 'lodash/find'\r\nimport forEach from 'lodash/forEach'\r\n\r\nexport const localeEquals = (localeA = '', localeB = '') => {\r\n  // trick to handle compare 'fr-FR' with 'fr' or 'FR'\r\n  if (localeA?.length !== localeB?.length) {\r\n    localeA = localeA?.substring(0, 2)\r\n    localeB = localeB?.substring(0, 2)\r\n  }\r\n\r\n  return localeA?.replace('-', '_').toLowerCase() === localeB?.replace('-', '_').toLowerCase()\r\n}\r\n\r\nexport const getForLocale = (localesData, locale) => {\r\n  return find(localesData, localeData => localeEquals(localeData.locale, locale))\r\n}\r\n\r\n/**\r\n *\r\n * @param {object} localeObject  { 'fr': 'test' }\r\n * @param {string} localeToSearchFor\r\n */\r\nexport const getForLocaleObject = (localeObject, localeToSearchFor) => {\r\n  let res = null\r\n  forEach(localeObject, (value, locale) => {\r\n    if (localeEquals(locale, localeToSearchFor)) {\r\n      res = value\r\n      return false\r\n    }\r\n  })\r\n  return res\r\n}\r\n","import { saveToStorage, getFromStorage } from 'pmt-modules/storage'\r\n\r\nconst StorageItem = {\r\n  LOCALE: 'LOCALE',\r\n}\r\n\r\nexport const saveLocaleToStorage = language => {\r\n  saveToStorage(StorageItem.LOCALE, language)\r\n}\r\n\r\nexport const getLocaleFromStorage = () => getFromStorage(StorageItem.LOCALE, null)\r\n","/* flatpickr v4.5.2, @license MIT */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global.flatpickr = factory());\n}(this, (function () { 'use strict';\n\n    var pad = function pad(number) {\n      return (\"0\" + number).slice(-2);\n    };\n    var int = function int(bool) {\n      return bool === true ? 1 : 0;\n    };\n    function debounce(func, wait, immediate) {\n      if (immediate === void 0) {\n        immediate = false;\n      }\n\n      var timeout;\n      return function () {\n        var context = this,\n            args = arguments;\n        timeout !== null && clearTimeout(timeout);\n        timeout = window.setTimeout(function () {\n          timeout = null;\n          if (!immediate) func.apply(context, args);\n        }, wait);\n        if (immediate && !timeout) func.apply(context, args);\n      };\n    }\n    var arrayify = function arrayify(obj) {\n      return obj instanceof Array ? obj : [obj];\n    };\n\n    var do_nothing = function do_nothing() {\n      return undefined;\n    };\n\n    var monthToStr = function monthToStr(monthNumber, shorthand, locale) {\n      return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\n    };\n    var revFormat = {\n      D: do_nothing,\n      F: function F(dateObj, monthName, locale) {\n        dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n      },\n      G: function G(dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n      },\n      H: function H(dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n      },\n      J: function J(dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n      },\n      K: function K(dateObj, amPM, locale) {\n        dateObj.setHours(dateObj.getHours() % 12 + 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n      },\n      M: function M(dateObj, shortMonth, locale) {\n        dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n      },\n      S: function S(dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n      },\n      U: function U(_, unixSeconds) {\n        return new Date(parseFloat(unixSeconds) * 1000);\n      },\n      W: function W(dateObj, weekNum) {\n        var weekNumber = parseInt(weekNum);\n        return new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n      },\n      Y: function Y(dateObj, year) {\n        dateObj.setFullYear(parseFloat(year));\n      },\n      Z: function Z(_, ISODate) {\n        return new Date(ISODate);\n      },\n      d: function d(dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n      },\n      h: function h(dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n      },\n      i: function i(dateObj, minutes) {\n        dateObj.setMinutes(parseFloat(minutes));\n      },\n      j: function j(dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n      },\n      l: do_nothing,\n      m: function m(dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n      },\n      n: function n(dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n      },\n      s: function s(dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n      },\n      w: do_nothing,\n      y: function y(dateObj, year) {\n        dateObj.setFullYear(2000 + parseFloat(year));\n      }\n    };\n    var tokenRegex = {\n      D: \"(\\\\w+)\",\n      F: \"(\\\\w+)\",\n      G: \"(\\\\d\\\\d|\\\\d)\",\n      H: \"(\\\\d\\\\d|\\\\d)\",\n      J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n      K: \"\",\n      M: \"(\\\\w+)\",\n      S: \"(\\\\d\\\\d|\\\\d)\",\n      U: \"(.+)\",\n      W: \"(\\\\d\\\\d|\\\\d)\",\n      Y: \"(\\\\d{4})\",\n      Z: \"(.+)\",\n      d: \"(\\\\d\\\\d|\\\\d)\",\n      h: \"(\\\\d\\\\d|\\\\d)\",\n      i: \"(\\\\d\\\\d|\\\\d)\",\n      j: \"(\\\\d\\\\d|\\\\d)\",\n      l: \"(\\\\w+)\",\n      m: \"(\\\\d\\\\d|\\\\d)\",\n      n: \"(\\\\d\\\\d|\\\\d)\",\n      s: \"(\\\\d\\\\d|\\\\d)\",\n      w: \"(\\\\d\\\\d|\\\\d)\",\n      y: \"(\\\\d{2})\"\n    };\n    var formats = {\n      Z: function Z(date) {\n        return date.toISOString();\n      },\n      D: function D(date, locale, options) {\n        return locale.weekdays.shorthand[formats.w(date, locale, options)];\n      },\n      F: function F(date, locale, options) {\n        return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n      },\n      G: function G(date, locale, options) {\n        return pad(formats.h(date, locale, options));\n      },\n      H: function H(date) {\n        return pad(date.getHours());\n      },\n      J: function J(date, locale) {\n        return locale.ordinal !== undefined ? date.getDate() + locale.ordinal(date.getDate()) : date.getDate();\n      },\n      K: function K(date, locale) {\n        return locale.amPM[int(date.getHours() > 11)];\n      },\n      M: function M(date, locale) {\n        return monthToStr(date.getMonth(), true, locale);\n      },\n      S: function S(date) {\n        return pad(date.getSeconds());\n      },\n      U: function U(date) {\n        return date.getTime() / 1000;\n      },\n      W: function W(date, _, options) {\n        return options.getWeek(date);\n      },\n      Y: function Y(date) {\n        return date.getFullYear();\n      },\n      d: function d(date) {\n        return pad(date.getDate());\n      },\n      h: function h(date) {\n        return date.getHours() % 12 ? date.getHours() % 12 : 12;\n      },\n      i: function i(date) {\n        return pad(date.getMinutes());\n      },\n      j: function j(date) {\n        return date.getDate();\n      },\n      l: function l(date, locale) {\n        return locale.weekdays.longhand[date.getDay()];\n      },\n      m: function m(date) {\n        return pad(date.getMonth() + 1);\n      },\n      n: function n(date) {\n        return date.getMonth() + 1;\n      },\n      s: function s(date) {\n        return date.getSeconds();\n      },\n      w: function w(date) {\n        return date.getDay();\n      },\n      y: function y(date) {\n        return String(date.getFullYear()).substring(2);\n      }\n    };\n\n    var english = {\n      weekdays: {\n        shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n        longhand: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n      },\n      months: {\n        shorthand: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n        longhand: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n      },\n      daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n      firstDayOfWeek: 0,\n      ordinal: function ordinal(nth) {\n        var s = nth % 100;\n        if (s > 3 && s < 21) return \"th\";\n\n        switch (s % 10) {\n          case 1:\n            return \"st\";\n\n          case 2:\n            return \"nd\";\n\n          case 3:\n            return \"rd\";\n\n          default:\n            return \"th\";\n        }\n      },\n      rangeSeparator: \" to \",\n      weekAbbreviation: \"Wk\",\n      scrollTitle: \"Scroll to increment\",\n      toggleTitle: \"Click to toggle\",\n      amPM: [\"AM\", \"PM\"],\n      yearAriaLabel: \"Year\"\n    };\n\n    var createDateFormatter = function createDateFormatter(_ref) {\n      var _ref$config = _ref.config,\n          config = _ref$config === void 0 ? defaults : _ref$config,\n          _ref$l10n = _ref.l10n,\n          l10n = _ref$l10n === void 0 ? english : _ref$l10n;\n      return function (dateObj, frmt, overrideLocale) {\n        var locale = overrideLocale || l10n;\n\n        if (config.formatDate !== undefined) {\n          return config.formatDate(dateObj, frmt, locale);\n        }\n\n        return frmt.split(\"\").map(function (c, i, arr) {\n          return formats[c] && arr[i - 1] !== \"\\\\\" ? formats[c](dateObj, locale, config) : c !== \"\\\\\" ? c : \"\";\n        }).join(\"\");\n      };\n    };\n    var createDateParser = function createDateParser(_ref2) {\n      var _ref2$config = _ref2.config,\n          config = _ref2$config === void 0 ? defaults : _ref2$config,\n          _ref2$l10n = _ref2.l10n,\n          l10n = _ref2$l10n === void 0 ? english : _ref2$l10n;\n      return function (date, givenFormat, timeless, customLocale) {\n        if (date !== 0 && !date) return undefined;\n        var locale = customLocale || l10n;\n        var parsedDate;\n        var date_orig = date;\n        if (date instanceof Date) parsedDate = new Date(date.getTime());else if (typeof date !== \"string\" && date.toFixed !== undefined) parsedDate = new Date(date);else if (typeof date === \"string\") {\n          var format = givenFormat || (config || defaults).dateFormat;\n          var datestr = String(date).trim();\n\n          if (datestr === \"today\") {\n            parsedDate = new Date();\n            timeless = true;\n          } else if (/Z$/.test(datestr) || /GMT$/.test(datestr)) parsedDate = new Date(date);else if (config && config.parseDate) parsedDate = config.parseDate(date, format);else {\n            parsedDate = !config || !config.noCalendar ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0) : new Date(new Date().setHours(0, 0, 0, 0));\n            var matched,\n                ops = [];\n\n            for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n              var token = format[i];\n              var isBackSlash = token === \"\\\\\";\n              var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n\n              if (tokenRegex[token] && !escaped) {\n                regexStr += tokenRegex[token];\n                var match = new RegExp(regexStr).exec(date);\n\n                if (match && (matched = true)) {\n                  ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n                    fn: revFormat[token],\n                    val: match[++matchIndex]\n                  });\n                }\n              } else if (!isBackSlash) regexStr += \".\";\n\n              ops.forEach(function (_ref3) {\n                var fn = _ref3.fn,\n                    val = _ref3.val;\n                return parsedDate = fn(parsedDate, val, locale) || parsedDate;\n              });\n            }\n\n            parsedDate = matched ? parsedDate : undefined;\n          }\n        }\n\n        if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n          config.errorHandler(new Error(\"Invalid date provided: \" + date_orig));\n          return undefined;\n        }\n\n        if (timeless === true) parsedDate.setHours(0, 0, 0, 0);\n        return parsedDate;\n      };\n    };\n    function compareDates(date1, date2, timeless) {\n      if (timeless === void 0) {\n        timeless = true;\n      }\n\n      if (timeless !== false) {\n        return new Date(date1.getTime()).setHours(0, 0, 0, 0) - new Date(date2.getTime()).setHours(0, 0, 0, 0);\n      }\n\n      return date1.getTime() - date2.getTime();\n    }\n    var getWeek = function getWeek(givenDate) {\n      var date = new Date(givenDate.getTime());\n      date.setHours(0, 0, 0, 0);\n      date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n      var week1 = new Date(date.getFullYear(), 0, 4);\n      return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n    };\n    var isBetween = function isBetween(ts, ts1, ts2) {\n      return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n    };\n    var duration = {\n      DAY: 86400000\n    };\n\n    var HOOKS = [\"onChange\", \"onClose\", \"onDayCreate\", \"onDestroy\", \"onKeyDown\", \"onMonthChange\", \"onOpen\", \"onParseConfig\", \"onReady\", \"onValueUpdate\", \"onYearChange\", \"onPreCalendarPosition\"];\n    var defaults = {\n      _disable: [],\n      _enable: [],\n      allowInput: false,\n      altFormat: \"F j, Y\",\n      altInput: false,\n      altInputClass: \"form-control input\",\n      animate: typeof window === \"object\" && window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n      ariaDateFormat: \"F j, Y\",\n      clickOpens: true,\n      closeOnSelect: true,\n      conjunction: \", \",\n      dateFormat: \"Y-m-d\",\n      defaultHour: 12,\n      defaultMinute: 0,\n      defaultSeconds: 0,\n      disable: [],\n      disableMobile: false,\n      enable: [],\n      enableSeconds: false,\n      enableTime: false,\n      errorHandler: function errorHandler(err) {\n        return typeof console !== \"undefined\" && console.warn(err);\n      },\n      getWeek: getWeek,\n      hourIncrement: 1,\n      ignoredFocusElements: [],\n      inline: false,\n      locale: \"default\",\n      minuteIncrement: 5,\n      mode: \"single\",\n      nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n      noCalendar: false,\n      now: new Date(),\n      onChange: [],\n      onClose: [],\n      onDayCreate: [],\n      onDestroy: [],\n      onKeyDown: [],\n      onMonthChange: [],\n      onOpen: [],\n      onParseConfig: [],\n      onReady: [],\n      onValueUpdate: [],\n      onYearChange: [],\n      onPreCalendarPosition: [],\n      plugins: [],\n      position: \"auto\",\n      positionElement: undefined,\n      prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n      shorthandCurrentMonth: false,\n      showMonths: 1,\n      static: false,\n      time_24hr: false,\n      weekNumbers: false,\n      wrap: false\n    };\n\n    function toggleClass(elem, className, bool) {\n      if (bool === true) return elem.classList.add(className);\n      elem.classList.remove(className);\n    }\n    function createElement(tag, className, content) {\n      var e = window.document.createElement(tag);\n      className = className || \"\";\n      content = content || \"\";\n      e.className = className;\n      if (content !== undefined) e.textContent = content;\n      return e;\n    }\n    function clearNode(node) {\n      while (node.firstChild) {\n        node.removeChild(node.firstChild);\n      }\n    }\n    function findParent(node, condition) {\n      if (condition(node)) return node;else if (node.parentNode) return findParent(node.parentNode, condition);\n      return undefined;\n    }\n    function createNumberInput(inputClassName, opts) {\n      var wrapper = createElement(\"div\", \"numInputWrapper\"),\n          numInput = createElement(\"input\", \"numInput \" + inputClassName),\n          arrowUp = createElement(\"span\", \"arrowUp\"),\n          arrowDown = createElement(\"span\", \"arrowDown\");\n      numInput.type = \"text\";\n      numInput.pattern = \"\\\\d*\";\n      if (opts !== undefined) for (var key in opts) {\n        numInput.setAttribute(key, opts[key]);\n      }\n      wrapper.appendChild(numInput);\n      wrapper.appendChild(arrowUp);\n      wrapper.appendChild(arrowDown);\n      return wrapper;\n    }\n\n    if (typeof Object.assign !== \"function\") {\n      Object.assign = function (target) {\n        if (!target) {\n          throw TypeError(\"Cannot convert undefined or null to object\");\n        }\n\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        var _loop = function _loop() {\n          var source = args[_i];\n\n          if (source) {\n            Object.keys(source).forEach(function (key) {\n              return target[key] = source[key];\n            });\n          }\n        };\n\n        for (var _i = 0; _i < args.length; _i++) {\n          _loop();\n        }\n\n        return target;\n      };\n    }\n\n    var DEBOUNCED_CHANGE_MS = 300;\n\n    function FlatpickrInstance(element, instanceConfig) {\n      var self = {\n        config: Object.assign({}, flatpickr.defaultConfig),\n        l10n: english\n      };\n      self.parseDate = createDateParser({\n        config: self.config,\n        l10n: self.l10n\n      });\n      self._handlers = [];\n      self._bind = bind;\n      self._setHoursFromDate = setHoursFromDate;\n      self._positionCalendar = positionCalendar;\n      self.changeMonth = changeMonth;\n      self.changeYear = changeYear;\n      self.clear = clear;\n      self.close = close;\n      self._createElement = createElement;\n      self.destroy = destroy;\n      self.isEnabled = isEnabled;\n      self.jumpToDate = jumpToDate;\n      self.open = open;\n      self.redraw = redraw;\n      self.set = set;\n      self.setDate = setDate;\n      self.toggle = toggle;\n\n      function setupHelperFunctions() {\n        self.utils = {\n          getDaysInMonth: function getDaysInMonth(month, yr) {\n            if (month === void 0) {\n              month = self.currentMonth;\n            }\n\n            if (yr === void 0) {\n              yr = self.currentYear;\n            }\n\n            if (month === 1 && (yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0)) return 29;\n            return self.l10n.daysInMonth[month];\n          }\n        };\n      }\n\n      function init() {\n        self.element = self.input = element;\n        self.isOpen = false;\n        parseConfig();\n        setupLocale();\n        setupInputs();\n        setupDates();\n        setupHelperFunctions();\n        if (!self.isMobile) build();\n        bindEvents();\n\n        if (self.selectedDates.length || self.config.noCalendar) {\n          if (self.config.enableTime) {\n            setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj || self.config.minDate : undefined);\n          }\n\n          updateValue(false);\n        }\n\n        setCalendarWidth();\n        self.showTimeInput = self.selectedDates.length > 0 || self.config.noCalendar;\n        var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n        if (!self.isMobile && isSafari) {\n          positionCalendar();\n        }\n\n        triggerEvent(\"onReady\");\n      }\n\n      function bindToInstance(fn) {\n        return fn.bind(self);\n      }\n\n      function setCalendarWidth() {\n        var config = self.config;\n        if (config.weekNumbers === false && config.showMonths === 1) return;else if (config.noCalendar !== true) {\n          window.requestAnimationFrame(function () {\n            self.calendarContainer.style.visibility = \"hidden\";\n            self.calendarContainer.style.display = \"block\";\n\n            if (self.daysContainer !== undefined) {\n              var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n              self.daysContainer.style.width = daysWidth + \"px\";\n              self.calendarContainer.style.width = daysWidth + (self.weekWrapper !== undefined ? self.weekWrapper.offsetWidth : 0) + \"px\";\n              self.calendarContainer.style.removeProperty(\"visibility\");\n              self.calendarContainer.style.removeProperty(\"display\");\n            }\n          });\n        }\n      }\n\n      function updateTime(e) {\n        if (self.selectedDates.length === 0) return;\n\n        if (e !== undefined && e.type !== \"blur\") {\n          timeWrapper(e);\n        }\n\n        var prevValue = self._input.value;\n        setHoursFromInputs();\n        updateValue();\n\n        if (self._input.value !== prevValue) {\n          self._debouncedChange();\n        }\n      }\n\n      function ampm2military(hour, amPM) {\n        return hour % 12 + 12 * int(amPM === self.l10n.amPM[1]);\n      }\n\n      function military2ampm(hour) {\n        switch (hour % 24) {\n          case 0:\n          case 12:\n            return 12;\n\n          default:\n            return hour % 12;\n        }\n      }\n\n      function setHoursFromInputs() {\n        if (self.hourElement === undefined || self.minuteElement === undefined) return;\n        var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24,\n            minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60,\n            seconds = self.secondElement !== undefined ? (parseInt(self.secondElement.value, 10) || 0) % 60 : 0;\n\n        if (self.amPM !== undefined) {\n          hours = ampm2military(hours, self.amPM.textContent);\n        }\n\n        var limitMinHours = self.config.minTime !== undefined || self.config.minDate && self.minDateHasTime && self.latestSelectedDateObj && compareDates(self.latestSelectedDateObj, self.config.minDate, true) === 0;\n        var limitMaxHours = self.config.maxTime !== undefined || self.config.maxDate && self.maxDateHasTime && self.latestSelectedDateObj && compareDates(self.latestSelectedDateObj, self.config.maxDate, true) === 0;\n\n        if (limitMaxHours) {\n          var maxTime = self.config.maxTime !== undefined ? self.config.maxTime : self.config.maxDate;\n          hours = Math.min(hours, maxTime.getHours());\n          if (hours === maxTime.getHours()) minutes = Math.min(minutes, maxTime.getMinutes());\n          if (minutes === maxTime.getMinutes()) seconds = Math.min(seconds, maxTime.getSeconds());\n        }\n\n        if (limitMinHours) {\n          var minTime = self.config.minTime !== undefined ? self.config.minTime : self.config.minDate;\n          hours = Math.max(hours, minTime.getHours());\n          if (hours === minTime.getHours()) minutes = Math.max(minutes, minTime.getMinutes());\n          if (minutes === minTime.getMinutes()) seconds = Math.max(seconds, minTime.getSeconds());\n        }\n\n        setHours(hours, minutes, seconds);\n      }\n\n      function setHoursFromDate(dateObj) {\n        var date = dateObj || self.latestSelectedDateObj;\n        if (date) setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n      }\n\n      function setDefaultHours() {\n        var hours = self.config.defaultHour;\n        var minutes = self.config.defaultMinute;\n        var seconds = self.config.defaultSeconds;\n\n        if (self.config.minDate !== undefined) {\n          var min_hr = self.config.minDate.getHours();\n          var min_minutes = self.config.minDate.getMinutes();\n          hours = Math.max(hours, min_hr);\n          if (hours === min_hr) minutes = Math.max(min_minutes, minutes);\n          if (hours === min_hr && minutes === min_minutes) seconds = self.config.minDate.getSeconds();\n        }\n\n        if (self.config.maxDate !== undefined) {\n          var max_hr = self.config.maxDate.getHours();\n          var max_minutes = self.config.maxDate.getMinutes();\n          hours = Math.min(hours, max_hr);\n          if (hours === max_hr) minutes = Math.min(max_minutes, minutes);\n          if (hours === max_hr && minutes === max_minutes) seconds = self.config.maxDate.getSeconds();\n        }\n\n        setHours(hours, minutes, seconds);\n      }\n\n      function setHours(hours, minutes, seconds) {\n        if (self.latestSelectedDateObj !== undefined) {\n          self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n        }\n\n        if (!self.hourElement || !self.minuteElement || self.isMobile) return;\n        self.hourElement.value = pad(!self.config.time_24hr ? (12 + hours) % 12 + 12 * int(hours % 12 === 0) : hours);\n        self.minuteElement.value = pad(minutes);\n        if (self.amPM !== undefined) self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n        if (self.secondElement !== undefined) self.secondElement.value = pad(seconds);\n      }\n\n      function onYearInput(event) {\n        var year = parseInt(event.target.value) + (event.delta || 0);\n\n        if (year / 1000 > 1 || event.key === \"Enter\" && !/[^\\d]/.test(year.toString())) {\n          changeYear(year);\n        }\n      }\n\n      function bind(element, event, handler, options) {\n        if (event instanceof Array) return event.forEach(function (ev) {\n          return bind(element, ev, handler, options);\n        });\n        if (element instanceof Array) return element.forEach(function (el) {\n          return bind(el, event, handler, options);\n        });\n        element.addEventListener(event, handler, options);\n\n        self._handlers.push({\n          element: element,\n          event: event,\n          handler: handler,\n          options: options\n        });\n      }\n\n      function onClick(handler) {\n        return function (evt) {\n          evt.which === 1 && handler(evt);\n        };\n      }\n\n      function triggerChange() {\n        triggerEvent(\"onChange\");\n      }\n\n      function bindEvents() {\n        if (self.config.wrap) {\n          [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n            Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n              return bind(el, \"click\", self[evt]);\n            });\n          });\n        }\n\n        if (self.isMobile) {\n          setupMobile();\n          return;\n        }\n\n        var debouncedResize = debounce(onResize, 50);\n        self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n        if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent)) bind(self.daysContainer, \"mouseover\", function (e) {\n          if (self.config.mode === \"range\") onMouseOver(e.target);\n        });\n        bind(window.document.body, \"keydown\", onKeyDown);\n        if (!self.config.static) bind(self._input, \"keydown\", onKeyDown);\n        if (!self.config.inline && !self.config.static) bind(window, \"resize\", debouncedResize);\n        if (window.ontouchstart !== undefined) bind(window.document, \"click\", documentClick);else bind(window.document, \"mousedown\", onClick(documentClick));\n        bind(window.document, \"focus\", documentClick, {\n          capture: true\n        });\n\n        if (self.config.clickOpens === true) {\n          bind(self._input, \"focus\", self.open);\n          bind(self._input, \"mousedown\", onClick(self.open));\n        }\n\n        if (self.daysContainer !== undefined) {\n          bind(self.monthNav, \"mousedown\", onClick(onMonthNavClick));\n          bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n          bind(self.daysContainer, \"mousedown\", onClick(selectDate));\n        }\n\n        if (self.timeContainer !== undefined && self.minuteElement !== undefined && self.hourElement !== undefined) {\n          var selText = function selText(e) {\n            return e.target.select();\n          };\n\n          bind(self.timeContainer, [\"increment\"], updateTime);\n          bind(self.timeContainer, \"blur\", updateTime, {\n            capture: true\n          });\n          bind(self.timeContainer, \"mousedown\", onClick(timeIncrement));\n          bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n          if (self.secondElement !== undefined) bind(self.secondElement, \"focus\", function () {\n            return self.secondElement && self.secondElement.select();\n          });\n\n          if (self.amPM !== undefined) {\n            bind(self.amPM, \"mousedown\", onClick(function (e) {\n              updateTime(e);\n              triggerChange();\n            }));\n          }\n        }\n      }\n\n      function jumpToDate(jumpDate) {\n        var jumpTo = jumpDate !== undefined ? self.parseDate(jumpDate) : self.latestSelectedDateObj || (self.config.minDate && self.config.minDate > self.now ? self.config.minDate : self.config.maxDate && self.config.maxDate < self.now ? self.config.maxDate : self.now);\n\n        try {\n          if (jumpTo !== undefined) {\n            self.currentYear = jumpTo.getFullYear();\n            self.currentMonth = jumpTo.getMonth();\n          }\n        } catch (e) {\n          e.message = \"Invalid date supplied: \" + jumpTo;\n          self.config.errorHandler(e);\n        }\n\n        self.redraw();\n      }\n\n      function timeIncrement(e) {\n        if (~e.target.className.indexOf(\"arrow\")) incrementNumInput(e, e.target.classList.contains(\"arrowUp\") ? 1 : -1);\n      }\n\n      function incrementNumInput(e, delta, inputElem) {\n        var target = e && e.target;\n        var input = inputElem || target && target.parentNode && target.parentNode.firstChild;\n        var event = createEvent(\"increment\");\n        event.delta = delta;\n        input && input.dispatchEvent(event);\n      }\n\n      function build() {\n        var fragment = window.document.createDocumentFragment();\n        self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n        self.calendarContainer.tabIndex = -1;\n\n        if (!self.config.noCalendar) {\n          fragment.appendChild(buildMonthNav());\n          self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n\n          if (self.config.weekNumbers) {\n            var _buildWeeks = buildWeeks(),\n                weekWrapper = _buildWeeks.weekWrapper,\n                weekNumbers = _buildWeeks.weekNumbers;\n\n            self.innerContainer.appendChild(weekWrapper);\n            self.weekNumbers = weekNumbers;\n            self.weekWrapper = weekWrapper;\n          }\n\n          self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n          self.rContainer.appendChild(buildWeekdays());\n\n          if (!self.daysContainer) {\n            self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n            self.daysContainer.tabIndex = -1;\n          }\n\n          buildDays();\n          self.rContainer.appendChild(self.daysContainer);\n          self.innerContainer.appendChild(self.rContainer);\n          fragment.appendChild(self.innerContainer);\n        }\n\n        if (self.config.enableTime) {\n          fragment.appendChild(buildTime());\n        }\n\n        toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n        toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n        toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n        self.calendarContainer.appendChild(fragment);\n        var customAppend = self.config.appendTo !== undefined && self.config.appendTo.nodeType !== undefined;\n\n        if (self.config.inline || self.config.static) {\n          self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n\n          if (self.config.inline) {\n            if (!customAppend && self.element.parentNode) self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);else if (self.config.appendTo !== undefined) self.config.appendTo.appendChild(self.calendarContainer);\n          }\n\n          if (self.config.static) {\n            var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n            if (self.element.parentNode) self.element.parentNode.insertBefore(wrapper, self.element);\n            wrapper.appendChild(self.element);\n            if (self.altInput) wrapper.appendChild(self.altInput);\n            wrapper.appendChild(self.calendarContainer);\n          }\n        }\n\n        if (!self.config.static && !self.config.inline) (self.config.appendTo !== undefined ? self.config.appendTo : window.document.body).appendChild(self.calendarContainer);\n      }\n\n      function createDay(className, date, dayNumber, i) {\n        var dateIsEnabled = isEnabled(date, true),\n            dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n        dayElement.dateObj = date;\n        dayElement.$i = i;\n        dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n\n        if (className.indexOf(\"hidden\") === -1 && compareDates(date, self.now) === 0) {\n          self.todayDateElem = dayElement;\n          dayElement.classList.add(\"today\");\n          dayElement.setAttribute(\"aria-current\", \"date\");\n        }\n\n        if (dateIsEnabled) {\n          dayElement.tabIndex = -1;\n\n          if (isDateSelected(date)) {\n            dayElement.classList.add(\"selected\");\n            self.selectedDateElem = dayElement;\n\n            if (self.config.mode === \"range\") {\n              toggleClass(dayElement, \"startRange\", self.selectedDates[0] && compareDates(date, self.selectedDates[0], true) === 0);\n              toggleClass(dayElement, \"endRange\", self.selectedDates[1] && compareDates(date, self.selectedDates[1], true) === 0);\n              if (className === \"nextMonthDay\") dayElement.classList.add(\"inRange\");\n            }\n          }\n        } else {\n          dayElement.classList.add(\"disabled\");\n        }\n\n        if (self.config.mode === \"range\") {\n          if (isDateInRange(date) && !isDateSelected(date)) dayElement.classList.add(\"inRange\");\n        }\n\n        if (self.weekNumbers && self.config.showMonths === 1 && className !== \"prevMonthDay\" && dayNumber % 7 === 1) {\n          self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n        }\n\n        triggerEvent(\"onDayCreate\", dayElement);\n        return dayElement;\n      }\n\n      function focusOnDayElem(targetNode) {\n        targetNode.focus();\n        if (self.config.mode === \"range\") onMouseOver(targetNode);\n      }\n\n      function getFirstAvailableDay(delta) {\n        var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n\n        for (var m = startMonth; m != endMonth; m += delta) {\n          var month = self.daysContainer.children[m];\n          var startIndex = delta > 0 ? 0 : month.children.length - 1;\n          var endIndex = delta > 0 ? month.children.length : -1;\n\n          for (var i = startIndex; i != endIndex; i += delta) {\n            var c = month.children[i];\n            if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj)) return c;\n          }\n        }\n\n        return undefined;\n      }\n\n      function getNextAvailableDay(current, delta) {\n        var givenMonth = current.className.indexOf(\"Month\") === -1 ? current.dateObj.getMonth() : self.currentMonth;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        var loopDelta = delta > 0 ? 1 : -1;\n\n        for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n          var month = self.daysContainer.children[m];\n          var startIndex = givenMonth - self.currentMonth === m ? current.$i + delta : delta < 0 ? month.children.length - 1 : 0;\n          var numMonthDays = month.children.length;\n\n          for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n            var c = month.children[i];\n            if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj) && Math.abs(current.$i - i) >= Math.abs(delta)) return focusOnDayElem(c);\n          }\n        }\n\n        self.changeMonth(loopDelta);\n        focusOnDay(getFirstAvailableDay(loopDelta), 0);\n        return undefined;\n      }\n\n      function focusOnDay(current, offset) {\n        var dayFocused = isInView(document.activeElement || document.body);\n        var startElem = current !== undefined ? current : dayFocused ? document.activeElement : self.selectedDateElem !== undefined && isInView(self.selectedDateElem) ? self.selectedDateElem : self.todayDateElem !== undefined && isInView(self.todayDateElem) ? self.todayDateElem : getFirstAvailableDay(offset > 0 ? 1 : -1);\n        if (startElem === undefined) return self._input.focus();\n        if (!dayFocused) return focusOnDayElem(startElem);\n        getNextAvailableDay(startElem, offset);\n      }\n\n      function buildMonthDays(year, month) {\n        var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n        var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12);\n        var daysInMonth = self.utils.getDaysInMonth(month),\n            days = window.document.createDocumentFragment(),\n            isMultiMonth = self.config.showMonths > 1,\n            prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\",\n            nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n        var dayNumber = prevMonthDays + 1 - firstOfMonth,\n            dayIndex = 0;\n\n        for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n          days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n        }\n\n        for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n          days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n        }\n\n        for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth && (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n          days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n        }\n\n        var dayContainer = createElement(\"div\", \"dayContainer\");\n        dayContainer.appendChild(days);\n        return dayContainer;\n      }\n\n      function buildDays() {\n        if (self.daysContainer === undefined) {\n          return;\n        }\n\n        clearNode(self.daysContainer);\n        if (self.weekNumbers) clearNode(self.weekNumbers);\n        var frag = document.createDocumentFragment();\n\n        for (var i = 0; i < self.config.showMonths; i++) {\n          var d = new Date(self.currentYear, self.currentMonth, 1);\n          d.setMonth(self.currentMonth + i);\n          frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n        }\n\n        self.daysContainer.appendChild(frag);\n        self.days = self.daysContainer.firstChild;\n\n        if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n          onMouseOver();\n        }\n      }\n\n      function buildMonth() {\n        var container = createElement(\"div\", \"flatpickr-month\");\n        var monthNavFragment = window.document.createDocumentFragment();\n        var monthElement = createElement(\"span\", \"cur-month\");\n        var yearInput = createNumberInput(\"cur-year\", {\n          tabindex: \"-1\"\n        });\n        var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n        yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n        if (self.config.minDate) yearElement.setAttribute(\"data-min\", self.config.minDate.getFullYear().toString());\n\n        if (self.config.maxDate) {\n          yearElement.setAttribute(\"data-max\", self.config.maxDate.getFullYear().toString());\n          yearElement.disabled = !!self.config.minDate && self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n        }\n\n        var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n        currentMonth.appendChild(monthElement);\n        currentMonth.appendChild(yearInput);\n        monthNavFragment.appendChild(currentMonth);\n        container.appendChild(monthNavFragment);\n        return {\n          container: container,\n          yearElement: yearElement,\n          monthElement: monthElement\n        };\n      }\n\n      function buildMonths() {\n        clearNode(self.monthNav);\n        self.monthNav.appendChild(self.prevMonthNav);\n\n        for (var m = self.config.showMonths; m--;) {\n          var month = buildMonth();\n          self.yearElements.push(month.yearElement);\n          self.monthElements.push(month.monthElement);\n          self.monthNav.appendChild(month.container);\n        }\n\n        self.monthNav.appendChild(self.nextMonthNav);\n      }\n\n      function buildMonthNav() {\n        self.monthNav = createElement(\"div\", \"flatpickr-months\");\n        self.yearElements = [];\n        self.monthElements = [];\n        self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n        self.prevMonthNav.innerHTML = self.config.prevArrow;\n        self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n        self.nextMonthNav.innerHTML = self.config.nextArrow;\n        buildMonths();\n        Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n          get: function get() {\n            return self.__hidePrevMonthArrow;\n          },\n          set: function set(bool) {\n            if (self.__hidePrevMonthArrow !== bool) {\n              toggleClass(self.prevMonthNav, \"disabled\", bool);\n              self.__hidePrevMonthArrow = bool;\n            }\n          }\n        });\n        Object.defineProperty(self, \"_hideNextMonthArrow\", {\n          get: function get() {\n            return self.__hideNextMonthArrow;\n          },\n          set: function set(bool) {\n            if (self.__hideNextMonthArrow !== bool) {\n              toggleClass(self.nextMonthNav, \"disabled\", bool);\n              self.__hideNextMonthArrow = bool;\n            }\n          }\n        });\n        self.currentYearElement = self.yearElements[0];\n        updateNavigationCurrentMonth();\n        return self.monthNav;\n      }\n\n      function buildTime() {\n        self.calendarContainer.classList.add(\"hasTime\");\n        if (self.config.noCalendar) self.calendarContainer.classList.add(\"noCalendar\");\n        self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n        self.timeContainer.tabIndex = -1;\n        var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n        var hourInput = createNumberInput(\"flatpickr-hour\");\n        self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n        var minuteInput = createNumberInput(\"flatpickr-minute\");\n        self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n        self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n        self.hourElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getHours() : self.config.time_24hr ? self.config.defaultHour : military2ampm(self.config.defaultHour));\n        self.minuteElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getMinutes() : self.config.defaultMinute);\n        self.hourElement.setAttribute(\"data-step\", self.config.hourIncrement.toString());\n        self.minuteElement.setAttribute(\"data-step\", self.config.minuteIncrement.toString());\n        self.hourElement.setAttribute(\"data-min\", self.config.time_24hr ? \"0\" : \"1\");\n        self.hourElement.setAttribute(\"data-max\", self.config.time_24hr ? \"23\" : \"12\");\n        self.minuteElement.setAttribute(\"data-min\", \"0\");\n        self.minuteElement.setAttribute(\"data-max\", \"59\");\n        self.timeContainer.appendChild(hourInput);\n        self.timeContainer.appendChild(separator);\n        self.timeContainer.appendChild(minuteInput);\n        if (self.config.time_24hr) self.timeContainer.classList.add(\"time24hr\");\n\n        if (self.config.enableSeconds) {\n          self.timeContainer.classList.add(\"hasSeconds\");\n          var secondInput = createNumberInput(\"flatpickr-second\");\n          self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n          self.secondElement.value = pad(self.latestSelectedDateObj ? self.latestSelectedDateObj.getSeconds() : self.config.defaultSeconds);\n          self.secondElement.setAttribute(\"data-step\", self.minuteElement.getAttribute(\"data-step\"));\n          self.secondElement.setAttribute(\"data-min\", self.minuteElement.getAttribute(\"data-min\"));\n          self.secondElement.setAttribute(\"data-max\", self.minuteElement.getAttribute(\"data-max\"));\n          self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n          self.timeContainer.appendChild(secondInput);\n        }\n\n        if (!self.config.time_24hr) {\n          self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj ? self.hourElement.value : self.config.defaultHour) > 11)]);\n          self.amPM.title = self.l10n.toggleTitle;\n          self.amPM.tabIndex = -1;\n          self.timeContainer.appendChild(self.amPM);\n        }\n\n        return self.timeContainer;\n      }\n\n      function buildWeekdays() {\n        if (!self.weekdayContainer) self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");else clearNode(self.weekdayContainer);\n\n        for (var i = self.config.showMonths; i--;) {\n          var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n          self.weekdayContainer.appendChild(container);\n        }\n\n        updateWeekdays();\n        return self.weekdayContainer;\n      }\n\n      function updateWeekdays() {\n        var firstDayOfWeek = self.l10n.firstDayOfWeek;\n        var weekdays = self.l10n.weekdays.shorthand.concat();\n\n        if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n          weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));\n        }\n\n        for (var i = self.config.showMonths; i--;) {\n          self.weekdayContainer.children[i].innerHTML = \"\\n      <span class=flatpickr-weekday>\\n        \" + weekdays.join(\"</span><span class=flatpickr-weekday>\") + \"\\n      </span>\\n      \";\n        }\n      }\n\n      function buildWeeks() {\n        self.calendarContainer.classList.add(\"hasWeeks\");\n        var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n        weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n        var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n        weekWrapper.appendChild(weekNumbers);\n        return {\n          weekWrapper: weekWrapper,\n          weekNumbers: weekNumbers\n        };\n      }\n\n      function changeMonth(value, is_offset) {\n        if (is_offset === void 0) {\n          is_offset = true;\n        }\n\n        var delta = is_offset ? value : value - self.currentMonth;\n        if (delta < 0 && self._hidePrevMonthArrow === true || delta > 0 && self._hideNextMonthArrow === true) return;\n        self.currentMonth += delta;\n\n        if (self.currentMonth < 0 || self.currentMonth > 11) {\n          self.currentYear += self.currentMonth > 11 ? 1 : -1;\n          self.currentMonth = (self.currentMonth + 12) % 12;\n          triggerEvent(\"onYearChange\");\n        }\n\n        buildDays();\n        triggerEvent(\"onMonthChange\");\n        updateNavigationCurrentMonth();\n      }\n\n      function clear(triggerChangeEvent) {\n        if (triggerChangeEvent === void 0) {\n          triggerChangeEvent = true;\n        }\n\n        self.input.value = \"\";\n        if (self.altInput !== undefined) self.altInput.value = \"\";\n        if (self.mobileInput !== undefined) self.mobileInput.value = \"\";\n        self.selectedDates = [];\n        self.latestSelectedDateObj = undefined;\n        self.showTimeInput = false;\n\n        if (self.config.enableTime === true) {\n          setDefaultHours();\n        }\n\n        self.redraw();\n        if (triggerChangeEvent) triggerEvent(\"onChange\");\n      }\n\n      function close() {\n        self.isOpen = false;\n\n        if (!self.isMobile) {\n          self.calendarContainer.classList.remove(\"open\");\n\n          self._input.classList.remove(\"active\");\n        }\n\n        triggerEvent(\"onClose\");\n      }\n\n      function destroy() {\n        if (self.config !== undefined) triggerEvent(\"onDestroy\");\n\n        for (var i = self._handlers.length; i--;) {\n          var h = self._handlers[i];\n          h.element.removeEventListener(h.event, h.handler, h.options);\n        }\n\n        self._handlers = [];\n\n        if (self.mobileInput) {\n          if (self.mobileInput.parentNode) self.mobileInput.parentNode.removeChild(self.mobileInput);\n          self.mobileInput = undefined;\n        } else if (self.calendarContainer && self.calendarContainer.parentNode) {\n          if (self.config.static && self.calendarContainer.parentNode) {\n            var wrapper = self.calendarContainer.parentNode;\n            wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n\n            if (wrapper.parentNode) {\n              while (wrapper.firstChild) {\n                wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n              }\n\n              wrapper.parentNode.removeChild(wrapper);\n            }\n          } else self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n        }\n\n        if (self.altInput) {\n          self.input.type = \"text\";\n          if (self.altInput.parentNode) self.altInput.parentNode.removeChild(self.altInput);\n          delete self.altInput;\n        }\n\n        if (self.input) {\n          self.input.type = self.input._type;\n          self.input.classList.remove(\"flatpickr-input\");\n          self.input.removeAttribute(\"readonly\");\n          self.input.value = \"\";\n        }\n\n        [\"_showTimeInput\", \"latestSelectedDateObj\", \"_hideNextMonthArrow\", \"_hidePrevMonthArrow\", \"__hideNextMonthArrow\", \"__hidePrevMonthArrow\", \"isMobile\", \"isOpen\", \"selectedDateElem\", \"minDateHasTime\", \"maxDateHasTime\", \"days\", \"daysContainer\", \"_input\", \"_positionElement\", \"innerContainer\", \"rContainer\", \"monthNav\", \"todayDateElem\", \"calendarContainer\", \"weekdayContainer\", \"prevMonthNav\", \"nextMonthNav\", \"currentMonthElement\", \"currentYearElement\", \"navigationCurrentMonth\", \"selectedDateElem\", \"config\"].forEach(function (k) {\n          try {\n            delete self[k];\n          } catch (_) {}\n        });\n      }\n\n      function isCalendarElem(elem) {\n        if (self.config.appendTo && self.config.appendTo.contains(elem)) return true;\n        return self.calendarContainer.contains(elem);\n      }\n\n      function documentClick(e) {\n        if (self.isOpen && !self.config.inline) {\n          var isCalendarElement = isCalendarElem(e.target);\n          var isInput = e.target === self.input || e.target === self.altInput || self.element.contains(e.target) || e.path && e.path.indexOf && (~e.path.indexOf(self.input) || ~e.path.indexOf(self.altInput));\n          var lostFocus = e.type === \"blur\" ? isInput && e.relatedTarget && !isCalendarElem(e.relatedTarget) : !isInput && !isCalendarElement;\n          var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n            return elem.contains(e.target);\n          });\n\n          if (lostFocus && isIgnored) {\n            self.close();\n\n            if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n              self.clear(false);\n              self.redraw();\n            }\n          }\n        }\n      }\n\n      function changeYear(newYear) {\n        if (!newYear || self.config.minDate && newYear < self.config.minDate.getFullYear() || self.config.maxDate && newYear > self.config.maxDate.getFullYear()) return;\n        var newYearNum = newYear,\n            isNewYear = self.currentYear !== newYearNum;\n        self.currentYear = newYearNum || self.currentYear;\n\n        if (self.config.maxDate && self.currentYear === self.config.maxDate.getFullYear()) {\n          self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n        } else if (self.config.minDate && self.currentYear === self.config.minDate.getFullYear()) {\n          self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n        }\n\n        if (isNewYear) {\n          self.redraw();\n          triggerEvent(\"onYearChange\");\n        }\n      }\n\n      function isEnabled(date, timeless) {\n        if (timeless === void 0) {\n          timeless = true;\n        }\n\n        var dateToCheck = self.parseDate(date, undefined, timeless);\n        if (self.config.minDate && dateToCheck && compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0 || self.config.maxDate && dateToCheck && compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0) return false;\n        if (self.config.enable.length === 0 && self.config.disable.length === 0) return true;\n        if (dateToCheck === undefined) return false;\n        var bool = self.config.enable.length > 0,\n            array = bool ? self.config.enable : self.config.disable;\n\n        for (var i = 0, d; i < array.length; i++) {\n          d = array[i];\n          if (typeof d === \"function\" && d(dateToCheck)) return bool;else if (d instanceof Date && dateToCheck !== undefined && d.getTime() === dateToCheck.getTime()) return bool;else if (typeof d === \"string\" && dateToCheck !== undefined) {\n            var parsed = self.parseDate(d, undefined, true);\n            return parsed && parsed.getTime() === dateToCheck.getTime() ? bool : !bool;\n          } else if (typeof d === \"object\" && dateToCheck !== undefined && d.from && d.to && dateToCheck.getTime() >= d.from.getTime() && dateToCheck.getTime() <= d.to.getTime()) return bool;\n        }\n\n        return !bool;\n      }\n\n      function isInView(elem) {\n        if (self.daysContainer !== undefined) return elem.className.indexOf(\"hidden\") === -1 && self.daysContainer.contains(elem);\n        return false;\n      }\n\n      function onKeyDown(e) {\n        var isInput = e.target === self._input;\n        var allowInput = self.config.allowInput;\n        var allowKeydown = self.isOpen && (!allowInput || !isInput);\n        var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n\n        if (e.keyCode === 13 && isInput) {\n          if (allowInput) {\n            self.setDate(self._input.value, true, e.target === self.altInput ? self.config.altFormat : self.config.dateFormat);\n            return e.target.blur();\n          } else self.open();\n        } else if (isCalendarElem(e.target) || allowKeydown || allowInlineKeydown) {\n          var isTimeObj = !!self.timeContainer && self.timeContainer.contains(e.target);\n\n          switch (e.keyCode) {\n            case 13:\n              if (isTimeObj) updateTime();else selectDate(e);\n              break;\n\n            case 27:\n              e.preventDefault();\n              focusAndClose();\n              break;\n\n            case 8:\n            case 46:\n              if (isInput && !self.config.allowInput) {\n                e.preventDefault();\n                self.clear();\n              }\n\n              break;\n\n            case 37:\n            case 39:\n              if (!isTimeObj) {\n                e.preventDefault();\n\n                if (self.daysContainer !== undefined && (allowInput === false || isInView(document.activeElement))) {\n                  var _delta = e.keyCode === 39 ? 1 : -1;\n\n                  if (!e.ctrlKey) focusOnDay(undefined, _delta);else {\n                    changeMonth(_delta);\n                    focusOnDay(getFirstAvailableDay(1), 0);\n                  }\n                }\n              } else if (self.hourElement) self.hourElement.focus();\n\n              break;\n\n            case 38:\n            case 40:\n              e.preventDefault();\n              var delta = e.keyCode === 40 ? 1 : -1;\n\n              if (self.daysContainer && e.target.$i !== undefined) {\n                if (e.ctrlKey) {\n                  changeYear(self.currentYear - delta);\n                  focusOnDay(getFirstAvailableDay(1), 0);\n                } else if (!isTimeObj) focusOnDay(undefined, delta * 7);\n              } else if (self.config.enableTime) {\n                if (!isTimeObj && self.hourElement) self.hourElement.focus();\n                updateTime(e);\n\n                self._debouncedChange();\n              }\n\n              break;\n\n            case 9:\n              if (!isTimeObj) {\n                self.element.focus();\n                break;\n              }\n\n              var elems = [self.hourElement, self.minuteElement, self.secondElement, self.amPM].filter(function (x) {\n                return x;\n              });\n              var i = elems.indexOf(e.target);\n\n              if (i !== -1) {\n                var target = elems[i + (e.shiftKey ? -1 : 1)];\n\n                if (target !== undefined) {\n                  e.preventDefault();\n                  target.focus();\n                } else {\n                  self.element.focus();\n                }\n              }\n\n              break;\n\n            default:\n              break;\n          }\n        }\n\n        if (self.amPM !== undefined && e.target === self.amPM) {\n          switch (e.key) {\n            case self.l10n.amPM[0].charAt(0):\n            case self.l10n.amPM[0].charAt(0).toLowerCase():\n              self.amPM.textContent = self.l10n.amPM[0];\n              setHoursFromInputs();\n              updateValue();\n              break;\n\n            case self.l10n.amPM[1].charAt(0):\n            case self.l10n.amPM[1].charAt(0).toLowerCase():\n              self.amPM.textContent = self.l10n.amPM[1];\n              setHoursFromInputs();\n              updateValue();\n              break;\n          }\n        }\n\n        triggerEvent(\"onKeyDown\", e);\n      }\n\n      function onMouseOver(elem) {\n        if (self.selectedDates.length !== 1 || elem && (!elem.classList.contains(\"flatpickr-day\") || elem.classList.contains(\"disabled\"))) return;\n        var hoverDate = elem ? elem.dateObj.getTime() : self.days.firstElementChild.dateObj.getTime(),\n            initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(),\n            rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()),\n            rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime()),\n            lastDate = self.daysContainer.lastChild.lastChild.dateObj.getTime();\n        var containsDisabled = false;\n        var minRange = 0,\n            maxRange = 0;\n\n        for (var t = rangeStartDate; t < lastDate; t += duration.DAY) {\n          if (!isEnabled(new Date(t), true)) {\n            containsDisabled = containsDisabled || t > rangeStartDate && t < rangeEndDate;\n            if (t < initialDate && (!minRange || t > minRange)) minRange = t;else if (t > initialDate && (!maxRange || t < maxRange)) maxRange = t;\n          }\n        }\n\n        for (var m = 0; m < self.config.showMonths; m++) {\n          var month = self.daysContainer.children[m];\n          var prevMonth = self.daysContainer.children[m - 1];\n\n          var _loop = function _loop(i, l) {\n            var dayElem = month.children[i],\n                date = dayElem.dateObj;\n            var timestamp = date.getTime();\n            var outOfRange = minRange > 0 && timestamp < minRange || maxRange > 0 && timestamp > maxRange;\n\n            if (outOfRange) {\n              dayElem.classList.add(\"notAllowed\");\n              [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n                dayElem.classList.remove(c);\n              });\n              return \"continue\";\n            } else if (containsDisabled && !outOfRange) return \"continue\";\n\n            [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n              dayElem.classList.remove(c);\n            });\n\n            if (elem !== undefined) {\n              elem.classList.add(hoverDate < self.selectedDates[0].getTime() ? \"startRange\" : \"endRange\");\n\n              if (month.contains(elem) || !(m > 0 && prevMonth && prevMonth.lastChild.dateObj.getTime() >= timestamp)) {\n                if (initialDate < hoverDate && timestamp === initialDate) dayElem.classList.add(\"startRange\");else if (initialDate > hoverDate && timestamp === initialDate) dayElem.classList.add(\"endRange\");\n                if (timestamp >= minRange && (maxRange === 0 || timestamp <= maxRange) && isBetween(timestamp, initialDate, hoverDate)) dayElem.classList.add(\"inRange\");\n              }\n            }\n          };\n\n          for (var i = 0, l = month.children.length; i < l; i++) {\n            var _ret = _loop(i, l);\n\n            if (_ret === \"continue\") continue;\n          }\n        }\n      }\n\n      function onResize() {\n        if (self.isOpen && !self.config.static && !self.config.inline) positionCalendar();\n      }\n\n      function open(e, positionElement) {\n        if (positionElement === void 0) {\n          positionElement = self._positionElement;\n        }\n\n        if (self.isMobile === true) {\n          if (e) {\n            e.preventDefault();\n            e.target && e.target.blur();\n          }\n\n          if (self.mobileInput !== undefined) {\n            self.mobileInput.focus();\n            self.mobileInput.click();\n          }\n\n          triggerEvent(\"onOpen\");\n          return;\n        }\n\n        if (self._input.disabled || self.config.inline) return;\n        var wasOpen = self.isOpen;\n        self.isOpen = true;\n\n        if (!wasOpen) {\n          self.calendarContainer.classList.add(\"open\");\n\n          self._input.classList.add(\"active\");\n\n          triggerEvent(\"onOpen\");\n          positionCalendar(positionElement);\n        }\n\n        if (self.config.enableTime === true && self.config.noCalendar === true) {\n          if (self.selectedDates.length === 0) {\n            self.setDate(self.config.minDate !== undefined ? new Date(self.config.minDate.getTime()) : new Date(), false);\n            setDefaultHours();\n            updateValue();\n          }\n\n          if (self.config.allowInput === false && (e === undefined || !self.timeContainer.contains(e.relatedTarget))) {\n            setTimeout(function () {\n              return self.hourElement.select();\n            }, 50);\n          }\n        }\n      }\n\n      function minMaxDateSetter(type) {\n        return function (date) {\n          var dateObj = self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat);\n          var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n\n          if (dateObj !== undefined) {\n            self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] = dateObj.getHours() > 0 || dateObj.getMinutes() > 0 || dateObj.getSeconds() > 0;\n          }\n\n          if (self.selectedDates) {\n            self.selectedDates = self.selectedDates.filter(function (d) {\n              return isEnabled(d);\n            });\n            if (!self.selectedDates.length && type === \"min\") setHoursFromDate(dateObj);\n            updateValue();\n          }\n\n          if (self.daysContainer) {\n            redraw();\n            if (dateObj !== undefined) self.currentYearElement[type] = dateObj.getFullYear().toString();else self.currentYearElement.removeAttribute(type);\n            self.currentYearElement.disabled = !!inverseDateObj && dateObj !== undefined && inverseDateObj.getFullYear() === dateObj.getFullYear();\n          }\n        };\n      }\n\n      function parseConfig() {\n        var boolOpts = [\"wrap\", \"weekNumbers\", \"allowInput\", \"clickOpens\", \"time_24hr\", \"enableTime\", \"noCalendar\", \"altInput\", \"shorthandCurrentMonth\", \"inline\", \"static\", \"enableSeconds\", \"disableMobile\"];\n        var userConfig = Object.assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n        var formats$$1 = {};\n        self.config.parseDate = userConfig.parseDate;\n        self.config.formatDate = userConfig.formatDate;\n        Object.defineProperty(self.config, \"enable\", {\n          get: function get() {\n            return self.config._enable;\n          },\n          set: function set(dates) {\n            self.config._enable = parseDateRules(dates);\n          }\n        });\n        Object.defineProperty(self.config, \"disable\", {\n          get: function get() {\n            return self.config._disable;\n          },\n          set: function set(dates) {\n            self.config._disable = parseDateRules(dates);\n          }\n        });\n        var timeMode = userConfig.mode === \"time\";\n\n        if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n          formats$$1.dateFormat = userConfig.noCalendar || timeMode ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\") : flatpickr.defaultConfig.dateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n        }\n\n        if (userConfig.altInput && (userConfig.enableTime || timeMode) && !userConfig.altFormat) {\n          formats$$1.altFormat = userConfig.noCalendar || timeMode ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\") : flatpickr.defaultConfig.altFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n        }\n\n        Object.defineProperty(self.config, \"minDate\", {\n          get: function get() {\n            return self.config._minDate;\n          },\n          set: minMaxDateSetter(\"min\")\n        });\n        Object.defineProperty(self.config, \"maxDate\", {\n          get: function get() {\n            return self.config._maxDate;\n          },\n          set: minMaxDateSetter(\"max\")\n        });\n\n        var minMaxTimeSetter = function minMaxTimeSetter(type) {\n          return function (val) {\n            self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i\");\n          };\n        };\n\n        Object.defineProperty(self.config, \"minTime\", {\n          get: function get() {\n            return self.config._minTime;\n          },\n          set: minMaxTimeSetter(\"min\")\n        });\n        Object.defineProperty(self.config, \"maxTime\", {\n          get: function get() {\n            return self.config._maxTime;\n          },\n          set: minMaxTimeSetter(\"max\")\n        });\n\n        if (userConfig.mode === \"time\") {\n          self.config.noCalendar = true;\n          self.config.enableTime = true;\n        }\n\n        Object.assign(self.config, formats$$1, userConfig);\n\n        for (var i = 0; i < boolOpts.length; i++) {\n          self.config[boolOpts[i]] = self.config[boolOpts[i]] === true || self.config[boolOpts[i]] === \"true\";\n        }\n\n        HOOKS.filter(function (hook) {\n          return self.config[hook] !== undefined;\n        }).forEach(function (hook) {\n          self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n        });\n        self.isMobile = !self.config.disableMobile && !self.config.inline && self.config.mode === \"single\" && !self.config.disable.length && !self.config.enable.length && !self.config.weekNumbers && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n\n        for (var _i = 0; _i < self.config.plugins.length; _i++) {\n          var pluginConf = self.config.plugins[_i](self) || {};\n\n          for (var key in pluginConf) {\n            if (HOOKS.indexOf(key) > -1) {\n              self.config[key] = arrayify(pluginConf[key]).map(bindToInstance).concat(self.config[key]);\n            } else if (typeof userConfig[key] === \"undefined\") self.config[key] = pluginConf[key];\n          }\n        }\n\n        triggerEvent(\"onParseConfig\");\n      }\n\n      function setupLocale() {\n        if (typeof self.config.locale !== \"object\" && typeof flatpickr.l10ns[self.config.locale] === \"undefined\") self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n        self.l10n = Object.assign({}, flatpickr.l10ns.default, typeof self.config.locale === \"object\" ? self.config.locale : self.config.locale !== \"default\" ? flatpickr.l10ns[self.config.locale] : undefined);\n        tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n        self.formatDate = createDateFormatter(self);\n        self.parseDate = createDateParser({\n          config: self.config,\n          l10n: self.l10n\n        });\n      }\n\n      function positionCalendar(customPositionElement) {\n        if (self.calendarContainer === undefined) return;\n        triggerEvent(\"onPreCalendarPosition\");\n        var positionElement = customPositionElement || self._positionElement;\n        var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, function (acc, child) {\n          return acc + child.offsetHeight;\n        }, 0),\n            calendarWidth = self.calendarContainer.offsetWidth,\n            configPos = self.config.position.split(\" \"),\n            configPosVertical = configPos[0],\n            configPosHorizontal = configPos.length > 1 ? configPos[1] : null,\n            inputBounds = positionElement.getBoundingClientRect(),\n            distanceFromBottom = window.innerHeight - inputBounds.bottom,\n            showOnTop = configPosVertical === \"above\" || configPosVertical !== \"below\" && distanceFromBottom < calendarHeight && inputBounds.top > calendarHeight;\n        var top = window.pageYOffset + inputBounds.top + (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n        toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n        toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n        if (self.config.inline) return;\n        var left = window.pageXOffset + inputBounds.left - (configPosHorizontal != null && configPosHorizontal === \"center\" ? (calendarWidth - inputBounds.width) / 2 : 0);\n        var right = window.document.body.offsetWidth - inputBounds.right;\n        var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n        toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n        if (self.config.static) return;\n        self.calendarContainer.style.top = top + \"px\";\n\n        if (!rightMost) {\n          self.calendarContainer.style.left = left + \"px\";\n          self.calendarContainer.style.right = \"auto\";\n        } else {\n          self.calendarContainer.style.left = \"auto\";\n          self.calendarContainer.style.right = right + \"px\";\n        }\n      }\n\n      function redraw() {\n        if (self.config.noCalendar || self.isMobile) return;\n        updateNavigationCurrentMonth();\n        buildDays();\n      }\n\n      function focusAndClose() {\n        self._input.focus();\n\n        if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 || navigator.msMaxTouchPoints !== undefined) {\n          setTimeout(self.close, 0);\n        } else {\n          self.close();\n        }\n      }\n\n      function selectDate(e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        var isSelectable = function isSelectable(day) {\n          return day.classList && day.classList.contains(\"flatpickr-day\") && !day.classList.contains(\"disabled\") && !day.classList.contains(\"notAllowed\");\n        };\n\n        var t = findParent(e.target, isSelectable);\n        if (t === undefined) return;\n        var target = t;\n        var selectedDate = self.latestSelectedDateObj = new Date(target.dateObj.getTime());\n        var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth || selectedDate.getMonth() > self.currentMonth + self.config.showMonths - 1) && self.config.mode !== \"range\";\n        self.selectedDateElem = target;\n        if (self.config.mode === \"single\") self.selectedDates = [selectedDate];else if (self.config.mode === \"multiple\") {\n          var selectedIndex = isDateSelected(selectedDate);\n          if (selectedIndex) self.selectedDates.splice(parseInt(selectedIndex), 1);else self.selectedDates.push(selectedDate);\n        } else if (self.config.mode === \"range\") {\n          if (self.selectedDates.length === 2) self.clear(false);\n          self.selectedDates.push(selectedDate);\n          if (compareDates(selectedDate, self.selectedDates[0], true) !== 0) self.selectedDates.sort(function (a, b) {\n            return a.getTime() - b.getTime();\n          });\n        }\n        setHoursFromInputs();\n\n        if (shouldChangeMonth) {\n          var isNewYear = self.currentYear !== selectedDate.getFullYear();\n          self.currentYear = selectedDate.getFullYear();\n          self.currentMonth = selectedDate.getMonth();\n          if (isNewYear) triggerEvent(\"onYearChange\");\n          triggerEvent(\"onMonthChange\");\n        }\n\n        updateNavigationCurrentMonth();\n        buildDays();\n        updateValue();\n        if (self.config.enableTime) setTimeout(function () {\n          return self.showTimeInput = true;\n        }, 50);\n        if (!shouldChangeMonth && self.config.mode !== \"range\" && self.config.showMonths === 1) focusOnDayElem(target);else self.selectedDateElem && self.selectedDateElem.focus();\n        if (self.hourElement !== undefined) setTimeout(function () {\n          return self.hourElement !== undefined && self.hourElement.select();\n        }, 451);\n\n        if (self.config.closeOnSelect) {\n          var single = self.config.mode === \"single\" && !self.config.enableTime;\n          var range = self.config.mode === \"range\" && self.selectedDates.length === 2 && !self.config.enableTime;\n\n          if (single || range) {\n            focusAndClose();\n          }\n        }\n\n        triggerChange();\n      }\n\n      var CALLBACKS = {\n        locale: [setupLocale, updateWeekdays],\n        showMonths: [buildMonths, setCalendarWidth, buildWeekdays]\n      };\n\n      function set(option, value) {\n        if (option !== null && typeof option === \"object\") Object.assign(self.config, option);else {\n          self.config[option] = value;\n          if (CALLBACKS[option] !== undefined) CALLBACKS[option].forEach(function (x) {\n            return x();\n          });else if (HOOKS.indexOf(option) > -1) self.config[option] = arrayify(value);\n        }\n        self.redraw();\n        jumpToDate();\n        updateValue(false);\n      }\n\n      function setSelectedDate(inputDate, format) {\n        var dates = [];\n        if (inputDate instanceof Array) dates = inputDate.map(function (d) {\n          return self.parseDate(d, format);\n        });else if (inputDate instanceof Date || typeof inputDate === \"number\") dates = [self.parseDate(inputDate, format)];else if (typeof inputDate === \"string\") {\n          switch (self.config.mode) {\n            case \"single\":\n            case \"time\":\n              dates = [self.parseDate(inputDate, format)];\n              break;\n\n            case \"multiple\":\n              dates = inputDate.split(self.config.conjunction).map(function (date) {\n                return self.parseDate(date, format);\n              });\n              break;\n\n            case \"range\":\n              dates = inputDate.split(self.l10n.rangeSeparator).map(function (date) {\n                return self.parseDate(date, format);\n              });\n              break;\n\n            default:\n              break;\n          }\n        } else self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n        self.selectedDates = dates.filter(function (d) {\n          return d instanceof Date && isEnabled(d, false);\n        });\n        if (self.config.mode === \"range\") self.selectedDates.sort(function (a, b) {\n          return a.getTime() - b.getTime();\n        });\n      }\n\n      function setDate(date, triggerChange, format) {\n        if (triggerChange === void 0) {\n          triggerChange = false;\n        }\n\n        if (format === void 0) {\n          format = self.config.dateFormat;\n        }\n\n        if (date !== 0 && !date || date instanceof Array && date.length === 0) return self.clear(triggerChange);\n        setSelectedDate(date, format);\n        self.showTimeInput = self.selectedDates.length > 0;\n        self.latestSelectedDateObj = self.selectedDates[0];\n        self.redraw();\n        jumpToDate();\n        setHoursFromDate();\n        updateValue(triggerChange);\n        if (triggerChange) triggerEvent(\"onChange\");\n      }\n\n      function parseDateRules(arr) {\n        return arr.slice().map(function (rule) {\n          if (typeof rule === \"string\" || typeof rule === \"number\" || rule instanceof Date) {\n            return self.parseDate(rule, undefined, true);\n          } else if (rule && typeof rule === \"object\" && rule.from && rule.to) return {\n            from: self.parseDate(rule.from, undefined),\n            to: self.parseDate(rule.to, undefined)\n          };\n\n          return rule;\n        }).filter(function (x) {\n          return x;\n        });\n      }\n\n      function setupDates() {\n        self.selectedDates = [];\n        self.now = self.parseDate(self.config.now) || new Date();\n        var preloadedDate = self.config.defaultDate || ((self.input.nodeName === \"INPUT\" || self.input.nodeName === \"TEXTAREA\") && self.input.placeholder && self.input.value === self.input.placeholder ? null : self.input.value);\n        if (preloadedDate) setSelectedDate(preloadedDate, self.config.dateFormat);\n        var initialDate = self.selectedDates.length > 0 ? self.selectedDates[0] : self.config.minDate && self.config.minDate.getTime() > self.now.getTime() ? self.config.minDate : self.config.maxDate && self.config.maxDate.getTime() < self.now.getTime() ? self.config.maxDate : self.now;\n        self.currentYear = initialDate.getFullYear();\n        self.currentMonth = initialDate.getMonth();\n        if (self.selectedDates.length > 0) self.latestSelectedDateObj = self.selectedDates[0];\n        if (self.config.minTime !== undefined) self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n        if (self.config.maxTime !== undefined) self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n        self.minDateHasTime = !!self.config.minDate && (self.config.minDate.getHours() > 0 || self.config.minDate.getMinutes() > 0 || self.config.minDate.getSeconds() > 0);\n        self.maxDateHasTime = !!self.config.maxDate && (self.config.maxDate.getHours() > 0 || self.config.maxDate.getMinutes() > 0 || self.config.maxDate.getSeconds() > 0);\n        Object.defineProperty(self, \"showTimeInput\", {\n          get: function get() {\n            return self._showTimeInput;\n          },\n          set: function set(bool) {\n            self._showTimeInput = bool;\n            if (self.calendarContainer) toggleClass(self.calendarContainer, \"showTimeInput\", bool);\n            self.isOpen && positionCalendar();\n          }\n        });\n      }\n\n      function setupInputs() {\n        self.input = self.config.wrap ? element.querySelector(\"[data-input]\") : element;\n\n        if (!self.input) {\n          self.config.errorHandler(new Error(\"Invalid input element specified\"));\n          return;\n        }\n\n        self.input._type = self.input.type;\n        self.input.type = \"text\";\n        self.input.classList.add(\"flatpickr-input\");\n        self._input = self.input;\n\n        if (self.config.altInput) {\n          self.altInput = createElement(self.input.nodeName, self.input.className + \" \" + self.config.altInputClass);\n          self._input = self.altInput;\n          self.altInput.placeholder = self.input.placeholder;\n          self.altInput.disabled = self.input.disabled;\n          self.altInput.required = self.input.required;\n          self.altInput.tabIndex = self.input.tabIndex;\n          self.altInput.type = \"text\";\n          self.input.setAttribute(\"type\", \"hidden\");\n          if (!self.config.static && self.input.parentNode) self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n        }\n\n        if (!self.config.allowInput) self._input.setAttribute(\"readonly\", \"readonly\");\n        self._positionElement = self.config.positionElement || self._input;\n      }\n\n      function setupMobile() {\n        var inputType = self.config.enableTime ? self.config.noCalendar ? \"time\" : \"datetime-local\" : \"date\";\n        self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n        self.mobileInput.step = self.input.getAttribute(\"step\") || \"any\";\n        self.mobileInput.tabIndex = 1;\n        self.mobileInput.type = inputType;\n        self.mobileInput.disabled = self.input.disabled;\n        self.mobileInput.required = self.input.required;\n        self.mobileInput.placeholder = self.input.placeholder;\n        self.mobileFormatStr = inputType === \"datetime-local\" ? \"Y-m-d\\\\TH:i:S\" : inputType === \"date\" ? \"Y-m-d\" : \"H:i:S\";\n\n        if (self.selectedDates.length > 0) {\n          self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n        }\n\n        if (self.config.minDate) self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n        if (self.config.maxDate) self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n        self.input.type = \"hidden\";\n        if (self.altInput !== undefined) self.altInput.type = \"hidden\";\n\n        try {\n          if (self.input.parentNode) self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n        } catch (_a) {}\n\n        bind(self.mobileInput, \"change\", function (e) {\n          self.setDate(e.target.value, false, self.mobileFormatStr);\n          triggerEvent(\"onChange\");\n          triggerEvent(\"onClose\");\n        });\n      }\n\n      function toggle(e) {\n        if (self.isOpen === true) return self.close();\n        self.open(e);\n      }\n\n      function triggerEvent(event, data) {\n        if (self.config === undefined) return;\n        var hooks = self.config[event];\n\n        if (hooks !== undefined && hooks.length > 0) {\n          for (var i = 0; hooks[i] && i < hooks.length; i++) {\n            hooks[i](self.selectedDates, self.input.value, self, data);\n          }\n        }\n\n        if (event === \"onChange\") {\n          self.input.dispatchEvent(createEvent(\"change\"));\n          self.input.dispatchEvent(createEvent(\"input\"));\n        }\n      }\n\n      function createEvent(name) {\n        var e = document.createEvent(\"Event\");\n        e.initEvent(name, true, true);\n        return e;\n      }\n\n      function isDateSelected(date) {\n        for (var i = 0; i < self.selectedDates.length; i++) {\n          if (compareDates(self.selectedDates[i], date) === 0) return \"\" + i;\n        }\n\n        return false;\n      }\n\n      function isDateInRange(date) {\n        if (self.config.mode !== \"range\" || self.selectedDates.length < 2) return false;\n        return compareDates(date, self.selectedDates[0]) >= 0 && compareDates(date, self.selectedDates[1]) <= 0;\n      }\n\n      function updateNavigationCurrentMonth() {\n        if (self.config.noCalendar || self.isMobile || !self.monthNav) return;\n        self.yearElements.forEach(function (yearElement, i) {\n          var d = new Date(self.currentYear, self.currentMonth, 1);\n          d.setMonth(self.currentMonth + i);\n          self.monthElements[i].textContent = monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n          yearElement.value = d.getFullYear().toString();\n        });\n        self._hidePrevMonthArrow = self.config.minDate !== undefined && (self.currentYear === self.config.minDate.getFullYear() ? self.currentMonth <= self.config.minDate.getMonth() : self.currentYear < self.config.minDate.getFullYear());\n        self._hideNextMonthArrow = self.config.maxDate !== undefined && (self.currentYear === self.config.maxDate.getFullYear() ? self.currentMonth + 1 > self.config.maxDate.getMonth() : self.currentYear > self.config.maxDate.getFullYear());\n      }\n\n      function getDateStr(format) {\n        return self.selectedDates.map(function (dObj) {\n          return self.formatDate(dObj, format);\n        }).filter(function (d, i, arr) {\n          return self.config.mode !== \"range\" || self.config.enableTime || arr.indexOf(d) === i;\n        }).join(self.config.mode !== \"range\" ? self.config.conjunction : self.l10n.rangeSeparator);\n      }\n\n      function updateValue(triggerChange) {\n        if (triggerChange === void 0) {\n          triggerChange = true;\n        }\n\n        if (self.selectedDates.length === 0) return self.clear(triggerChange);\n\n        if (self.mobileInput !== undefined && self.mobileFormatStr) {\n          self.mobileInput.value = self.latestSelectedDateObj !== undefined ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr) : \"\";\n        }\n\n        self.input.value = getDateStr(self.config.dateFormat);\n\n        if (self.altInput !== undefined) {\n          self.altInput.value = getDateStr(self.config.altFormat);\n        }\n\n        if (triggerChange !== false) triggerEvent(\"onValueUpdate\");\n      }\n\n      function onMonthNavClick(e) {\n        e.preventDefault();\n        var isPrevMonth = self.prevMonthNav.contains(e.target);\n        var isNextMonth = self.nextMonthNav.contains(e.target);\n\n        if (isPrevMonth || isNextMonth) {\n          changeMonth(isPrevMonth ? -1 : 1);\n        } else if (self.yearElements.indexOf(e.target) >= 0) {\n          e.target.select();\n        } else if (e.target.classList.contains(\"arrowUp\")) {\n          self.changeYear(self.currentYear + 1);\n        } else if (e.target.classList.contains(\"arrowDown\")) {\n          self.changeYear(self.currentYear - 1);\n        }\n      }\n\n      function timeWrapper(e) {\n        e.preventDefault();\n        var isKeyDown = e.type === \"keydown\",\n            input = e.target;\n\n        if (self.amPM !== undefined && e.target === self.amPM) {\n          self.amPM.textContent = self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n        }\n\n        var min = parseFloat(input.getAttribute(\"data-min\")),\n            max = parseFloat(input.getAttribute(\"data-max\")),\n            step = parseFloat(input.getAttribute(\"data-step\")),\n            curValue = parseInt(input.value, 10),\n            delta = e.delta || (isKeyDown ? e.which === 38 ? 1 : -1 : 0);\n        var newValue = curValue + step * delta;\n\n        if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n          var isHourElem = input === self.hourElement,\n              isMinuteElem = input === self.minuteElement;\n\n          if (newValue < min) {\n            newValue = max + newValue + int(!isHourElem) + (int(isHourElem) && int(!self.amPM));\n            if (isMinuteElem) incrementNumInput(undefined, -1, self.hourElement);\n          } else if (newValue > max) {\n            newValue = input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n            if (isMinuteElem) incrementNumInput(undefined, 1, self.hourElement);\n          }\n\n          if (self.amPM && isHourElem && (step === 1 ? newValue + curValue === 23 : Math.abs(newValue - curValue) > step)) {\n            self.amPM.textContent = self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n          }\n\n          input.value = pad(newValue);\n        }\n      }\n\n      init();\n      return self;\n    }\n\n    function _flatpickr(nodeList, config) {\n      var nodes = Array.prototype.slice.call(nodeList);\n      var instances = [];\n\n      for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n\n        try {\n          if (node.getAttribute(\"data-fp-omit\") !== null) continue;\n\n          if (node._flatpickr !== undefined) {\n            node._flatpickr.destroy();\n\n            node._flatpickr = undefined;\n          }\n\n          node._flatpickr = FlatpickrInstance(node, config || {});\n          instances.push(node._flatpickr);\n        } catch (e) {\n          console.error(e);\n        }\n      }\n\n      return instances.length === 1 ? instances[0] : instances;\n    }\n\n    if (typeof HTMLElement !== \"undefined\") {\n      HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n        return _flatpickr(this, config);\n      };\n\n      HTMLElement.prototype.flatpickr = function (config) {\n        return _flatpickr([this], config);\n      };\n    }\n\n    var flatpickr = function flatpickr(selector, config) {\n      if (selector instanceof NodeList) return _flatpickr(selector, config);else if (typeof selector === \"string\") return _flatpickr(window.document.querySelectorAll(selector), config);\n      return _flatpickr([selector], config);\n    };\n\n    flatpickr.defaultConfig = defaults;\n    flatpickr.l10ns = {\n      en: Object.assign({}, english),\n      default: Object.assign({}, english)\n    };\n\n    flatpickr.localize = function (l10n) {\n      flatpickr.l10ns.default = Object.assign({}, flatpickr.l10ns.default, l10n);\n    };\n\n    flatpickr.setDefaults = function (config) {\n      flatpickr.defaultConfig = Object.assign({}, flatpickr.defaultConfig, config);\n    };\n\n    flatpickr.parseDate = createDateParser({});\n    flatpickr.formatDate = createDateFormatter({});\n    flatpickr.compareDates = compareDates;\n\n    if (typeof jQuery !== \"undefined\") {\n      jQuery.fn.flatpickr = function (config) {\n        return _flatpickr(this, config);\n      };\n    }\n\n    Date.prototype.fp_incr = function (days) {\n      return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n    };\n\n    if (typeof window !== \"undefined\") {\n      window.flatpickr = flatpickr;\n    }\n\n    return flatpickr;\n\n})));\n","import Polyglot from 'node-polyglot'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport find from 'lodash/find'\r\nimport capitalize from 'lodash/capitalize'\r\n\r\n// import manually the language files we need\r\n// TODO: do this dynamically\r\nimport 'moment/locale/fr'\r\nimport 'moment/locale/de'\r\nimport moment from 'moment'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { localeEquals } from 'pmt-utils/locale'\r\n\r\nimport { retrieveMessages } from './actions'\r\nimport { getLocaleFromStorage } from './storage'\r\n\r\n// could be dynamically imported if we want to reduce the bundle size\r\nimport localizeFlatpickr from 'pmt-ui/Calendar/localizeFlatpickr'\r\n\r\n// force locale to be used, can be: 'debug', fr, en, etc\r\nexport const QUERY_PARAM_LOCALE = 'l'\r\n\r\nexport const getDefaultBrowserLocale = () => {\r\n  // Define user's language. Different browsers have the user locale defined\r\n  // on different fields on the `navigator` object, so we make sure to account\r\n  // for these different by checking all of them\r\n  const language =\r\n    (navigator.languages && navigator.languages[0]) || navigator.language || navigator.userLanguage\r\n\r\n  return language\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst DEFAULT_OPTIONS = {\r\n  defaultLocale: 'en',\r\n  calendar: false,\r\n}\r\n\r\nlet _locale = null\r\nlet _texts = null\r\n\r\n//\r\n// - calendar -> tr flatpickr ?\r\n//\r\nlet _options = DEFAULT_OPTIONS\r\n\r\n// create an instance of the Polyglot class, which you will use for translation.\r\n// Polyglot is class-based so you can maintain different sets of phrases at the same time, possibly\r\n// in different locales. This is very useful for example when serving requests with Express,\r\n// because each request may have a different locale, and you don’t want concurrent requests to\r\n// clobber each other’s phrases.\r\nlet _polyglot = new Polyglot({ locale: getDefaultBrowserLocale() })\r\n\r\nexport const getPolyglot = () => _polyglot\r\n\r\nexport const setPolyglot = polyglot => {\r\n  _polyglot = polyglot\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst getLanguageWithoutRegionCode = language => {\r\n  if (isEmpty(language)) {\r\n    return 'en'\r\n  }\r\n\r\n  // Split locales with a region code\r\n  const languageWithoutRegionCode = language.toLowerCase().split(/[_-]+/)[0]\r\n\r\n  return languageWithoutRegionCode\r\n}\r\n\r\nexport const getCurrentLanguageWithoutRegionCode = () => {\r\n  return getLanguageWithoutRegionCode(_locale)\r\n}\r\n\r\nexport const isSupportedLocale = locale =>\r\n  find(_options.locales, supportedLocale => localeEquals(supportedLocale, locale))\r\n\r\nexport const getCurrentSupportedLanguage = () => {\r\n  let language = getLanguageWithoutRegionCode(_locale)\r\n  if (!isSupportedLocale(language)) {\r\n    language = _options.defaultLocale\r\n  }\r\n  return language\r\n}\r\n\r\nexport const getDefaultLocale = () => {\r\n  let locale = getDefaultBrowserLocale()\r\n\r\n  const queryLocale = getQueryParam(QUERY_PARAM_LOCALE)\r\n  if (!isEmpty(queryLocale) && isSupportedLocale(queryLocale)) {\r\n    locale = queryLocale\r\n  } else {\r\n    // not in query param, search in storage\r\n    const storageLocale = getLocaleFromStorage()\r\n    if (!isEmpty(storageLocale)) {\r\n      locale = storageLocale\r\n    }\r\n  }\r\n\r\n  return locale\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const configureI18n = (options = {}) => {\r\n  // set options\r\n  _options = { ...DEFAULT_OPTIONS, ...options }\r\n\r\n  if (_options.disable) {\r\n    return\r\n  }\r\n\r\n  if (!globalThis.Intl) {\r\n    console.error('Required intl Polyfill')\r\n  }\r\n\r\n  let locale = getDefaultLocale()\r\n  setLocale(locale)\r\n}\r\n\r\nexport const getSupportedLocales = () => _options.locales\r\n\r\n/**\r\n * \"fr_CH\" => \"fr-CH\"\r\n *\r\n * We saw some Restaurants with fr-FR (probably because it's the default value) and some with fr_FR (probably value provided by BOV1)\r\n */\r\nexport const cleanLocale = locale => {\r\n  if (!locale) {\r\n    return null\r\n  }\r\n  return locale.replace('_', '-')\r\n}\r\n\r\n/**\r\n * \"fr-CH\" => \"Français (Suisse)\"\r\n */\r\nexport const getLocaleLabel = value => {\r\n  try {\r\n    const displayNamesLanguage = new Intl.DisplayNames([getLocale()], { type: 'language' })\r\n    const displayNamesRegion = new Intl.DisplayNames([getLocale()], { type: 'region' })\r\n\r\n    const cleanedLocale = cleanLocale(value)\r\n    if (!cleanedLocale) {\r\n      return value\r\n    }\r\n\r\n    const parts = cleanedLocale.split('-')\r\n    const language = parts[0]\r\n    const region = parts[1]\r\n    if (region) {\r\n      return (\r\n        capitalize(displayNamesLanguage.of(language)) +\r\n        ' (' +\r\n        capitalize(displayNamesRegion.of(region)) +\r\n        ')'\r\n      )\r\n    } else {\r\n      return capitalize(displayNamesLanguage.of(language))\r\n    }\r\n  } catch (e) {\r\n    console.error(e)\r\n    return value\r\n  }\r\n}\r\n\r\nexport const getSupportedLocalesOptions = () =>\r\n  getSupportedLocales().map(locale => ({\r\n    value: locale,\r\n    label: getLocaleLabel(locale),\r\n  }))\r\n\r\nexport const setTexts = (apiConsumerTexts, restaurantCustomTexts) => {\r\n  _texts = {\r\n    ...(apiConsumerTexts || {}),\r\n    ...(restaurantCustomTexts?.texts || {}),\r\n  }\r\n}\r\n\r\nexport const setLocale = locale => {\r\n  _locale = locale\r\n\r\n  let language = getLanguageWithoutRegionCode(locale)\r\n  if (!isSupportedLocale(language)) {\r\n    language = _options.defaultLocale\r\n  }\r\n\r\n  if (typeof document !== 'undefined' && document.documentElement) {\r\n    document.documentElement.lang = language\r\n  }\r\n\r\n  const optionsFR = {\r\n    longDateFormat: {\r\n      LT: 'HH[h]mm', // to have 20h00 and not 20:00 in French\r\n    },\r\n  }\r\n\r\n  moment.updateLocale('fr', optionsFR)\r\n\r\n  const optionsDE = {\r\n    longDateFormat: {\r\n      LT: 'HH.mm', // to have 20.15 and not 20:15 in German\r\n    },\r\n  }\r\n\r\n  moment.updateLocale('de', optionsDE)\r\n\r\n  moment.locale(language)\r\n\r\n  if (typeof document !== 'undefined' && document.documentElement) {\r\n    document.documentElement.lang = language\r\n  }\r\n\r\n  if (process.env.FEATURE_FLATPICKR) {\r\n    localizeFlatpickr(language)\r\n  }\r\n\r\n  // retrieve messages\r\n  retrieveMessages(language)\r\n}\r\n\r\nexport const getLocale = () => _locale\r\n\r\nexport const getCountryForLocale = locale => {\r\n  if (!locale) {\r\n    return ''\r\n  }\r\n  if (locale.length === 5) {\r\n    // handle 'fr-FR' format\r\n    const country = locale.substring(3, 5)\r\n    return country.toLowerCase()\r\n  }\r\n\r\n  // trick for locales like 'en', 'fr'\r\n  locale = locale.substring(0, 2).toLowerCase()\r\n  switch (locale) {\r\n    case 'sq':\r\n      return 'al'\r\n    case 'ar':\r\n      return 'eg'\r\n    case 'be':\r\n      return 'by'\r\n    case 'ca':\r\n      return 'es'\r\n    case 'zh':\r\n      return 'cn'\r\n    case 'cs':\r\n      return 'cz'\r\n    case 'da':\r\n      return 'dk'\r\n    case 'en':\r\n      return 'us'\r\n    case 'et':\r\n      return 'ee'\r\n    case 'el':\r\n      return 'gr'\r\n    case 'iw':\r\n      return 'il'\r\n    case 'hi':\r\n      return 'in'\r\n    case 'in':\r\n      return 'id'\r\n    case 'ga':\r\n      return 'ie'\r\n    case 'ja':\r\n      return 'jp'\r\n    case 'ko':\r\n      return 'kr'\r\n    case 'ms':\r\n      return 'my'\r\n    case 'sl':\r\n      return 'si'\r\n    case 'sv':\r\n      return 'se'\r\n    case 'uk':\r\n      return 'ua'\r\n    case 'vi':\r\n      return 'vn'\r\n    case 'sr':\r\n      return 'rs'\r\n\r\n    default:\r\n      return locale\r\n  }\r\n}\r\n\r\nexport const getCountryCodeForLocale = locale => {\r\n  let countryCode = getCountryForLocale(locale)\r\n\r\n  if (countryCode) {\r\n    countryCode = countryCode.toUpperCase()\r\n  }\r\n\r\n  return countryCode\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst trWithLocale = (locale, key, options = {}, useKeyIfNotFound) => {\r\n  if (locale === 'debug') {\r\n    return key\r\n  }\r\n\r\n  if (isEmpty(key)) {\r\n    console.error(`[i18n] key is empty.`)\r\n    return null\r\n  }\r\n\r\n  try {\r\n    if (_texts && !isEmpty(_texts[key])) {\r\n      // eg. \"Welcome, %{name}!\" with options = { name: \"John\" }\r\n      // or \"%{smart_count} restaurant disponible autour de %{address} |||| %{smart_count} restaurants disponibles autour de %{address}\" with options = { smart_count: 2, address: \"Paris\" }\r\n      let text = _texts[key]\r\n\r\n      // handle plural forms like polyglot does\r\n      // (simple implementation - only 2 forms: singular and plural. separated by ||||. Languages with more complex plural rules are not supported here)\r\n      if (options.smart_count) {\r\n        const smartCount = parseInt(options.smart_count, 10)\r\n        // Split the label into singular and plural forms\r\n        const [singular, plural] = text.split('||||').map(str => str.trim())\r\n\r\n        // Choose the correct form based on smartCount\r\n        text = smartCount === 1 ? singular : plural\r\n      }\r\n\r\n      // replace %{param} placeholders\r\n      Object.keys(options).forEach(paramKey => {\r\n        const placeholder = `%{${paramKey}}`\r\n        const value = options[paramKey]\r\n        text = text.replace(placeholder, value)\r\n      })\r\n      return text\r\n    }\r\n\r\n    const message = getPolyglot().t(key, options)\r\n\r\n    // polyglot returns the key itself if not found\r\n    if (isEmpty(message) || message === key) {\r\n      if (useKeyIfNotFound) {\r\n        console.error(`[i18n][${key}] Missing translation for key for locale ${locale}`)\r\n        return key\r\n      } else {\r\n        // maybe we want to return nothing (instead of the key)\r\n        // eg. placeholder for optional text\r\n        // Note: will be checked with isNil() in the caller to know if we want to display the label container or not. So we return null (and not an empty string)\r\n        return null\r\n      }\r\n    }\r\n\r\n    return message\r\n  } catch (e) {\r\n    console.error(e)\r\n    // console.warn(`I18n: ${key} error when formatting for locale ${locale}`, options)\r\n  }\r\n\r\n  return locale\r\n}\r\n\r\nexport const tr = (key, options = {}) => {\r\n  return trWithLocale(_locale, key, options, true)\r\n}\r\n\r\n/**\r\n * returns an empty string (and not the key) if the value is empty\r\n *\r\n * useful for optional texts\r\n */\r\nexport const trOptional = (key, options = {}) => {\r\n  return trWithLocale(_locale, key, options, false)\r\n}\r\n","import { createSelector } from 'reselect'\r\n\r\nimport isNil from 'lodash/isNil'\r\n\r\nconst getState = state => state.i18n\r\n\r\nexport const isFetchingI18nPhrases = createSelector([getState], state =>\r\n  state.get('isFetching', false)\r\n)\r\n\r\nexport const getI18nPhrases = createSelector([getState], state => {\r\n  const phrases = state.get('phrases', null)\r\n  if (isNil(phrases)) {\r\n    return null\r\n  }\r\n\r\n  return phrases.toJS()\r\n})\r\n\r\nexport const getCurrentLocale = createSelector([getState], state => state.get('locale', null))\r\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n  if (number === number) {\n    if (upper !== undefined) {\n      number = number <= upper ? number : upper;\n    }\n    if (lower !== undefined) {\n      number = number >= lower ? number : lower;\n    }\n  }\n  return number;\n}\n\nmodule.exports = baseClamp;\n","var baseClamp = require('./_baseClamp'),\n    baseToString = require('./_baseToString'),\n    toInteger = require('./toInteger'),\n    toString = require('./toString');\n\n/**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n *  else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\nfunction startsWith(string, target, position) {\n  string = toString(string);\n  position = position == null\n    ? 0\n    : baseClamp(toInteger(position), 0, string.length);\n\n  target = baseToString(target);\n  return string.slice(position, position + target.length) == target;\n}\n\nmodule.exports = startsWith;\n","import isEmpty from 'lodash/isEmpty'\r\nimport startsWith from 'lodash/startsWith'\r\n\r\nimport { getDefaultLocale, getCurrentLanguageWithoutRegionCode } from './utils.js'\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\n// TODO: handle region code\r\n// better handling?\r\nexport const getForCurrentLocale = locales => {\r\n  if (!locales) {\r\n    return ''\r\n  }\r\n\r\n  // try to find for current language\r\n  const currentLanguage = getCurrentLanguageWithoutRegionCode().toUpperCase()\r\n  let locale = findOnArray(\r\n    locales,\r\n    locale =>\r\n      locale.locale && startsWith(locale.locale.toLowerCase(), currentLanguage.toLowerCase())\r\n  )\r\n\r\n  // try to find for default language\r\n  if (!locale) {\r\n    const defaultLanguage = getDefaultLocale()\r\n      .substr(0, 2)\r\n      .toUpperCase()\r\n\r\n    if (defaultLanguage !== currentLanguage) {\r\n      locale = findOnArray(\r\n        locales,\r\n        locale =>\r\n          locale.locale && startsWith(locale.locale.toLowerCase(), defaultLanguage.toLowerCase())\r\n      )\r\n    }\r\n  }\r\n\r\n  // none found, fallback to a default\r\n  if (!locale && !isEmpty(locales)) {\r\n    locale = locales[0]\r\n  }\r\n\r\n  // avoid crash\r\n  return locale ? locale.text : ''\r\n}\r\n\r\nexport const getForLocale = (locales, localeParam) => {\r\n  let locale = findOnArray(\r\n    locales,\r\n    locale => locale && startsWith(locale.locale.toLowerCase(), localeParam.toLowerCase())\r\n  )\r\n\r\n  // none found, fallback to a default\r\n  if (!locale && !isEmpty(locales)) {\r\n    locale = locales[0]\r\n  }\r\n\r\n  // avoid crash\r\n  return locale ? locale.text : ''\r\n}\r\n","import Polyglot from 'node-polyglot'\r\nimport Immutable from 'immutable'\r\n\r\nimport { I18nFetchingLocale } from './actions'\r\nimport { RETRIEVE_MESSAGES_LIMIT } from './constants'\r\n\r\nimport { setPolyglot, getDefaultLocale } from './utils'\r\n\r\nimport { retrieveMessages } from './actions'\r\n\r\nexport * from './selectors'\r\nexport * from './utils'\r\nexport * from './format'\r\n\r\n//\r\n//\r\n//\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  isFetching: false,\r\n  locale: null,\r\n  phrases: {},\r\n  retrieveCount: 0,\r\n})\r\n\r\nexport const i18nReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case I18nFetchingLocale.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n      })\r\n\r\n    case I18nFetchingLocale.SUCCESS:\r\n      const { locale, phrases } = action\r\n\r\n      // instance Polyglot for this locale\r\n      const polyglot = new Polyglot({\r\n        locale,\r\n      })\r\n\r\n      // add our strings\r\n      polyglot.extend({\r\n        ...phrases,\r\n      })\r\n\r\n      setPolyglot(polyglot)\r\n\r\n      console.info(`[i18n] loaded for ${locale}`)\r\n\r\n      return state.merge({\r\n        isFetching: false,\r\n        locale,\r\n        phrases,\r\n        retrieveCount: 0,\r\n      })\r\n\r\n    case I18nFetchingLocale.FAILURE:\r\n      const retrieveCount = state.retrieveCount + 1\r\n\r\n      if (retrieveCount < RETRIEVE_MESSAGES_LIMIT) {\r\n        retrieveMessages(getDefaultLocale())\r\n      }\r\n\r\n      return state.merge({\r\n        isFetching: false,\r\n        locale,\r\n        phrases,\r\n        retrieveCount,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n *   return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n  if (typeof predicate != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  return function() {\n    var args = arguments;\n    switch (args.length) {\n      case 0: return !predicate.call(this);\n      case 1: return !predicate.call(this, args[0]);\n      case 2: return !predicate.call(this, args[0], args[1]);\n      case 3: return !predicate.call(this, args[0], args[1], args[2]);\n    }\n    return !predicate.apply(this, args);\n  };\n}\n\nmodule.exports = negate;\n","var assignValue = require('./_assignValue'),\n    castPath = require('./_castPath'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject(object)) {\n    return object;\n  }\n  path = castPath(path, object);\n\n  var index = -1,\n      length = path.length,\n      lastIndex = length - 1,\n      nested = object;\n\n  while (nested != null && ++index < length) {\n    var key = toKey(path[index]),\n        newValue = value;\n\n    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n      return object;\n    }\n\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : undefined;\n      if (newValue === undefined) {\n        newValue = isObject(objValue)\n          ? objValue\n          : (isIndex(path[index + 1]) ? [] : {});\n      }\n    }\n    assignValue(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\n\nmodule.exports = baseSet;\n","var baseGet = require('./_baseGet'),\n    baseSet = require('./_baseSet'),\n    castPath = require('./_castPath');\n\n/**\n * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n  var index = -1,\n      length = paths.length,\n      result = {};\n\n  while (++index < length) {\n    var path = paths[index],\n        value = baseGet(object, path);\n\n    if (predicate(value, path)) {\n      baseSet(result, castPath(path, object), value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = basePickBy;\n","var arrayMap = require('./_arrayMap'),\n    baseIteratee = require('./_baseIteratee'),\n    basePickBy = require('./_basePickBy'),\n    getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n  if (object == null) {\n    return {};\n  }\n  var props = arrayMap(getAllKeysIn(object), function(prop) {\n    return [prop];\n  });\n  predicate = baseIteratee(predicate);\n  return basePickBy(object, props, function(value, path) {\n    return predicate(value, path[0]);\n  });\n}\n\nmodule.exports = pickBy;\n","var baseIteratee = require('./_baseIteratee'),\n    negate = require('./negate'),\n    pickBy = require('./pickBy');\n\n/**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\nfunction omitBy(object, predicate) {\n  return pickBy(object, negate(baseIteratee(predicate)));\n}\n\nmodule.exports = omitBy;\n","const GlobalErrors = {\r\n  1015: 'global.api.global_error.1015',\r\n  1030: 'global.api.global_error.1030',\r\n  10020: 'forbidden.session_expired',\r\n  10021: 'forbidden.invalid_geolocation',\r\n  10023: 'forbidden.invalid_on_site_security',\r\n}\r\n\r\nexport default GlobalErrors\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport invariant from 'invariant'\r\nimport merge from 'lodash/merge'\r\nimport omitBy from 'lodash/omitBy'\r\nimport isNull from 'lodash/isNull'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isString from 'lodash/isString'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nimport { getApiUrl } from '../environment'\r\nimport { getStore } from '../store'\r\n\r\nimport GlobalErrors from './errors/GlobalErrors'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst Error = {\r\n  NO_INTERNET: 'NO_INTERNET',\r\n  UNKNOWN: 'UNKNOWN',\r\n}\r\n\r\n/**\r\n * This function will merge object of headers together.\r\n * We need this function to handle different cases on headers names, so `authorization` and\r\n * `Authorization` are considered the same header.\r\n *\r\n * @param  {object} headersBase\r\n * @param  {object} headers2\r\n * @return {object}          a new object with the headers merge\r\n */\r\nconst mergeHeaders = (headersBase, headersToMerge) => {\r\n  // clone in order to not brake the reference\r\n  let headers = { ...headersBase }\r\n\r\n  for (let headersToMergeKey in headersToMerge) {\r\n    let found = false\r\n    for (let headerKey in headers) {\r\n      if (headersToMergeKey.toLowerCase() === headerKey.toLowerCase()) {\r\n        headers[headerKey] = headersToMerge[headersToMergeKey]\r\n        found = true\r\n      }\r\n    }\r\n\r\n    if (!found) {\r\n      headers[headersToMergeKey] = headersToMerge[headersToMergeKey]\r\n    }\r\n  }\r\n\r\n  return headers\r\n}\r\n\r\nfunction ApiError(code, message) {\r\n  return {\r\n    code,\r\n    message,\r\n  }\r\n}\r\n\r\nfunction formatEndpoint(endpoint, params = null) {\r\n  if (isNull(params)) {\r\n    return endpoint || ''\r\n  }\r\n\r\n  invariant(!isNil(endpoint), `endpoint is nil`)\r\n\r\n  let formattedEnpoint = template(endpoint, params)\r\n\r\n  function template(template, data) {\r\n    return template.replace(/:(\\w*)/g, (m, key) => {\r\n      return data.hasOwnProperty(key) ? data[key] : ''\r\n    })\r\n  }\r\n\r\n  return formattedEnpoint\r\n}\r\n\r\n// https://stackoverflow.com/questions/316781/how-to-build-query-string-with-javascript/34209399#34209399\r\nfunction formatQueryParams(parameters) {\r\n  let qs = ''\r\n  for (let key in parameters) {\r\n    let value = parameters[key]\r\n    qs += encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&'\r\n  }\r\n  if (qs.length > 0) {\r\n    qs = qs.substring(0, qs.length - 1) // chop off last '&'\r\n    return `?${qs}`\r\n  }\r\n\r\n  return ''\r\n}\r\n\r\nclass ApiManager {\r\n  ContentTypes = {\r\n    FORM_URL_ENCODE: 'application/x-www-form-urlencoded',\r\n  }\r\n\r\n  /**\r\n   * Must be set by calling `setGetApiManagerOptions`\r\n   *\r\n   * A middleware used in case of error.\r\n   * Must return true if the middleware have taking care of the error.\r\n   * Use to handle 401, 500, etc.\r\n   *\r\n   * @param error\r\n   * @param res If undefined, the request have encounter a connexion error.\r\n   * @type Function\r\n   *\r\n   * Example of middleware:\r\n   *\r\n   * ```\r\n   * errorMiddleware: (error, response, json, success, failure) => {\r\n   * if (!isNil(res)) {\r\n   *       if (res.statusCode === 401) {\r\n   *         console.error('[API] 401, redirect to login')\r\n   *         return true\r\n   *       }\r\n   *\r\n   *       if (res.statusCode === 500) {\r\n   *         console.log(res)\r\n   *         Logger.error('API 500', res)\r\n   *         // redirect to error 500 page\r\n   *         return true\r\n   *       }\r\n   *     }\r\n   *     return false\r\n   *   }\r\n   * ```\r\n   *\r\n   * errorMiddleware: (error, res, success: Function, failure: Function) => { return false },\r\n   *\r\n   * Function that must return an object.\r\n   *\r\n   * Example:\r\n   * {\r\n   *  Authorization:  'toto',\r\n   *  OtherHeader: 'toto42'\r\n   * }\r\n   *\r\n   * Note that the headers set to the request's params have the priority over the headers given\r\n   * by the middleware.\r\n   *\r\n   * @type Function\r\n   *\r\n   * headersMiddleware: () => { return {} },\r\n   *\r\n   * @type string\r\n   * apiUrl: '',\r\n   */\r\n  getApiManagerOptions = null\r\n\r\n  setGetApiManagerOptions(func) {\r\n    this.getApiManagerOptions = func\r\n  }\r\n\r\n  //\r\n  // ------------- Tools\r\n  //\r\n\r\n  /**\r\n   * remove undefined or null headers\r\n   */\r\n  getHeaders(headersParam) {\r\n    const optionsHeadersMiddleware = this.getApiManagerOptions(\r\n      getStore().getState()\r\n    ).headersMiddleware()\r\n\r\n    let headers = mergeHeaders(optionsHeadersMiddleware, headersParam)\r\n    return omitBy(headers, isNil)\r\n  }\r\n\r\n  handleSuccess(previousRequestOptions, response, data, success, failure) {\r\n    if (!previousRequestOptions.then) {\r\n      success(data, response)\r\n\r\n      if (isFunction(previousRequestOptions.onSuccessCallback)) {\r\n        previousRequestOptions.onSuccessCallback(data, response)\r\n      }\r\n\r\n      return\r\n    }\r\n\r\n    //\r\n    // Chained request\r\n    //\r\n\r\n    const requestOptions = previousRequestOptions.then(previousRequestOptions, data)\r\n\r\n    // requestOptions can be null. when the the functions call the previousRequestOptions.failure itself, it\r\n    // returns null to stop the chain\r\n    if (requestOptions === null) {\r\n      return\r\n    }\r\n\r\n    // set root requestOptions success and failure\r\n    requestOptions.success = success\r\n    requestOptions.failure = failure\r\n\r\n    this.runFetch(requestOptions.type, requestOptions)\r\n  }\r\n\r\n  /**\r\n   * Handle an HTTP response.\r\n   * Calls the success callback in case of success\r\n   * Calls the failure callback in case of error and if the errorMiddleware does not handle the error.\r\n   *\r\n   * @param error\r\n   * @param res\r\n   * @param success the closure called on success. Take a json object as parameter.\r\n   * @param failure the closure called on failure. Take an ApiError as parameter.\r\n   */\r\n  handleResponse(requestOptions, error, response, success, failure, fetchRequestData) {\r\n    if (!isNil(response)) {\r\n      if (response.status === 204) {\r\n        // whatever the content-type, a 204 means success without response body\r\n        this.handleSuccess(requestOptions, response, {}, success, failure)\r\n      } else {\r\n        const contentType = response.headers.get('content-type')\r\n        if (contentType && contentType.indexOf('application/json') !== -1) {\r\n          return response\r\n            .json()\r\n            .then(\r\n              json => {\r\n                if (response.ok) {\r\n                  this.handleSuccess(requestOptions, response, json, success, failure)\r\n                } else {\r\n                  console.log('fetch success, response json not ok')\r\n                  this.handleError(requestOptions, response, null, json, success, failure)\r\n                }\r\n              },\r\n              data => {\r\n                // In case we get a 204 (\r\n                // e.g. : when deleting a user address\r\n                // We need to handle the answer as a success and not ignoring it\r\n                if (requestOptions.type === 'DELETE' && response.ok) {\r\n                  this.handleSuccess(requestOptions, response, {}, success, failure)\r\n                } else {\r\n                  console.log('fetch success, response data not ok')\r\n                  this.handleError(requestOptions, response, null, {}, success, failure)\r\n                }\r\n              }\r\n            )\r\n            .catch(e => {\r\n              console.log('fetch error')\r\n              console.error(e)\r\n              this.handleError(requestOptions, response, e, null, success, failure)\r\n            })\r\n        } else {\r\n          response\r\n            .text()\r\n            .then(text => {\r\n              if (response.ok) {\r\n                this.handleSuccess(requestOptions, response, text, success, failure)\r\n              } else {\r\n                console.log('fetch success, response text is not ok')\r\n                this.handleError(requestOptions, response, null, text, success, failure)\r\n              }\r\n            })\r\n            .catch(e => {\r\n              console.log('fetch success, response text catched')\r\n              this.handleError(requestOptions, response, e, null, success, failure)\r\n            })\r\n        }\r\n      }\r\n    } else {\r\n      // TODO: find a way to know it has been cancelled\r\n      const isCancelled = false //error && error.name && error.name === 'AbortError'\r\n      // console.log({isCancelled })\r\n      if (!isCancelled) {\r\n        console.log('fetch catched error:')\r\n        console.error(error)\r\n        if (fetchRequestData.retry < 5) {\r\n          // wait seconds before retrying.\r\n          const timeouts = [2, 3, 4, 5, 10]\r\n          console.log('Retrying')\r\n          setTimeout(() => {\r\n            this.runFetch(\r\n              fetchRequestData.method,\r\n              fetchRequestData.options,\r\n              fetchRequestData.retry + 1\r\n            )\r\n          }, (timeouts[fetchRequestData.retry] || 10) * 1000)\r\n        } else {\r\n          console.log('Aborting')\r\n          // retry.\r\n          this.handleError(requestOptions, null, error, null, success, failure)\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  callFailure(requestOptions, error, apiError, failure) {\r\n    if (isFunction(requestOptions.onFailure)) {\r\n      const res = requestOptions.onFailure(requestOptions, apiError)\r\n      if (res !== false) {\r\n        // returns true if handled\r\n        if (res !== true) {\r\n          // not true, we have an object defining a request\r\n          const newRequestOptions = res\r\n          // set root requestOptions success and failure\r\n          newRequestOptions.success = requestOptions.success\r\n          newRequestOptions.failure = failure\r\n          this.run(newRequestOptions)\r\n        }\r\n        return\r\n      }\r\n    }\r\n\r\n    if (isFunction(requestOptions.onFailureCallback)) {\r\n      requestOptions.onFailureCallback(apiError)\r\n    }\r\n\r\n    failure(apiError)\r\n  }\r\n\r\n  handleError(requestOptions, response, error, json, success, failure) {\r\n    let apiError = null\r\n\r\n    if (isNil(json)) {\r\n      // no internet connexion / no response\r\n      apiError = ApiError(Error.NO_INTERNET, 'No internet connectivity')\r\n      apiError.localizedMessage = tr('global.api.global_error.no_internet')\r\n    } else {\r\n      apiError = this.createApiError(requestOptions, json, response)\r\n    }\r\n\r\n    apiError.body = json\r\n    apiError.response = response\r\n    this.callFailure(requestOptions, error, apiError, failure)\r\n  }\r\n\r\n  /**\r\n   * Parse the HTTP response body to create an ApiError object.\r\n   *\r\n   *\r\n   * @param responseBody The HTTP response body.\r\n   * @returns {ApiError} A populate ApiError object.\r\n   */\r\n  createApiError(requestOptions, json, response) {\r\n    // An errorHandler can be:\r\n    // - an object:\r\n    //  ```\r\n    //   {\r\n    //     101: '', // api error code and message (localized)\r\n    //     default: '', // default value to use. not mandatory\r\n    //   }\r\n    //  ```\r\n    // - function\r\n    //  ```\r\n    //    (requestOptions, json) => {\r\n    //    }\r\n    //  ```\r\n    //  - requestOptions is the option object set on our Api* file, (and modify by the ApiManager)\r\n    //  - json is the api response data (could be null / not json)\r\n    let localizedMessage = 'Something went wrong, please try again'\r\n    const error = ApiError(Error.UNKNOWN, '')\r\n    const errorHandler = requestOptions && requestOptions.errorHandler\r\n\r\n    if (!isNil(json)) {\r\n      error.code = json.code\r\n      error.message = json.message\r\n      error.localizedMessage = localizedMessage\r\n      error.extra = json.extra\r\n      error.errorCode = json.errorCode\r\n      error.httpStatus = json.httpStatus\r\n      error.timestamp = json.timestamp\r\n      error.fieldErrors = json.fieldErrors\r\n\r\n      // Temporary fix to handle oauth authentication failure..\r\n      // for now the API gives the code 100. But it can mess with other code 100\r\n      // TODO: remove once the API is up with the new error code (1015)\r\n      if (!isEmpty(error.message) && error.message.indexOf('Oauth authentication failure') !== -1) {\r\n        error.localizedMessage = GlobalErrors[1015]\r\n        return error\r\n      }\r\n\r\n      // get localizedMessage\r\n      localizedMessage = json.message\r\n\r\n      /**\r\n       * Find the localized message for the json error.\r\n       * We use the GlobalErrors, then the returned localizedMessage if any, then the defined errorHandler.\r\n       *\r\n       * @param  {[type]} errorHandler   defined errorHandler for the request\r\n       * @param  {[type]} requestOptions request options\r\n       * @param  {[type]} json           error json\r\n       */\r\n      const findLocalizedMessage = (errorHandler, requestOptions, json, response) => {\r\n        // find global error\r\n        let globalLocalizedMessage = GlobalErrors[json.code]\r\n\r\n        if (!isEmpty(globalLocalizedMessage)) {\r\n          return tr(globalLocalizedMessage)\r\n        }\r\n\r\n        if (!isEmpty(json.localizedMessage)) {\r\n          return json.localizedMessage\r\n        }\r\n\r\n        // use error handler\r\n        if (errorHandler) {\r\n          if (isFunction(errorHandler)) {\r\n            const errorHandlerFuncResult = errorHandler(requestOptions, json, response)\r\n            // if return an object of errors ({ 100: '', 200: ''})\r\n            if (!isString(errorHandlerFuncResult)) {\r\n              return errorHandlerFuncResult[json.code] || errorHandlerFuncResult['default']\r\n            }\r\n            return errorHandlerFuncResult\r\n          }\r\n\r\n          return errorHandler[json.code] || errorHandler['default']\r\n        }\r\n\r\n        return null\r\n      }\r\n\r\n      let foundLocalizedMessage = findLocalizedMessage(errorHandler, requestOptions, json, response)\r\n\r\n      if (!isNull(foundLocalizedMessage)) {\r\n        localizedMessage = foundLocalizedMessage\r\n      }\r\n    } else {\r\n      if (isFunction(errorHandler)) {\r\n        localizedMessage = errorHandler(requestOptions, null)\r\n      } else if (errorHandler) {\r\n        localizedMessage = errorHandler['default'] || localizedMessage\r\n      }\r\n    }\r\n\r\n    error.localizedMessage = localizedMessage\r\n\r\n    return error\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param statusCode the response status code\r\n   * @returns {boolean} True if the status code indicate a successful response\r\n   */\r\n  isSuccessResponse(statusCode) {\r\n    return statusCode >= 200 && statusCode < 300\r\n  }\r\n\r\n  //\r\n  // ------------- Requests tools for the API\r\n  //\r\n\r\n  /**\r\n   * @param  {Object} request An object that represent a request:\r\n   * {\r\n   *  type: PUT, POST, UPDATE, DELETE, GET\r\n   *  success: success callback (param: JSON)\r\n   *  failure: failure callback (param: ApiError)\r\n   *  endpoint: the endpoint,\r\n   *  params: the url parameters to set on the endpoint,\r\n   *  query: the url query params,\r\n   *  body: the body data to be send as json,\r\n   *  headers: an object of headers,\r\n   *  isForm: true if the body to send is not json but a x-www-form-urlencoded form. We transform the\r\n   *   body given as an object to a form data.\r\n   *  isMultipart: true if the body to send is a multipart. The given body have to be a javascript\r\n   *   object\r\n   *  errorHandler: A function / object ({ 100: '', default: ''} ) to retrieve the message to attach\r\n   *  on the error. See `createApiError` for more info\r\n   *  isExtern is the request external to our API? must be used with an `url` parameter\r\n   *  url: the url to use instead of the baseUrl + endpoint\r\n   *  then: function (previousOptions, json|data) to chain requests\r\n   *  after: function () to chain requests\r\n   *  updateBody: function (data, body), use it when using the `after` param. It allows you to update\r\n   *   the body set on the request data with the data of the previous request (defined by `after`)\r\n   *  onFailure: function (error): boolean|object custom handler. returns false if custom handler\r\n   *   doest not handled the error. Otherwise can returns true or an object defining a new request\r\n   * }\r\n   */\r\n  run(request) {\r\n    try {\r\n      switch (request.type) {\r\n        case 'GET':\r\n          this.get(request)\r\n          break\r\n        case 'POST':\r\n          this.post(request)\r\n          break\r\n        case 'UPDATE':\r\n        case 'PUT':\r\n          this.put(request)\r\n          break\r\n        case 'PATCH':\r\n          this.patch(request)\r\n          break\r\n        case 'DELETE':\r\n          this.delete(request)\r\n          break\r\n        default:\r\n          Logger.error(\r\n            'api',\r\n            `unknown type ${\r\n              request.type\r\n            }. Verify your defined a 'type' on your api call configuration.`\r\n          )\r\n      }\r\n    } catch (e) {\r\n      console.error(e)\r\n    }\r\n  }\r\n\r\n  get(options) {\r\n    this.runFetch('GET', options)\r\n  }\r\n\r\n  delete(options) {\r\n    this.runFetch('DELETE', options)\r\n  }\r\n\r\n  post(options) {\r\n    this.runFetch('POST', options)\r\n  }\r\n\r\n  put(options) {\r\n    this.runFetch('PUT', options)\r\n  }\r\n\r\n  patch(options) {\r\n    this.runFetch('PATCH', options)\r\n  }\r\n\r\n  getFinalApiUrl(defaultUrl = null) {\r\n    if (!isEmpty(defaultUrl)) {\r\n      return defaultUrl\r\n    }\r\n\r\n    return getApiUrl()\r\n  }\r\n\r\n  runFetch(method, options, retry = 0) {\r\n    const { url, isExtern, after, query, endpoint, params, success, failure } = options\r\n    // get otherOptions where we remove the headers, that cause problems whene merging the\r\n    // default options with this options (override headers, add null headers that are removed\r\n    // on getHeaders)\r\n    const { headers, ...otherOptions } = options\r\n\r\n    // Handle `after` param, the current request have to be run after the one describe by the\r\n    // `after` function param.\r\n    //\r\n    if (!isNil(after)) {\r\n      // get request to made before the current request\r\n      const previousRequestOptions = after()\r\n      // attach a success\r\n      previousRequestOptions.success = json => {\r\n        // run current\r\n        this.run({\r\n          ...options,\r\n          body: !isNil(options.updateBody) ? options.updateBody(json, options.body) : options.body,\r\n          after: null, // avoid infinite loop\r\n        })\r\n      }\r\n      previousRequestOptions.failure = failure\r\n\r\n      // run the request to made before the current request\r\n      this.run(previousRequestOptions)\r\n      return // do not continue\r\n    }\r\n\r\n    // in case of external call, we use the url set on the options, instead of the base url /\r\n    // endpoint / params.\r\n    const finalUrl = isExtern\r\n      ? `${this.getFinalApiUrl(url)}${formatEndpoint(endpoint, params)}${formatQueryParams(query)}`\r\n      : `${this.getFinalApiUrl(url)}${formatEndpoint(endpoint, params)}${formatQueryParams(query)}`\r\n\r\n    const defaultHeaders = {\r\n      Accept: 'application/json',\r\n      'Content-Type': 'application/json',\r\n    }\r\n\r\n    if (!isExtern) {\r\n      const simulateHeader = getQueryParam('simulate')\r\n      if (simulateHeader) {\r\n        defaultHeaders.simulate = simulateHeader\r\n      }\r\n    }\r\n\r\n    const defaultOptions = {\r\n      method: method,\r\n      mode: 'cors',\r\n      cache: 'default',\r\n      headers: mergeHeaders(\r\n        defaultHeaders,\r\n        // do not set default headers for external request\r\n        isExtern ? {} : this.getHeaders(headers)\r\n      ),\r\n    }\r\n\r\n    // merge otherOptions (options with bad data removed, such as headers that don't have to\r\n    // be merge here since we merge it above)\r\n    const finalOptions = merge(defaultOptions, otherOptions)\r\n\r\n    // handle form\r\n    if (options.isForm) {\r\n      finalOptions.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\r\n\r\n      // see https://github.com/github/fetch/issues/263\r\n      // Note: This does not handle nested javascript objects\r\n      finalOptions.body = Object.keys(finalOptions.body)\r\n        .map(key => {\r\n          return encodeURIComponent(key) + '=' + encodeURIComponent(finalOptions.body[key])\r\n        })\r\n        .join('&')\r\n    } else if (options.isMultipart) {\r\n      // create form data from json object\r\n      const formData = new FormData()\r\n      for (let key in finalOptions.body) {\r\n        formData.append(key, finalOptions.body[key])\r\n      }\r\n      finalOptions.body = formData\r\n    } else if (method === 'POST' || method === 'PUT' || method === 'PATCH') {\r\n      // post\r\n      finalOptions.body = JSON.stringify(finalOptions.body)\r\n    }\r\n\r\n    fetch(finalUrl, finalOptions)\r\n      .then(response => {\r\n        this.handleResponse(finalOptions, null, response, success, failure, {\r\n          method,\r\n          options,\r\n          retry,\r\n        })\r\n      })\r\n      .catch(error => {\r\n        this.handleResponse(finalOptions, error, null, success, failure, {\r\n          method,\r\n          options,\r\n          retry,\r\n        })\r\n      })\r\n  }\r\n}\r\n\r\nlet _apiManagerInstance = new ApiManager()\r\n\r\nexport default _apiManagerInstance\r\n","export const Events = {\r\n  ON_APP_INIT: 'EVENT::GLOBAL::APP_INIT',\r\n  ON_ANALYTICS_INIT: 'EVENT::GLOBAL::ANALYTICS::INIT',\r\n  ON_HISTORY_CHANGE: 'EVENT::GLOBAL::HISTORY_CHANGE',\r\n\r\n  ON_RESTAURANT_LIST_SUCCESS: 'EVENT::GLOBAL::RESTAURANT_LIST::SUCCESS',\r\n  ON_LOGIN_SUCCESS: 'EVENT::GLOBAL::LOGIN::SUCCESS',\r\n  ON_REGISTER_SUCCESS: 'EVENT::GLOBAL::REGISTER::SUCCESS',\r\n  ON_PAYMENT_SUCCESS: 'EVENT::GLOBAL::PAYMENT::SUCCESS',\r\n}\r\n\r\nexport default Events\r\n","import forEach from 'lodash/forEach'\r\nimport Events from './Events'\r\n\r\n/**\r\n * Manage dispatch Events and plugins custom events\r\n */\r\nclass EventManager {\r\n  /**\r\n   * key: event\r\n   * value: array of events\r\n   */\r\n  listeners = {}\r\n\r\n  /**\r\n   * Shortctut to Events.\r\n   * Also contains the plugins events. (see registerEvents)\r\n   */\r\n  Events = { ...Events }\r\n\r\n  addListener(event, fn) {\r\n    this.listeners[event] = [...(this.listeners[event] || []), fn]\r\n\r\n    // TODO:\r\n    // - verify fn is a function\r\n    // - verify event is listed events or plugins events\r\n  }\r\n\r\n  dispatch(event, data = {}) {\r\n    const listeners = this.listeners[event]\r\n\r\n    // TODO: dev log\r\n\r\n    if (listeners !== undefined) {\r\n      listeners.forEach(listener => {\r\n        listener({\r\n          type: event,\r\n          data,\r\n        })\r\n      })\r\n    }\r\n  }\r\n\r\n  registerEvents(events) {\r\n    // TODO: in dev, verify that there is no collusion\r\n    this.Events = { ...this.Events, ...events }\r\n  }\r\n\r\n  addListeners(listeners) {\r\n    forEach(listeners, (fn, event) => {\r\n      this.addListener(event, fn)\r\n    })\r\n  }\r\n}\r\n\r\nconst EventManagerInstance = new EventManager()\r\n\r\n// globalize EventManagerInstance\r\nwindow.PMTEventManager = EventManagerInstance\r\n\r\n// EventManager is a Singleton\r\nexport default EventManagerInstance\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport EventManager from 'pmt-modules/event/EventManager'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that send an event\r\n *\r\n */\r\nclass SendEventContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (props.send) {\r\n      this.sendEvent(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (nextProps.send && !this.props.send) {\r\n      this.sendEvent(nextProps)\r\n    }\r\n  }\r\n\r\n  sendEvent = props => {\r\n    EventManager.dispatch(props.event, props.eventProps ? props.eventProps() : {})\r\n  }\r\n\r\n  render() {\r\n    return React.cloneElement(this.props.children)\r\n  }\r\n}\r\n\r\nSendEventContainer.defaultProps = {\r\n  send: true,\r\n}\r\n\r\nSendEventContainer.propTypes = {\r\n  children: PropTypes.object.isRequired,\r\n\r\n  event: PropTypes.string.isRequired,\r\n  eventProps: PropTypes.func,\r\n\r\n  send: PropTypes.bool,\r\n}\r\n\r\nexport default SendEventContainer\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar gtag = function gtag() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (typeof window !== \"undefined\") {\n    var _window;\n\n    if (typeof window.gtag === \"undefined\") {\n      window.dataLayer = window.dataLayer || [];\n\n      window.gtag = function gtag() {\n        window.dataLayer.push(arguments);\n      };\n    }\n\n    (_window = window).gtag.apply(_window, args);\n  }\n};\n\nvar _default = gtag;\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = format;\nvar smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\\.?|via)$/i;\n\nfunction toTitleCase(string) {\n  return string.toString().trim().replace(/[A-Za-z0-9\\u00C0-\\u00FF]+[^\\s-]*/g, function (match, index, title) {\n    if (index > 0 && index + match.length !== title.length && match.search(smallWords) > -1 && title.charAt(index - 2) !== \":\" && (title.charAt(index + match.length) !== \"-\" || title.charAt(index - 1) === \"-\") && title.charAt(index - 1).search(/[^\\s-]/) < 0) {\n      return match.toLowerCase();\n    }\n\n    if (match.substr(1).search(/[A-Z]|\\../) > -1) {\n      return match;\n    }\n\n    return match.charAt(0).toUpperCase() + match.substr(1);\n  });\n} // See if s could be an email address. We don't want to send personal data like email.\n// https://support.google.com/analytics/answer/2795983?hl=en\n\n\nfunction mightBeEmail(s) {\n  // There's no point trying to validate rfc822 fully, just look for ...@...\n  return typeof s === \"string\" && s.indexOf(\"@\") !== -1;\n}\n\nvar redacted = \"REDACTED (Potential Email Address)\";\n\nfunction redactEmail(string) {\n  if (mightBeEmail(string)) {\n    console.warn(\"This arg looks like an email address, redacting.\");\n    return redacted;\n  }\n\n  return string;\n}\n\nfunction format() {\n  var s = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\n  var titleCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  var redactingEmail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n  var _str = s || \"\";\n\n  if (titleCase) {\n    _str = toTitleCase(s);\n  }\n\n  if (redactingEmail) {\n    _str = redactEmail(_str);\n  }\n\n  return _str;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.GA4 = void 0;\n\nvar _gtag = _interopRequireDefault(require(\"./gtag\"));\n\nvar _format = _interopRequireDefault(require(\"./format\"));\n\nvar _excluded = [\"eventCategory\", \"eventAction\", \"eventLabel\", \"eventValue\", \"hitType\"],\n    _excluded2 = [\"title\", \"location\"],\n    _excluded3 = [\"page\", \"hitType\"],\n    _excluded4 = [\"action\", \"category\", \"label\", \"value\", \"nonInteraction\", \"transport\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/*\nLinks\nhttps://developers.google.com/gtagjs/reference/api\nhttps://developers.google.com/tag-platform/gtagjs/reference\n*/\n\n/**\n * @typedef GaOptions\n * @type {Object}\n * @property {boolean} [cookieUpdate=true]\n * @property {number} [cookieExpires=63072000] Default two years\n * @property {string} [cookieDomain=\"auto\"]\n * @property {string} [cookieFlags]\n * @property {string} [userId]\n * @property {string} [clientId]\n * @property {boolean} [anonymizeIp]\n * @property {string} [contentGroup1]\n * @property {string} [contentGroup2]\n * @property {string} [contentGroup3]\n * @property {string} [contentGroup4]\n * @property {string} [contentGroup5]\n * @property {boolean} [allowAdFeatures=true]\n * @property {boolean} [allowAdPersonalizationSignals]\n * @property {boolean} [nonInteraction]\n * @property {string} [page]\n */\n\n/**\n * @typedef UaEventOptions\n * @type {Object}\n * @property {string} action\n * @property {string} category\n * @property {string} [label]\n * @property {number} [value]\n * @property {boolean} [nonInteraction]\n * @property {('beacon'|'xhr'|'image')} [transport]\n */\n\n/**\n * @typedef InitOptions\n * @type {Object}\n * @property {string} trackingId\n * @property {GaOptions|any} [gaOptions]\n * @property {Object} [gtagOptions] New parameter\n */\nvar GA4 = /*#__PURE__*/function () {\n  function GA4() {\n    var _this = this;\n\n    _classCallCheck(this, GA4);\n\n    _defineProperty(this, \"reset\", function () {\n      _this.isInitialized = false;\n      _this._testMode = false;\n      _this._currentMeasurementId;\n      _this._hasLoadedGA = false;\n      _this._isQueuing = false;\n      _this._queueGtag = [];\n    });\n\n    _defineProperty(this, \"_gtag\", function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      if (!_this._testMode) {\n        if (_this._isQueuing) {\n          _this._queueGtag.push(args);\n        } else {\n          _gtag[\"default\"].apply(void 0, args);\n        }\n      } else {\n        _this._queueGtag.push(args);\n      }\n    });\n\n    _defineProperty(this, \"_loadGA\", function (GA_MEASUREMENT_ID, nonce) {\n      if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n        return;\n      }\n\n      if (!_this._hasLoadedGA) {\n        // Global Site Tag (gtag.js) - Google Analytics\n        var script = document.createElement(\"script\");\n        script.async = true;\n        script.src = \"https://www.googletagmanager.com/gtag/js?id=\".concat(GA_MEASUREMENT_ID);\n\n        if (nonce) {\n          script.setAttribute(\"nonce\", nonce);\n        }\n\n        document.body.appendChild(script);\n        window.dataLayer = window.dataLayer || [];\n\n        window.gtag = function gtag() {\n          window.dataLayer.push(arguments);\n        };\n\n        _this._hasLoadedGA = true;\n      }\n    });\n\n    _defineProperty(this, \"_toGtagOptions\", function (gaOptions) {\n      if (!gaOptions) {\n        return;\n      }\n\n      var mapFields = {\n        // Old https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#cookieUpdate\n        // New https://developers.google.com/analytics/devguides/collection/gtagjs/cookies-user-id#cookie_update\n        cookieUpdate: \"cookie_update\",\n        cookieExpires: \"cookie_expires\",\n        cookieDomain: \"cookie_domain\",\n        cookieFlags: \"cookie_flags\",\n        // must be in set method?\n        userId: \"user_id\",\n        clientId: \"client_id\",\n        anonymizeIp: \"anonymize_ip\",\n        // https://support.google.com/analytics/answer/2853546?hl=en#zippy=%2Cin-this-article\n        contentGroup1: \"content_group1\",\n        contentGroup2: \"content_group2\",\n        contentGroup3: \"content_group3\",\n        contentGroup4: \"content_group4\",\n        contentGroup5: \"content_group5\",\n        // https://support.google.com/analytics/answer/9050852?hl=en\n        allowAdFeatures: \"allow_google_signals\",\n        allowAdPersonalizationSignals: \"allow_ad_personalization_signals\",\n        nonInteraction: \"non_interaction\",\n        page: \"page_path\",\n        hitCallback: \"event_callback\"\n      };\n      var gtagOptions = Object.entries(gaOptions).reduce(function (prev, _ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            key = _ref2[0],\n            value = _ref2[1];\n\n        if (mapFields[key]) {\n          prev[mapFields[key]] = value;\n        } else {\n          prev[key] = value;\n        }\n\n        return prev;\n      }, {});\n      return gtagOptions;\n    });\n\n    _defineProperty(this, \"initialize\", function (GA_MEASUREMENT_ID) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (!GA_MEASUREMENT_ID) {\n        throw new Error(\"Require GA_MEASUREMENT_ID\");\n      }\n\n      var initConfigs = typeof GA_MEASUREMENT_ID === \"string\" ? [{\n        trackingId: GA_MEASUREMENT_ID\n      }] : GA_MEASUREMENT_ID;\n      _this._currentMeasurementId = initConfigs[0].trackingId;\n      var gaOptions = options.gaOptions,\n          gtagOptions = options.gtagOptions,\n          _options$legacyDimens = options.legacyDimensionMetric,\n          legacyDimensionMetric = _options$legacyDimens === void 0 ? true : _options$legacyDimens,\n          nonce = options.nonce,\n          _options$testMode = options.testMode,\n          testMode = _options$testMode === void 0 ? false : _options$testMode;\n      _this._testMode = testMode;\n\n      if (!testMode) {\n        _this._loadGA(_this._currentMeasurementId, nonce);\n      }\n\n      if (!_this.isInitialized) {\n        _this._gtag(\"js\", new Date());\n\n        initConfigs.forEach(function (config) {\n          var mergedGtagOptions = _this._appendCustomMap(_objectSpread(_objectSpread(_objectSpread({\n            // https://developers.google.com/analytics/devguides/collection/gtagjs/pages#disable_pageview_measurement\n            send_page_view: false\n          }, _this._toGtagOptions(_objectSpread(_objectSpread({}, gaOptions), config.gaOptions))), gtagOptions), config.gtagOptions), legacyDimensionMetric);\n\n          _this._gtag(\"config\", config.trackingId, mergedGtagOptions);\n        });\n      }\n\n      _this.isInitialized = true;\n\n      if (!testMode) {\n        var queues = _toConsumableArray(_this._queueGtag);\n\n        _this._queueGtag = [];\n        _this._isQueuing = false;\n\n        while (queues.length) {\n          var queue = queues.shift();\n\n          _this._gtag.apply(_this, _toConsumableArray(queue));\n\n          if (queue[0] === \"get\") {\n            _this._isQueuing = true;\n          }\n        }\n      }\n    });\n\n    _defineProperty(this, \"set\", function (fieldsObject) {\n      if (!fieldsObject) {\n        console.warn(\"`fieldsObject` is required in .set()\");\n        return;\n      }\n\n      if (_typeof(fieldsObject) !== \"object\") {\n        console.warn(\"Expected `fieldsObject` arg to be an Object\");\n        return;\n      }\n\n      if (Object.keys(fieldsObject).length === 0) {\n        console.warn(\"empty `fieldsObject` given to .set()\");\n      }\n\n      _this._gaCommand(\"set\", fieldsObject);\n    });\n\n    _defineProperty(this, \"_gaCommandSendEvent\", function (eventCategory, eventAction, eventLabel, eventValue, fieldsObject) {\n      _this._gtag(\"event\", eventAction, _objectSpread(_objectSpread({\n        event_category: eventCategory,\n        event_label: eventLabel,\n        value: eventValue\n      }, fieldsObject && {\n        non_interaction: fieldsObject.nonInteraction\n      }), _this._toGtagOptions(fieldsObject)));\n    });\n\n    _defineProperty(this, \"_gaCommandSendEventParameters\", function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      if (typeof args[0] === \"string\") {\n        _this._gaCommandSendEvent.apply(_this, _toConsumableArray(args.slice(1)));\n      } else {\n        var _args$ = args[0],\n            eventCategory = _args$.eventCategory,\n            eventAction = _args$.eventAction,\n            eventLabel = _args$.eventLabel,\n            eventValue = _args$.eventValue,\n            hitType = _args$.hitType,\n            rest = _objectWithoutProperties(_args$, _excluded);\n\n        _this._gaCommandSendEvent(eventCategory, eventAction, eventLabel, eventValue, rest);\n      }\n    });\n\n    _defineProperty(this, \"_gaCommandSendTiming\", function (timingCategory, timingVar, timingValue, timingLabel) {\n      _this._gtag(\"event\", \"timing_complete\", {\n        name: timingVar,\n        value: timingValue,\n        event_category: timingCategory,\n        event_label: timingLabel\n      });\n    });\n\n    _defineProperty(this, \"_gaCommandSendPageview\", function (page, fieldsObject) {\n      if (fieldsObject && Object.keys(fieldsObject).length) {\n        var _this$_toGtagOptions = _this._toGtagOptions(fieldsObject),\n            title = _this$_toGtagOptions.title,\n            location = _this$_toGtagOptions.location,\n            rest = _objectWithoutProperties(_this$_toGtagOptions, _excluded2);\n\n        _this._gtag(\"event\", \"page_view\", _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, page && {\n          page_path: page\n        }), title && {\n          page_title: title\n        }), location && {\n          page_location: location\n        }), rest));\n      } else if (page) {\n        _this._gtag(\"event\", \"page_view\", {\n          page_path: page\n        });\n      } else {\n        _this._gtag(\"event\", \"page_view\");\n      }\n    });\n\n    _defineProperty(this, \"_gaCommandSendPageviewParameters\", function () {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      if (typeof args[0] === \"string\") {\n        _this._gaCommandSendPageview.apply(_this, _toConsumableArray(args.slice(1)));\n      } else {\n        var _args$2 = args[0],\n            page = _args$2.page,\n            hitType = _args$2.hitType,\n            rest = _objectWithoutProperties(_args$2, _excluded3);\n\n        _this._gaCommandSendPageview(page, rest);\n      }\n    });\n\n    _defineProperty(this, \"_gaCommandSend\", function () {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      var hitType = typeof args[0] === \"string\" ? args[0] : args[0].hitType;\n\n      switch (hitType) {\n        case \"event\":\n          _this._gaCommandSendEventParameters.apply(_this, args);\n\n          break;\n\n        case \"pageview\":\n          _this._gaCommandSendPageviewParameters.apply(_this, args);\n\n          break;\n\n        case \"timing\":\n          _this._gaCommandSendTiming.apply(_this, _toConsumableArray(args.slice(1)));\n\n          break;\n\n        case \"screenview\":\n        case \"transaction\":\n        case \"item\":\n        case \"social\":\n        case \"exception\":\n          console.warn(\"Unsupported send command: \".concat(hitType));\n          break;\n\n        default:\n          console.warn(\"Send command doesn't exist: \".concat(hitType));\n      }\n    });\n\n    _defineProperty(this, \"_gaCommandSet\", function () {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      if (typeof args[0] === \"string\") {\n        args[0] = _defineProperty({}, args[0], args[1]);\n      }\n\n      _this._gtag(\"set\", _this._toGtagOptions(args[0]));\n    });\n\n    _defineProperty(this, \"_gaCommand\", function (command) {\n      for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n        args[_key6 - 1] = arguments[_key6];\n      }\n\n      switch (command) {\n        case \"send\":\n          _this._gaCommandSend.apply(_this, args);\n\n          break;\n\n        case \"set\":\n          _this._gaCommandSet.apply(_this, args);\n\n          break;\n\n        default:\n          console.warn(\"Command doesn't exist: \".concat(command));\n      }\n    });\n\n    _defineProperty(this, \"ga\", function () {\n      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        args[_key7] = arguments[_key7];\n      }\n\n      if (typeof args[0] === \"string\") {\n        _this._gaCommand.apply(_this, args);\n      } else {\n        var readyCallback = args[0];\n\n        _this._gtag(\"get\", _this._currentMeasurementId, \"client_id\", function (clientId) {\n          _this._isQueuing = false;\n          var queues = _this._queueGtag;\n          readyCallback({\n            get: function get(property) {\n              return property === \"clientId\" ? clientId : property === \"trackingId\" ? _this._currentMeasurementId : property === \"apiVersion\" ? \"1\" : undefined;\n            }\n          });\n\n          while (queues.length) {\n            var queue = queues.shift();\n\n            _this._gtag.apply(_this, _toConsumableArray(queue));\n          }\n        });\n\n        _this._isQueuing = true;\n      }\n\n      return _this.ga;\n    });\n\n    _defineProperty(this, \"event\", function (optionsOrName, params) {\n      if (typeof optionsOrName === \"string\") {\n        _this._gtag(\"event\", optionsOrName, _this._toGtagOptions(params));\n      } else {\n        var action = optionsOrName.action,\n            category = optionsOrName.category,\n            label = optionsOrName.label,\n            value = optionsOrName.value,\n            nonInteraction = optionsOrName.nonInteraction,\n            transport = optionsOrName.transport,\n            rest = _objectWithoutProperties(optionsOrName, _excluded4);\n\n        if (!category || !action) {\n          console.warn(\"args.category AND args.action are required in event()\");\n          return;\n        } // Required Fields\n\n\n        var fieldObject = {\n          hitType: \"event\",\n          eventCategory: (0, _format[\"default\"])(category),\n          eventAction: (0, _format[\"default\"])(action)\n        }; // Optional Fields\n\n        if (label) {\n          fieldObject.eventLabel = (0, _format[\"default\"])(label);\n        }\n\n        if (typeof value !== \"undefined\") {\n          if (typeof value !== \"number\") {\n            console.warn(\"Expected `args.value` arg to be a Number.\");\n          } else {\n            fieldObject.eventValue = value;\n          }\n        }\n\n        if (typeof nonInteraction !== \"undefined\") {\n          if (typeof nonInteraction !== \"boolean\") {\n            console.warn(\"`args.nonInteraction` must be a boolean.\");\n          } else {\n            fieldObject.nonInteraction = nonInteraction;\n          }\n        }\n\n        if (typeof transport !== \"undefined\") {\n          if (typeof transport !== \"string\") {\n            console.warn(\"`args.transport` must be a string.\");\n          } else {\n            if ([\"beacon\", \"xhr\", \"image\"].indexOf(transport) === -1) {\n              console.warn(\"`args.transport` must be either one of these values: `beacon`, `xhr` or `image`\");\n            }\n\n            fieldObject.transport = transport;\n          }\n        }\n\n        Object.keys(rest).filter(function (key) {\n          return key.substr(0, \"dimension\".length) === \"dimension\";\n        }).forEach(function (key) {\n          fieldObject[key] = rest[key];\n        });\n        Object.keys(rest).filter(function (key) {\n          return key.substr(0, \"metric\".length) === \"metric\";\n        }).forEach(function (key) {\n          fieldObject[key] = rest[key];\n        });\n\n        _this._gaCommand(\"send\", fieldObject);\n      }\n    });\n\n    _defineProperty(this, \"send\", function (fieldObject) {\n      _this._gaCommand(\"send\", fieldObject);\n    });\n\n    _defineProperty(this, \"pageview\", function (path, _, title) {\n      var pathTrim = path === null || path === void 0 ? void 0 : path.trim();\n\n      if (pathTrim === \"\") {\n        console.warn(\"path cannot be an empty string in .pageview()\");\n        return;\n      }\n\n      _this._gaCommand(\"send\", \"pageview\", pathTrim, {\n        title: title\n      });\n    });\n\n    this.reset();\n  }\n\n  _createClass(GA4, [{\n    key: \"gtag\",\n    value: function gtag() {\n      this._gtag.apply(this, arguments);\n    }\n  }, {\n    key: \"_appendCustomMap\",\n    value: function _appendCustomMap(options) {\n      var legacyDimensionMetric = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      if (!legacyDimensionMetric) {\n        return options;\n      }\n\n      if (!options.custom_map) {\n        options.custom_map = {};\n      }\n\n      for (var i = 1; i <= 200; i++) {\n        if (!options.custom_map[\"dimension\".concat(i)]) {\n          options.custom_map[\"dimension\".concat(i)] = \"dimension\".concat(i);\n        }\n\n        if (!options.custom_map[\"metric\".concat(i)]) {\n          options.custom_map[\"metric\".concat(i)] = \"metric\".concat(i);\n        }\n      }\n\n      return options;\n    }\n    /**\n     * @since v1.0.2\n     * @param {string} [path=\"location.href\"]\n     * @param {string[]} [_] unsupported\n     * @param {string} [title=\"location.pathname\"]\n     * @deprecated Use `.send(\"pageview\")` instead\n     */\n\n  }, {\n    key: \"outboundLink\",\n    value:\n    /**\n     * @since v1.0.6\n     * @param {Object} options\n     * @param {string} options.label\n     * @param {function} hitCallback\n     * @deprecated Use `enhanced measurement` feature in Google Analytics.\n     */\n    function outboundLink(_ref3, hitCallback) {\n      var label = _ref3.label;\n\n      if (typeof hitCallback !== \"function\") {\n        console.warn(\"hitCallback function is required\");\n        return;\n      }\n\n      if (!label) {\n        console.warn(\"args.label is required in outboundLink()\");\n        return;\n      } // Required Fields\n\n\n      var fieldObject = {\n        hitType: \"event\",\n        eventCategory: \"Outbound\",\n        eventAction: \"Click\",\n        eventLabel: (0, _format[\"default\"])(label)\n      };\n      var safetyCallbackCalled = false;\n\n      var safetyCallback = function safetyCallback() {\n        // This prevents a delayed response from GA\n        // causing hitCallback from being fired twice\n        safetyCallbackCalled = true;\n        hitCallback();\n      }; // Using a timeout to ensure the execution of critical application code\n      // in the case when the GA server might be down\n      // or an ad blocker prevents sending the data\n      // register safety net timeout:\n\n\n      var t = setTimeout(safetyCallback, 250);\n\n      var clearableCallbackForGA = function clearableCallbackForGA() {\n        clearTimeout(t);\n\n        if (!safetyCallbackCalled) {\n          hitCallback();\n        }\n      };\n\n      fieldObject.hitCallback = clearableCallbackForGA;\n\n      this._gaCommand(\"send\", fieldObject);\n    }\n  }]);\n\n  return GA4;\n}();\n\nexports.GA4 = GA4;\n\nvar _default = new GA4();\n\nexports[\"default\"] = _default;","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.ReactGAImplementation = void 0;\n\nvar _ga = _interopRequireWildcard(require(\"./ga4\"));\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ReactGAImplementation = _ga.GA4;\nexports.ReactGAImplementation = ReactGAImplementation;\nvar _default = _ga[\"default\"];\nexports[\"default\"] = _default;","import { getCookie, setCookie } from 'pmt-modules/storage'\r\n\r\nexport const CONSENT_KEY = 'cookie-consent'\r\n\r\nexport const ConsentChoice = {\r\n  ACCEPTED: 'accepted',\r\n  DENIED: 'denied',\r\n}\r\n\r\nconst SIX_MONTHS_MS = 6 * 30 * 24 * 60 * 60 * 1000 // ~6 mois\r\n\r\n// null if unknown or expired. In this case, the behaviour should be as if the user denied the non-essential cookies + display the banner\r\n// we use an (essential) cookie so it's shared between web customer & order plugin\r\nexport const getConsent = () => {\r\n  return getCookie(CONSENT_KEY)\r\n}\r\n\r\nexport const setConsent = choice => {\r\n  if (choice) {\r\n    setCookie(CONSENT_KEY, choice, SIX_MONTHS_MS)\r\n  }\r\n}\r\n","export const cleanUrls = url => {\r\n  // clean urls to know how many people visit each of these pages\r\n  url = url.replace(/users\\/[0-9]+/g, 'users') // replace users/123123 -> users\r\n  url = url.replace(/users\\/me/g, 'users') // replace users/me -> users\r\n  url = url.replace(/check\\/[0-9]+/g, 'check') // replace check/123123 -> check\r\n\r\n  return url\r\n}\r\n","// https://github.com/react-ga/react-ga - previous version for Universal Analytics\r\n//import ReactGA from 'react-ga'\r\n// https://www.npmjs.com/package/react-ga4 - new version for Google Analytics 4\r\nimport ReactGA from 'react-ga4'\r\nimport invariant from 'invariant'\r\nimport concat from 'lodash/concat'\r\nimport forEach from 'lodash/forEach'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getConsent, ConsentChoice } from 'pmt-modules/cookieConsent'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getFrontSessionId } from 'pmt-modules/frontSession'\r\n\r\nimport { getAnalyticsConfig, registerAnalyticsConfig } from './config'\r\nimport { cleanUrls } from './utils'\r\n\r\n/**\r\n * Config is made in [project]/src/config/analytics.js\r\n * It will be merged with api consumer settings if set\r\n * config: {\r\n *   waitForAppConfig: true,\r\n *   identifiers: [\r\n *     {\r\n *       trackingId: 'UA-XXXX-XX',\r\n *       debug: true,\r\n *       gaOptions: {\r\n *         cookieDomain: 'auto',\r\n *         name: '...',\r\n *       },\r\n *     },\r\n *   ],\r\n * }\r\n *\r\n * - waitForAppConfig, default: true. Set to false for the fronts that do not load the app config\r\n *  (e.g: backoffice)\r\n */\r\n\r\nexport * from './config'\r\n\r\nlet _isInitialized = false\r\n\r\nconst hasConsented = () => {\r\n  return getConsent() === ConsentChoice.ACCEPTED\r\n}\r\n\r\n// deprecated - was for react-ga, not useful for react-ga4 who handle multiple trackers\r\nconst getTrackersNames = () =>\r\n  getAnalyticsConfig().identifiers.map(identifier => {\r\n    invariant(!isNil(identifier.gaOptions), 'no identifier gaOptions found')\r\n    return identifier.gaOptions.name\r\n  })\r\n\r\n// deprecated - was for UA, not tested with GA4\r\nexport const pluginRequire = name => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  forEach(getTrackersNames(), trackerName => {\r\n    ReactGA.ga(`${trackerName}.require`, name)\r\n  })\r\n}\r\n// deprecated - was for UA, but the object ReactGA.plugin doesn't seem to exist with GA4\r\n// the only plugin we used was 'ec' (ecommerce) but it seems integrated in GA4 (no plugin needed)\r\nexport const pluginExecute = (pluginName, action, ...args) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  forEach(getTrackersNames(), trackerName => {\r\n    ReactGA.plugin && ReactGA.plugin.execute(`${trackerName}.${pluginName}`, action, ...args)\r\n  })\r\n}\r\n\r\n// for UA\r\nconst sendCheckoutProgress = stepNumber => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.event('checkout_progress', { checkout_step: stepNumber })\r\n}\r\n\r\n// for UA\r\nconst sendCheckoutOption = (stepNumber, optionName, optionValue) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.event('set_checkout_option', {\r\n    checkout_step: stepNumber,\r\n    checkout_option: optionName,\r\n    value: optionValue,\r\n  })\r\n}\r\n\r\nexport const sendViewItem = formattedItem => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // UA and GA4\r\n  ReactGA.event('view_item', { items: [formattedItem] })\r\n}\r\n\r\nexport const sendAddToCart = formattedItem => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // UA and GA4\r\n  ReactGA.event('add_to_cart', { items: [formattedItem] })\r\n}\r\n\r\nexport const sendRemoveFromCart = formattedItem => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // UA and GA4\r\n  ReactGA.event('remove_from_cart', { items: [formattedItem] })\r\n}\r\n\r\nexport const sendViewCart = (formattedItems, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('view_cart', { items: formattedItems })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendCartSubmitted = (formattedItems, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('begin_checkout', { items: formattedItems })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendLogin = stepNumber => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('login')\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendAddDeliveryInfo = (formattedItems, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('add_shipping_info', { items: formattedItems })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendAddPaymentInfo = (formattedItems, paymentMode, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4\r\n  ReactGA.event('add_payment_info', {\r\n    payment_type: paymentMode,\r\n    items: formattedItems,\r\n  })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutOption(stepNumber, 'payment_type', paymentMode)\r\n  }\r\n}\r\n\r\nexport const sendPaymentSucceeded = (formattedItems, transactionId, monetaryValue, currency) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.event('purchase', {\r\n    items: formattedItems,\r\n    transaction_id: transactionId,\r\n    value: monetaryValue,\r\n    currency: currency,\r\n  })\r\n}\r\n\r\nexport const sendPaymentSubmitted = (formattedItems, stepNumber) => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  // for GA4 - custom event\r\n  ReactGA.event('payment_submitted', { items: formattedItems })\r\n  // for UA\r\n  if (stepNumber) {\r\n    sendCheckoutProgress(stepNumber)\r\n  }\r\n}\r\n\r\nexport const sendEvent = event => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.event(event)\r\n}\r\n\r\nexport const sendPageView = page => {\r\n  if (!hasConsented()) {\r\n    return\r\n  }\r\n  ReactGA.ga(`set`, 'frontSessionId', getFrontSessionId())\r\n  ReactGA.ga(`set`, 'location', window.location.href)\r\n  ReactGA.ga(`set`, 'page', cleanUrls(page))\r\n  ReactGA.send({ hitType: 'pageview', page: cleanUrls(page) })\r\n}\r\n\r\nconst handleInit = (config, override) => {\r\n  if (override && override.identifiers) {\r\n    config.identifiers = concat(config.identifiers, override.identifiers)\r\n  }\r\n\r\n  registerAnalyticsConfig(config)\r\n\r\n  // Only initialize GA if user has accepted\r\n  const consent = getConsent()\r\n  if (consent === ConsentChoice.ACCEPTED) {\r\n    ReactGA.initialize(config.identifiers, config.options)\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_ANALYTICS_INIT)\r\n\r\n    // set the first page just after init\r\n    sendPageView(window.location.pathname)\r\n\r\n    _isInitialized = true\r\n\r\n    ReactGA.ga(`set`, 'frontSessionId', getFrontSessionId())\r\n  }\r\n}\r\n\r\n// https://developers.google.com/tag-platform/security/guides/consent?consentmode=basic\r\nconst indicateDefaultConsentForGA = () => {\r\n  window.dataLayer = window.dataLayer || []\r\n  window.gtag =\r\n    window.gtag ||\r\n    function() {\r\n      window.dataLayer.push(arguments)\r\n    }\r\n\r\n  window.gtag('consent', 'default', {\r\n    ad_user_data: 'denied',\r\n    ad_personalization: 'denied',\r\n    ad_storage: 'denied',\r\n    analytics_storage: 'denied',\r\n    wait_for_update: 500,\r\n  })\r\n}\r\n\r\nexport const indicateConsentForGA = consentChoice => {\r\n  if (!consentChoice) {\r\n    return // should not happen (should be handled by indicateDefaultConsentForGA)\r\n  }\r\n\r\n  window.dataLayer = window.dataLayer || []\r\n  window.gtag =\r\n    window.gtag ||\r\n    function() {\r\n      window.dataLayer.push(arguments)\r\n    }\r\n\r\n  const ga4ConsentValue = consentChoice === ConsentChoice.ACCEPTED ? 'granted' : 'denied'\r\n\r\n  window.gtag('consent', 'update', {\r\n    // the ad_* (relative to Google Ads feature) should stay with the default value (denied)\r\n    analytics_storage: ga4ConsentValue,\r\n  })\r\n\r\n  if (consentChoice === ConsentChoice.DENIED) {\r\n    // removing existing GA cookies\r\n    deleteExistingGACookies()\r\n  }\r\n}\r\n\r\nfunction getRootDomain(hostname) {\r\n  const parts = hostname.split('.')\r\n  if (parts.length > 2) {\r\n    // \".paymytable.com\"\r\n    return '.' + parts.slice(-2).join('.')\r\n  }\r\n  return '.' + hostname\r\n}\r\n\r\nconst deleteExistingGACookies = () => {\r\n  const gaCookies = ['_ga', '_gid', '_gcl_au']\r\n\r\n  // Get all cookies\r\n  const cookies = document.cookie.split(';')\r\n\r\n  cookies.forEach(cookie => {\r\n    const cookieName = cookie.split('=')[0].trim()\r\n\r\n    if (\r\n      gaCookies.includes(cookieName) ||\r\n      // '_ga_<container-id>' if you use multiple trackers\r\n      cookieName.startsWith('_ga_')\r\n    ) {\r\n      // Delete cookie for current domain\r\n      document.cookie = `${cookieName}=; Max-Age=0; path=/; domain=${window.location.hostname}`\r\n      // Delete cookie for root domain (Google Analytics is likely to have set the cookie for .paymytable.com)\r\n      document.cookie = `${cookieName}=; Max-Age=0; path=/; domain=${getRootDomain(\r\n        window.location.hostname\r\n      )}`\r\n      // Delete cookie without specifying domain (some cookies may be set without domain)\r\n      document.cookie = `${cookieName}=; Max-Age=0; path=/`\r\n    }\r\n  })\r\n}\r\n\r\n// initialize Google Analytics (but only if non-essential cookies have been accepted)\r\nexport const initializeAnalytics = (appOptions, appConfig = null) => {\r\n  // Only initialize GA if user has accepted\r\n  const consent = getConsent()\r\n  if (!consent) {\r\n    indicateDefaultConsentForGA()\r\n  }\r\n  if (consent !== ConsentChoice.ACCEPTED) {\r\n    return\r\n  }\r\n\r\n  const config = appOptions.analytics\r\n\r\n  invariant(!isNil(config), 'no analytics config found')\r\n  invariant(!isNil(config.identifiers), 'no identifiers found on analytics config')\r\n\r\n  // some fronts does not retrieve the app config (e.g: backoffice). We use this config to init\r\n  // the analytics config directly.\r\n  if (config.waitForAppConfig === false) {\r\n    handleInit(config, null)\r\n  } else {\r\n    // we need the appConfig\r\n\r\n    // we already have it => do the initialization immediately\r\n    if (appConfig) {\r\n      handleInit(config, appConfig.front.analytics)\r\n    } else {\r\n      // add a listener to do the initialization once we received the appConfig\r\n      EventManager.addListener(EventManager.Events.ON_GET_APP_CONFIG_SUCCESS, ({ data }) => {\r\n        data.appConfig.front.analytics\r\n          ? handleInit(config, data.appConfig.front.analytics)\r\n          : handleInit(config, null)\r\n      })\r\n    }\r\n  }\r\n\r\n  EventManager.addListener(EventManager.Events.ON_HISTORY_CHANGE, ({ data }) => {\r\n    // the ON_HISTORY_CHANGE event is send before we initializeAnalytics (ON_GET_APP_CONFIG_SUCCESS\r\n    // event)\r\n    if (!_isInitialized) {\r\n      console.warn('History change event ignored, analytics not initialized')\r\n      return\r\n    }\r\n\r\n    sendPageView(data.location.pathname)\r\n  })\r\n}\r\n","export var KEY_PREFIX = 'persist:';\nexport var FLUSH = 'persist/FLUSH';\nexport var REHYDRATE = 'persist/REHYDRATE';\nexport var PAUSE = 'persist/PAUSE';\nexport var PERSIST = 'persist/PERSIST';\nexport var PURGE = 'persist/PURGE';\nexport var REGISTER = 'persist/REGISTER';\nexport var DEFAULT_VERSION = -1;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexport default function autoMergeLevel1(inboundState, originalState, reducedState, _ref) {\n  var debug = _ref.debug;\n\n  var newState = _extends({}, reducedState);\n  // only rehydrate if inboundState exists and is an object\n  if (inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') {\n    Object.keys(inboundState).forEach(function (key) {\n      // ignore _persist data\n      if (key === '_persist') return;\n      // if reducer modifies substate, skip auto rehydration\n      if (originalState[key] !== reducedState[key]) {\n        if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist/stateReconciler: sub state for key `%s` modified, skipping.', key);\n        return;\n      }\n      // otherwise hard set the new value\n      newState[key] = inboundState[key];\n    });\n  }\n\n  if (process.env.NODE_ENV !== 'production' && debug && inboundState && (typeof inboundState === 'undefined' ? 'undefined' : _typeof(inboundState)) === 'object') console.log('redux-persist/stateReconciler: rehydrated keys \\'' + Object.keys(inboundState).join(', ') + '\\'');\n\n  return newState;\n}\n\n/*\n  autoMergeLevel1: \n    - merges 1 level of substate\n    - skips substate if already modified\n*/","import { KEY_PREFIX, REHYDRATE } from './constants';\n\n// @TODO remove once flow < 0.63 support is no longer required.\n\nexport default function createPersistoid(config) {\n  // defaults\n  var blacklist = config.blacklist || null;\n  var whitelist = config.whitelist || null;\n  var transforms = config.transforms || [];\n  var throttle = config.throttle || 0;\n  var storageKey = '' + (config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX) + config.key;\n  var storage = config.storage;\n  var serialize = config.serialize === false ? function (x) {\n    return x;\n  } : defaultSerialize;\n\n  // initialize stateful values\n  var lastState = {};\n  var stagedState = {};\n  var keysToProcess = [];\n  var timeIterator = null;\n  var writePromise = null;\n\n  var update = function update(state) {\n    // add any changed keys to the queue\n    Object.keys(state).forEach(function (key) {\n      if (!passWhitelistBlacklist(key)) return; // is keyspace ignored? noop\n      if (lastState[key] === state[key]) return; // value unchanged? noop\n      if (keysToProcess.indexOf(key) !== -1) return; // is key already queued? noop\n      keysToProcess.push(key); // add key to queue\n    });\n\n    //if any key is missing in the new state which was present in the lastState,\n    //add it for processing too\n    Object.keys(lastState).forEach(function (key) {\n      if (state[key] === undefined) {\n        keysToProcess.push(key);\n      }\n    });\n\n    // start the time iterator if not running (read: throttle)\n    if (timeIterator === null) {\n      timeIterator = setInterval(processNextKey, throttle);\n    }\n\n    lastState = state;\n  };\n\n  function processNextKey() {\n    if (keysToProcess.length === 0) {\n      if (timeIterator) clearInterval(timeIterator);\n      timeIterator = null;\n      return;\n    }\n\n    var key = keysToProcess.shift();\n    var endState = transforms.reduce(function (subState, transformer) {\n      return transformer.in(subState, key, lastState);\n    }, lastState[key]);\n\n    if (endState !== undefined) {\n      try {\n        stagedState[key] = serialize(endState);\n      } catch (err) {\n        console.error('redux-persist/createPersistoid: error serializing state', err);\n      }\n    } else {\n      //if the endState is undefined, no need to persist the existing serialized content\n      delete stagedState[key];\n    }\n\n    if (keysToProcess.length === 0) {\n      writeStagedState();\n    }\n  }\n\n  function writeStagedState() {\n    // cleanup any removed keys just before write.\n    Object.keys(stagedState).forEach(function (key) {\n      if (lastState[key] === undefined) {\n        delete stagedState[key];\n      }\n    });\n\n    writePromise = storage.setItem(storageKey, serialize(stagedState)).catch(onWriteFail);\n  }\n\n  function passWhitelistBlacklist(key) {\n    if (whitelist && whitelist.indexOf(key) === -1 && key !== '_persist') return false;\n    if (blacklist && blacklist.indexOf(key) !== -1) return false;\n    return true;\n  }\n\n  function onWriteFail(err) {\n    // @TODO add fail handlers (typically storage full)\n    if (err && process.env.NODE_ENV !== 'production') {\n      console.error('Error storing data', err);\n    }\n  }\n\n  var flush = function flush() {\n    while (keysToProcess.length !== 0) {\n      processNextKey();\n    }\n    return writePromise || Promise.resolve();\n  };\n\n  // return `persistoid`\n  return {\n    update: update,\n    flush: flush\n  };\n}\n\n// @NOTE in the future this may be exposed via config\nfunction defaultSerialize(data) {\n  return JSON.stringify(data);\n}","\n\nimport { KEY_PREFIX } from './constants';\n\nexport default function getStoredState(config) {\n  var transforms = config.transforms || [];\n  var storageKey = '' + (config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX) + config.key;\n  var storage = config.storage;\n  var debug = config.debug;\n  var deserialize = config.serialize === false ? function (x) {\n    return x;\n  } : defaultDeserialize;\n  return storage.getItem(storageKey).then(function (serialized) {\n    if (!serialized) return undefined;else {\n      try {\n        var state = {};\n        var rawState = deserialize(serialized);\n        Object.keys(rawState).forEach(function (key) {\n          state[key] = transforms.reduceRight(function (subState, transformer) {\n            return transformer.out(subState, key, rawState);\n          }, deserialize(rawState[key]));\n        });\n        return state;\n      } catch (err) {\n        if (process.env.NODE_ENV !== 'production' && debug) console.log('redux-persist/getStoredState: Error restoring data ' + serialized, err);\n        throw err;\n      }\n    }\n  });\n}\n\nfunction defaultDeserialize(serial) {\n  return JSON.parse(serial);\n}","\n\nimport { KEY_PREFIX } from './constants';\n\nexport default function purgeStoredState(config) {\n  var storage = config.storage;\n  var storageKey = '' + (config.keyPrefix !== undefined ? config.keyPrefix : KEY_PREFIX) + config.key;\n  return storage.removeItem(storageKey, warnIfRemoveError);\n}\n\nfunction warnIfRemoveError(err) {\n  if (err && process.env.NODE_ENV !== 'production') {\n    console.error('redux-persist/purgeStoredState: Error purging data stored state', err);\n  }\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nimport { FLUSH, PAUSE, PERSIST, PURGE, REHYDRATE, DEFAULT_VERSION } from './constants';\n\nimport autoMergeLevel1 from './stateReconciler/autoMergeLevel1';\nimport createPersistoid from './createPersistoid';\nimport defaultGetStoredState from './getStoredState';\nimport purgeStoredState from './purgeStoredState';\n\nvar DEFAULT_TIMEOUT = 5000;\n/*\n  @TODO add validation / handling for:\n  - persisting a reducer which has nested _persist\n  - handling actions that fire before reydrate is called\n*/\nexport default function persistReducer(config, baseReducer) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (!config) throw new Error('config is required for persistReducer');\n    if (!config.key) throw new Error('key is required in persistor config');\n    if (!config.storage) throw new Error(\"redux-persist: config.storage is required. Try using one of the provided storage engines `import storage from 'redux-persist/lib/storage'`\");\n  }\n\n  var version = config.version !== undefined ? config.version : DEFAULT_VERSION;\n  var debug = config.debug || false;\n  var stateReconciler = config.stateReconciler === undefined ? autoMergeLevel1 : config.stateReconciler;\n  var getStoredState = config.getStoredState || defaultGetStoredState;\n  var timeout = config.timeout !== undefined ? config.timeout : DEFAULT_TIMEOUT;\n  var _persistoid = null;\n  var _purge = false;\n  var _paused = true;\n  var conditionalUpdate = function conditionalUpdate(state) {\n    // update the persistoid only if we are rehydrated and not paused\n    state._persist.rehydrated && _persistoid && !_paused && _persistoid.update(state);\n    return state;\n  };\n\n  return function (state, action) {\n    var _ref = state || {},\n        _persist = _ref._persist,\n        rest = _objectWithoutProperties(_ref, ['_persist']);\n\n    var restState = rest;\n\n    if (action.type === PERSIST) {\n      var _sealed = false;\n      var _rehydrate = function _rehydrate(payload, err) {\n        // dev warning if we are already sealed\n        if (process.env.NODE_ENV !== 'production' && _sealed) console.error('redux-persist: rehydrate for \"' + config.key + '\" called after timeout.', payload, err);\n\n        // only rehydrate if we are not already sealed\n        if (!_sealed) {\n          action.rehydrate(config.key, payload, err);\n          _sealed = true;\n        }\n      };\n      timeout && setTimeout(function () {\n        !_sealed && _rehydrate(undefined, new Error('redux-persist: persist timed out for persist key \"' + config.key + '\"'));\n      }, timeout);\n\n      // @NOTE PERSIST resumes if paused.\n      _paused = false;\n\n      // @NOTE only ever create persistoid once, ensure we call it at least once, even if _persist has already been set\n      if (!_persistoid) _persistoid = createPersistoid(config);\n\n      // @NOTE PERSIST can be called multiple times, noop after the first\n      if (_persist) return state;\n      if (typeof action.rehydrate !== 'function' || typeof action.register !== 'function') throw new Error('redux-persist: either rehydrate or register is not a function on the PERSIST action. This can happen if the action is being replayed. This is an unexplored use case, please open an issue and we will figure out a resolution.');\n\n      action.register(config.key);\n\n      getStoredState(config).then(function (restoredState) {\n        var migrate = config.migrate || function (s, v) {\n          return Promise.resolve(s);\n        };\n        migrate(restoredState, version).then(function (migratedState) {\n          _rehydrate(migratedState);\n        }, function (migrateErr) {\n          if (process.env.NODE_ENV !== 'production' && migrateErr) console.error('redux-persist: migration error', migrateErr);\n          _rehydrate(undefined, migrateErr);\n        });\n      }, function (err) {\n        _rehydrate(undefined, err);\n      });\n\n      return _extends({}, baseReducer(restState, action), {\n        _persist: { version: version, rehydrated: false }\n      });\n    } else if (action.type === PURGE) {\n      _purge = true;\n      action.result(purgeStoredState(config));\n      return _extends({}, baseReducer(restState, action), {\n        _persist: _persist\n      });\n    } else if (action.type === FLUSH) {\n      action.result(_persistoid && _persistoid.flush());\n      return _extends({}, baseReducer(restState, action), {\n        _persist: _persist\n      });\n    } else if (action.type === PAUSE) {\n      _paused = true;\n    } else if (action.type === REHYDRATE) {\n      // noop on restState if purging\n      if (_purge) return _extends({}, restState, {\n        _persist: _extends({}, _persist, { rehydrated: true })\n\n        // @NOTE if key does not match, will continue to default else below\n      });if (action.key === config.key) {\n        var reducedState = baseReducer(restState, action);\n        var inboundState = action.payload;\n        // only reconcile state if stateReconciler and inboundState are both defined\n        var reconciledRest = stateReconciler !== false && inboundState !== undefined ? stateReconciler(inboundState, state, reducedState, config) : reducedState;\n\n        var _newState = _extends({}, reconciledRest, {\n          _persist: _extends({}, _persist, { rehydrated: true })\n        });\n        return conditionalUpdate(_newState);\n      }\n    }\n\n    // if we have not already handled PERSIST, straight passthrough\n    if (!_persist) return baseReducer(state, action);\n\n    // run base reducer:\n    // is state modified ? return original : return updated\n    var newState = baseReducer(restState, action);\n    if (newState === restState) return state;else {\n      newState._persist = _persist;\n      return conditionalUpdate(newState);\n    }\n  };\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nimport { createStore } from 'redux';\n\nimport persistReducer from './persistReducer';\nimport { FLUSH, PAUSE, PERSIST, PURGE, REGISTER, REHYDRATE } from './constants';\n\nvar initialState = {\n  registry: [],\n  bootstrapped: false\n};\n\nvar persistorReducer = function persistorReducer() {\n  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n  var action = arguments[1];\n\n  switch (action.type) {\n    case REGISTER:\n      return _extends({}, state, { registry: [].concat(_toConsumableArray(state.registry), [action.key]) });\n    case REHYDRATE:\n      var firstIndex = state.registry.indexOf(action.key);\n      var registry = [].concat(_toConsumableArray(state.registry));\n      registry.splice(firstIndex, 1);\n      return _extends({}, state, { registry: registry, bootstrapped: registry.length === 0 });\n    default:\n      return state;\n  }\n};\n\nexport default function persistStore(store, options, cb) {\n  // help catch incorrect usage of passing PersistConfig in as PersistorOptions\n  if (process.env.NODE_ENV !== 'production') {\n    var optionsToTest = options || {};\n    var bannedKeys = ['blacklist', 'whitelist', 'transforms', 'storage', 'keyPrefix', 'migrate'];\n    bannedKeys.forEach(function (k) {\n      if (!!optionsToTest[k]) console.error('redux-persist: invalid option passed to persistStore: \"' + k + '\". You may be incorrectly passing persistConfig into persistStore, whereas it should be passed into persistReducer.');\n    });\n  }\n  var boostrappedCb = cb || false;\n\n  var _pStore = createStore(persistorReducer, initialState, options ? options.enhancer : undefined);\n  var register = function register(key) {\n    _pStore.dispatch({\n      type: REGISTER,\n      key: key\n    });\n  };\n\n  var rehydrate = function rehydrate(key, payload, err) {\n    var rehydrateAction = {\n      type: REHYDRATE,\n      payload: payload,\n      err: err,\n      key: key\n      // dispatch to `store` to rehydrate and `persistor` to track result\n    };store.dispatch(rehydrateAction);\n    _pStore.dispatch(rehydrateAction);\n    if (boostrappedCb && persistor.getState().bootstrapped) {\n      boostrappedCb();\n      boostrappedCb = false;\n    }\n  };\n\n  var persistor = _extends({}, _pStore, {\n    purge: function purge() {\n      var results = [];\n      store.dispatch({\n        type: PURGE,\n        result: function result(purgeResult) {\n          results.push(purgeResult);\n        }\n      });\n      return Promise.all(results);\n    },\n    flush: function flush() {\n      var results = [];\n      store.dispatch({\n        type: FLUSH,\n        result: function result(flushResult) {\n          results.push(flushResult);\n        }\n      });\n      return Promise.all(results);\n    },\n    pause: function pause() {\n      store.dispatch({\n        type: PAUSE\n      });\n    },\n    persist: function persist() {\n      store.dispatch({ type: PERSIST, register: register, rehydrate: rehydrate });\n    }\n  });\n\n  persistor.persist();\n\n  return persistor;\n}","\n\nexport default function createTransform(\n// @NOTE inbound: transform state coming from redux on its way to being serialized and stored\ninbound,\n// @NOTE outbound: transform state coming from storage, on its way to be rehydrated into redux\noutbound) {\n  var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  var whitelist = config.whitelist || null;\n  var blacklist = config.blacklist || null;\n\n  function whitelistBlacklistCheck(key) {\n    if (whitelist && whitelist.indexOf(key) === -1) return true;\n    if (blacklist && blacklist.indexOf(key) !== -1) return true;\n    return false;\n  }\n\n  return {\n    in: function _in(state, key, fullState) {\n      return !whitelistBlacklistCheck(key) && inbound ? inbound(state, key, fullState) : state;\n    },\n    out: function out(state, key, fullState) {\n      return !whitelistBlacklistCheck(key) && outbound ? outbound(state, key, fullState) : state;\n    }\n  };\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = getStorage;\n\n\nfunction noop() {}\n\nvar noopStorage = {\n  getItem: noop,\n  setItem: noop,\n  removeItem: noop\n};\n\nfunction hasStorage(storageType) {\n  if ((typeof self === 'undefined' ? 'undefined' : _typeof(self)) !== 'object' || !(storageType in self)) {\n    return false;\n  }\n\n  try {\n    var storage = self[storageType];\n    var testKey = 'redux-persist ' + storageType + ' test';\n    storage.setItem(testKey, 'test');\n    storage.getItem(testKey);\n    storage.removeItem(testKey);\n  } catch (e) {\n    if (process.env.NODE_ENV !== 'production') console.warn('redux-persist ' + storageType + ' test failed, persistence will be disabled.');\n    return false;\n  }\n  return true;\n}\n\nfunction getStorage(type) {\n  var storageType = type + 'Storage';\n  if (hasStorage(storageType)) return self[storageType];else {\n    if (process.env.NODE_ENV !== 'production') {\n      console.error('redux-persist failed to create sync storage. falling back to memory storage.');\n    }\n    return noopStorage;\n  }\n}","'use strict';\n\nexports.__esModule = true;\nexports.default = createWebStorage;\n\nvar _getStorage = require('./getStorage');\n\nvar _getStorage2 = _interopRequireDefault(_getStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createWebStorage(type) {\n  var storage = (0, _getStorage2.default)(type);\n  return {\n    getItem: function getItem(key) {\n      return new Promise(function (resolve, reject) {\n        resolve(storage.getItem(key));\n      });\n    },\n    setItem: function setItem(key, item) {\n      return new Promise(function (resolve, reject) {\n        resolve(storage.setItem(key, item));\n      });\n    },\n    removeItem: function removeItem(key) {\n      return new Promise(function (resolve, reject) {\n        resolve(storage.removeItem(key));\n      });\n    }\n  };\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _createWebStorage = require('./createWebStorage');\n\nvar _createWebStorage2 = _interopRequireDefault(_createWebStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _createWebStorage2.default)('local');","\"use strict\";\n\nexports.__esModule = true;\nexports.default = hardSet;\n\n\n/*\n  hardSet: \n    - hard set incoming state\n*/\n\nfunction hardSet(inboundState) {\n  return inboundState;\n}","module.exports = pathGetter;\n\nfunction pathGetter(obj, path) {\n  if (path !== '$') {\n    var paths = getPaths(path);\n    for (var i = 0; i < paths.length; i++) {\n      path = paths[i].toString().replace(/\\\\\"/g, '\"');\n      if (typeof obj[path] === 'undefined' && i !== paths.length - 1) continue;\n      obj = obj[path];\n    }\n  }\n  return obj;\n}\n\nfunction getPaths(pathString) {\n  var regex = /(?:\\.(\\w+))|(?:\\[(\\d+)\\])|(?:\\[\"((?:[^\\\\\"]|\\\\.)*)\"\\])/g;\n  var matches = [];\n  var match;\n  while (match = regex.exec(pathString)) {\n    matches.push( match[1] || match[2] || match[3] );\n  }\n  return matches;\n}\n","var pathGetter = require('./path-getter');\nvar jsan = require('./');\n\nexports.getRegexFlags = function getRegexFlags(regex) {\n  var flags = '';\n  if (regex.ignoreCase) flags += 'i';\n  if (regex.global) flags += 'g';\n  if (regex.multiline) flags += 'm';\n  return flags;\n};\n\nexports.stringifyFunction = function stringifyFunction(fn, customToString) {\n  if (typeof customToString === 'function') {\n    return customToString(fn);\n  }\n  var str = fn.toString();\n  var match = str.match(/^[^{]*{|^[^=]*=>/);\n  var start = match ? match[0] : '<function> ';\n  var end = str[str.length - 1] === '}' ? '}' : '';\n  return start.replace(/\\r\\n|\\n/g, ' ').replace(/\\s+/g, ' ') + ' /* ... */ ' + end;\n};\n\nexports.restore = function restore(obj, root) {\n  var type = obj[0];\n  var rest = obj.slice(1);\n  switch(type) {\n    case '$':\n      return pathGetter(root, obj);\n    case 'r':\n      var comma = rest.indexOf(',');\n      var flags = rest.slice(0, comma);\n      var source = rest.slice(comma + 1);\n      return RegExp(source, flags);\n    case 'd':\n      return new Date(+rest);\n    case 'f':\n      var fn = function() { throw new Error(\"can't run jsan parsed function\") };\n      fn.toString = function() { return rest; };\n      return fn;\n    case 'u':\n      return undefined;\n    case 'e':\n      var error = new Error(rest);\n      error.stack = 'Stack is unavailable for jsan parsed errors';\n      return error;\n    case 's':\n      return Symbol(rest);\n    case 'g':\n      return Symbol.for(rest);\n    case 'm':\n      return new Map(jsan.parse(rest));\n    case 'l':\n      return new Set(jsan.parse(rest));\n    case 'n':\n      return NaN;\n    case 'i':\n      return Infinity;\n    case 'y':\n      return -Infinity;\n    default:\n      console.warn('unknown type', obj);\n      return obj;\n  }\n}\n","var pathGetter = require('./path-getter');\nvar utils = require('./utils');\n\nvar WMap = typeof WeakMap !== 'undefined'?\n  WeakMap:\n  function() {\n    var keys = [];\n    var values = [];\n    return {\n      set: function(key, value) {\n        keys.push(key);\n        values.push(value);\n      },\n      get: function(key) {\n        for (var i = 0; i < keys.length; i++) {\n          if (keys[i] === key) {\n            return values[i];\n          }\n        }\n      }\n    }\n  };\n\n// Based on https://github.com/douglascrockford/JSON-js/blob/master/cycle.js\n\nexports.decycle = function decycle(object, options, replacer, map) {\n  'use strict';\n\n  map = map || new WMap();\n\n  var noCircularOption = !Object.prototype.hasOwnProperty.call(options, 'circular');\n  var withRefs = options.refs !== false;\n\n  return (function derez(_value, path, key) {\n\n    // The derez recurses through the object, producing the deep copy.\n\n    var i,        // The loop counter\n      name,       // Property name\n      nu;         // The new object or array\n\n    // typeof null === 'object', so go on if this value is really an object but not\n    // one of the weird builtin objects.\n\n    var value = typeof replacer === 'function' ? replacer(key || '', _value) : _value;\n\n    if (options.date && value instanceof Date) {\n      return {$jsan: 'd' + value.getTime()};\n    }\n    if (options.regex && value instanceof RegExp) {\n      return {$jsan: 'r' + utils.getRegexFlags(value) + ',' + value.source};\n    }\n    if (options['function'] && typeof value === 'function') {\n      return {$jsan: 'f' + utils.stringifyFunction(value, options['function'])}\n    }\n    if (options['nan'] && typeof value === 'number' && isNaN(value)) {\n      return {$jsan: 'n'}\n    }\n    if (options['infinity']) {\n      if (Number.POSITIVE_INFINITY === value) return {$jsan: 'i'}\n      if (Number.NEGATIVE_INFINITY === value) return {$jsan: 'y'}\n    }\n    if (options['undefined'] && value === undefined) {\n      return {$jsan: 'u'}\n    }\n    if (options['error'] && value instanceof Error) {\n      return {$jsan: 'e' + value.message}\n    }\n    if (options['symbol'] && typeof value === 'symbol') {\n      var symbolKey = Symbol.keyFor(value)\n      if (symbolKey !== undefined) {\n        return {$jsan: 'g' + symbolKey}\n      }\n\n      // 'Symbol(foo)'.slice(7, -1) === 'foo'\n      return {$jsan: 's' + value.toString().slice(7, -1)}\n    }\n\n    if (options['map'] && typeof Map === 'function' && value instanceof Map && typeof Array.from === 'function') {\n      return {$jsan: 'm' + JSON.stringify(decycle(Array.from(value), options, replacer, map))}\n    }\n\n    if (options['set'] && typeof Set === 'function' && value instanceof Set && typeof Array.from === 'function') {\n      return {$jsan: 'l' + JSON.stringify(decycle(Array.from(value), options, replacer, map))}\n    }\n\n    if (value && typeof value.toJSON === 'function') {\n      try {\n        value = value.toJSON(key);\n      } catch (error) {\n        var keyString = (key || '$');\n        return \"toJSON failed for '\" + (map.get(value) || keyString) + \"'\";\n      }\n    }\n\n    if (typeof value === 'object' && value !== null &&\n      !(value instanceof Boolean) &&\n      !(value instanceof Date)    &&\n      !(value instanceof Number)  &&\n      !(value instanceof RegExp)  &&\n      !(value instanceof String)  &&\n      !(typeof value === 'symbol')  &&\n      !(value instanceof Error)) {\n\n        // If the value is an object or array, look to see if we have already\n        // encountered it. If so, return a $ref/path object.\n\n      if (typeof value === 'object') {\n        var foundPath = map.get(value);\n        if (foundPath) {\n          if (noCircularOption && withRefs) {\n            return {$jsan: foundPath};\n          }\n          \n          // This is only a true circular reference if the parent path is inside of foundPath\n          // drop the last component of the current path and check if it starts with foundPath\n          var parentPath = path.split('.').slice(0, -1).join('.');\n          if (parentPath.indexOf(foundPath) === 0) {\n            if (!noCircularOption) {\n              return typeof options.circular === 'function'?\n              options.circular(value, path, foundPath):\n              options.circular;\n            }\n            return {$jsan: foundPath};\n          }\n          if (withRefs) return {$jsan: foundPath};\n        }\n        map.set(value, path);\n      }\n\n\n      // If it is an array, replicate the array.\n\n      if (Object.prototype.toString.apply(value) === '[object Array]') {\n          nu = [];\n          for (i = 0; i < value.length; i += 1) {\n              nu[i] = derez(value[i], path + '[' + i + ']', i);\n          }\n      } else {\n\n        // If it is an object, replicate the object.\n\n        nu = {};\n        for (name in value) {\n          if (Object.prototype.hasOwnProperty.call(value, name)) {\n            var nextPath = /^\\w+$/.test(name) ?\n              '.' + name :\n              '[' + JSON.stringify(name) + ']';\n            nu[name] = name === '$jsan' ? [derez(value[name], path + nextPath)] : derez(value[name], path + nextPath, name);\n          }\n        }\n      }\n      return nu;\n    }\n    return value;\n  }(object, '$'));\n};\n\n\nexports.retrocycle = function retrocycle($) {\n  'use strict';\n\n\n  return (function rez(value) {\n\n    // The rez function walks recursively through the object looking for $jsan\n    // properties. When it finds one that has a value that is a path, then it\n    // replaces the $jsan object with a reference to the value that is found by\n    // the path.\n\n    var i, item, name, path;\n\n    if (value && typeof value === 'object') {\n      if (Object.prototype.toString.apply(value) === '[object Array]') {\n        for (i = 0; i < value.length; i += 1) {\n          item = value[i];\n          if (item && typeof item === 'object') {\n            if (item.$jsan) {\n              value[i] = utils.restore(item.$jsan, $);\n            } else {\n              rez(item);\n            }\n          }\n        }\n      } else {\n        for (name in value) {\n          // base case passed raw object\n          if(typeof value[name] === 'string' && name === '$jsan'){\n            return utils.restore(value.$jsan, $);\n            break;\n          }\n          else {\n            if (name === '$jsan') {\n              value[name] = value[name][0];\n            }\n            if (typeof value[name] === 'object') {\n              item = value[name];\n              if (item && typeof item === 'object') {\n                if (item.$jsan) {\n                  value[name] = utils.restore(item.$jsan, $);\n                } else {\n                  rez(item);\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    return value;\n  }($));\n};\n","var cycle = require('./cycle');\n\nexports.stringify = function stringify(value, replacer, space, _options) {\n\n  if (arguments.length < 4) {\n    try {\n      if (arguments.length === 1) {\n        return JSON.stringify(value);\n      } else {\n        return JSON.stringify.apply(JSON, arguments);\n      }\n    } catch (e) {}\n  }\n\n  var options = _options || false;\n  if (typeof options === 'boolean') {\n    options = {\n      'date': options,\n      'function': options,\n      'regex': options,\n      'undefined': options,\n      'error': options,\n      'symbol': options,\n      'map': options,\n      'set': options,\n      'nan': options,\n      'infinity': options\n    }\n  }\n\n  var decycled = cycle.decycle(value, options, replacer);\n  if (arguments.length === 1) {\n    return JSON.stringify(decycled);\n  } else {\n    // decycle already handles when replacer is a function.\n    return JSON.stringify(decycled, Array.isArray(replacer) ? replacer : null, space);\n  }\n}\n\nexports.parse = function parse(text, reviver) {\n  var needsRetrocycle = /\"\\$jsan\"/.test(text);\n  var parsed;\n  if (arguments.length === 1) {\n    parsed = JSON.parse(text);\n  } else {\n    parsed = JSON.parse(text, reviver);\n  }\n  if (needsRetrocycle) {\n    parsed = cycle.retrocycle(parsed);\n  }\n  return parsed;\n}\n","module.exports = require('./lib');\n","export function mark(data, type, transformMethod) {\n  return {\n    data: transformMethod ? data[transformMethod]() : data,\n    __serializedType__: type\n  };\n}\nexport function extract(data, type) {\n  return {\n    data: Object.assign({}, data),\n    __serializedType__: type\n  };\n}\nexport function refer(data, type, transformMethod, refs) {\n  const r = mark(data, type, transformMethod);\n  if (!refs) return r;\n  for (let i = 0; i < refs.length; i++) {\n    const ref = refs[i];\n    if (typeof ref === 'function' && data instanceof ref) {\n      r.__serializedRef__ = i;\n      return r;\n    }\n  }\n  return r;\n}","// jsan stringify options\n\nexport default {\n  refs: false,\n  // references can't be resolved on the original Immutable structure\n  date: true,\n  function: true,\n  regex: true,\n  undefined: true,\n  error: true,\n  symbol: true,\n  map: true,\n  set: true,\n  nan: true,\n  infinity: true\n};","import { mark, extract, refer } from '../helpers';\nimport options from '../constants/options';\nexport default function serialize(immutable, refs, customReplacer, customReviver) {\n  function replacer(key, value) {\n    if (value instanceof immutable.Record) return refer(value, 'ImmutableRecord', 'toObject', refs);\n    if (value instanceof immutable.Range) return extract(value, 'ImmutableRange');\n    if (value instanceof immutable.Repeat) return extract(value, 'ImmutableRepeat');\n    if (immutable.OrderedMap.isOrderedMap(value)) return mark(value, 'ImmutableOrderedMap', 'toObject');\n    if (immutable.Map.isMap(value)) return mark(value, 'ImmutableMap', 'toObject');\n    if (immutable.List.isList(value)) return mark(value, 'ImmutableList', 'toArray');\n    if (immutable.OrderedSet.isOrderedSet(value)) return mark(value, 'ImmutableOrderedSet', 'toArray');\n    if (immutable.Set.isSet(value)) return mark(value, 'ImmutableSet', 'toArray');\n    if (immutable.Seq.isSeq(value)) return mark(value, 'ImmutableSeq', 'toArray');\n    if (immutable.Stack.isStack(value)) return mark(value, 'ImmutableStack', 'toArray');\n    return value;\n  }\n  function reviver(key, value) {\n    if (typeof value === 'object' && value !== null && '__serializedType__' in value) {\n      const immutableValue = value;\n      switch (immutableValue.__serializedType__) {\n        case 'ImmutableMap':\n          return immutable.Map(immutableValue.data);\n        case 'ImmutableOrderedMap':\n          return immutable.OrderedMap(immutableValue.data);\n        case 'ImmutableList':\n          return immutable.List(immutableValue.data);\n        case 'ImmutableRange':\n          return immutable.Range(immutableValue.data._start, immutableValue.data._end, immutableValue.data._step);\n        case 'ImmutableRepeat':\n          return immutable.Repeat(immutableValue.data._value, immutableValue.data.size);\n        case 'ImmutableSet':\n          return immutable.Set(immutableValue.data);\n        case 'ImmutableOrderedSet':\n          return immutable.OrderedSet(immutableValue.data);\n        case 'ImmutableSeq':\n          return immutable.Seq(immutableValue.data);\n        case 'ImmutableStack':\n          return immutable.Stack(immutableValue.data);\n        case 'ImmutableRecord':\n          return refs && refs[immutableValue.__serializedRef__] ? new refs[immutableValue.__serializedRef__](immutableValue.data) : immutable.Map(immutableValue.data);\n        default:\n          return immutableValue.data;\n      }\n    }\n    return value;\n  }\n  return {\n    replacer: customReplacer ? function (key, value) {\n      return customReplacer(key, value, replacer);\n    } : replacer,\n    reviver: customReviver ? function (key, value) {\n      return customReviver(key, value, reviver);\n    } : reviver,\n    options: options\n  };\n}","import jsan from 'jsan';\nimport serialize from './serialize';\nimport options from '../constants/options';\nexport default function (immutable, refs, customReplacer, customReviver) {\n  return {\n    stringify: function (data) {\n      return jsan.stringify(data, serialize(immutable, refs, customReplacer, customReviver).replacer, undefined, options);\n    },\n    parse: function (data) {\n      return jsan.parse(data, serialize(immutable, refs, customReplacer, customReviver).reviver);\n    },\n    serialize: serialize\n  };\n}\nexport { default as serialize } from './serialize';","// Replaces 'redux-persist-transform-immutable' (5.0.0) with a custom transform using 'redux-persist' and '@redux-devtools' serializer\r\n\r\nimport { createTransform } from 'redux-persist'\r\nimport Immutable from 'immutable'\r\nimport { immutable } from '@redux-devtools/serialize'\r\nimport Logger from 'pmt-utils/logger/index.js'\r\n\r\nconst { stringify, parse } = immutable(Immutable)\r\n\r\nconst immutableTransform = () =>\r\n  createTransform(\r\n    // Serialization\r\n    (inboundState, key) => {\r\n      try {\r\n        return stringify(inboundState)\r\n      } catch (error) {\r\n        Logger.error(`immutableTransform: serialization (stringify) failed for key \"${key}\"`, error)\r\n        throw error\r\n      }\r\n    },\r\n    // Deserialization\r\n    (outboundState, key) => {\r\n      try {\r\n        return parse(outboundState)\r\n      } catch (error) {\r\n        Logger.error(`immutableTransform: deserialization (parse) failed for key \"${key}\"`, error)\r\n        throw error\r\n      }\r\n    }\r\n  )\r\n\r\nexport default immutableTransform\r\n","import React from 'react';\nexport var ReactReduxContext = React.createContext(null);\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n  return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n  return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nvar CLEARED = null;\nvar nullListeners = {\n  notify: function notify() {}\n};\n\nfunction createListenerCollection() {\n  var batch = getBatch(); // the current/next pattern is copied from redux's createStore code.\n  // TODO: refactor+expose that code to be reusable here?\n\n  var current = [];\n  var next = [];\n  return {\n    clear: function clear() {\n      next = CLEARED;\n      current = CLEARED;\n    },\n    notify: function notify() {\n      var listeners = current = next;\n      batch(function () {\n        for (var i = 0; i < listeners.length; i++) {\n          listeners[i]();\n        }\n      });\n    },\n    get: function get() {\n      return next;\n    },\n    subscribe: function subscribe(listener) {\n      var isSubscribed = true;\n      if (next === current) next = current.slice();\n      next.push(listener);\n      return function unsubscribe() {\n        if (!isSubscribed || current === CLEARED) return;\n        isSubscribed = false;\n        if (next === current) next = current.slice();\n        next.splice(next.indexOf(listener), 1);\n      };\n    }\n  };\n}\n\nvar Subscription =\n/*#__PURE__*/\nfunction () {\n  function Subscription(store, parentSub) {\n    this.store = store;\n    this.parentSub = parentSub;\n    this.unsubscribe = null;\n    this.listeners = nullListeners;\n    this.handleChangeWrapper = this.handleChangeWrapper.bind(this);\n  }\n\n  var _proto = Subscription.prototype;\n\n  _proto.addNestedSub = function addNestedSub(listener) {\n    this.trySubscribe();\n    return this.listeners.subscribe(listener);\n  };\n\n  _proto.notifyNestedSubs = function notifyNestedSubs() {\n    this.listeners.notify();\n  };\n\n  _proto.handleChangeWrapper = function handleChangeWrapper() {\n    if (this.onStateChange) {\n      this.onStateChange();\n    }\n  };\n\n  _proto.isSubscribed = function isSubscribed() {\n    return Boolean(this.unsubscribe);\n  };\n\n  _proto.trySubscribe = function trySubscribe() {\n    if (!this.unsubscribe) {\n      this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.handleChangeWrapper) : this.store.subscribe(this.handleChangeWrapper);\n      this.listeners = createListenerCollection();\n    }\n  };\n\n  _proto.tryUnsubscribe = function tryUnsubscribe() {\n    if (this.unsubscribe) {\n      this.unsubscribe();\n      this.unsubscribe = null;\n      this.listeners.clear();\n      this.listeners = nullListeners;\n    }\n  };\n\n  return Subscription;\n}();\n\nexport { Subscription as default };","import React, { useMemo, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport Subscription from '../utils/Subscription';\n\nfunction Provider(_ref) {\n  var store = _ref.store,\n      context = _ref.context,\n      children = _ref.children;\n  var contextValue = useMemo(function () {\n    var subscription = new Subscription(store);\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    return {\n      store: store,\n      subscription: subscription\n    };\n  }, [store]);\n  var previousState = useMemo(function () {\n    return store.getState();\n  }, [store]);\n  useEffect(function () {\n    var subscription = contextValue.subscription;\n    subscription.trySubscribe();\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n\n    return function () {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = null;\n    };\n  }, [contextValue, previousState]);\n  var Context = context || ReactReduxContext;\n  return React.createElement(Context.Provider, {\n    value: contextValue\n  }, children);\n}\n\nProvider.propTypes = {\n  store: PropTypes.shape({\n    subscribe: PropTypes.func.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    getState: PropTypes.func.isRequired\n  }),\n  context: PropTypes.object,\n  children: PropTypes.any\n};\nexport default Provider;","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nvar isHopefullyDomEnvironment = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';\nexport var useIsomorphicLayoutEffect = isHopefullyDomEnvironment ? useLayoutEffect : useEffect;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport hoistStatics from 'hoist-non-react-statics';\nimport invariant from 'invariant';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport Subscription from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n  var updateCount = state[1];\n  return [action.payload, updateCount + 1];\n}\n\nvar initStateUpdates = function initStateUpdates() {\n  return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\r\n  selectorFactory is a func that is responsible for returning the selector function used to\r\n  compute new props from state, props, and dispatch. For example:\r\n      export default connectAdvanced((dispatch, options) => (state, props) => ({\r\n      thing: state.things[props.thingId],\r\n      saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\r\n    }))(YourComponent)\r\n    Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\r\n  outside of their selector as an optimization. Options passed to connectAdvanced are passed to\r\n  the selectorFactory, along with displayName and WrappedComponent, as the second argument.\r\n    Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\r\n  props. Do not use connectAdvanced directly without memoizing results between calls to your\r\n  selector, otherwise the Connect component will re-render on every state or props change.\r\n*/\nselectorFactory, // options object:\n_ref) {\n  if (_ref === void 0) {\n    _ref = {};\n  }\n\n  var _ref2 = _ref,\n      _ref2$getDisplayName = _ref2.getDisplayName,\n      getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n    return \"ConnectAdvanced(\" + name + \")\";\n  } : _ref2$getDisplayName,\n      _ref2$methodName = _ref2.methodName,\n      methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n      _ref2$renderCountProp = _ref2.renderCountProp,\n      renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n      _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n      shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n      _ref2$storeKey = _ref2.storeKey,\n      storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n      _ref2$withRef = _ref2.withRef,\n      withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n      _ref2$forwardRef = _ref2.forwardRef,\n      forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n      _ref2$context = _ref2.context,\n      context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n      connectOptions = _objectWithoutPropertiesLoose(_ref2, [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"]);\n\n  invariant(renderCountProp === undefined, \"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n  invariant(!withRef, 'withRef is removed. To access the wrapped instance, use a ref on the connected component');\n  var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. ' + 'You may also pass a {context : MyContext} option to connect';\n  invariant(storeKey === 'store', 'storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n  var Context = context;\n  return function wrapWithConnect(WrappedComponent) {\n    if (process.env.NODE_ENV !== 'production') {\n      invariant(isValidElementType(WrappedComponent), \"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n    }\n\n    var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n    var displayName = getDisplayName(wrappedComponentName);\n\n    var selectorFactoryOptions = _extends({}, connectOptions, {\n      getDisplayName: getDisplayName,\n      methodName: methodName,\n      renderCountProp: renderCountProp,\n      shouldHandleStateChanges: shouldHandleStateChanges,\n      storeKey: storeKey,\n      displayName: displayName,\n      wrappedComponentName: wrappedComponentName,\n      WrappedComponent: WrappedComponent\n    });\n\n    var pure = connectOptions.pure;\n\n    function createChildSelector(store) {\n      return selectorFactory(store.dispatch, selectorFactoryOptions);\n    } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n    // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n    // that just executes the given callback immediately.\n\n\n    var usePureOnlyMemo = pure ? useMemo : function (callback) {\n      return callback();\n    };\n\n    function ConnectFunction(props) {\n      var _useMemo = useMemo(function () {\n        // Distinguish between actual \"data\" props that were passed to the wrapper component,\n        // and values needed to control behavior (forwarded refs, alternate context instances).\n        // To maintain the wrapperProps object reference, memoize this destructuring.\n        var forwardedRef = props.forwardedRef,\n            wrapperProps = _objectWithoutPropertiesLoose(props, [\"forwardedRef\"]);\n\n        return [props.context, forwardedRef, wrapperProps];\n      }, [props]),\n          propsContext = _useMemo[0],\n          forwardedRef = _useMemo[1],\n          wrapperProps = _useMemo[2];\n\n      var ContextToUse = useMemo(function () {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        return propsContext && propsContext.Consumer && isContextConsumer(React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n      var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n\n      var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n      var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n      invariant(didStoreComeFromProps || didStoreComeFromContext, \"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a <Provider>, \") + \"or pass a custom React context provider to <Provider> and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\")); // Based on the previous check, one of these must be true\n\n      var store = didStoreComeFromProps ? props.store : contextValue.store;\n      var childPropsSelector = useMemo(function () {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return createChildSelector(store);\n      }, [store]);\n\n      var _useMemo2 = useMemo(function () {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n        var subscription = new Subscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n\n        var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n        return [subscription, notifyNestedSubs];\n      }, [store, didStoreComeFromProps, contextValue]),\n          subscription = _useMemo2[0],\n          notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n\n\n      var overriddenContextValue = useMemo(function () {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue;\n        } // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n\n\n        return _extends({}, contextValue, {\n          subscription: subscription\n        });\n      }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n      // causes a change to the calculated child component props (or we caught an error in mapState)\n\n      var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n          _useReducer$ = _useReducer[0],\n          previousStateUpdateResult = _useReducer$[0],\n          forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n      if (previousStateUpdateResult && previousStateUpdateResult.error) {\n        throw previousStateUpdateResult.error;\n      } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n      var lastChildProps = useRef();\n      var lastWrapperProps = useRef(wrapperProps);\n      var childPropsFromStoreUpdate = useRef();\n      var renderIsScheduled = useRef(false);\n      var actualChildProps = usePureOnlyMemo(function () {\n        // Tricky logic here:\n        // - This render may have been triggered by a Redux store update that produced new child props\n        // - However, we may have gotten new wrapper props after that\n        // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n        // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n        // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n        if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n          return childPropsFromStoreUpdate.current;\n        } // TODO We're reading the store directly in render() here. Bad idea?\n        // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n        // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n        // to determine what the child props should be.\n\n\n        return childPropsSelector(store.getState(), wrapperProps);\n      }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      useIsomorphicLayoutEffect(function () {\n        // We want to capture the wrapper props and child props we used for later comparisons\n        lastWrapperProps.current = wrapperProps;\n        lastChildProps.current = actualChildProps;\n        renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n        if (childPropsFromStoreUpdate.current) {\n          childPropsFromStoreUpdate.current = null;\n          notifyNestedSubs();\n        }\n      }); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n      useIsomorphicLayoutEffect(function () {\n        // If we're not subscribed to the store, nothing to do here\n        if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n        var didUnsubscribe = false;\n        var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n        var checkForUpdates = function checkForUpdates() {\n          if (didUnsubscribe) {\n            // Don't run stale listeners.\n            // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n            return;\n          }\n\n          var latestStoreState = store.getState();\n          var newChildProps, error;\n\n          try {\n            // Actually run the selector with the most recent store state and wrapper props\n            // to determine what the child props should be\n            newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n          } catch (e) {\n            error = e;\n            lastThrownError = e;\n          }\n\n          if (!error) {\n            lastThrownError = null;\n          } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n          if (newChildProps === lastChildProps.current) {\n            if (!renderIsScheduled.current) {\n              notifyNestedSubs();\n            }\n          } else {\n            // Save references to the new child props.  Note that we track the \"child props from store update\"\n            // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n            // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n            // forcing another re-render, which we don't want.\n            lastChildProps.current = newChildProps;\n            childPropsFromStoreUpdate.current = newChildProps;\n            renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n            forceComponentUpdateDispatch({\n              type: 'STORE_UPDATED',\n              payload: {\n                error: error\n              }\n            });\n          }\n        }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n        subscription.onStateChange = checkForUpdates;\n        subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n        // changed since we began.\n\n        checkForUpdates();\n\n        var unsubscribeWrapper = function unsubscribeWrapper() {\n          didUnsubscribe = true;\n          subscription.tryUnsubscribe();\n          subscription.onStateChange = null;\n\n          if (lastThrownError) {\n            // It's possible that we caught an error due to a bad mapState function, but the\n            // parent re-rendered without this component and we're about to unmount.\n            // This shouldn't happen as long as we do top-down subscriptions correctly, but\n            // if we ever do those wrong, this throw will surface the error in our tests.\n            // In that case, throw the error from here so it doesn't get lost.\n            throw lastThrownError;\n          }\n        };\n\n        return unsubscribeWrapper;\n      }, [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n\n      var renderedWrappedComponent = useMemo(function () {\n        return React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n          ref: forwardedRef\n        }));\n      }, [forwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n      var renderedChild = useMemo(function () {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return React.createElement(ContextToUse.Provider, {\n            value: overriddenContextValue\n          }, renderedWrappedComponent);\n        }\n\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n    var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = displayName;\n\n    if (forwardRef) {\n      var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n        return React.createElement(Connect, _extends({}, props, {\n          forwardedRef: ref\n        }));\n      });\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return hoistStatics(forwarded, WrappedComponent);\n    }\n\n    return hoistStatics(Connect, WrappedComponent);\n  };\n}","var hasOwn = Object.prototype.hasOwnProperty;\n\nfunction is(x, y) {\n  if (x === y) {\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nexport default function shallowEqual(objA, objB) {\n  if (is(objA, objB)) return true;\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return false;\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n  return function initConstantSelector(dispatch, options) {\n    var constant = getConstant(dispatch, options);\n\n    function constantSelector() {\n      return constant;\n    }\n\n    constantSelector.dependsOnOwnProps = false;\n    return constantSelector;\n  };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n  return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n  return function initProxySelector(dispatch, _ref) {\n    var displayName = _ref.displayName;\n\n    var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n    }; // allow detectFactoryAndVerify to get ownProps\n\n\n    proxy.dependsOnOwnProps = true;\n\n    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n      proxy.mapToProps = mapToProps;\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n      var props = proxy(stateOrDispatch, ownProps);\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props;\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n        props = proxy(stateOrDispatch, ownProps);\n      }\n\n      if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n      return props;\n    };\n\n    return proxy;\n  };\n}","import { bindActionCreators } from 'redux';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n  return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n  return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n    return {\n      dispatch: dispatch\n    };\n  }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n    return bindActionCreators(mapDispatchToProps, dispatch);\n  }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n  return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n  return !mapStateToProps ? wrapMapToPropsConstant(function () {\n    return {};\n  }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n  return _extends({}, ownProps, {}, stateProps, {}, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n  return function initMergePropsProxy(dispatch, _ref) {\n    var displayName = _ref.displayName,\n        pure = _ref.pure,\n        areMergedPropsEqual = _ref.areMergedPropsEqual;\n    var hasRunOnce = false;\n    var mergedProps;\n    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n      var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n      if (hasRunOnce) {\n        if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n      } else {\n        hasRunOnce = true;\n        mergedProps = nextMergedProps;\n        if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n      }\n\n      return mergedProps;\n    };\n  };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n  return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n  return !mergeProps ? function () {\n    return defaultMergeProps;\n  } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n  return function impureFinalPropsSelector(state, ownProps) {\n    return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n  };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n  var areStatesEqual = _ref.areStatesEqual,\n      areOwnPropsEqual = _ref.areOwnPropsEqual,\n      areStatePropsEqual = _ref.areStatePropsEqual;\n  var hasRunAtLeastOnce = false;\n  var state;\n  var ownProps;\n  var stateProps;\n  var dispatchProps;\n  var mergedProps;\n\n  function handleFirstCall(firstState, firstOwnProps) {\n    state = firstState;\n    ownProps = firstOwnProps;\n    stateProps = mapStateToProps(state, ownProps);\n    dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    hasRunAtLeastOnce = true;\n    return mergedProps;\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewState() {\n    var nextStateProps = mapStateToProps(state, ownProps);\n    var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n    stateProps = nextStateProps;\n    if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleSubsequentCalls(nextState, nextOwnProps) {\n    var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n    var stateChanged = !areStatesEqual(nextState, state);\n    state = nextState;\n    ownProps = nextOwnProps;\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n    if (propsChanged) return handleNewProps();\n    if (stateChanged) return handleNewState();\n    return mergedProps;\n  }\n\n  return function pureFinalPropsSelector(nextState, nextOwnProps) {\n    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n  };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n  var initMapStateToProps = _ref2.initMapStateToProps,\n      initMapDispatchToProps = _ref2.initMapDispatchToProps,\n      initMergeProps = _ref2.initMergeProps,\n      options = _objectWithoutPropertiesLoose(_ref2, [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"]);\n\n  var mapStateToProps = initMapStateToProps(dispatch, options);\n  var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n  var mergeProps = initMergeProps(dispatch, options);\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n  }\n\n  var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n  return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\r\n  connect is a facade over connectAdvanced. It turns its args into a compatible\r\n  selectorFactory, which has the signature:\r\n\r\n    (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\r\n  \r\n  connect passes its args to connectAdvanced as options, which will in turn pass them to\r\n  selectorFactory each time a Connect component instance is instantiated or hot reloaded.\r\n\r\n  selectorFactory returns a final props selector from its mapStateToProps,\r\n  mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\r\n  mergePropsFactories, and pure args.\r\n\r\n  The resulting final props selector is called by the Connect component instance whenever\r\n  it receives new props or store state.\r\n */\n\nfunction match(arg, factories, name) {\n  for (var i = factories.length - 1; i >= 0; i--) {\n    var result = factories[i](arg);\n    if (result) return result;\n  }\n\n  return function (dispatch, options) {\n    throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n  };\n}\n\nfunction strictEqual(a, b) {\n  return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$connectHOC = _ref.connectHOC,\n      connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n      _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n      mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n      _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n      mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n      _ref$mergePropsFactor = _ref.mergePropsFactories,\n      mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n      _ref$selectorFactory = _ref.selectorFactory,\n      selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n  return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n    if (_ref2 === void 0) {\n      _ref2 = {};\n    }\n\n    var _ref3 = _ref2,\n        _ref3$pure = _ref3.pure,\n        pure = _ref3$pure === void 0 ? true : _ref3$pure,\n        _ref3$areStatesEqual = _ref3.areStatesEqual,\n        areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n        _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n        areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n        _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n        areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n        _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n        areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n        extraOptions = _objectWithoutPropertiesLoose(_ref3, [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"]);\n\n    var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n    var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n    var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n    return connectHOC(selectorFactory, _extends({\n      // used in error messages\n      methodName: 'connect',\n      // used to compute Connect's displayName from the wrapped component's displayName.\n      getDisplayName: function getDisplayName(name) {\n        return \"Connect(\" + name + \")\";\n      },\n      // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n      shouldHandleStateChanges: Boolean(mapStateToProps),\n      // passed through to selectorFactory\n      initMapStateToProps: initMapStateToProps,\n      initMapDispatchToProps: initMapDispatchToProps,\n      initMergeProps: initMergeProps,\n      pure: pure,\n      areStatesEqual: areStatesEqual,\n      areOwnPropsEqual: areOwnPropsEqual,\n      areStatePropsEqual: areStatePropsEqual,\n      areMergedPropsEqual: areMergedPropsEqual\n    }, extraOptions));\n  };\n}\nexport default createConnect();","import Provider from './components/Provider';\nimport connectAdvanced from './components/connectAdvanced';\nimport { ReactReduxContext } from './components/Context';\nimport connect from './connect/connect';\nimport { useDispatch, createDispatchHook } from './hooks/useDispatch';\nimport { useSelector, createSelectorHook } from './hooks/useSelector';\nimport { useStore, createStoreHook } from './hooks/useStore';\nimport { setBatch } from './utils/batch';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport shallowEqual from './utils/shallowEqual';\nsetBatch(batch);\nexport { Provider, connectAdvanced, ReactReduxContext, connect, batch, useDispatch, createDispatchHook, useSelector, createSelectorHook, useStore, createStoreHook, shallowEqual };","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n  var key = '__global_unique_id__';\n  return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n  if (x === y) {\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nfunction createEventEmitter(value) {\n  var handlers = [];\n  return {\n    on: function on(handler) {\n      handlers.push(handler);\n    },\n    off: function off(handler) {\n      handlers = handlers.filter(function (h) {\n        return h !== handler;\n      });\n    },\n    get: function get() {\n      return value;\n    },\n    set: function set(newValue, changedBits) {\n      value = newValue;\n      handlers.forEach(function (handler) {\n        return handler(value, changedBits);\n      });\n    }\n  };\n}\n\nfunction onlyChild(children) {\n  return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n  var _Provider$childContex, _Consumer$contextType;\n\n  var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n  var Provider = /*#__PURE__*/function (_Component) {\n    _inheritsLoose(Provider, _Component);\n\n    function Provider() {\n      var _this;\n\n      _this = _Component.apply(this, arguments) || this;\n      _this.emitter = createEventEmitter(_this.props.value);\n      return _this;\n    }\n\n    var _proto = Provider.prototype;\n\n    _proto.getChildContext = function getChildContext() {\n      var _ref;\n\n      return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n    };\n\n    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      if (this.props.value !== nextProps.value) {\n        var oldValue = this.props.value;\n        var newValue = nextProps.value;\n        var changedBits;\n\n        if (objectIs(oldValue, newValue)) {\n          changedBits = 0;\n        } else {\n          changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n          if (process.env.NODE_ENV !== 'production') {\n            warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n          }\n\n          changedBits |= 0;\n\n          if (changedBits !== 0) {\n            this.emitter.set(nextProps.value, changedBits);\n          }\n        }\n      }\n    };\n\n    _proto.render = function render() {\n      return this.props.children;\n    };\n\n    return Provider;\n  }(Component);\n\n  Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n  var Consumer = /*#__PURE__*/function (_Component2) {\n    _inheritsLoose(Consumer, _Component2);\n\n    function Consumer() {\n      var _this2;\n\n      _this2 = _Component2.apply(this, arguments) || this;\n      _this2.state = {\n        value: _this2.getValue()\n      };\n\n      _this2.onUpdate = function (newValue, changedBits) {\n        var observedBits = _this2.observedBits | 0;\n\n        if ((observedBits & changedBits) !== 0) {\n          _this2.setState({\n            value: _this2.getValue()\n          });\n        }\n      };\n\n      return _this2;\n    }\n\n    var _proto2 = Consumer.prototype;\n\n    _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n      var observedBits = nextProps.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentDidMount = function componentDidMount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].on(this.onUpdate);\n      }\n\n      var observedBits = this.props.observedBits;\n      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n    };\n\n    _proto2.componentWillUnmount = function componentWillUnmount() {\n      if (this.context[contextProp]) {\n        this.context[contextProp].off(this.onUpdate);\n      }\n    };\n\n    _proto2.getValue = function getValue() {\n      if (this.context[contextProp]) {\n        return this.context[contextProp].get();\n      } else {\n        return defaultValue;\n      }\n    };\n\n    _proto2.render = function render() {\n      return onlyChild(this.props.children)(this.state.value);\n    };\n\n    return Consumer;\n  }(Component);\n\n  Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n  return {\n    Provider: Provider,\n    Consumer: Consumer\n  };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n  if (from === undefined) from = '';\n\n  var toParts = (to && to.split('/')) || [];\n  var fromParts = (from && from.split('/')) || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n  if (\n    mustEndAbs &&\n    fromParts[0] !== '' &&\n    (!fromParts[0] || !isAbsolute(fromParts[0]))\n  )\n    fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nexport default resolvePathname;\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    var provided = typeof message === 'function' ? message() : message;\n    var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n    throw new Error(value);\n}\n\nexport { invariant as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n  return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n  var hashIndex = pathname.indexOf('#');\n\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n}\nfunction createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n  var path = pathname || '/';\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n  return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n  var location;\n\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = parsePath(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = _extends({}, path);\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n}\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n  var prompt = null;\n\n  function setPrompt(nextPrompt) {\n    process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n    prompt = nextPrompt;\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  }\n\n  function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n          process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  }\n\n  var listeners = [];\n\n  function appendListener(fn) {\n    var isActive = true;\n\n    function listener() {\n      if (isActive) fn.apply(void 0, arguments);\n    }\n\n    listeners.push(listener);\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function notifyListeners() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(void 0, args);\n    });\n  }\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n  callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = window.navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n  return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canUseHistory = supportsHistory();\n  var needsHashChangeListener = !supportsPopStateOnHashChange();\n  var _props = props,\n      _props$forceRefresh = _props.forceRefresh,\n      forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n  function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n    var path = pathname + search + hash;\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path, state, key);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if (isExtraneousPopstateEvent(event)) return;\n    handlePop(getDOMLocation(event.state));\n  }\n\n  function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  }\n\n  var forceNextPop = false;\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  }\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key]; // Public interface\n\n  function createHref(location) {\n    return basename + createPath(location);\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.pushState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex + 1);\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n        window.location.href = href;\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.replaceState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n        window.location.replace(href);\n      }\n    });\n  }\n\n  function go(n) {\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n  hashbang: {\n    encodePath: function encodePath(path) {\n      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n    },\n    decodePath: function decodePath(path) {\n      return path.charAt(0) === '!' ? path.substr(1) : path;\n    }\n  },\n  noslash: {\n    encodePath: stripLeadingSlash,\n    decodePath: addLeadingSlash\n  },\n  slash: {\n    encodePath: addLeadingSlash,\n    decodePath: addLeadingSlash\n  }\n};\n\nfunction stripHash(url) {\n  var hashIndex = url.indexOf('#');\n  return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var hashIndex = href.indexOf('#');\n  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n  window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n  var _props = props,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$hashType = _props.hashType,\n      hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var _HashPathCoders$hashT = HashPathCoders[hashType],\n      encodePath = _HashPathCoders$hashT.encodePath,\n      decodePath = _HashPathCoders$hashT.decodePath;\n\n  function getDOMLocation() {\n    var path = decodePath(getHashPath());\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  var forceNextPop = false;\n  var ignorePath = null;\n\n  function locationsAreEqual$$1(a, b) {\n    return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n  }\n\n  function handleHashChange() {\n    var path = getHashPath();\n    var encodedPath = encodePath(path);\n\n    if (path !== encodedPath) {\n      // Ensure we always have a properly-encoded hash.\n      replaceHashPath(encodedPath);\n    } else {\n      var location = getDOMLocation();\n      var prevLocation = history.location;\n      if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n      ignorePath = null;\n      handlePop(location);\n    }\n  }\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of paths we've seen in sessionStorage.\n    // Instead, we just default to 0 for paths we don't know.\n\n    var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  } // Ensure the hash is encoded properly before doing anything else.\n\n\n  var path = getHashPath();\n  var encodedPath = encodePath(path);\n  if (path !== encodedPath) replaceHashPath(encodedPath);\n  var initialLocation = getDOMLocation();\n  var allPaths = [createPath(initialLocation)]; // Public interface\n\n  function createHref(location) {\n    var baseTag = document.querySelector('base');\n    var href = '';\n\n    if (baseTag && baseTag.getAttribute('href')) {\n      href = stripHash(window.location.href);\n    }\n\n    return href + '#' + encodePath(basename + createPath(location));\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a PUSH, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        pushHashPath(encodedPath);\n        var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n        var nextPaths = allPaths.slice(0, prevIndex + 1);\n        nextPaths.push(path);\n        allPaths = nextPaths;\n        setState({\n          action: action,\n          location: location\n        });\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n        setState();\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        replaceHashPath(encodedPath);\n      }\n\n      var prevIndex = allPaths.indexOf(createPath(history.location));\n      if (prevIndex !== -1) allPaths[prevIndex] = path;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(HashChangeEvent$1, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(HashChangeEvent$1, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  var _props = props,\n      getUserConfirmation = _props.getUserConfirmation,\n      _props$initialEntries = _props.initialEntries,\n      initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n      _props$initialIndex = _props.initialIndex,\n      initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = history.entries.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var index = clamp(initialIndex, 0, initialEntries.length - 1);\n  var entries = initialEntries.map(function (entry) {\n    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n  }); // Public interface\n\n  var createHref = createPath;\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var prevIndex = history.index;\n      var nextIndex = prevIndex + 1;\n      var nextEntries = history.entries.slice(0);\n\n      if (nextEntries.length > nextIndex) {\n        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n      } else {\n        nextEntries.push(location);\n      }\n\n      setState({\n        action: action,\n        location: location,\n        index: nextIndex,\n        entries: nextEntries\n      });\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      history.entries[history.index] = location;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n    var action = 'POP';\n    var location = history.entries[nextIndex];\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (ok) {\n        setState({\n          action: action,\n          location: location,\n          index: nextIndex\n        });\n      } else {\n        // Mimic the behavior of DOM histories by\n        // causing a render after a cancelled POP.\n        setState();\n      }\n    });\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function canGo(n) {\n    var nextIndex = history.index + n;\n    return nextIndex >= 0 && nextIndex < history.entries.length;\n  }\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    return transitionManager.setPrompt(prompt);\n  }\n\n  function listen(listener) {\n    return transitionManager.appendListener(listener);\n  }\n\n  var history = {\n    length: entries.length,\n    action: 'POP',\n    location: entries[index],\n    index: index,\n    entries: entries,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    canGo: canGo,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","module.exports = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = []\n  var key = 0\n  var index = 0\n  var path = ''\n  var defaultDelimiter = options && options.delimiter || '/'\n  var res\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0]\n    var escaped = res[1]\n    var offset = res.index\n    path += str.slice(index, offset)\n    index = offset + m.length\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1]\n      continue\n    }\n\n    var next = str[index]\n    var prefix = res[2]\n    var name = res[3]\n    var capture = res[4]\n    var group = res[5]\n    var modifier = res[6]\n    var asterisk = res[7]\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path)\n      path = ''\n    }\n\n    var partial = prefix != null && next != null && next !== prefix\n    var repeat = modifier === '+' || modifier === '*'\n    var optional = modifier === '?' || modifier === '*'\n    var delimiter = prefix || defaultDelimiter\n    var pattern = capture || group\n    var prevText = prefix || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : restrictBacktrack(delimiter, prevText))\n    })\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index)\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path)\n  }\n\n  return tokens\n}\n\nfunction restrictBacktrack(delimiter, prevText) {\n  if (!prevText || prevText.indexOf(delimiter) > -1) {\n    return '[^' + escapeString(delimiter) + ']+?'\n  }\n\n  return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')[^' + escapeString(delimiter) + '])+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length)\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n    }\n  }\n\n  return function (obj, opts) {\n    var path = ''\n    var data = obj || {}\n    var options = opts || {}\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i]\n\n      if (typeof token === 'string') {\n        path += token\n\n        continue\n      }\n\n      var value = data[token.name]\n      var segment\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j])\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g)\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      })\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = []\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source)\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  var strict = options.strict\n  var end = options.end !== false\n  var route = ''\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (typeof token === 'string') {\n      route += escapeString(token)\n    } else {\n      var prefix = escapeString(token.prefix)\n      var capture = '(?:' + token.pattern + ')'\n\n      keys.push(token)\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*'\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?'\n        } else {\n          capture = prefix + '(' + capture + ')?'\n        }\n      } else {\n        capture = prefix + '(' + capture + ')'\n      }\n\n      route += capture\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/')\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n  }\n\n  if (end) {\n    route += '$'\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options)\n    keys = []\n  }\n\n  options = options || {}\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","import createContext from 'mini-create-react-context';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport { createMemoryHistory, createLocation, locationsAreEqual, createPath } from 'history';\nimport invariant from 'tiny-invariant';\nimport pathToRegexp from 'path-to-regexp';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { isValidElementType } from 'react-is';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport hoistStatics from 'hoist-non-react-statics';\n\n// TODO: Replace with React.createContext once we can assume React 16+\n\nvar createNamedContext = function createNamedContext(name) {\n  var context = createContext();\n  context.displayName = name;\n  return context;\n};\n\nvar context =\n/*#__PURE__*/\ncreateNamedContext(\"Router\");\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Router, _React$Component);\n\n  Router.computeRootMatch = function computeRootMatch(pathname) {\n    return {\n      path: \"/\",\n      url: \"/\",\n      params: {},\n      isExact: pathname === \"/\"\n    };\n  };\n\n  function Router(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n    _this.state = {\n      location: props.history.location\n    }; // This is a bit of a hack. We have to start listening for location\n    // changes here in the constructor in case there are any <Redirect>s\n    // on the initial render. If there are, they will replace/push when\n    // they mount and since cDM fires in children before parents, we may\n    // get a new location before the <Router> is mounted.\n\n    _this._isMounted = false;\n    _this._pendingLocation = null;\n\n    if (!props.staticContext) {\n      _this.unlisten = props.history.listen(function (location) {\n        if (_this._isMounted) {\n          _this.setState({\n            location: location\n          });\n        } else {\n          _this._pendingLocation = location;\n        }\n      });\n    }\n\n    return _this;\n  }\n\n  var _proto = Router.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this._isMounted = true;\n\n    if (this._pendingLocation) {\n      this.setState({\n        location: this._pendingLocation\n      });\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.unlisten) this.unlisten();\n  };\n\n  _proto.render = function render() {\n    return React.createElement(context.Provider, {\n      children: this.props.children || null,\n      value: {\n        history: this.props.history,\n        location: this.state.location,\n        match: Router.computeRootMatch(this.state.location.pathname),\n        staticContext: this.props.staticContext\n      }\n    });\n  };\n\n  return Router;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Router.propTypes = {\n    children: PropTypes.node,\n    history: PropTypes.object.isRequired,\n    staticContext: PropTypes.object\n  };\n\n  Router.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(prevProps.history === this.props.history, \"You cannot change <Router history>\") : void 0;\n  };\n}\n\n/**\n * The public API for a <Router> that stores location in memory.\n */\n\nvar MemoryRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(MemoryRouter, _React$Component);\n\n  function MemoryRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createMemoryHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = MemoryRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return MemoryRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  MemoryRouter.propTypes = {\n    initialEntries: PropTypes.array,\n    initialIndex: PropTypes.number,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number,\n    children: PropTypes.node\n  };\n\n  MemoryRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<MemoryRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\") : void 0;\n  };\n}\n\nvar Lifecycle =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Lifecycle, _React$Component);\n\n  function Lifecycle() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Lifecycle.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    if (this.props.onMount) this.props.onMount.call(this, this);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n  };\n\n  _proto.render = function render() {\n    return null;\n  };\n\n  return Lifecycle;\n}(React.Component);\n\n/**\n * The public API for prompting the user before navigating away from a screen.\n */\n\nfunction Prompt(_ref) {\n  var message = _ref.message,\n      _ref$when = _ref.when,\n      when = _ref$when === void 0 ? true : _ref$when;\n  return React.createElement(context.Consumer, null, function (context$$1) {\n    !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Prompt> outside a <Router>\") : invariant(false) : void 0;\n    if (!when || context$$1.staticContext) return null;\n    var method = context$$1.history.block;\n    return React.createElement(Lifecycle, {\n      onMount: function onMount(self) {\n        self.release = method(message);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        if (prevProps.message !== message) {\n          self.release();\n          self.release = method(message);\n        }\n      },\n      onUnmount: function onUnmount(self) {\n        self.release();\n      },\n      message: message\n    });\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  var messageType = PropTypes.oneOfType([PropTypes.func, PropTypes.string]);\n  Prompt.propTypes = {\n    when: PropTypes.bool,\n    message: messageType.isRequired\n  };\n}\n\nvar cache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\n\nfunction compilePath(path) {\n  if (cache[path]) return cache[path];\n  var generator = pathToRegexp.compile(path);\n\n  if (cacheCount < cacheLimit) {\n    cache[path] = generator;\n    cacheCount++;\n  }\n\n  return generator;\n}\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\n\n\nfunction generatePath(path, params) {\n  if (path === void 0) {\n    path = \"/\";\n  }\n\n  if (params === void 0) {\n    params = {};\n  }\n\n  return path === \"/\" ? path : compilePath(path)(params, {\n    pretty: true\n  });\n}\n\n/**\n * The public API for navigating programmatically with a component.\n */\n\nfunction Redirect(_ref) {\n  var computedMatch = _ref.computedMatch,\n      to = _ref.to,\n      _ref$push = _ref.push,\n      push = _ref$push === void 0 ? false : _ref$push;\n  return React.createElement(context.Consumer, null, function (context$$1) {\n    !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Redirect> outside a <Router>\") : invariant(false) : void 0;\n    var history = context$$1.history,\n        staticContext = context$$1.staticContext;\n    var method = push ? history.push : history.replace;\n    var location = createLocation(computedMatch ? typeof to === \"string\" ? generatePath(to, computedMatch.params) : _extends({}, to, {\n      pathname: generatePath(to.pathname, computedMatch.params)\n    }) : to); // When rendering in a static context,\n    // set the new location immediately.\n\n    if (staticContext) {\n      method(location);\n      return null;\n    }\n\n    return React.createElement(Lifecycle, {\n      onMount: function onMount() {\n        method(location);\n      },\n      onUpdate: function onUpdate(self, prevProps) {\n        var prevLocation = createLocation(prevProps.to);\n\n        if (!locationsAreEqual(prevLocation, _extends({}, location, {\n          key: prevLocation.key\n        }))) {\n          method(location);\n        }\n      },\n      to: to\n    });\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  Redirect.propTypes = {\n    push: PropTypes.bool,\n    from: PropTypes.string,\n    to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n  };\n}\n\nvar cache$1 = {};\nvar cacheLimit$1 = 10000;\nvar cacheCount$1 = 0;\n\nfunction compilePath$1(path, options) {\n  var cacheKey = \"\" + options.end + options.strict + options.sensitive;\n  var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});\n  if (pathCache[path]) return pathCache[path];\n  var keys = [];\n  var regexp = pathToRegexp(path, keys, options);\n  var result = {\n    regexp: regexp,\n    keys: keys\n  };\n\n  if (cacheCount$1 < cacheLimit$1) {\n    pathCache[path] = result;\n    cacheCount$1++;\n  }\n\n  return result;\n}\n/**\n * Public API for matching a URL pathname to a path.\n */\n\n\nfunction matchPath(pathname, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  if (typeof options === \"string\") options = {\n    path: options\n  };\n  var _options = options,\n      path = _options.path,\n      _options$exact = _options.exact,\n      exact = _options$exact === void 0 ? false : _options$exact,\n      _options$strict = _options.strict,\n      strict = _options$strict === void 0 ? false : _options$strict,\n      _options$sensitive = _options.sensitive,\n      sensitive = _options$sensitive === void 0 ? false : _options$sensitive;\n  var paths = [].concat(path);\n  return paths.reduce(function (matched, path) {\n    if (!path) return null;\n    if (matched) return matched;\n\n    var _compilePath = compilePath$1(path, {\n      end: exact,\n      strict: strict,\n      sensitive: sensitive\n    }),\n        regexp = _compilePath.regexp,\n        keys = _compilePath.keys;\n\n    var match = regexp.exec(pathname);\n    if (!match) return null;\n    var url = match[0],\n        values = match.slice(1);\n    var isExact = pathname === url;\n    if (exact && !isExact) return null;\n    return {\n      path: path,\n      // the path used to match\n      url: path === \"/\" && url === \"\" ? \"/\" : url,\n      // the matched portion of the URL\n      isExact: isExact,\n      // whether or not we matched exactly\n      params: keys.reduce(function (memo, key, index) {\n        memo[key.name] = values[index];\n        return memo;\n      }, {})\n    };\n  }, null);\n}\n\nfunction isEmptyChildren(children) {\n  return React.Children.count(children) === 0;\n}\n/**\n * The public API for matching a single path and rendering.\n */\n\n\nvar Route =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Route, _React$Component);\n\n  function Route() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Route.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Route> outside a <Router>\") : invariant(false) : void 0;\n      var location = _this.props.location || context$$1.location;\n      var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us\n      : _this.props.path ? matchPath(location.pathname, _this.props) : context$$1.match;\n\n      var props = _extends({}, context$$1, {\n        location: location,\n        match: match\n      });\n\n      var _this$props = _this.props,\n          children = _this$props.children,\n          component = _this$props.component,\n          render = _this$props.render; // Preact uses an empty array as children by\n      // default, so use null if that's the case.\n\n      if (Array.isArray(children) && children.length === 0) {\n        children = null;\n      }\n\n      if (typeof children === \"function\") {\n        children = children(props);\n\n        if (children === undefined) {\n          if (process.env.NODE_ENV !== \"production\") {\n            var path = _this.props.path;\n            process.env.NODE_ENV !== \"production\" ? warning(false, \"You returned `undefined` from the `children` function of \" + (\"<Route\" + (path ? \" path=\\\"\" + path + \"\\\"\" : \"\") + \">, but you \") + \"should have returned a React element or `null`\") : void 0;\n          }\n\n          children = null;\n        }\n      }\n\n      return React.createElement(context.Provider, {\n        value: props\n      }, children && !isEmptyChildren(children) ? children : props.match ? component ? React.createElement(component, props) : render ? render(props) : null : null);\n    });\n  };\n\n  return Route;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Route.propTypes = {\n    children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n    component: function component(props, propName) {\n      if (props[propName] && !isValidElementType(props[propName])) {\n        return new Error(\"Invalid prop 'component' supplied to 'Route': the prop is not a valid React component\");\n      }\n    },\n    exact: PropTypes.bool,\n    location: PropTypes.object,\n    path: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n    render: PropTypes.func,\n    sensitive: PropTypes.bool,\n    strict: PropTypes.bool\n  };\n\n  Route.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.component), \"You should not use <Route component> and <Route children> in the same route; <Route component> will be ignored\") : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.children && !isEmptyChildren(this.props.children) && this.props.render), \"You should not use <Route render> and <Route children> in the same route; <Route render> will be ignored\") : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.component && this.props.render), \"You should not use <Route component> and <Route render> in the same route; <Route render> will be ignored\") : void 0;\n  };\n\n  Route.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.location && !prevProps.location), '<Route> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(!this.props.location && prevProps.location), '<Route> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n  };\n}\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n  if (!basename) return location;\n  return _extends({}, location, {\n    pathname: addLeadingSlash(basename) + location.pathname\n  });\n}\n\nfunction stripBasename(basename, location) {\n  if (!basename) return location;\n  var base = addLeadingSlash(basename);\n  if (location.pathname.indexOf(base) !== 0) return location;\n  return _extends({}, location, {\n    pathname: location.pathname.substr(base.length)\n  });\n}\n\nfunction createURL(location) {\n  return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n  return function () {\n    process.env.NODE_ENV !== \"production\" ? invariant(false, \"You cannot %s with <StaticRouter>\", methodName) : invariant(false);\n  };\n}\n\nfunction noop() {}\n/**\n * The public top-level API for a \"static\" <Router>, so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\n\n\nvar StaticRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(StaticRouter, _React$Component);\n\n  function StaticRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n    _this.handlePush = function (location) {\n      return _this.navigateTo(location, \"PUSH\");\n    };\n\n    _this.handleReplace = function (location) {\n      return _this.navigateTo(location, \"REPLACE\");\n    };\n\n    _this.handleListen = function () {\n      return noop;\n    };\n\n    _this.handleBlock = function () {\n      return noop;\n    };\n\n    return _this;\n  }\n\n  var _proto = StaticRouter.prototype;\n\n  _proto.navigateTo = function navigateTo(location, action) {\n    var _this$props = this.props,\n        _this$props$basename = _this$props.basename,\n        basename = _this$props$basename === void 0 ? \"\" : _this$props$basename,\n        _this$props$context = _this$props.context,\n        context = _this$props$context === void 0 ? {} : _this$props$context;\n    context.action = action;\n    context.location = addBasename(basename, createLocation(location));\n    context.url = createURL(context.location);\n  };\n\n  _proto.render = function render() {\n    var _this$props2 = this.props,\n        _this$props2$basename = _this$props2.basename,\n        basename = _this$props2$basename === void 0 ? \"\" : _this$props2$basename,\n        _this$props2$context = _this$props2.context,\n        context = _this$props2$context === void 0 ? {} : _this$props2$context,\n        _this$props2$location = _this$props2.location,\n        location = _this$props2$location === void 0 ? \"/\" : _this$props2$location,\n        rest = _objectWithoutPropertiesLoose(_this$props2, [\"basename\", \"context\", \"location\"]);\n\n    var history = {\n      createHref: function createHref(path) {\n        return addLeadingSlash(basename + createURL(path));\n      },\n      action: \"POP\",\n      location: stripBasename(basename, createLocation(location)),\n      push: this.handlePush,\n      replace: this.handleReplace,\n      go: staticHandler(\"go\"),\n      goBack: staticHandler(\"goBack\"),\n      goForward: staticHandler(\"goForward\"),\n      listen: this.handleListen,\n      block: this.handleBlock\n    };\n    return React.createElement(Router, _extends({}, rest, {\n      history: history,\n      staticContext: context\n    }));\n  };\n\n  return StaticRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  StaticRouter.propTypes = {\n    basename: PropTypes.string,\n    context: PropTypes.object,\n    location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n  };\n\n  StaticRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<StaticRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { StaticRouter as Router }`.\") : void 0;\n  };\n}\n\n/**\n * The public API for rendering the first <Route> that matches.\n */\n\nvar Switch =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Switch, _React$Component);\n\n  function Switch() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Switch.prototype;\n\n  _proto.render = function render() {\n    var _this = this;\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Switch> outside a <Router>\") : invariant(false) : void 0;\n      var location = _this.props.location || context$$1.location;\n      var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()\n      // here because toArray adds keys to all child elements and we do not want\n      // to trigger an unmount/remount for two <Route>s that render the same\n      // component at different URLs.\n\n      React.Children.forEach(_this.props.children, function (child) {\n        if (match == null && React.isValidElement(child)) {\n          element = child;\n          var path = child.props.path || child.props.from;\n          match = path ? matchPath(location.pathname, _extends({}, child.props, {\n            path: path\n          })) : context$$1.match;\n        }\n      });\n      return match ? React.cloneElement(element, {\n        location: location,\n        computedMatch: match\n      }) : null;\n    });\n  };\n\n  return Switch;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Switch.propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.object\n  };\n\n  Switch.prototype.componentDidUpdate = function (prevProps) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(this.props.location && !prevProps.location), '<Switch> elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.') : void 0;\n    process.env.NODE_ENV !== \"production\" ? warning(!(!this.props.location && prevProps.location), '<Switch> elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.') : void 0;\n  };\n}\n\n/**\n * A public higher-order component to access the imperative API\n */\n\nfunction withRouter(Component) {\n  var displayName = \"withRouter(\" + (Component.displayName || Component.name) + \")\";\n\n  var C = function C(props) {\n    var wrappedComponentRef = props.wrappedComponentRef,\n        remainingProps = _objectWithoutPropertiesLoose(props, [\"wrappedComponentRef\"]);\n\n    return React.createElement(context.Consumer, null, function (context$$1) {\n      !context$$1 ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <\" + displayName + \" /> outside a <Router>\") : invariant(false) : void 0;\n      return React.createElement(Component, _extends({}, remainingProps, context$$1, {\n        ref: wrappedComponentRef\n      }));\n    });\n  };\n\n  C.displayName = displayName;\n  C.WrappedComponent = Component;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    C.propTypes = {\n      wrappedComponentRef: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object])\n    };\n  }\n\n  return hoistStatics(C, Component);\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  if (typeof window !== \"undefined\") {\n    var global = window;\n    var key = \"__react_router_build__\";\n    var buildNames = {\n      cjs: \"CommonJS\",\n      esm: \"ES modules\",\n      umd: \"UMD\"\n    };\n\n    if (global[key] && global[key] !== \"esm\") {\n      var initialBuildName = buildNames[global[key]];\n      var secondaryBuildName = buildNames[\"esm\"]; // TODO: Add link to article that explains in detail how to avoid\n      // loading 2 different builds.\n\n      throw new Error(\"You are loading the \" + secondaryBuildName + \" build of React Router \" + (\"on a page that is already running the \" + initialBuildName + \" \") + \"build, so things won't work right.\");\n    }\n\n    global[key] = \"esm\";\n  }\n}\n\nexport { MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, generatePath, matchPath, withRouter, context as __RouterContext };\n","/**\n * This action type will be dispatched when your history\n * receives a location change.\n */\nexport var LOCATION_CHANGE = '@@router/LOCATION_CHANGE';\nexport var onLocationChanged = function onLocationChanged(location, action) {\n  var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  return {\n    type: LOCATION_CHANGE,\n    payload: {\n      location: location,\n      action: action,\n      isFirstRendering: isFirstRendering\n    }\n  };\n};\n/**\n * This action type will be dispatched by the history actions below.\n * If you're writing a middleware to watch for navigation events, be sure to\n * look for actions of this type.\n */\n\nexport var CALL_HISTORY_METHOD = '@@router/CALL_HISTORY_METHOD';\n\nvar updateLocation = function updateLocation(method) {\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return {\n      type: CALL_HISTORY_METHOD,\n      payload: {\n        method: method,\n        args: args\n      }\n    };\n  };\n};\n/**\n * These actions correspond to the history API.\n * The associated routerMiddleware will capture these events before they get to\n * your reducer and reissue them as the matching function on your history.\n */\n\n\nexport var push = updateLocation('push');\nexport var replace = updateLocation('replace');\nexport var go = updateLocation('go');\nexport var goBack = updateLocation('goBack');\nexport var goForward = updateLocation('goForward');\nexport var routerActions = {\n  push: push,\n  replace: replace,\n  go: go,\n  goBack: goBack,\n  goForward: goForward\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { matchPath } from \"react-router\";\n\nvar createSelectors = function createSelectors(structure) {\n  var getIn = structure.getIn,\n      toJS = structure.toJS;\n\n  var isRouter = function isRouter(value) {\n    return value != null && _typeof(value) === 'object' && getIn(value, ['location']) && getIn(value, ['action']);\n  };\n\n  var getRouter = function getRouter(state) {\n    var router = toJS(getIn(state, ['router']));\n\n    if (!isRouter(router)) {\n      throw 'Could not find router reducer in state tree, it must be mounted under \"router\"';\n    }\n\n    return router;\n  };\n\n  var getLocation = function getLocation(state) {\n    return toJS(getIn(getRouter(state), ['location']));\n  };\n\n  var getAction = function getAction(state) {\n    return toJS(getIn(getRouter(state), ['action']));\n  };\n\n  var getSearch = function getSearch(state) {\n    return toJS(getIn(getRouter(state), ['location', 'search']));\n  };\n\n  var getHash = function getHash(state) {\n    return toJS(getIn(getRouter(state), ['location', 'hash']));\n  }; // It only makes sense to recalculate the `matchPath` whenever the pathname\n  // of the location changes. That's why `createMatchSelector` memoizes\n  // the latest result based on the location's pathname.\n\n\n  var createMatchSelector = function createMatchSelector(path) {\n    var lastPathname = null;\n    var lastMatch = null;\n    return function (state) {\n      var _ref = getLocation(state) || {},\n          pathname = _ref.pathname;\n\n      if (pathname === lastPathname) {\n        return lastMatch;\n      }\n\n      lastPathname = pathname;\n      var match = matchPath(pathname, path);\n\n      if (!match || !lastMatch || match.url !== lastMatch.url) {\n        lastMatch = match;\n      }\n\n      return lastMatch;\n    };\n  };\n\n  return {\n    getLocation: getLocation,\n    getAction: getAction,\n    getRouter: getRouter,\n    getSearch: getSearch,\n    getHash: getHash,\n    createMatchSelector: createMatchSelector\n  };\n};\n\nexport default createSelectors;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect, ReactReduxContext } from 'react-redux';\nimport { Router } from 'react-router';\nimport { onLocationChanged as _onLocationChanged } from './actions';\nimport createSelectors from './selectors';\n\nvar createConnectedRouter = function createConnectedRouter(structure) {\n  var _createSelectors = createSelectors(structure),\n      getLocation = _createSelectors.getLocation;\n  /*\n   * ConnectedRouter listens to a history object passed from props.\n   * When history is changed, it dispatches action to redux store.\n   * Then, store will pass props to component to render.\n   * This creates uni-directional flow from history->store->router->components.\n   */\n\n\n  var ConnectedRouter =\n  /*#__PURE__*/\n  function (_PureComponent) {\n    _inherits(ConnectedRouter, _PureComponent);\n\n    function ConnectedRouter(props) {\n      var _this;\n\n      _classCallCheck(this, ConnectedRouter);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(ConnectedRouter).call(this, props));\n      var store = props.store,\n          history = props.history,\n          onLocationChanged = props.onLocationChanged;\n      _this.inTimeTravelling = false; // Subscribe to store changes to check if we are in time travelling\n\n      _this.unsubscribe = store.subscribe(function () {\n        // Extract store's location\n        var _getLocation = getLocation(store.getState()),\n            pathnameInStore = _getLocation.pathname,\n            searchInStore = _getLocation.search,\n            hashInStore = _getLocation.hash; // Extract history's location\n\n\n        var _history$location = history.location,\n            pathnameInHistory = _history$location.pathname,\n            searchInHistory = _history$location.search,\n            hashInHistory = _history$location.hash; // If we do time travelling, the location in store is changed but location in history is not changed\n\n        if (pathnameInHistory !== pathnameInStore || searchInHistory !== searchInStore || hashInHistory !== hashInStore) {\n          _this.inTimeTravelling = true; // Update history's location to match store's location\n\n          history.push({\n            pathname: pathnameInStore,\n            search: searchInStore,\n            hash: hashInStore\n          });\n        }\n      });\n\n      var handleLocationChange = function handleLocationChange(location, action) {\n        var isFirstRendering = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n        // Dispatch onLocationChanged except when we're in time travelling\n        if (!_this.inTimeTravelling) {\n          onLocationChanged(location, action, isFirstRendering);\n        } else {\n          _this.inTimeTravelling = false;\n        }\n      }; // Listen to history changes\n\n\n      _this.unlisten = history.listen(handleLocationChange); // Dispatch a location change action for the initial location.\n      // This makes it backward-compatible with react-router-redux.\n      // But, we add `isFirstRendering` to `true` to prevent double-rendering.\n\n      handleLocationChange(history.location, history.action, true);\n      return _this;\n    }\n\n    _createClass(ConnectedRouter, [{\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        this.unlisten();\n        this.unsubscribe();\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this$props = this.props,\n            history = _this$props.history,\n            children = _this$props.children;\n        return React.createElement(Router, {\n          history: history\n        }, children);\n      }\n    }]);\n\n    return ConnectedRouter;\n  }(PureComponent);\n\n  ConnectedRouter.propTypes = {\n    store: PropTypes.shape({\n      getState: PropTypes.func.isRequired,\n      subscribe: PropTypes.func.isRequired\n    }).isRequired,\n    history: PropTypes.shape({\n      action: PropTypes.string.isRequired,\n      listen: PropTypes.func.isRequired,\n      location: PropTypes.object.isRequired,\n      push: PropTypes.func.isRequired\n    }).isRequired,\n    basename: PropTypes.string,\n    children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n    onLocationChanged: PropTypes.func.isRequired\n  };\n\n  var mapDispatchToProps = function mapDispatchToProps(dispatch) {\n    return {\n      onLocationChanged: function onLocationChanged(location, action, isFirstRendering) {\n        return dispatch(_onLocationChanged(location, action, isFirstRendering));\n      }\n    };\n  };\n\n  var ConnectedRouterWithContext = function ConnectedRouterWithContext(props) {\n    var Context = props.context || ReactReduxContext;\n\n    if (Context == null) {\n      throw 'Please upgrade to react-redux v6';\n    }\n\n    return React.createElement(Context.Consumer, null, function (_ref) {\n      var store = _ref.store;\n      return React.createElement(ConnectedRouter, _extends({\n        store: store\n      }, props));\n    });\n  };\n\n  ConnectedRouterWithContext.propTypes = {\n    context: PropTypes.object\n  };\n  return connect(null, mapDispatchToProps)(ConnectedRouterWithContext);\n};\n\nexport default createConnectedRouter;","import { LOCATION_CHANGE } from './actions';\n\nvar createConnectRouter = function createConnectRouter(structure) {\n  var fromJS = structure.fromJS,\n      merge = structure.merge;\n\n  var createRouterReducer = function createRouterReducer(history) {\n    var initialRouterState = fromJS({\n      location: history.location,\n      action: history.action\n    });\n    /*\n    * This reducer will update the state with the most recent location history\n    * has transitioned to.\n    */\n\n    return function () {\n      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialRouterState;\n\n      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n          type = _ref.type,\n          payload = _ref.payload;\n\n      if (type === LOCATION_CHANGE) {\n        var location = payload.location,\n            action = payload.action,\n            isFirstRendering = payload.isFirstRendering; // Don't update the state ref for the first rendering\n        // to prevent the double-rendering issue on initilization\n\n        return isFirstRendering ? state : merge(state, {\n          location: fromJS(location),\n          action: action\n        });\n      }\n\n      return state;\n    };\n  };\n\n  return createRouterReducer;\n};\n\nexport default createConnectRouter;","/* Code from github.com/erikras/redux-form by Erik Rasmussen */\nvar getIn = function getIn(state, path) {\n  if (!state) {\n    return state;\n  }\n\n  var length = path.length;\n\n  if (!length) {\n    return undefined;\n  }\n\n  var result = state;\n\n  for (var i = 0; i < length && !!result; ++i) {\n    result = result[path[i]];\n  }\n\n  return result;\n};\n\nexport default getIn;","function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport getIn from './getIn';\nvar structure = {\n  fromJS: function fromJS(value) {\n    return value;\n  },\n  getIn: getIn,\n  merge: function merge(state, payload) {\n    return _objectSpread({}, state, payload);\n  },\n  toJS: function toJS(value) {\n    return value;\n  }\n};\nexport default structure;","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nimport { CALL_HISTORY_METHOD } from './actions';\n/**\n * This middleware captures CALL_HISTORY_METHOD actions to redirect to the\n * provided history object. This will prevent these actions from reaching your\n * reducer or any middleware that comes after this one.\n */\n\nvar routerMiddleware = function routerMiddleware(history) {\n  return function (store) {\n    return function (next) {\n      return function (action) {\n        // eslint-disable-line no-unused-vars\n        if (action.type !== CALL_HISTORY_METHOD) {\n          return next(action);\n        }\n\n        var _action$payload = action.payload,\n            method = _action$payload.method,\n            args = _action$payload.args;\n        history[method].apply(history, _toConsumableArray(args));\n      };\n    };\n  };\n};\n\nexport default routerMiddleware;","import createConnectedRouter from \"./ConnectedRouter\";\nimport createConnectRouter from \"./reducer\";\nimport createSelectors from \"./selectors\";\nimport plainStructure from \"./structure/plain\";\nexport { LOCATION_CHANGE, CALL_HISTORY_METHOD, onLocationChanged, push, replace, go, goBack, goForward, routerActions } from \"./actions\";\nexport { default as routerMiddleware } from \"./middleware\";\nexport var ConnectedRouter =\n/*#__PURE__*/\ncreateConnectedRouter(plainStructure);\nexport var connectRouter =\n/*#__PURE__*/\ncreateConnectRouter(plainStructure);\n\nvar _createSelectors =\n/*#__PURE__*/\ncreateSelectors(plainStructure),\n    getLocation = _createSelectors.getLocation,\n    getAction = _createSelectors.getAction,\n    getHash = _createSelectors.getHash,\n    getSearch = _createSelectors.getSearch,\n    createMatchSelector = _createSelectors.createMatchSelector;\n\nexport { getLocation, getAction, getHash, getSearch, createMatchSelector };","import { createAction } from 'pmt-modules/redux'\r\n\r\nexport const UiAction = {\r\n  UPDATE: 'UI::UPDATE',\r\n}\r\n\r\nexport const updateUI = (key, data) =>\r\n  createAction(UiAction.UPDATE, {\r\n    key,\r\n    data,\r\n  })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getState = state => state.ui\r\n\r\nexport const getUi = createSelector([getState], data => (isNil(data) ? data : data.toJS()))\r\n","export const generateKeyForComponent = c =>\r\n  (c.displayName || c.name) + Math.floor(Math.random() * (1 << 30)).toString(16)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport get from 'lodash/get'\r\n\r\nimport { updateUI } from './actions'\r\nimport { getUi } from './selectors'\r\nimport { generateKeyForComponent } from './utils'\r\n\r\nclass UiContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.uiState = {}\r\n    this.key = generateKeyForComponent(props.WrappedComponent)\r\n  }\r\n\r\n  componentWillMount() {\r\n    let state = {\r\n      ...this.props.uiState.state,\r\n    }\r\n\r\n    Object.keys(state).forEach(k => {\r\n      if (typeof state[k] === 'function') {\r\n        state[k] = state[k](this.props)\r\n      }\r\n    })\r\n\r\n    this.props.updateUI(this.key, state)\r\n  }\r\n\r\n  componentWillReceiveProps({ ui, uiState }) {\r\n    ui = get(ui, this.key, {})\r\n    this.uiState = {\r\n      ...uiState.state,\r\n      ...ui,\r\n    }\r\n  }\r\n\r\n  updateUI = state => {\r\n    this.props.updateUI(this.key, state)\r\n  }\r\n\r\n  render() {\r\n    const { WrappedComponent, ...otherProps } = this.props\r\n\r\n    return <WrappedComponent {...otherProps} ui={this.uiState} updateUI={this.updateUI} />\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  ui: getUi(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    updateUI,\r\n  }\r\n)(UiContainer)\r\n","import React from 'react'\r\n\r\nimport UiContainer from './UiContainer'\r\n\r\nexport default function ui(uiState) {\r\n  return WrappedComponent => props => (\r\n    <UiContainer uiState={uiState} WrappedComponent={WrappedComponent} {...props} />\r\n  )\r\n}\r\n","import Immutable from 'immutable'\r\n\r\nimport { UiAction } from './actions'\r\nimport ui from './ui'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\nexport const uiReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case UiAction.UPDATE:\r\n      return state.mergeIn([action.key], action.data)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport default ui\r\n","export { ThemeProvider, withStyles, withTheme } from '@material-ui/styles'\r\n\r\nexport * from '@material-ui/core/styles'\r\nexport { getLuminance, lighten } from '@material-ui/core/styles/colorManipulator'\r\nexport { dark, light } from '@material-ui/core/styles/createPalette'\r\n\r\n// Retro-compatibility Bridge : createMuiTheme -> createTheme\r\nimport { createTheme as muiCreateTheme } from '@material-ui/core/styles'\r\n\r\nexport const createTheme = muiCreateTheme\r\nexport const createMuiTheme = muiCreateTheme // Deprecated alias\r\n","import Immutable from 'immutable'\r\n\r\nconst CHANGE_CURRENT_THEME = 'Theme::CHANGE_CURRENT_THEME'\r\n\r\nexport const changeCurrentTheme = (newCurrentTheme) => ({\r\n  type: CHANGE_CURRENT_THEME,\r\n  newCurrentTheme\r\n})\r\n\r\n// configure it on the appOptions\r\n// theme: {\r\n//  muiTheme: { } <- on this value\r\n// }\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\n//\r\n// current theme reducer\r\n//\r\nexport const currentTheme = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case CHANGE_CURRENT_THEME:\r\n      return Immutable.fromJS(action.newCurrentTheme)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { combineReducers } from 'redux'\r\n\r\nimport { currentTheme } from './currentTheme'\r\n\r\n//\r\n// theme reducer.\r\n//\r\nexport const theme = combineReducers({\r\n  current: currentTheme,\r\n})\r\n","import { createSelector } from 'reselect'\r\n\r\n//\r\n// selectors for the currentTheme and defaultThemes reducers.\r\n//\r\n\r\nconst getThemeOnState = (state) => state.ux.theme\r\n\r\nconst getCurrentThemeOnState = (state) => getThemeOnState(state).current\r\n\r\nexport const getCurrentTheme = createSelector(\r\n  [ getCurrentThemeOnState ],\r\n  (theme) => theme ? theme.toJS() : null\r\n)\r\n","import { createMuiTheme } from 'pmt-ui/styles'\r\n\r\nexport * from './theme'\r\nexport * from './selectors'\r\nexport * from './constants'\r\nexport { changeCurrentTheme } from './currentTheme'\r\n\r\n//\r\n// {\r\n//    muiTheme: {}, // see https://material-ui-1dab0.firebaseapp.com/customization/themes/#configuration-variables\r\n// }\r\n//\r\n// contains the theme defined on the appOptions\r\nlet _theme = {}\r\n\r\nexport const registerTheme = (theme) => {\r\n  _theme = theme\r\n}\r\n\r\nexport const getRegisteredTheme = () => (\r\n  _theme\r\n)\r\n\r\nexport const getRegisteredMuiTheme = () => (\r\n  createMuiTheme(getRegisteredTheme().muiTheme)\r\n)\r\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var baseGet = require('./_baseGet'),\n    baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var castPath = require('./_castPath'),\n    last = require('./last'),\n    parent = require('./_parent'),\n    toKey = require('./_toKey');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n\n  // Prevent prototype pollution, see: https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n  var index = -1,\n      length = path.length;\n\n  if (!length) {\n    return true;\n  }\n\n  var isRootPrimitive = object == null || (typeof object !== 'object' && typeof object !== 'function');\n\n  while (++index < length) {\n    var key = path[index];\n\n    // skip non-string keys (e.g., Symbols, numbers)\n    if (typeof key !== 'string') {\n      continue;\n    }\n\n    // Always block \"__proto__\" anywhere in the path if it's not expected\n    if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n      return false;\n    }\n\n    // Block \"constructor.prototype\" chains\n    if (key === 'constructor' &&\n        (index + 1) < length &&\n        typeof path[index + 1] === 'string' &&\n        path[index + 1] === 'prototype') {\n\n      // Allow ONLY when the path starts at a primitive root, e.g., _.unset(0, 'constructor.prototype.a')\n      if (isRootPrimitive && index === 0) {\n        continue;\n      }\n\n      return false;\n    }\n  }\n\n  var obj = parent(object, path);\n  return obj == null || delete obj[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var baseUnset = require('./_baseUnset'),\n    isIndex = require('./_isIndex');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\nfunction basePullAt(array, indexes) {\n  var length = array ? indexes.length : 0,\n      lastIndex = length - 1;\n\n  while (length--) {\n    var index = indexes[length];\n    if (length == lastIndex || index !== previous) {\n      var previous = index;\n      if (isIndex(index)) {\n        splice.call(array, index, 1);\n      } else {\n        baseUnset(array, index);\n      }\n    }\n  }\n  return array;\n}\n\nmodule.exports = basePullAt;\n","var baseIteratee = require('./_baseIteratee'),\n    basePullAt = require('./_basePullAt');\n\n/**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n *   return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\nfunction remove(array, predicate) {\n  var result = [];\n  if (!(array && array.length)) {\n    return result;\n  }\n  var index = -1,\n      indexes = [],\n      length = array.length;\n\n  predicate = baseIteratee(predicate, 3);\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result.push(value);\n      indexes.push(index);\n    }\n  }\n  basePullAt(array, indexes);\n  return result;\n}\n\nmodule.exports = remove;\n","// TODO: rename to DialogType to be consistant\r\nexport const ModalType = {\r\n  /**\r\n   * Props:\r\n   * - entry: the entry to share\r\n   * - item: the item (nullable)\r\n   */\r\n  PAYMENT_CHOOSE_ENTRY_DIVIDER: 'PAYMENT_CHOOSE_ENTRY_DIVIDER',\r\n\r\n  PAYMENT_GENEROUS_PAYMENT: 'PAYMENT_GENEROUS_PAYMENT',\r\n\r\n  /**\r\n   * Props:\r\n   * - error\r\n   */\r\n  ERROR: 'ERROR',\r\n\r\n  /**\r\n   * Props:\r\n   */\r\n  DELETE_CART: 'DELETE_CART',\r\n\r\n  /**\r\n   * Props:\r\n   * - productId\r\n   */\r\n  ORDER_PLUGIN_PRODUCT_VIEW: 'ORDER_PLUGIN_PRODUCT_VIEW',\r\n\r\n  /**\r\n   * Show the dialog containing all items that will be deleted when changing schedule\r\n   */\r\n  CART_DIFF_ITEMS: 'CART_DIFF_ITEMS',\r\n\r\n  /**\r\n   * Show the dialog containing all items that are in limited stock which are ordered in too high number.\r\n   *\r\n   * Eg: 3 Coca while only 2 are in stock\r\n   */\r\n  LIMITED_STOCK_ITEMS: 'LIMITED_STOCK_ITEMS',\r\n\r\n  /**\r\n   * Show the dialog containing all the vouchers that will be deleted because invalid\r\n   */\r\n  INVALID_VOUCHERS: 'INVALID_VOUCHERS',\r\n\r\n  /**\r\n   * Props:\r\n   * - company\r\n   */\r\n  ADD_ADMISSION_FEE_RULE: 'ADD_ADMISSION_FEE_RULE',\r\n\r\n  /**\r\n   * Props:\r\n   * - company\r\n   */\r\n  ADD_SUBSIDY_RULE: 'ADD_SUBSIDY_RULE',\r\n\r\n  /**\r\n   *\r\n   */\r\n  SUGGESTION_VIEW: 'SUGGESTION_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  UPSELLING_VIEW: 'UPSELLING_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  CART_MODIFIER_VIEW: 'CART_MODIFIER_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  PRODUCT_VIEW: 'PRODUCT_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  LOOSE_CART_VIEW: 'LOOSE_CART_VIEW',\r\n\r\n  /**\r\n   *\r\n   */\r\n  INACTIVITY: 'INACTIVITY',\r\n\r\n  /**\r\n   *\r\n   */\r\n  PRINTER_DISABLED: 'PRINTER_DISABLED',\r\n\r\n  /**\r\n   *\r\n   */\r\n  POST_ORDER_ERROR_BACK_HOME: 'POST_ORDER_ERROR_BACK_HOME',\r\n\r\n  /**\r\n   *\r\n   */\r\n  DIETARY_INFO: 'DIETARY_INFO',\r\n\r\n  /**\r\n   *\r\n   */\r\n  RESTAURANTS_GROUP_SELECTION: 'RESTAURANTS_GROUP_SELECTION',\r\n\r\n  /**\r\n   *\r\n   */\r\n  UNAVAILABLE_DUE_DATE: 'UNAVAILABLE_DUE_DATE',\r\n\r\n  /**\r\n   *\r\n   */\r\n  ORDER_MODE_DISABLED: 'ORDER_MODE_DISABLED',\r\n\r\n  /**\r\n   *\r\n   */\r\n  RESTAURANT_DISABLED: 'RESTAURANT_DISABLED',\r\n\r\n  /**\r\n   *\r\n   */\r\n  RESTAURANT_CLOSED: 'RESTAURANT_CLOSED',\r\n\r\n  /**\r\n   *\r\n   */\r\n  TABLE_NOT_FOUND: 'TABLE_NOT_FOUND',\r\n\r\n  /**\r\n   *\r\n   */\r\n  EXPIRED_SESSION: 'EXPIRED_SESSION',\r\n}\r\n\r\nexport default ModalType\r\n","/**\r\n * Inspired by https://stackoverflow.com/questions/35623656/how-can-i-display-a-modal-dialog-in-redux-that-performs-asynchronous-actions/35641680\r\n */\r\n\r\nimport { createAction } from '../redux'\r\n\r\nimport { ModalType } from './constants/ModalType'\r\n\r\nexport const DialogAction = {\r\n  SHOW_DIALOG: 'DIALOG::SHOW',\r\n  HIDE_DIALOG: 'DIALOG::HIDE',\r\n  HIDE_DIALOG_BACK: 'DIALOG::HIDE_BACK',\r\n  RESET: 'DIALOG::RESET',\r\n}\r\n\r\nexport const createShowDialogAction =\r\n  (dialogType, dialogProps, callback = null) =>\r\n  dispatch => {\r\n    if (callback !== null) {\r\n      callback()\r\n    }\r\n    return dispatch({\r\n      type: DialogAction.SHOW_DIALOG,\r\n      dialogType,\r\n      dialogProps,\r\n    })\r\n  }\r\n\r\nexport const createHideDialogAction = dialogType => dispatch => {\r\n  return dispatch(hideDialogAction(dialogType))\r\n}\r\n\r\n// clean a specific dialog\r\nexport const hideDialogAction = dialogType => createAction(DialogAction.HIDE_DIALOG, { dialogType })\r\n\r\n// clean all openened dialogs\r\nexport const resetDialogAction = () => createAction(DialogAction.RESET)\r\n\r\n// this dialog is used on web customer\r\n// to choose the divider that will be affected to an entry\r\nexport const displayChooseEntryDividerDialog = entry =>\r\n  createShowDialogAction(ModalType.PAYMENT_CHOOSE_ENTRY_DIVIDER, { id: entry.id })\r\n\r\n// this dialog is used on web customer\r\n// to choose the divider that will be affected to an entry\r\nexport const displayGenerousPaymentDialog = ({\r\n  checkId,\r\n  restaurantId,\r\n  amount,\r\n  outstandingBalance,\r\n}) =>\r\n  createShowDialogAction(ModalType.PAYMENT_GENEROUS_PAYMENT, {\r\n    checkId,\r\n    restaurantId,\r\n    amount,\r\n    outstandingBalance,\r\n  })\r\n\r\n// this dialog is used on order plugin\r\n// warns the user that his carts is going to be deleted if he comes back to store locator\r\nexport const displayDeleteCartDialog = () => createShowDialogAction(ModalType.DELETE_CART, {})\r\n\r\nexport const displayLimitedStockItemsDialog = (limitedStockItems, limitedStockMessageFallback) =>\r\n  createShowDialogAction(ModalType.LIMITED_STOCK_ITEMS, {\r\n    limitedStockItems,\r\n    limitedStockMessageFallback,\r\n  })\r\n\r\nexport const hideLimitedStockItemsDialog = () =>\r\n  createHideDialogAction(ModalType.LIMITED_STOCK_ITEMS)\r\n\r\nexport const displayCartDiffItemsDialog = () =>\r\n  createShowDialogAction(ModalType.CART_DIFF_ITEMS, {})\r\n\r\nexport const displayCartModifierDialog = cartModifiers =>\r\n  createShowDialogAction(ModalType.CART_MODIFIER_VIEW, { cartModifiers })\r\n\r\nexport const hideCartModifierDialog = () => createHideDialogAction(ModalType.CART_MODIFIER_VIEW)\r\n\r\nexport const displayInvalidVouchersDialog = () =>\r\n  createShowDialogAction(ModalType.INVALID_VOUCHERS, {})\r\n","import find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\n//\r\n// {\r\n//   type: ModalType.ORDER_PLUGIN_PRODUCT_VIEW,\r\n//   view: ProductDialog,\r\n// }\r\n//\r\n\r\nlet _dialogs = []\r\nexport const registerDialogs = (dialogs) => {\r\n  _dialogs = dialogs\r\n}\r\n\r\nexport const getDialogs = (dialogs) => (\r\n  _dialogs\r\n)\r\n\r\n/**\r\n * @param  {string} dialogType DialogType of the dialog to retrive\r\n * @return {DialogConfiguration} the configuration for the given DialogType\r\n */\r\nexport const getDialogViewForType = (dialogType) => {\r\n  const dialog = find(_dialogs, (dialog) => dialogType === dialog.type)\r\n\r\n  invariant(!isNil(dialog), 'dialog ' + dialogType + ' not registered')\r\n\r\n  return dialog.view\r\n}\r\n","import { createSelector } from 'reselect'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nconst getDialogState = state => state.ux.dialog\r\n\r\n/**\r\n * at the moment, we only display one dialog at a time so we select the last one requested\r\n * an idea for future developments : handle a priority system instead of always the last one\r\n */\r\nexport const getDialog = createSelector([getDialogState], dialogState => {\r\n  const dialogs = dialogState.get('list').toJS()\r\n\r\n  if (!isEmpty(dialogs)) {\r\n    const dialog = dialogs[dialogs.length - 1]\r\n    return dialog.type ? dialog : null\r\n  }\r\n\r\n  return {}\r\n})\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport Dialog from 'pmt-ui/Dialog'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { hideDialogAction } from '../actions'\r\nimport { getDialogViewForType } from '../config'\r\nimport { getDialog } from '../selectors'\r\n\r\n/**\r\n * TODO: use portal?\r\n * https://github.com/cloudflare/react-gateway\r\n *\r\n * The root component of any modal\r\n */\r\nconst DialogRoot = ({ dialog, hideDialogAction }) => {\r\n  if (!dialog.type) {\r\n    return null\r\n  }\r\n\r\n  const SpecificModal = getDialogViewForType(dialog.type)\r\n\r\n  class generateDialog extends React.Component {\r\n    render() {\r\n      const { classes } = this.props\r\n\r\n      return SpecificModal.DialogRootProps && SpecificModal.DialogRootProps.isComplex ? (\r\n        <SpecificModal\r\n          {...dialog.props}\r\n          onClose={() => {\r\n            hideDialogAction(dialog.type)\r\n          }}\r\n        >\r\n          {({ dialogContent, ...otherProps }) => (\r\n            <Dialog\r\n              open\r\n              // false to handle onClose when clicking outside.\r\n              // handle legacy `ignoreBackdropClick` renamed to `disableBackdropClick`\r\n              disableBackdropClick={\r\n                (SpecificModal.DialogRootProps &&\r\n                  SpecificModal.DialogRootProps.ignoreBackdropClick) ||\r\n                false\r\n              }\r\n              onClose={() => {\r\n                hideDialogAction(dialog.type)\r\n              }}\r\n              {...SpecificModal.DialogRootProps}\r\n              classes={classes}\r\n              {...otherProps}\r\n            >\r\n              {React.cloneElement(dialogContent)}\r\n            </Dialog>\r\n          )}\r\n        </SpecificModal>\r\n      ) : (\r\n        <Dialog\r\n          open\r\n          // false to handle onClose when clicking outside.\r\n          // handle legacy `ignoreBackdropClick` renamed to `disableBackdropClick`\r\n          disableBackdropClick={\r\n            (SpecificModal.DialogRootProps && SpecificModal.DialogRootProps.ignoreBackdropClick) ||\r\n            false\r\n          }\r\n          onClose={() => {\r\n            hideDialogAction(dialog.type)\r\n          }}\r\n          {...SpecificModal.DialogRootProps}\r\n          classes={classes}\r\n        >\r\n          <SpecificModal\r\n            // add shortcut to hide the dialog\r\n            onClose={() => {\r\n              hideDialogAction(dialog.type)\r\n            }}\r\n            {...dialog.props}\r\n          />\r\n        </Dialog>\r\n      )\r\n    }\r\n  }\r\n\r\n  const DialogWithStyles = withStyles(SpecificModal.DialogStyles || {})(generateDialog)\r\n\r\n  return <DialogWithStyles />\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  dialog: getDialog(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    hideDialogAction,\r\n  }\r\n)(DialogRoot)\r\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","export { LOCATION_CHANGE } from 'connected-react-router'\r\n\r\nexport const Query = {\r\n  // Special query value that force the query param to be removed.\r\n  // used to force remove the query parameters to keep on all pages.\r\n  // see actions.js#generatePathWithParams\r\n  REMOVE_ME: 'QUERY::REMOVE_ME',\r\n}\r\n","var baseFor = require('./_baseFor'),\n    castFunction = require('./_castFunction'),\n    keysIn = require('./keysIn');\n\n/**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nmodule.exports = forIn;\n","import invariant from 'invariant'\r\n\r\nimport forIn from 'lodash/forIn'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\n/**\r\n * Define a route.\r\n */\r\nexport default class Route {\r\n  /**\r\n   * Construct a new Route object.\r\n   * @param name The name (identifier) of the route.\r\n   * @param path The path of the route. Ex: /home or /restaurants/:id\r\n   * @param handler The handler for this route. A null handler disable the route\r\n   * @param handler Define if the route is restrict to loggedIn user\r\n   * @param disable\r\n   */\r\n  constructor(name, path, authRequired = true, disable = false) {\r\n    invariant(path.indexOf(' ') === -1, `invalid path ${path} for route ${name}`)\r\n    invariant(name.indexOf(' ') === -1, `invalid name ${name}`)\r\n\r\n    this.name = name\r\n    this.path = path\r\n    this.authRequired = authRequired\r\n    this.disable = disable\r\n  }\r\n\r\n  formatQueryParams(parameters) {\r\n    let qs = ''\r\n    for (let key in parameters) {\r\n      let value = parameters[key]\r\n      qs += encodeURIComponent(key) + '=' + encodeURIComponent(value) + '&'\r\n    }\r\n    if (qs.length > 0) {\r\n      qs = qs.substring(0, qs.length - 1) // chop off last '&'\r\n      return `?${qs}`\r\n    }\r\n\r\n    return ''\r\n  }\r\n\r\n  parseQueryToObject(query) {\r\n    query = query.replace(/\\+/g, '%20')\r\n\r\n    let arr = {}\r\n    let a = query.split(/&(?!amp)/g)\r\n\r\n    for (let i = 0; i < a.length; i++) {\r\n      const pair = a[i].split('=')\r\n      arr[pair[0]] = decodeURIComponent(a[i].substr(a[i].indexOf('=') + 1))\r\n    }\r\n\r\n    return arr\r\n  }\r\n\r\n  /*\r\n   * Replace params. On url definition, params start with ':'\r\n   */\r\n  generatePathWithParams(params, query, options = {}) {\r\n    const search = window.location.search.substring(1)\r\n\r\n    if (!isEmpty(search) && options.keepQuery === true) {\r\n      query = { ...query, ...this.parseQueryToObject(document.location.search.substring(1)) }\r\n    }\r\n\r\n    let path = this.path\r\n    forIn(params, (param, key) => {\r\n      path = path.replace(`:${key}`, param)\r\n    })\r\n\r\n    return path + this.formatQueryParams(query) + (options?.anchor ? `#${options.anchor}` : '')\r\n  }\r\n\r\n  getPath() {\r\n    return this.path\r\n  }\r\n}\r\n","import Route from '../model/Route'\r\n\r\n/**\r\n * Enum that contains:\r\n * - our global routes: dev routes and generice routes.\r\n * - our projects routes: TODO: refactor. Those routes should be put on app/config/routingEnum\r\n *\r\n * The `handler` component for each route is define on `app/config/routes` (NEVER define an handler\r\n * here)\r\n */\r\nconst SdkRoutingEnum = {\r\n  //\r\n  // Generic\r\n  //\r\n\r\n  HOME: new Route('HOME', '/', true),\r\n\r\n  LOGIN: new Route('LOGIN', '/login', false),\r\n\r\n  LOGOUT: new Route('LOGOUT', '/logout', false),\r\n\r\n  REGISTER: new Route('REGISTER', '/register', false),\r\n\r\n  FORGOT_PASSWORD: new Route('FORGOT_PASSWORD', '/forgot-password', false),\r\n\r\n  // TODO: to implement\r\n  RELOAD: new Route('USER::RELOAD', '/reload'),\r\n\r\n  USER_PROFILE: new Route('USER::PROFILE', '/users/:userId/profile'),\r\n\r\n  // generic 404 page\r\n  // https://stackoverflow.com/questions/32128978/react-router-no-not-found-route\r\n  PAGE_NOT_FOUND: new Route('PAGE_NOT_FOUND', '*'),\r\n\r\n  // fake page, used to display a loading page while loading the real page chunk\r\n  PAGE_LOADING: new Route('PAGE_LOADING', '/page-loading'),\r\n\r\n  //\r\n  // development pages\r\n  // Those pages are defined on pmt-modules/dev/pages and are available only in development.\r\n  //\r\n\r\n  DEV_THEME: new Route('DEV::THEME', '/dev/theme'),\r\n\r\n  DEV_STYLEGUIDE: new Route('DEV::STYLEGUIDE', '/dev/styleguide'),\r\n\r\n  DEV_TEST: new Route('DEV::TEST', '/dev/test'),\r\n}\r\n\r\nexport default SdkRoutingEnum\r\n","import invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\nimport find from 'lodash/find'\r\nimport isString from 'lodash/isString'\r\n\r\nimport SdkRoutingEnum from './constants/SdkRoutingEnum'\r\n\r\nlet _routes = []\r\n\r\nexport const registerRoutes = routes => {\r\n  _routes = routes\r\n}\r\n\r\nexport const getRoutes = () => _routes\r\n\r\nexport const getConfigForRoute = route => {\r\n  if (!route) {\r\n    return null\r\n  }\r\n\r\n  if (isString(route)) {\r\n    route = getRoute(route)\r\n  }\r\n  return find(_routes, routeDefinition => {\r\n    return route.name === routeDefinition.definition.name\r\n  })\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nlet _history = null\r\n\r\nexport const registerHistory = history => {\r\n  _history = history\r\n}\r\n\r\nexport const getHistory = () => _history\r\n\r\n//\r\n//\r\n//\r\n\r\n// spread SdkRoutingEnum to allow dev pages from sdk\r\nlet _routingEnum = { ...SdkRoutingEnum }\r\n\r\nexport const registerRoutingEnum = routingEnum => {\r\n  // Note: the given routingEnum must have spread SdkRoutingEnum\r\n  _routingEnum = routingEnum\r\n}\r\n\r\nexport const getRoutingEnum = () => _routingEnum\r\n\r\nexport const getRoute = routeName => {\r\n  const route = getRoutingEnum()[routeName]\r\n  invariant(\r\n    !isNil(route),\r\n    `Not route found for ${routeName}. Verify that you defined the route on the routes`\r\n  )\r\n  return route\r\n}\r\n","import isString from 'lodash/isString'\r\nimport forEach from 'lodash/forEach'\r\nimport isArray from 'lodash/isArray'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { push, replace, goBack as goBackAction } from 'connected-react-router'\r\n\r\nimport invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\nimport pickBy from 'lodash/pickBy'\r\n\r\nimport { getHostname, getRelativePath } from 'pmt-utils/url'\r\n\r\nimport { Query } from './constants'\r\nimport { formatQueryParams, getQueryFromUri } from './utils'\r\nimport { getConfigForRoute, getHistory } from './config'\r\n\r\nimport { isWebCustomer } from '../environment'\r\n\r\n//\r\n// connected-react-router need a middleware to handle functions such as `push(location)`,\r\n// `replace(loacation)`\r\n// It handle actions creators that correspond with the history methods of the same name.\r\n// see https://github.com/supasate/connected-react-router\r\n//\r\n// For reference they are defined as follows:\r\n// push - Pushes a new location to history, becoming the current location.\r\n// replace - Replaces the current location in history.\r\n// go - Moves backwards or forwards a relative number of locations in history.\r\n// goForward - Moves forward one location. Equivalent to go(1)\r\n// goBack - Moves backwards one location. Equivalent to go(-1)\r\n//\r\n// Both push and replace take in a location descriptor, which can be an object describing the URL\r\n// or a plain string URL.\r\n//\r\n// A location object is conceptually similar to document.location in web browsers, with a few\r\n// extra goodies. location objects have the following properties:\r\n//\r\n// pathname      The pathname portion of the URL, without query string\r\n// search        The query string portion of the URL, including the ?\r\n// state         An object of data tied to this location\r\n// action        One of PUSH, REPLACE, or POP\r\n// key           A unique identifier for this location\r\n//\r\n// see https://github.com/ReactTraining/history/blob/v3/docs/Location.md\r\n//\r\n// We do not use Location but our custom `Route` object, that is defined on `RoutingEnum`.\r\n//\r\n//\r\n\r\n//\r\n// About `options` property:\r\n// - keepQuery: it will keep all the query params set on the current url and put them back on the\r\n//   new route.\r\n//\r\n//\r\n\r\nexport const generatePathWithParams = (route, params, query, options = {}) => {\r\n  const config = getConfigForRoute(route)\r\n\r\n  invariant(!isNil(config), `Config for route ${route.name} not found`)\r\n\r\n  // keep legacy where the final parameter was keepQuery default true, and not options\r\n  // FIXME: the web customer must use the same configuration of the routes than the bo:\r\n  // `props.query` define query parameters to keep for each route\r\n  if (isWebCustomer()) {\r\n    options.keepQuery = true\r\n  }\r\n\r\n  // keep query from url\r\n  let finalQueries = { ...query }\r\n  const queryParamsToKeep = !isNil(config.props) ? config.props.query || [] : []\r\n  const currentUrlQueries = getQueryFromUri(window.location.href)\r\n\r\n  queryParamsToKeep.forEach(queryParam => {\r\n    const currentValueOnUrl = currentUrlQueries[queryParam]\r\n    const alreadySet = !isNil(finalQueries[queryParam])\r\n    if (currentValueOnUrl && !alreadySet) {\r\n      finalQueries[queryParam] = currentValueOnUrl\r\n    }\r\n  })\r\n\r\n  // remove queries that have the Query.REMOVE_ME value.\r\n  finalQueries = pickBy(finalQueries, value => value !== Query.REMOVE_ME)\r\n  // remove undefined values\r\n  finalQueries = pickBy(finalQueries, value => value !== undefined)\r\n\r\n  return config.definition.generatePathWithParams(params, finalQueries, options)\r\n}\r\n\r\nconst handleStringRoute = (action, route) => {\r\n  const hostname = getHostname(route)\r\n  if (hostname && window.location.hostname !== hostname) {\r\n    return redirectToExternal(route)\r\n  }\r\n\r\n  const relativePath = getRelativePath(route)\r\n  return action(relativePath)\r\n}\r\n\r\nexport const redirectTo = (route, params, query, options = {}) => {\r\n  if (isString(route)) {\r\n    return handleStringRoute(push, route)\r\n  }\r\n  const path = generatePathWithParams(route, params, query, options)\r\n  return push(path)\r\n}\r\n\r\nexport const createRedirectToAction = (route, params, query) => dispatch =>\r\n  dispatch(redirectTo(route, params, query))\r\n\r\nexport const replaceWith = (route, params, query, options = {}) => {\r\n  if (isString(route)) {\r\n    return handleStringRoute(replace, route)\r\n  }\r\n  const path = generatePathWithParams(route, params, query, options)\r\n  return replace(path)\r\n}\r\n\r\nexport const createReplaceWithAction = (route, params, query) => dispatch =>\r\n  dispatch(replaceWith(route, params, query))\r\n\r\nexport const reloadTo = (route, params, query, options = {}) => {\r\n  const path = generatePathWithParams(route, params, query, options)\r\n  window.location = path\r\n  return { type: 'ROUTING_EXTERNAL' }\r\n}\r\n\r\nexport const reloadToPath = path => {\r\n  window.location = path\r\n  return { type: 'ROUTING_EXTERNAL' }\r\n}\r\n\r\nexport const openExternalLink = uri => {\r\n  window.open(uri, '_blank')\r\n  return { type: 'ROUTING_EXTERNAL' }\r\n}\r\n\r\nlet isRedirectingToExternal = false\r\n\r\nexport const setIsRedirectingToExternal = value => {\r\n  isRedirectingToExternal = value\r\n}\r\n\r\nexport const getIsRedirectingToExternal = () => isRedirectingToExternal\r\n\r\nexport const redirectToExternal = (uri, query = {}) => {\r\n  window.location = formatQueryParams(uri, query)\r\n  return { type: 'ROUTING_EXTERNAL' }\r\n}\r\n\r\nexport const updatePageQueries = (query = {}) => {\r\n  const history = getHistory()\r\n  const currentQuery = getQueryFromUri(window.location.href)\r\n\r\n  let finalQueries = {}\r\n\r\n  // transform the query values.\r\n  // E.g we transform arrays as string with `,` separation\r\n  forEach(query, (value, key) => {\r\n    let finalValue = value\r\n    if (isArray(value)) {\r\n      finalValue = value.join(',')\r\n    }\r\n\r\n    // must be a string to avoid updating queries that are the same (to avoid compare string query\r\n    // to number)\r\n    finalQueries[key] = finalValue ? `${finalValue}` : finalValue\r\n  })\r\n\r\n  finalQueries = {\r\n    ...currentQuery,\r\n    ...finalQueries,\r\n  }\r\n\r\n  finalQueries = pickBy(finalQueries, value => value !== Query.REMOVE_ME)\r\n\r\n  if (!isEqual(finalQueries, currentQuery)) {\r\n    // https://github.com/ReactTraining/history\r\n    history.push(formatQueryParams(window.location.pathname, finalQueries))\r\n  }\r\n}\r\n\r\nexport const goBack = goBackAction\r\n","import _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport { Router, __RouterContext, matchPath } from 'react-router';\nexport * from 'react-router';\nimport { createBrowserHistory, createHashHistory, createLocation } from 'history';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport invariant from 'tiny-invariant';\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(BrowserRouter, _React$Component);\n\n  function BrowserRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createBrowserHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = BrowserRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return BrowserRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  BrowserRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    forceRefresh: PropTypes.bool,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number\n  };\n\n  BrowserRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : void 0;\n  };\n}\n\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\n\nvar HashRouter =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(HashRouter, _React$Component);\n\n  function HashRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createHashHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = HashRouter.prototype;\n\n  _proto.render = function render() {\n    return React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return HashRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  HashRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    getUserConfirmation: PropTypes.func,\n    hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n  };\n\n  HashRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<HashRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : void 0;\n  };\n}\n\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n/**\n * The public API for rendering a history-aware <a>.\n */\n\n\nvar Link =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inheritsLoose(Link, _React$Component);\n\n  function Link() {\n    return _React$Component.apply(this, arguments) || this;\n  }\n\n  var _proto = Link.prototype;\n\n  _proto.handleClick = function handleClick(event, history) {\n    try {\n      if (this.props.onClick) this.props.onClick(event);\n    } catch (ex) {\n      event.preventDefault();\n      throw ex;\n    }\n\n    if (!event.defaultPrevented && // onClick prevented default\n    event.button === 0 && ( // ignore everything but left clicks\n    !this.props.target || this.props.target === \"_self\") && // let browser handle \"target=_blank\" etc.\n    !isModifiedEvent(event) // ignore clicks with modifier keys\n    ) {\n        event.preventDefault();\n        var method = this.props.replace ? history.replace : history.push;\n        method(this.props.to);\n      }\n  };\n\n  _proto.render = function render() {\n    var _this = this;\n\n    var _this$props = this.props,\n        innerRef = _this$props.innerRef,\n        replace = _this$props.replace,\n        to = _this$props.to,\n        rest = _objectWithoutPropertiesLoose(_this$props, [\"innerRef\", \"replace\", \"to\"]); // eslint-disable-line no-unused-vars\n\n\n    return React.createElement(__RouterContext.Consumer, null, function (context) {\n      !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Link> outside a <Router>\") : invariant(false) : void 0;\n      var location = typeof to === \"string\" ? createLocation(to, null, null, context.location) : to;\n      var href = location ? context.history.createHref(location) : \"\";\n      return React.createElement(\"a\", _extends({}, rest, {\n        onClick: function onClick(event) {\n          return _this.handleClick(event, context.history);\n        },\n        href: href,\n        ref: innerRef\n      }));\n    });\n  };\n\n  return Link;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  var toType = PropTypes.oneOfType([PropTypes.string, PropTypes.object]);\n  var innerRefType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.shape({\n    current: PropTypes.any\n  })]);\n  Link.propTypes = {\n    innerRef: innerRefType,\n    onClick: PropTypes.func,\n    replace: PropTypes.bool,\n    target: PropTypes.string,\n    to: toType.isRequired\n  };\n}\n\nfunction joinClassnames() {\n  for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n    classnames[_key] = arguments[_key];\n  }\n\n  return classnames.filter(function (i) {\n    return i;\n  }).join(\" \");\n}\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\n\n\nfunction NavLink(_ref) {\n  var _ref$ariaCurrent = _ref[\"aria-current\"],\n      ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n      _ref$activeClassName = _ref.activeClassName,\n      activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n      activeStyle = _ref.activeStyle,\n      classNameProp = _ref.className,\n      exact = _ref.exact,\n      isActiveProp = _ref.isActive,\n      locationProp = _ref.location,\n      strict = _ref.strict,\n      styleProp = _ref.style,\n      to = _ref.to,\n      rest = _objectWithoutPropertiesLoose(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"strict\", \"style\", \"to\"]);\n\n  var path = typeof to === \"object\" ? to.pathname : to; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n  var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n  return React.createElement(__RouterContext.Consumer, null, function (context) {\n    !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <NavLink> outside a <Router>\") : invariant(false) : void 0;\n    var pathToMatch = locationProp ? locationProp.pathname : context.location.pathname;\n    var match = escapedPath ? matchPath(pathToMatch, {\n      path: escapedPath,\n      exact: exact,\n      strict: strict\n    }) : null;\n    var isActive = !!(isActiveProp ? isActiveProp(match, context.location) : match);\n    var className = isActive ? joinClassnames(classNameProp, activeClassName) : classNameProp;\n    var style = isActive ? _extends({}, styleProp, activeStyle) : styleProp;\n    return React.createElement(Link, _extends({\n      \"aria-current\": isActive && ariaCurrent || null,\n      className: className,\n      style: style,\n      to: to\n    }, rest));\n  });\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n  var ariaCurrentType = PropTypes.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\"]);\n  NavLink.propTypes = _extends({}, Link.propTypes, {\n    \"aria-current\": ariaCurrentType,\n    activeClassName: PropTypes.string,\n    activeStyle: PropTypes.object,\n    className: PropTypes.string,\n    exact: PropTypes.bool,\n    isActive: PropTypes.func,\n    location: PropTypes.object,\n    strict: PropTypes.bool,\n    style: PropTypes.object\n  });\n}\n\nexport { BrowserRouter, HashRouter, Link, NavLink };\n","import React from 'react'\r\nimport { Link as ReactRouterLink } from 'react-router-dom'\r\nimport PropTypes from 'prop-types'\r\nimport { default as MuiLink } from '@material-ui/core/Link'\r\nimport Route from '../../model/Route'\r\nimport { getRoute } from '../../config'\r\nimport { generatePathWithParams } from '../../actions'\r\n\r\n/**\r\n * Abstract the react-router-dom Route to handle our `Route` definition.\r\n */\r\nclass Link extends React.Component {\r\n  static defaultProps = {\r\n    to: PropTypes.oneOfType([PropTypes.objectOf(Route), PropTypes.string]).isRequired,\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      href,\r\n      to,\r\n      className = '',\r\n      params = {},\r\n      query = {},\r\n      children,\r\n      newTab,\r\n      target,\r\n      anchor,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    if (href) {\r\n      return (\r\n        <a\r\n          href={href + (anchor ? `#${anchor}` : '')}\r\n          className={`link ${className}`}\r\n          target={newTab ? '_blank' : target}\r\n          {...otherProps}\r\n        >\r\n          {children}\r\n        </a>\r\n      )\r\n    }\r\n\r\n    return (\r\n      <ReactRouterLink\r\n        to={generatePathWithParams(to, params, query, { anchor })}\r\n        className={`link ${className}`}\r\n        target={newTab ? '_blank' : target}\r\n        {...otherProps}\r\n      >\r\n        {children}\r\n      </ReactRouterLink>\r\n    )\r\n  }\r\n}\r\n\r\n// Shortcut to retrieve a route config (to use in the `to` prop)\r\nLink.getRoute = getRoute\r\n\r\nLink.Mui = ({ ...rest }) => {\r\n  return <MuiLink component={Link} {...rest} />\r\n}\r\n\r\nexport default Link\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  redirectTo,\r\n  replaceWith,\r\n  reloadTo,\r\n  goBack,\r\n  openExternalLink,\r\n  redirectToExternal,\r\n  updatePageQueries,\r\n} from '../../actions'\r\n\r\nimport { getRoute, getRoutingEnum } from '../../config'\r\n\r\n/**\r\n * Gives the shortcut to routing module such as:\r\n * - actions\r\n */\r\nclass RoutingContainer extends React.Component {\r\n  render() {\r\n    const {\r\n      redirectTo,\r\n      replaceWith,\r\n      reloadTo,\r\n      goBack,\r\n      openExternalLink,\r\n      redirectToExternal,\r\n      children,\r\n    } = this.props\r\n\r\n    return children({\r\n      redirectTo,\r\n      replaceWith,\r\n      goBack,\r\n      reloadTo,\r\n      openExternalLink,\r\n      redirectToExternal,\r\n      updatePageQueries,\r\n      getRoute,\r\n      getRoutingEnum,\r\n    })\r\n  }\r\n}\r\n\r\nRoutingContainer.propTypes = {\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  // no state to map yet\r\n  return {}\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    redirectTo,\r\n    replaceWith,\r\n    reloadTo,\r\n    goBack,\r\n    openExternalLink,\r\n    redirectToExternal,\r\n    // not an action, so we do not have to map the updatePageQueries as an action\r\n    // updatePageQueries,\r\n  }\r\n)(RoutingContainer)\r\n","const External = {\r\n  ORDER_PLUGIN_DEV: 'https://order.pluginweb.dev.paymytable.com',\r\n  ORDER_PLUGIN_PREPROD: 'https://order.pluginweb.preprod.paymytable.com',\r\n  ORDER_PLUGIN_PROD: 'https://order.pluginweb.paymytable.com',\r\n}\r\n\r\nexport default External","import External from './constants/External'\r\nimport { isLocalhost, isDev, isPreprod, isProd } from '../environment'\r\n\r\nexport const getOrderPluginUrl = () => {\r\n  if (isLocalhost() || isDev()) {\r\n    return External.ORDER_PLUGIN_DEV\r\n  }\r\n  if (isPreprod()) {\r\n    return External.ORDER_PLUGIN_PREPROD\r\n  }\r\n  if (isProd()) {\r\n    return External.ORDER_PLUGIN_PROD\r\n  }\r\n}","//\r\n// The dialog module is mostly inspired by Dan Abramov reponse on\r\n// https://stackoverflow.com/questions/35623656/how-can-i-display-a-modal-dialog-in-redux-that-performs-asynchronous-actions/35641680\r\n//\r\n// Note: We handle only one dialog at a time.\r\n//\r\n//\r\n// ---\r\n// Note about the Dialog component\r\n//\r\n// the dialog component can use\r\n// - DialogRootProps: static data to override props of the `Dialog` in the `DialogRoot` file\r\n// it can be used to change the value of `ignoreBackdropClick` for example\r\n// - DialogStyles: static function used to pass the 'classes' to the Dialog. It behave like the\r\n// `styles` function and `withStyles`\r\n//\r\nimport Immutable, { fromJS } from 'immutable'\r\nimport isNil from 'lodash/isNil'\r\nimport remove from 'lodash/remove'\r\n\r\nimport { DialogAction } from './actions'\r\n\r\nexport * from './config'\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport { default as DialogRoot } from './components/DialogRoot'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\n/**\r\n */\r\nconst DEFAULT = {\r\n  list: [],\r\n}\r\n\r\n//\r\n// dialog reducer.\r\n//\r\nexport const dialog = (state = Immutable.fromJS(DEFAULT), action) => {\r\n  let list = state.get('list')\r\n\r\n  switch (action.type) {\r\n    case DialogAction.SHOW_DIALOG:\r\n      if (!isNil(list)) {\r\n        list = list.toJS()\r\n\r\n        list.push({\r\n          type: action.dialogType,\r\n          props: action.dialogProps,\r\n        })\r\n        return state.setIn(['list'], fromJS(list))\r\n      }\r\n      return state\r\n\r\n    case DialogAction.HIDE_DIALOG:\r\n      if (!isNil(list)) {\r\n        list = list.toJS()\r\n        remove(list, i => i.type === action.dialogType)\r\n        return state.setIn(['list'], fromJS(list))\r\n      }\r\n      return state\r\n\r\n    case DialogAction.RESET:\r\n      return state.setIn(['list'], fromJS([]))\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { combineReducers } from 'redux'\r\n\r\nimport { theme } from '../../theme'\r\n\r\nimport { dialog } from '../../dialog'\r\n\r\nconst ux = combineReducers({\r\n  theme,\r\n  dialog,\r\n})\r\n\r\nexport default ux\r\n","\r\nexport const DEFAULT_FORM_OPTIONS = {\r\n  isActivated: false,\r\n}\r\n","import Immutable from 'immutable'\r\nimport find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport invariant from 'invariant'\r\n\r\nimport { DEFAULT_FORM_OPTIONS } from './constants'\r\n\r\nlet _forms = []\r\nexport const registerForms = forms => {\r\n  _forms = forms\r\n}\r\n\r\nexport const getForms = forms => _forms\r\n\r\nexport const getFormsDefaultState = () => {\r\n  let defaultState = {}\r\n\r\n  _forms.forEach(form => {\r\n    if (process.env.__DEV__) {\r\n      invariant(\r\n        isNil(form.default) || !isFunction(form.getDefault),\r\n        `form ${form.type} default must be a function named getDefault`\r\n      )\r\n\r\n      invariant(!isNil(form.type), 'form.type is required')\r\n    }\r\n\r\n    defaultState[form.type] = {\r\n      formData: form.getDefault(),\r\n      options: DEFAULT_FORM_OPTIONS,\r\n    }\r\n  })\r\n\r\n  return Immutable.fromJS(defaultState)\r\n}\r\n\r\n/**\r\n * @param  {string} formType FormType of the form to retrive\r\n * @return {FormConfiguration} the configuration for the given FormType\r\n */\r\nexport const getForm = formType => {\r\n  const form = find(_forms, form => formType === form.type)\r\n\r\n  invariant(!isNil(form), 'form ' + formType + ' not registered')\r\n\r\n  return form\r\n}\r\n\r\nexport const getFormDefaultData = formType => {\r\n  const form = getForm(formType)\r\n\r\n  return form.getDefault()\r\n}\r\n\r\nexport const getFormDefaultOptions = formType => {\r\n  return { ...DEFAULT_FORM_OPTIONS }\r\n}\r\n\r\nexport const getFormOptions = formType => getForm(formType).options\r\n\r\nexport const getFormCustomActions = formType => {\r\n  const form = getForm(formType)\r\n\r\n  const customActions = form.options.customActions\r\n  invariant(\r\n    isNil(customActions) || isObject(customActions),\r\n    'form ' + formType + ' has no customActions'\r\n  )\r\n\r\n  return customActions || null\r\n}\r\n\r\nexport const getFormReducer = formType => {\r\n  const form = getForm(formType)\r\n\r\n  const reducer = form.options.reducer\r\n  invariant(isNil(reducer) || isFunction(reducer), 'form ' + formType + ' has no reducer')\r\n\r\n  return reducer\r\n}\r\n\r\nexport const getFormModifier = formType => {\r\n  const form = getForm(formType)\r\n\r\n  const modifier = form.options.modifier\r\n  invariant(isNil(modifier) || isFunction(modifier), 'form ' + formType + ' has no modifier')\r\n\r\n  return modifier\r\n}\r\n\r\nexport const getValidator = formType => getForm(formType).validator\r\n","import { createAction } from '../redux'\r\n\r\nimport {\r\n  getFormDefaultData,\r\n  getFormDefaultOptions,\r\n} from './config'\r\n\r\nexport const FormAction = {\r\n  CREATE: 'FORM::CREATE',\r\n  UPDATE: 'FORM::UPDATE',\r\n  RESET: 'FORM::RESET',\r\n  ACTIVATION: 'FORM::ACTIVATION',\r\n  UPDATE_OPTIONS: 'FORM::OPTIONS::UPDATE'\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} formType The FormType\r\n * @param {any} data The form data\r\n */\r\nexport const initForm = (formType, data) => createAction(\r\n  FormAction.CREATE,\r\n  {\r\n    formType,\r\n    data,\r\n  }\r\n)\r\n\r\n/**\r\n *\r\n * @param {string} formType The FormType\r\n * @param {any} data The form data\r\n */\r\nexport const updateForm = (formType, data) => createAction(\r\n  FormAction.UPDATE,\r\n  {\r\n    formType,\r\n    data,\r\n  }\r\n)\r\n\r\n/**\r\n *\r\n * @param {string} formType The FormType\r\n * @param {any} data The form data\r\n */\r\nexport const resetForm = (formType, data, options) => createAction(\r\n  FormAction.RESET,\r\n  {\r\n    withDefaultData: false,\r\n    formType,\r\n    data,\r\n    options,\r\n  }\r\n)\r\n\r\n/**\r\n *\r\n * @param {string} formType The FormType\r\n * @param {any} data The form data\r\n */\r\nexport const resetFormWithDefaultData = (formType) => createAction(\r\n  FormAction.RESET,\r\n  {\r\n    withDefaultData: true,\r\n    formType,\r\n    data: getFormDefaultData(formType),\r\n    options: getFormDefaultOptions(formType),\r\n  }\r\n)\r\n\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const setFormActivation = (formType, isActivated) => createAction(\r\n  FormAction.ACTIVATION,\r\n  {\r\n    formType,\r\n    isActivated,\r\n  }\r\n)\r\n\r\n/**\r\n * update options of a form\r\n */\r\nexport const updateFormOptions = (formType, options) => createAction(\r\n  FormAction.UPDATE_OPTIONS,\r\n  {\r\n    formType,\r\n    options,\r\n  }\r\n)\r\n","export default {\r\n  USER_FORM_EMAIL: 'USER_FORM_EMAIL',\r\n  PRO_FORM_EMAIL: 'PRO_FORM_EMAIL',\r\n}\r\n","import find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\n\r\nlet _dataCatcherSettings = null\r\n\r\nexport const setDataCatcherSettings = dataCatcherSettings => {\r\n  _dataCatcherSettings = dataCatcherSettings\r\n}\r\n\r\nexport const getDataCatcherSettings = () => _dataCatcherSettings\r\n\r\nexport const getDataCatcherSettingForType = dataCatcherType =>\r\n  find(getDataCatcherSettings(), setting => setting.dataCatcherType === dataCatcherType)\r\n\r\nexport const isDataCatcherEnabledForType = dataCatcherType =>\r\n  !isNil(getDataCatcherSettingForType(dataCatcherType))\r\n","/**\r\n * Enum of different existing forms.\r\n * The FormType is used to save / get data on our form reducer\r\n */\r\nconst FormType = {\r\n  REGISTER: 'FORM::REGISTER',\r\n  LOGIN: 'FORM::LOGIN',\r\n  PRO_LOGIN: 'FORM::PRO_LOGIN',\r\n  GROUP_EDIT_GENERAL_INFOS: 'FORM::GROUP_EDIT_GENERAL_INFOS',\r\n  RESTAURANT_LOGIN: 'FORM::RESTAURANT_LOGIN',\r\n  RESTAURANT_CREATE: 'FORM::RESTAURANT_CREATE',\r\n  FORGOT_PASSWORD: 'FORM::FORGOT_PASSWORD',\r\n  PRO_FORGOT_PASSWORD: 'FORM::PRO_FORGOT_PASSWORD',\r\n  USER_LIGHT: 'FORM::USER_LIGHT',\r\n  INCOGNITO: 'FORM::INCOGNITO',\r\n  CREDIT_CARD: 'FORM::CREDIT_CARD',\r\n  COMPANY_ADD: 'FORM::COMPANY_ADD',\r\n  COMPANY_EDIT: 'FORM::COMPANY_EDIT',\r\n  BILLING_ENTITY_ADD: 'FORM::BILLING_ENTITY_ADD',\r\n  BILLING_ENTITY_EDIT: 'FORM::BILLING_ENTITY_EDIT',\r\n  ADMISSION_FEE_RULE_ADD: 'FORM::ADMISSION_FEE_RULE_ADD',\r\n  PRICING_RULE_ADD: 'FORM::PRICING_RULE_ADD',\r\n  SUBSIDY_RULE_ADD: 'FORM::SUBSIDY_RULE_ADD',\r\n  SUBSIDY_RULE_EDIT: 'FORM::SUBSIDY_RULE_EDIT',\r\n\r\n  CREATE_USER: 'FORM::CREATE_USER',\r\n  EDIT_USER_ACCOUNT: 'FORM::EDIT_USER_ACCOUNT',\r\n  EDIT_USER: 'FORM::EDIT_USER',\r\n  ADD_USER_ADDRESS: 'FORM::ADD_USER_ADDRESS',\r\n  EDIT_USER_ADDRESS: 'FORM::EDIT_USER_ADDRESS',\r\n\r\n  USER_PROFILE: 'FORM::USER_PROFILE',\r\n  USER_PROFILE_DIETARY: 'FORM::USER_PROFILE_DIETARY',\r\n\r\n  PRO_ACCOUNT_EDIT: 'FORM::PRO_ACCOUNT_EDIT',\r\n  PRO_ROLE_EDIT: 'FORM::PRO_ROLE_EDIT',\r\n\r\n  HISTORY_SELECT: 'FORM::HISTORY_SELECT',\r\n\r\n  CHECKOUT_PAYMENT_EMAIL: 'FORM::CHECKOUT::PAYMENT_EMAIL',\r\n\r\n  SCHEDULED_ACTION: 'FORM::SCHEDULED_ACTION',\r\n\r\n  GROUP_CREATE: 'FORM::GROUP::CREATE',\r\n  GROUP_EDIT_USER_SETTINGS: 'FORM::GROUP::EDIT::USER_SETTINGS',\r\n  GROUP_EDIT_FRONT_SETTINGS: 'FORM::GROUP::EDIT::FRONT_SETTINGS',\r\n  GROUP_EDIT_FINANCE_SETTINGS: 'FORM::GROUP::EDIT::FINANCE_SETTINGS',\r\n  GROUP_EDIT_PAYMENT_METHOD_DETAIL_SETTINGS: 'FORM::GROUP::EDIT::PAYMENT_METHOD_DETAIL_SETTINGS',\r\n  GROUP_EDIT_USER_MANAGEMENT_SETTINGS: 'FORM::GROUP::EDIT::USER_MANAGEMENT_SETTINGS',\r\n\r\n  API_CONSUMER__CREATE: 'FORM::API_CONSUMER::CREATE',\r\n  API_CONSUMER__THEME: 'FORM::API_CONSUMER::THEME',\r\n  API_CONSUMER__AUTHENTICATION: 'FORM::API_CONSUMER::AUTHENTICATION',\r\n  API_CONSUMER__ANALYTICS: 'FORM::API_CONSUMER::ANALYTICS',\r\n  API_CONSUMER__REGISTRATION: 'FORM::API_CONSUMER::REGISTRATION',\r\n  API_CONSUMER__IDENTIFICATION: 'FORM::API_CONSUMER::IDENTIFICATION',\r\n  API_CONSUMER__INCOGNITO_IDENTIFICATION: 'FORM::API_CONSUMER::INCOGNITO_IDENTIFICATION',\r\n  API_CONSUMER__FRONT: 'FORM::API_CONSUMER::FRONT',\r\n  API_CONSUMER__SECURITY: 'FORM::API_CONSUMER::SECURITY',\r\n  API_CONSUMER__THIRDPARTY: 'FORM::API_CONSUMER::THIRDPARTY',\r\n  API_CONSUMER__TEXTS: 'FORM::API_CONSUMER::TEXTS',\r\n  API_CONSUMER__ORDER: 'FORM::API_CONSUMER::ORDER',\r\n  API_CONSUMER__DIGITAL_MENU: 'FORM::API_CONSUMER::DIGITAL_MENU',\r\n  API_CONSUMER__CATALOG: 'FORM::API_CONSUMER::CATALOG',\r\n  API_CONSUMER__GENERAL: 'FORM::API_CONSUMER::API_CONSUMER__GENERAL',\r\n\r\n  BO_PIM_SETTINGS_PRICING_CLUSTER_EDIT: 'FORM::BO_PIM_SETTINGS_PRICING_CLUSTER::EDIT',\r\n  // Tip: NEW_FORM_ABOVE\r\n}\r\n\r\nexport default FormType\r\n","import { createAction } from '../redux'\r\n\r\nexport const DataCatcherAction = {\r\n  POST_CATCHED_DATA: 'DATA_CATCHER::POST_CATCHED_DATA',\r\n}\r\n\r\n/**\r\n *\r\n * @param  {DataCatcherType} dataCatcherType\r\n * @param  {any} value  catched data value\r\n */\r\nexport const postCatchedData = (dataCatcherType, value) => createAction(\r\n  DataCatcherAction.POST_CATCHED_DATA,\r\n  {\r\n    dataCatcherType,\r\n    value,\r\n  }\r\n)\r\n","import { __DEV__ } from '../environment'\r\nimport invariant from 'invariant'\r\nimport find from 'lodash/find'\r\n\r\nimport createMiddleware from '../redux/createMiddleware'\r\n\r\nimport { postCatchedData } from './actions'\r\n\r\nimport { getDataCatcherSettings } from './config'\r\n\r\nconst shouldCatchData = action =>\r\n  find(getDataCatcherSettings(), setting => setting.actionType === action.type) !== undefined\r\n\r\nexport const dataCatcherMiddleware = createMiddleware(\r\n  shouldCatchData,\r\n  ({ getState, dispatch, next, action }) => {\r\n    getDataCatcherSettings().forEach(setting => {\r\n      let { actionType, getObject, dataCatcherType } = setting\r\n      if (actionType === action.type) {\r\n        if (__DEV__) {\r\n          invariant(\r\n            typeof getObject === 'function',\r\n            `getObject for actionType ${actionType} is not a function`\r\n          )\r\n        }\r\n        dispatch(postCatchedData(dataCatcherType, getObject(action)))\r\n      }\r\n    })\r\n\r\n    return next(action)\r\n  }\r\n)\r\n\r\nexport const dataCatcherMiddlewares = [dataCatcherMiddleware]\r\n","import DataCatcherType from './DataCatcherType'\r\n\r\nimport { isDataCatcherEnabledForType } from './config'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nexport * from './actions'\r\nexport * from './middlewares'\r\nexport { default as DataCatcherType } from './DataCatcherType'\r\n\r\n//\r\n// This modules allows to catch data from an action, and to update other state data.\r\n// It is used for example to catch user email on login / password recovery, and put this email\r\n// on the login / password recovery form data, to pre-fill the forms.\r\n//\r\n// Note: You MUST add dataCatcherMiddlewares to the front middlewares config\r\n//\r\n\r\n// TODO: reducer should be defined on the front config.\r\nexport const dataCatcherFormReducer = (state, action) => {\r\n  switch (action.dataCatcherType) {\r\n    // Used for web customer\r\n    case DataCatcherType.USER_FORM_EMAIL:\r\n      if (!isDataCatcherEnabledForType(DataCatcherType.USER_FORM_EMAIL)) {\r\n        return state\r\n      }\r\n\r\n      return state\r\n        .updateIn([FormType.LOGIN, 'formData'], formData => formData.set('username', action.value))\r\n        .updateIn([FormType.FORGOT_PASSWORD, 'formData'], formData =>\r\n          formData.set('username', action.value)\r\n        )\r\n\r\n    // Used for backoffice\r\n    case DataCatcherType.PRO_FORM_EMAIL:\r\n      if (!isDataCatcherEnabledForType(DataCatcherType.PRO_FORM_EMAIL)) {\r\n        return state\r\n      }\r\n\r\n      return state\r\n        .updateIn([FormType.PRO_LOGIN, 'formData'], formData =>\r\n          formData.set('username', action.value)\r\n        )\r\n        .updateIn([FormType.PRO_FORGOT_PASSWORD, 'formData'], formData =>\r\n          formData.set('username', action.value)\r\n        )\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import invariant from 'invariant'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nexport const FORM_CUSTOM_ACTION = 'FORM::CUSTOM_ACTION'\r\n\r\n/**\r\n * create a form custom action : the form must have a configured reducer\r\n * that handle the given actionName\r\n * @param  {formType} formType\r\n * @param  {string} actionName\r\n * @param  {object} data\r\n */\r\nconst createFormCustomAction = (formType, actionName, data = null) => dispatch => {\r\n\r\n  invariant(!isEmpty(actionName), 'action name is required')\r\n  invariant(!isEmpty(formType), 'form type is required')\r\n\r\n  return dispatch({\r\n    type: FORM_CUSTOM_ACTION,\r\n    formType,\r\n    actionName,\r\n    data,\r\n  })\r\n\r\n}\r\n\r\nexport default createFormCustomAction\r\n","export const blackList = [\r\n  \"0-mail.com\",\r\n  \"0815.ru\",\r\n  \"0815.su\",\r\n  \"0clickemail.com\",\r\n  \"0wnd.net\",\r\n  \"0wnd.org\",\r\n  \"10mail.org\",\r\n  \"10minutemail.cf\",\r\n  \"10minutemail.com\",\r\n  \"10minutemail.de\",\r\n  \"10minutemail.ga\",\r\n  \"10minutemail.gq\",\r\n  \"10minutemail.ml\",\r\n  \"123-m.com\",\r\n  \"12minutemail.com\",\r\n  \"1ce.us\",\r\n  \"1chuan.com\",\r\n  \"1mail.ml\",\r\n  \"1pad.de\",\r\n  \"1zhuan.com\",\r\n  \"20mail.in\",\r\n  \"20mail.it\",\r\n  \"20minutemail.com\",\r\n  \"21cn.com\",\r\n  \"24hourmail.com\",\r\n  \"2prong.com\",\r\n  \"30minutemail.com\",\r\n  \"33mail.com\",\r\n  \"3d-painting.com\",\r\n  \"3mail.ga\",\r\n  \"4mail.cf\",\r\n  \"4mail.ga\",\r\n  \"4warding.com\",\r\n  \"4warding.net\",\r\n  \"4warding.org\",\r\n  \"5mail.cf\",\r\n  \"5mail.ga\",\r\n  \"60minutemail.com\",\r\n  \"675hosting.com\",\r\n  \"675hosting.net\",\r\n  \"675hosting.org\",\r\n  \"6ip.us\",\r\n  \"6mail.cf\",\r\n  \"6mail.ga\",\r\n  \"6mail.ml\",\r\n  \"6paq.com\",\r\n  \"6url.com\",\r\n  \"75hosting.com\",\r\n  \"75hosting.net\",\r\n  \"75hosting.org\",\r\n  \"7days-printing.com\",\r\n  \"7mail.ga\",\r\n  \"7mail.ml\",\r\n  \"7tags.com\",\r\n  \"8mail.cf\",\r\n  \"8mail.ga\",\r\n  \"8mail.ml\",\r\n  \"99experts.com\",\r\n  \"9mail.cf\",\r\n  \"9ox.net\",\r\n  \"a-bc.net\",\r\n  \"a45.in\",\r\n  \"abusemail.de\",\r\n  \"abyssmail.com\",\r\n  \"ac20mail.in\",\r\n  \"acentri.com\",\r\n  \"advantimo.com\",\r\n  \"afrobacon.com\",\r\n  \"ag.us.to\",\r\n  \"agedmail.com\",\r\n  \"ahk.jp\",\r\n  \"ajaxapp.net\",\r\n  \"alivance.com\",\r\n  \"amail.com\",\r\n  \"amilegit.com\",\r\n  \"amiri.net\",\r\n  \"amiriindustries.com\",\r\n  \"anappthat.com\",\r\n  \"ano-mail.net\",\r\n  \"anonbox.net\",\r\n  \"anonymail.dk\",\r\n  \"anonymbox.com\",\r\n  \"antichef.com\",\r\n  \"antichef.net\",\r\n  \"antispam.de\",\r\n  \"appixie.com\",\r\n  \"armyspy.com\",\r\n  \"aver.com\",\r\n  \"azmeil.tk\",\r\n  \"baxomale.ht.cx\",\r\n  \"beddly.com\",\r\n  \"beefmilk.com\",\r\n  \"big1.us\",\r\n  \"bigprofessor.so\",\r\n  \"bigstring.com\",\r\n  \"binkmail.com\",\r\n  \"bio-muesli.net\",\r\n  \"bladesmail.net\",\r\n  \"blogmyway.org\",\r\n  \"bobmail.info\",\r\n  \"bodhi.lawlita.com\",\r\n  \"bofthew.com\",\r\n  \"bootybay.de\",\r\n  \"boun.cr\",\r\n  \"bouncr.com\",\r\n  \"boxformail.in\",\r\n  \"boxtemp.com.br\",\r\n  \"brefmail.com\",\r\n  \"brennendesreich.de\",\r\n  \"broadbandninja.com\",\r\n  \"bsnow.net\",\r\n  \"bu.mintemail.com\",\r\n  \"buffemail.com\",\r\n  \"bugmenot.com\",\r\n  \"bumpymail.com\",\r\n  \"bund.us\",\r\n  \"bundes-li.ga\",\r\n  \"burnthespam.info\",\r\n  \"burstmail.info\",\r\n  \"buyusedlibrarybooks.org\",\r\n  \"c2.hu\",\r\n  \"cachedot.net\",\r\n  \"casualdx.com\",\r\n  \"cbair.com\",\r\n  \"ce.mintemail.com\",\r\n  \"cellurl.com\",\r\n  \"centermail.com\",\r\n  \"centermail.net\",\r\n  \"chammy.info\",\r\n  \"cheatmail.de\",\r\n  \"chogmail.com\",\r\n  \"choicemail1.com\",\r\n  \"chong-mail.com\",\r\n  \"chong-mail.net\",\r\n  \"chong-mail.org\",\r\n  \"clixser.com\",\r\n  \"cmail.com\",\r\n  \"cmail.net\",\r\n  \"cmail.org\",\r\n  \"coldemail.info\",\r\n  \"consumerriot.com\",\r\n  \"cool.fr.nf\",\r\n  \"correo.blogos.net\",\r\n  \"cosmorph.com\",\r\n  \"courriel.fr.nf\",\r\n  \"courrieltemporaire.com\",\r\n  \"crapmail.org\",\r\n  \"crazespaces.pw\",\r\n  \"crazymailing.com\",\r\n  \"cubiclink.com\",\r\n  \"curryworld.de\",\r\n  \"cust.in\",\r\n  \"cuvox.de\",\r\n  \"dacoolest.com\",\r\n  \"daintly.com\",\r\n  \"dandikmail.com\",\r\n  \"dayrep.com\",\r\n  \"dbunker.com\",\r\n  \"dcemail.com\",\r\n  \"deadaddress.com\",\r\n  \"deadchildren.org\",\r\n  \"deadfake.cf\",\r\n  \"deadfake.ga\",\r\n  \"deadfake.ml\",\r\n  \"deadfake.tk\",\r\n  \"deadspam.com\",\r\n  \"deagot.com\",\r\n  \"dealja.com\",\r\n  \"despam.it\",\r\n  \"despammed.com\",\r\n  \"devnullmail.com\",\r\n  \"dfgh.net\",\r\n  \"dharmatel.net\",\r\n  \"digitalsanctuary.com\",\r\n  \"dingbone.com\",\r\n  \"discard.cf\",\r\n  \"discard.email\",\r\n  \"discard.ga\",\r\n  \"discard.gq\",\r\n  \"discard.ml\",\r\n  \"discard.tk\",\r\n  \"discardmail.com\",\r\n  \"discardmail.de\",\r\n  \"disposable-email.ml\",\r\n  \"disposable.cf\",\r\n  \"disposable.ga\",\r\n  \"disposable.ml\",\r\n  \"disposableaddress.com\",\r\n  \"disposableemailaddresses.com\",\r\n  \"disposableemailaddresses.emailmiser.com\",\r\n  \"disposableinbox.com\",\r\n  \"dispose.it\",\r\n  \"disposeamail.com\",\r\n  \"disposemail.com\",\r\n  \"dispostable.com\",\r\n  \"divermail.com\",\r\n  \"dm.w3internet.co.uk\",\r\n  \"dodgeit.com\",\r\n  \"dodgit.com\",\r\n  \"dodgit.org\",\r\n  \"doiea.com\",\r\n  \"domozmail.com\",\r\n  \"donemail.ru\",\r\n  \"dontreg.com\",\r\n  \"dontsendmespam.de\",\r\n  \"dotmsg.com\",\r\n  \"drdrb.com\",\r\n  \"drdrb.net\",\r\n  \"droplar.com\",\r\n  \"dropmail.me\",\r\n  \"duam.net\",\r\n  \"dudmail.com\",\r\n  \"dump-email.info\",\r\n  \"dumpandjunk.com\",\r\n  \"dumpmail.de\",\r\n  \"dumpyemail.com\",\r\n  \"duskmail.com\",\r\n  \"e-mail.com\",\r\n  \"e-mail.org\",\r\n  \"e4ward.com\",\r\n  \"easytrashmail.com\",\r\n  \"eelmail.com\",\r\n  \"einrot.com\",\r\n  \"einrot.de\",\r\n  \"email-fake.cf\",\r\n  \"email-fake.ga\",\r\n  \"email-fake.gq\",\r\n  \"email-fake.ml\",\r\n  \"email-fake.tk\",\r\n  \"email60.com\",\r\n  \"emailage.cf\",\r\n  \"emailage.ga\",\r\n  \"emailage.gq\",\r\n  \"emailage.ml\",\r\n  \"emailage.tk\",\r\n  \"emaildienst.de\",\r\n  \"emailgo.de\",\r\n  \"emailias.com\",\r\n  \"emailigo.de\",\r\n  \"emailinfive.com\",\r\n  \"emailisvalid.com\",\r\n  \"emaillime.com\",\r\n  \"emailmiser.com\",\r\n  \"emailproxsy.com\",\r\n  \"emails.ga\",\r\n  \"emailsensei.com\",\r\n  \"emailspam.cf\",\r\n  \"emailspam.ga\",\r\n  \"emailspam.gq\",\r\n  \"emailspam.ml\",\r\n  \"emailspam.tk\",\r\n  \"emailtemporar.ro\",\r\n  \"emailtemporario.com.br\",\r\n  \"emailthe.net\",\r\n  \"emailtmp.com\",\r\n  \"emailto.de\",\r\n  \"emailwarden.com\",\r\n  \"emailx.at.hm\",\r\n  \"emailxfer.com\",\r\n  \"emailz.cf\",\r\n  \"emailz.ga\",\r\n  \"emailz.gq\",\r\n  \"emailz.ml\",\r\n  \"emeil.in\",\r\n  \"emeil.ir\",\r\n  \"emil.com\",\r\n  \"emkei.cf\",\r\n  \"emkei.ga\",\r\n  \"emkei.gq\",\r\n  \"emkei.ml\",\r\n  \"emkei.tk\",\r\n  \"emz.net\",\r\n  \"enterto.com\",\r\n  \"ephemail.net\",\r\n  \"etranquil.com\",\r\n  \"etranquil.net\",\r\n  \"etranquil.org\",\r\n  \"evopo.com\",\r\n  \"explodemail.com\",\r\n  \"eyepaste.com\",\r\n  \"facebook-email.cf\",\r\n  \"facebook-email.ga\",\r\n  \"facebook-email.ml\",\r\n  \"facebookmail.gq\",\r\n  \"facebookmail.ml\",\r\n  \"fake-mail.cf\",\r\n  \"fake-mail.ga\",\r\n  \"fake-mail.ml\",\r\n  \"fakeinbox.cf\",\r\n  \"fakeinbox.com\",\r\n  \"fakeinbox.ga\",\r\n  \"fakeinbox.ml\",\r\n  \"fakeinbox.tk\",\r\n  \"fakeinformation.com\",\r\n  \"fakemail.fr\",\r\n  \"fakemailgenerator.com\",\r\n  \"fakemailz.com\",\r\n  \"fammix.com\",\r\n  \"fansworldwide.de\",\r\n  \"fantasymail.de\",\r\n  \"fastacura.com\",\r\n  \"fastchevy.com\",\r\n  \"fastchrysler.com\",\r\n  \"fastkawasaki.com\",\r\n  \"fastmazda.com\",\r\n  \"fastmitsubishi.com\",\r\n  \"fastnissan.com\",\r\n  \"fastsubaru.com\",\r\n  \"fastsuzuki.com\",\r\n  \"fasttoyota.com\",\r\n  \"fastyamaha.com\",\r\n  \"fatflap.com\",\r\n  \"fdfdsfds.com\",\r\n  \"fightallspam.com\",\r\n  \"filzmail.com\",\r\n  \"fixmail.tk\",\r\n  \"fizmail.com\",\r\n  \"fleckens.hu\",\r\n  \"flurred.com\",\r\n  \"flyspam.com\",\r\n  \"footard.com\",\r\n  \"forgetmail.com\",\r\n  \"fornow.eu\",\r\n  \"fr33mail.info\",\r\n  \"frapmail.com\",\r\n  \"free-email.cf\",\r\n  \"free-email.ga\",\r\n  \"freemail.ms\",\r\n  \"freemails.cf\",\r\n  \"freemails.ga\",\r\n  \"freemails.ml\",\r\n  \"freundin.ru\",\r\n  \"friendlymail.co.uk\",\r\n  \"front14.org\",\r\n  \"fuckingduh.com\",\r\n  \"fudgerub.com\",\r\n  \"fux0ringduh.com\",\r\n  \"garliclife.com\",\r\n  \"gawab.com\",\r\n  \"gelitik.in\",\r\n  \"get-mail.cf\",\r\n  \"get-mail.ga\",\r\n  \"get-mail.ml\",\r\n  \"get-mail.tk\",\r\n  \"get1mail.com\",\r\n  \"get2mail.fr\",\r\n  \"getairmail.cf\",\r\n  \"getairmail.com\",\r\n  \"getairmail.ga\",\r\n  \"getairmail.gq\",\r\n  \"getairmail.ml\",\r\n  \"getairmail.tk\",\r\n  \"getmails.eu\",\r\n  \"getonemail.com\",\r\n  \"getonemail.net\",\r\n  \"ghosttexter.de\",\r\n  \"girlsundertheinfluence.com\",\r\n  \"gishpuppy.com\",\r\n  \"goemailgo.com\",\r\n  \"gorillaswithdirtyarmpits.com\",\r\n  \"gotmail.com\",\r\n  \"gotmail.net\",\r\n  \"gotmail.org\",\r\n  \"gotti.otherinbox.com\",\r\n  \"gowikibooks.com\",\r\n  \"gowikicampus.com\",\r\n  \"gowikicars.com\",\r\n  \"gowikifilms.com\",\r\n  \"gowikigames.com\",\r\n  \"gowikimusic.com\",\r\n  \"gowikinetwork.com\",\r\n  \"gowikitravel.com\",\r\n  \"gowikitv.com\",\r\n  \"grandmamail.com\",\r\n  \"grandmasmail.com\",\r\n  \"great-host.in\",\r\n  \"greensloth.com\",\r\n  \"grr.la\",\r\n  \"gsrv.co.uk\",\r\n  \"guerillamail.biz\",\r\n  \"guerillamail.com\",\r\n  \"guerillamail.net\",\r\n  \"guerillamail.org\",\r\n  \"guerrillamail.biz\",\r\n  \"guerrillamail.com\",\r\n  \"guerrillamail.de\",\r\n  \"guerrillamail.net\",\r\n  \"guerrillamail.org\",\r\n  \"guerrillamailblock.com\",\r\n  \"gustr.com\",\r\n  \"h.mintemail.com\",\r\n  \"h8s.org\",\r\n  \"hacccc.com\",\r\n  \"haltospam.com\",\r\n  \"harakirimail.com\",\r\n  \"hartbot.de\",\r\n  \"hatespam.org\",\r\n  \"hellodream.mobi\",\r\n  \"herp.in\",\r\n  \"hidemail.de\",\r\n  \"hidzz.com\",\r\n  \"hmamail.com\",\r\n  \"hochsitze.com\",\r\n  \"hopemail.biz\",\r\n  \"hot-mail.cf\",\r\n  \"hot-mail.ga\",\r\n  \"hot-mail.gq\",\r\n  \"hot-mail.ml\",\r\n  \"hot-mail.tk\",\r\n  \"hotpop.com\",\r\n  \"hulapla.de\",\r\n  \"humn.ws.gy\",\r\n  \"ieatspam.eu\",\r\n  \"ieatspam.info\",\r\n  \"ieh-mail.de\",\r\n  \"ihateyoualot.info\",\r\n  \"iheartspam.org\",\r\n  \"imails.info\",\r\n  \"imgof.com\",\r\n  \"imstations.com\",\r\n  \"inbax.tk\",\r\n  \"inbox.si\",\r\n  \"inboxalias.com\",\r\n  \"inboxclean.com\",\r\n  \"inboxclean.org\",\r\n  \"inboxproxy.com\",\r\n  \"incognitomail.com\",\r\n  \"incognitomail.net\",\r\n  \"incognitomail.org\",\r\n  \"insorg-mail.info\",\r\n  \"instant-mail.de\",\r\n  \"instantemailaddress.com\",\r\n  \"ipoo.org\",\r\n  \"irish2me.com\",\r\n  \"iroid.com\",\r\n  \"iwi.net\",\r\n  \"jetable.com\",\r\n  \"jetable.fr.nf\",\r\n  \"jetable.net\",\r\n  \"jetable.org\",\r\n  \"jnxjn.com\",\r\n  \"jourrapide.com\",\r\n  \"jsrsolutions.com\",\r\n  \"junk1e.com\",\r\n  \"junkmail.ga\",\r\n  \"junkmail.gq\",\r\n  \"kasmail.com\",\r\n  \"kaspop.com\",\r\n  \"keepmymail.com\",\r\n  \"killmail.com\",\r\n  \"killmail.net\",\r\n  \"kimsdisk.com\",\r\n  \"kingsq.ga\",\r\n  \"kir.ch.tc\",\r\n  \"klassmaster.com\",\r\n  \"klassmaster.net\",\r\n  \"klzlk.com\",\r\n  \"kook.ml\",\r\n  \"koszmail.pl\",\r\n  \"kulturbetrieb.info\",\r\n  \"kurzepost.de\",\r\n  \"l33r.eu\",\r\n  \"lackmail.net\",\r\n  \"lags.us\",\r\n  \"landmail.co\",\r\n  \"lastmail.co\",\r\n  \"lastmail.com\",\r\n  \"lazyinbox.com\",\r\n  \"letthemeatspam.com\",\r\n  \"lhsdv.com\",\r\n  \"lifebyfood.com\",\r\n  \"link2mail.net\",\r\n  \"litedrop.com\",\r\n  \"loadby.us\",\r\n  \"login-email.cf\",\r\n  \"login-email.ga\",\r\n  \"login-email.ml\",\r\n  \"login-email.tk\",\r\n  \"lol.ovpn.to\",\r\n  \"lookugly.com\",\r\n  \"lopl.co.cc\",\r\n  \"lortemail.dk\",\r\n  \"lovemeleaveme.com\",\r\n  \"lr7.us\",\r\n  \"lr78.com\",\r\n  \"lroid.com\",\r\n  \"luv2.us\",\r\n  \"m4ilweb.info\",\r\n  \"maboard.com\",\r\n  \"mail-filter.com\",\r\n  \"mail-temporaire.fr\",\r\n  \"mail.by\",\r\n  \"mail.mezimages.net\",\r\n  \"mail114.net\",\r\n  \"mail2rss.org\",\r\n  \"mail333.com\",\r\n  \"mail4trash.com\",\r\n  \"mailbidon.com\",\r\n  \"mailblocks.com\",\r\n  \"mailbucket.org\",\r\n  \"mailcat.biz\",\r\n  \"mailcatch.com\",\r\n  \"maildrop.cc\",\r\n  \"maildrop.cf\",\r\n  \"maildrop.ga\",\r\n  \"maildrop.gq\",\r\n  \"maildrop.ml\",\r\n  \"maildx.com\",\r\n  \"maileater.com\",\r\n  \"mailexpire.com\",\r\n  \"mailfa.tk\",\r\n  \"mailforspam.com\",\r\n  \"mailfree.ga\",\r\n  \"mailfree.gq\",\r\n  \"mailfree.ml\",\r\n  \"mailfreeonline.com\",\r\n  \"mailfs.com\",\r\n  \"mailguard.me\",\r\n  \"mailimate.com\",\r\n  \"mailin8r.com\",\r\n  \"mailinater.com\",\r\n  \"mailinator.com\",\r\n  \"mailinator.gq\",\r\n  \"mailinator.net\",\r\n  \"mailinator.org\",\r\n  \"mailinator.us\",\r\n  \"mailinator2.com\",\r\n  \"mailincubator.com\",\r\n  \"mailismagic.com\",\r\n  \"mailjunk.cf\",\r\n  \"mailjunk.ga\",\r\n  \"mailjunk.gq\",\r\n  \"mailjunk.ml\",\r\n  \"mailjunk.tk\",\r\n  \"mailmate.com\",\r\n  \"mailme.gq\",\r\n  \"mailme.ir\",\r\n  \"mailme.lv\",\r\n  \"mailme24.com\",\r\n  \"mailmetrash.com\",\r\n  \"mailmoat.com\",\r\n  \"mailnator.com\",\r\n  \"mailnesia.com\",\r\n  \"mailnull.com\",\r\n  \"mailpick.biz\",\r\n  \"mailproxsy.com\",\r\n  \"mailquack.com\",\r\n  \"mailrock.biz\",\r\n  \"mailsac.com\",\r\n  \"mailscrap.com\",\r\n  \"mailseal.de\",\r\n  \"mailshell.com\",\r\n  \"mailsiphon.com\",\r\n  \"mailslapping.com\",\r\n  \"mailslite.com\",\r\n  \"mailtemp.info\",\r\n  \"mailtothis.com\",\r\n  \"mailzilla.com\",\r\n  \"mailzilla.org\",\r\n  \"mailzilla.orgmbx.cc\",\r\n  \"makemetheking.com\",\r\n  \"manifestgenerator.com\",\r\n  \"manybrain.com\",\r\n  \"mbx.cc\",\r\n  \"mciek.com\",\r\n  \"mega.zik.dj\",\r\n  \"meinspamschutz.de\",\r\n  \"meltmail.com\",\r\n  \"messagebeamer.de\",\r\n  \"mezimages.net\",\r\n  \"mfsa.ru\",\r\n  \"mierdamail.com\",\r\n  \"migumail.com\",\r\n  \"mintemail.com\",\r\n  \"mjukglass.nu\",\r\n  \"moakt.com\",\r\n  \"mobi.web.id\",\r\n  \"mobileninja.co.uk\",\r\n  \"moburl.com\",\r\n  \"mohmal.com\",\r\n  \"moncourrier.fr.nf\",\r\n  \"monemail.fr.nf\",\r\n  \"monmail.fr.nf\",\r\n  \"monumentmail.com\",\r\n  \"ms9.mailslite.com\",\r\n  \"msa.minsmail.com\",\r\n  \"mt2009.com\",\r\n  \"mt2014.com\",\r\n  \"mx0.wwwnew.eu\",\r\n  \"my10minutemail.com\",\r\n  \"mycleaninbox.net\",\r\n  \"myemailboxy.com\",\r\n  \"mymail-in.net\",\r\n  \"mymailoasis.com\",\r\n  \"mynetstore.de\",\r\n  \"mypacks.net\",\r\n  \"mypartyclip.de\",\r\n  \"myphantomemail.com\",\r\n  \"myspaceinc.com\",\r\n  \"myspaceinc.net\",\r\n  \"myspaceinc.org\",\r\n  \"myspacepimpedup.com\",\r\n  \"myspamless.com\",\r\n  \"mytemp.email\",\r\n  \"mytempemail.com\",\r\n  \"mytrashmail.com\",\r\n  \"neomailbox.com\",\r\n  \"nepwk.com\",\r\n  \"nervmich.net\",\r\n  \"nervtmich.net\",\r\n  \"netmails.com\",\r\n  \"netmails.net\",\r\n  \"netzidiot.de\",\r\n  \"neverbox.com\",\r\n  \"nice-4u.com\",\r\n  \"nmail.cf\",\r\n  \"no-spam.ws\",\r\n  \"nobulk.com\",\r\n  \"noclickemail.com\",\r\n  \"nogmailspam.info\",\r\n  \"nomail.xl.cx\",\r\n  \"nomail2me.com\",\r\n  \"nomorespamemails.com\",\r\n  \"nonspam.eu\",\r\n  \"nonspammer.de\",\r\n  \"noref.in\",\r\n  \"nospam.wins.com.br\",\r\n  \"nospam.ze.tc\",\r\n  \"nospam4.us\",\r\n  \"nospamfor.us\",\r\n  \"nospamthanks.info\",\r\n  \"notmailinator.com\",\r\n  \"notsharingmy.info\",\r\n  \"nowhere.org\",\r\n  \"nowmymail.com\",\r\n  \"ntlhelp.net\",\r\n  \"nurfuerspam.de\",\r\n  \"nus.edu.sg\",\r\n  \"nwldx.com\",\r\n  \"objectmail.com\",\r\n  \"obobbo.com\",\r\n  \"odaymail.com\",\r\n  \"one-time.email\",\r\n  \"oneoffemail.com\",\r\n  \"oneoffmail.com\",\r\n  \"onewaymail.com\",\r\n  \"online.ms\",\r\n  \"oopi.org\",\r\n  \"opayq.com\",\r\n  \"ordinaryamerican.net\",\r\n  \"otherinbox.com\",\r\n  \"ourklips.com\",\r\n  \"outlawspam.com\",\r\n  \"ovpn.to\",\r\n  \"owlpic.com\",\r\n  \"pancakemail.com\",\r\n  \"paplease.com\",\r\n  \"pcusers.otherinbox.com\",\r\n  \"pepbot.com\",\r\n  \"pfui.ru\",\r\n  \"pimpedupmyspace.com\",\r\n  \"pjjkp.com\",\r\n  \"plexolan.de\",\r\n  \"poczta.onet.pl\",\r\n  \"politikerclub.de\",\r\n  \"poofy.org\",\r\n  \"pookmail.com\",\r\n  \"postacin.com\",\r\n  \"privacy.net\",\r\n  \"privy-mail.com\",\r\n  \"privymail.de\",\r\n  \"proxymail.eu\",\r\n  \"prtnx.com\",\r\n  \"prtz.eu\",\r\n  \"punkass.com\",\r\n  \"putthisinyourspamdatabase.com\",\r\n  \"pwrby.com\",\r\n  \"qasti.com\",\r\n  \"qisdo.com\",\r\n  \"qisoa.com\",\r\n  \"quickinbox.com\",\r\n  \"quickmail.nl\",\r\n  \"radiku.ye.vc\",\r\n  \"rcpt.at\",\r\n  \"reallymymail.com\",\r\n  \"receiveee.chickenkiller.com\",\r\n  \"receiveee.com\",\r\n  \"recode.me\",\r\n  \"reconmail.com\",\r\n  \"recursor.net\",\r\n  \"recyclemail.dk\",\r\n  \"regbypass.com\",\r\n  \"regbypass.comsafe-mail.net\",\r\n  \"rejectmail.com\",\r\n  \"remail.cf\",\r\n  \"remail.ga\",\r\n  \"rhyta.com\",\r\n  \"rk9.chickenkiller.com\",\r\n  \"rklips.com\",\r\n  \"rmqkr.net\",\r\n  \"royal.net\",\r\n  \"rppkn.com\",\r\n  \"rtrtr.com\",\r\n  \"ruffrey.com\",\r\n  \"s0ny.net\",\r\n  \"safe-mail.net\",\r\n  \"safersignup.de\",\r\n  \"safetymail.info\",\r\n  \"safetypost.de\",\r\n  \"sandelf.de\",\r\n  \"saynotospams.com\",\r\n  \"scatmail.com\",\r\n  \"schafmail.de\",\r\n  \"selfdestructingmail.com\",\r\n  \"selfdestructingmail.org\",\r\n  \"sendspamhere.com\",\r\n  \"sendspamhere.com\",\r\n  \"sharedmailbox.org\",\r\n  \"sharklasers.com\",\r\n  \"shieldedmail.com\",\r\n  \"shiftmail.com\",\r\n  \"shitmail.me\",\r\n  \"shitmail.org\",\r\n  \"shitware.nl\",\r\n  \"shortmail.net\",\r\n  \"sibmail.com\",\r\n  \"sinnlos-mail.de\",\r\n  \"siteposter.net\",\r\n  \"skeefmail.com\",\r\n  \"slaskpost.se\",\r\n  \"slave-auctions.net\",\r\n  \"slopsbox.com\",\r\n  \"slushmail.com\",\r\n  \"smashmail.de\",\r\n  \"smellfear.com\",\r\n  \"smellrear.com\",\r\n  \"snakemail.com\",\r\n  \"sneakemail.com\",\r\n  \"snkmail.com\",\r\n  \"sofimail.com\",\r\n  \"sofort-mail.de\",\r\n  \"softpls.asia\",\r\n  \"sogetthis.com\",\r\n  \"sohu.com\",\r\n  \"soisz.com\",\r\n  \"solvemail.info\",\r\n  \"soodomail.com\",\r\n  \"soodonims.com\",\r\n  \"spam-be-gone.com\",\r\n  \"spam.la\",\r\n  \"spam.su\",\r\n  \"spam4.me\",\r\n  \"spamavert.com\",\r\n  \"spambob.com\",\r\n  \"spambob.net\",\r\n  \"spambob.org\",\r\n  \"spambog.com\",\r\n  \"spambog.de\",\r\n  \"spambog.net\",\r\n  \"spambog.ru\",\r\n  \"spambooger.com\",\r\n  \"spambox.info\",\r\n  \"spambox.irishspringrealty.com\",\r\n  \"spambox.us\",\r\n  \"spamcannon.com\",\r\n  \"spamcannon.net\",\r\n  \"spamcero.com\",\r\n  \"spamcon.org\",\r\n  \"spamcorptastic.com\",\r\n  \"spamcowboy.com\",\r\n  \"spamcowboy.net\",\r\n  \"spamcowboy.org\",\r\n  \"spamday.com\",\r\n  \"spamdecoy.net\",\r\n  \"spamex.com\",\r\n  \"spamfighter.cf\",\r\n  \"spamfighter.ga\",\r\n  \"spamfighter.gq\",\r\n  \"spamfighter.ml\",\r\n  \"spamfighter.tk\",\r\n  \"spamfree.eu\",\r\n  \"spamfree24.com\",\r\n  \"spamfree24.de\",\r\n  \"spamfree24.eu\",\r\n  \"spamfree24.info\",\r\n  \"spamfree24.net\",\r\n  \"spamfree24.org\",\r\n  \"spamgoes.in\",\r\n  \"spamgourmet.com\",\r\n  \"spamgourmet.net\",\r\n  \"spamgourmet.org\",\r\n  \"spamherelots.com\",\r\n  \"spamherelots.com\",\r\n  \"spamhereplease.com\",\r\n  \"spamhereplease.com\",\r\n  \"spamhole.com\",\r\n  \"spamify.com\",\r\n  \"spaminator.de\",\r\n  \"spamkill.info\",\r\n  \"spaml.com\",\r\n  \"spaml.de\",\r\n  \"spammotel.com\",\r\n  \"spamobox.com\",\r\n  \"spamoff.de\",\r\n  \"spamsalad.in\",\r\n  \"spamslicer.com\",\r\n  \"spamspot.com\",\r\n  \"spamstack.net\",\r\n  \"spamthis.co.uk\",\r\n  \"spamthisplease.com\",\r\n  \"spamtrail.com\",\r\n  \"spamtroll.net\",\r\n  \"speed.1s.fr\",\r\n  \"spikio.com\",\r\n  \"spoofmail.de\",\r\n  \"squizzy.de\",\r\n  \"ssoia.com\",\r\n  \"startkeys.com\",\r\n  \"stinkefinger.net\",\r\n  \"stop-my-spam.cf\",\r\n  \"stop-my-spam.com\",\r\n  \"stop-my-spam.ga\",\r\n  \"stop-my-spam.ml\",\r\n  \"stop-my-spam.tk\",\r\n  \"streetwisemail.com\",\r\n  \"stuffmail.de\",\r\n  \"supergreatmail.com\",\r\n  \"supermailer.jp\",\r\n  \"superrito.com\",\r\n  \"superstachel.de\",\r\n  \"suremail.info\",\r\n  \"svk.jp\",\r\n  \"sweetxxx.de\",\r\n  \"tafmail.com\",\r\n  \"tagyourself.com\",\r\n  \"talkinator.com\",\r\n  \"tapchicuoihoi.com\",\r\n  \"teewars.org\",\r\n  \"teleworm.com\",\r\n  \"teleworm.us\",\r\n  \"temp.emeraldwebmail.com\",\r\n  \"temp.headstrong.de\",\r\n  \"tempalias.com\",\r\n  \"tempe-mail.com\",\r\n  \"tempemail.biz\",\r\n  \"tempemail.co.za\",\r\n  \"tempemail.com\",\r\n  \"tempemail.net\",\r\n  \"tempemail.net\",\r\n  \"tempinbox.co.uk\",\r\n  \"tempinbox.com\",\r\n  \"tempmail.it\",\r\n  \"tempmail2.com\",\r\n  \"tempmaildemo.com\",\r\n  \"tempmailer.com\",\r\n  \"tempomail.fr\",\r\n  \"temporarily.de\",\r\n  \"temporarioemail.com.br\",\r\n  \"temporaryemail.net\",\r\n  \"temporaryemail.us\",\r\n  \"temporaryforwarding.com\",\r\n  \"temporaryinbox.com\",\r\n  \"tempsky.com\",\r\n  \"tempthe.net\",\r\n  \"tempymail.com\",\r\n  \"thanksnospam.info\",\r\n  \"thankyou2010.com\",\r\n  \"thecloudindex.com\",\r\n  \"thisisnotmyrealemail.com\",\r\n  \"throam.com\",\r\n  \"throwawayemailaddress.com\",\r\n  \"throwawaymail.com\",\r\n  \"tilien.com\",\r\n  \"tittbit.in\",\r\n  \"tmail.ws\",\r\n  \"tmailinator.com\",\r\n  \"toiea.com\",\r\n  \"toomail.biz\",\r\n  \"tradermail.info\",\r\n  \"trash-amil.com\",\r\n  \"trash-mail.at\",\r\n  \"trash-mail.cf\",\r\n  \"trash-mail.com\",\r\n  \"trash-mail.de\",\r\n  \"trash-mail.ga\",\r\n  \"trash-mail.gq\",\r\n  \"trash-mail.ml\",\r\n  \"trash-mail.tk\",\r\n  \"trash2009.com\",\r\n  \"trash2010.com\",\r\n  \"trash2011.com\",\r\n  \"trashdevil.com\",\r\n  \"trashdevil.de\",\r\n  \"trashemail.de\",\r\n  \"trashmail.at\",\r\n  \"trashmail.com\",\r\n  \"trashmail.de\",\r\n  \"trashmail.me\",\r\n  \"trashmail.net\",\r\n  \"trashmail.org\",\r\n  \"trashmail.ws\",\r\n  \"trashmailer.com\",\r\n  \"trashymail.com\",\r\n  \"trashymail.net\",\r\n  \"trayna.com\",\r\n  \"trbvm.com\",\r\n  \"trickmail.net\",\r\n  \"trillianpro.com\",\r\n  \"tryalert.com\",\r\n  \"turual.com\",\r\n  \"twinmail.de\",\r\n  \"twoweirdtricks.com\",\r\n  \"tyldd.com\",\r\n  \"ubismail.net\",\r\n  \"uggsrock.com\",\r\n  \"umail.net\",\r\n  \"unmail.ru\",\r\n  \"upliftnow.com\",\r\n  \"uplipht.com\",\r\n  \"uroid.com\",\r\n  \"username.e4ward.com\",\r\n  \"valemail.net\",\r\n  \"venompen.com\",\r\n  \"veryrealemail.com\",\r\n  \"vidchart.com\",\r\n  \"viditag.com\",\r\n  \"viewcastmedia.com\",\r\n  \"viewcastmedia.net\",\r\n  \"viewcastmedia.org\",\r\n  \"vomoto.com\",\r\n  \"vubby.com\",\r\n  \"walala.org\",\r\n  \"walkmail.net\",\r\n  \"webemail.me\",\r\n  \"webm4il.info\",\r\n  \"webuser.in\",\r\n  \"wee.my\",\r\n  \"weg-werf-email.de\",\r\n  \"wegwerf-email-addressen.de\",\r\n  \"wegwerf-emails.de\",\r\n  \"wegwerfadresse.de\",\r\n  \"wegwerfemail.de\",\r\n  \"wegwerfmail.de\",\r\n  \"wegwerfmail.info\",\r\n  \"wegwerfmail.net\",\r\n  \"wegwerfmail.org\",\r\n  \"wetrainbayarea.com\",\r\n  \"wetrainbayarea.org\",\r\n  \"wh4f.org\",\r\n  \"whatiaas.com\",\r\n  \"whatpaas.com\",\r\n  \"whatsaas.com\",\r\n  \"whopy.com\",\r\n  \"whtjddn.33mail.com\",\r\n  \"whyspam.me\",\r\n  \"wickmail.net\",\r\n  \"wilemail.com\",\r\n  \"willselfdestruct.com\",\r\n  \"winemaven.info\",\r\n  \"wmail.cf\",\r\n  \"wollan.info\",\r\n  \"wronghead.com\",\r\n  \"wuzup.net\",\r\n  \"wuzupmail.net\",\r\n  \"www.e4ward.com\",\r\n  \"www.gishpuppy.com\",\r\n  \"www.mailinator.com\",\r\n  \"wwwnew.eu\",\r\n  \"xagloo.com\",\r\n  \"xemaps.com\",\r\n  \"xents.com\",\r\n  \"xmaily.com\",\r\n  \"xoxox.cc\",\r\n  \"xoxy.net\",\r\n  \"xyzfree.net\",\r\n  \"yapped.net\",\r\n  \"yeah.net\",\r\n  \"yep.it\",\r\n  \"yert.ye.vc\",\r\n  \"yogamaven.com\",\r\n  \"yomail.info\",\r\n  \"yopmail.com\",\r\n  \"yopmail.fr\",\r\n  \"yopmail.gq\",\r\n  \"yopmail.net\",\r\n  \"youmail.ga\",\r\n  \"ypmail.webarnak.fr.eu.org\",\r\n  \"yuurok.com\",\r\n  \"za.com\",\r\n  \"zehnminutenmail.de\",\r\n  \"zetmail.com\",\r\n  \"zippymail.info\",\r\n  \"zoaxe.com\",\r\n  \"zoemail.com\",\r\n  \"zoemail.net\",\r\n  \"zoemail.org\",\r\n  \"zomg.info\",\r\n  \"zxcv.com\",\r\n  \"zxcvbnm.com\",\r\n  \"zzz.com\",\r\n]\r\n","// @flow\r\nimport { blackList } from './blackList'\r\n\r\nconst EMAIL_REGEXP = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n\r\nexport const isValidEmail = email => {\r\n  if (!email) {\r\n    return false\r\n  }\r\n  if (!EMAIL_REGEXP.test(email)) {\r\n    return false\r\n  }\r\n\r\n  const matches = email.match(/[^@]+$/)\r\n  if (!matches || !matches[0]) {\r\n    return false\r\n  }\r\n  const domain = matches[0] || null\r\n  if (!domain) {\r\n    return false\r\n  }\r\n\r\n  if (blackList.indexOf(domain) !== -1) {\r\n    return false\r\n  }\r\n\r\n  return true\r\n}\r\n","// if you uncomment a country here in order to enable it\r\n// please verify that the corresponding flag svg exists (/flags/${country.toLowerCase()}.svg)\r\nexport const countryCodes = [\r\n  {\r\n    name: 'Afghanistan',\r\n    dial_code: '+93',\r\n    code: 'AF',\r\n  },\r\n  {\r\n    name: 'Aland Islands',\r\n    dial_code: '+358',\r\n    code: 'AX',\r\n  },\r\n  {\r\n    name: 'Albania',\r\n    dial_code: '+355',\r\n    code: 'AL',\r\n  },\r\n  {\r\n    name: 'Algeria',\r\n    dial_code: '+213',\r\n    code: 'DZ',\r\n  },\r\n  {\r\n    name: 'AmericanSamoa',\r\n    dial_code: '+1684',\r\n    code: 'AS',\r\n  },\r\n  {\r\n    name: 'Andorra',\r\n    dial_code: '+376',\r\n    code: 'AD',\r\n  },\r\n  {\r\n    name: 'Angola',\r\n    dial_code: '+244',\r\n    code: 'AO',\r\n  },\r\n  {\r\n    name: 'Anguilla',\r\n    dial_code: '+1264',\r\n    code: 'AI',\r\n  },\r\n  {\r\n    name: 'Antarctica',\r\n    dial_code: '+672',\r\n    code: 'AQ',\r\n  },\r\n  {\r\n    name: 'Antigua and Barbuda',\r\n    dial_code: '+1268',\r\n    code: 'AG',\r\n  },\r\n  {\r\n    name: 'Argentina',\r\n    dial_code: '+54',\r\n    code: 'AR',\r\n  },\r\n  {\r\n    name: 'Armenia',\r\n    dial_code: '+374',\r\n    code: 'AM',\r\n  },\r\n  {\r\n    name: 'Aruba',\r\n    dial_code: '+297',\r\n    code: 'AW',\r\n  },\r\n  {\r\n    name: 'Australia',\r\n    dial_code: '+61',\r\n    code: 'AU',\r\n  },\r\n  {\r\n    name: 'Austria',\r\n    dial_code: '+43',\r\n    code: 'AT',\r\n  },\r\n  {\r\n    name: 'Azerbaijan',\r\n    dial_code: '+994',\r\n    code: 'AZ',\r\n  },\r\n  {\r\n    name: 'Bahamas',\r\n    dial_code: '+1242',\r\n    code: 'BS',\r\n  },\r\n  {\r\n    name: 'Bahrain',\r\n    dial_code: '+973',\r\n    code: 'BH',\r\n  },\r\n  {\r\n    name: 'Bangladesh',\r\n    dial_code: '+880',\r\n    code: 'BD',\r\n  },\r\n  {\r\n    name: 'Barbados',\r\n    dial_code: '+1246',\r\n    code: 'BB',\r\n  },\r\n  {\r\n    name: 'Belarus',\r\n    dial_code: '+375',\r\n    code: 'BY',\r\n  },\r\n  {\r\n    name: 'Belgium',\r\n    dial_code: '+32',\r\n    code: 'BE',\r\n  },\r\n  {\r\n    name: 'Belize',\r\n    dial_code: '+501',\r\n    code: 'BZ',\r\n  },\r\n  {\r\n    name: 'Benin',\r\n    dial_code: '+229',\r\n    code: 'BJ',\r\n  },\r\n  {\r\n    name: 'Bermuda',\r\n    dial_code: '+1441',\r\n    code: 'BM',\r\n  },\r\n  {\r\n    name: 'Bhutan',\r\n    dial_code: '+975',\r\n    code: 'BT',\r\n  },\r\n  {\r\n    name: 'Bolivia, Plurinational State of bolivia',\r\n    dial_code: '+591',\r\n    code: 'BO',\r\n  },\r\n  {\r\n    name: 'Bosnia and Herzegovina',\r\n    dial_code: '+387',\r\n    code: 'BA',\r\n  },\r\n  {\r\n    name: 'Botswana',\r\n    dial_code: '+267',\r\n    code: 'BW',\r\n  },\r\n  {\r\n    name: 'Brazil',\r\n    dial_code: '+55',\r\n    code: 'BR',\r\n  },\r\n  {\r\n    name: 'British Indian Ocean Territory',\r\n    dial_code: '+246',\r\n    code: 'IO',\r\n  },\r\n  {\r\n    name: 'Brunei Darussalam',\r\n    dial_code: '+673',\r\n    code: 'BN',\r\n  },\r\n  {\r\n    name: 'Bulgaria',\r\n    dial_code: '+359',\r\n    code: 'BG',\r\n  },\r\n  {\r\n    name: 'Burkina Faso',\r\n    dial_code: '+226',\r\n    code: 'BF',\r\n  },\r\n  {\r\n    name: 'Burundi',\r\n    dial_code: '+257',\r\n    code: 'BI',\r\n  },\r\n  {\r\n    name: 'Cambodia',\r\n    dial_code: '+855',\r\n    code: 'KH',\r\n  },\r\n  {\r\n    name: 'Cameroon',\r\n    dial_code: '+237',\r\n    code: 'CM',\r\n  },\r\n  {\r\n    name: 'Canada',\r\n    dial_code: '+1',\r\n    code: 'CA',\r\n  },\r\n  {\r\n    name: 'Cape Verde',\r\n    dial_code: '+238',\r\n    code: 'CV',\r\n  },\r\n  {\r\n    name: 'Cayman Islands',\r\n    dial_code: '+1345',\r\n    code: 'KY',\r\n  },\r\n  {\r\n    name: 'Central African Republic',\r\n    dial_code: '+236',\r\n    code: 'CF',\r\n  },\r\n  {\r\n    name: 'Chad',\r\n    dial_code: '+235',\r\n    code: 'TD',\r\n  },\r\n  {\r\n    name: 'Chile',\r\n    dial_code: '+56',\r\n    code: 'CL',\r\n  },\r\n  {\r\n    name: 'China',\r\n    dial_code: '+86',\r\n    code: 'CN',\r\n  },\r\n  {\r\n    name: 'Christmas Island',\r\n    dial_code: '+61',\r\n    code: 'CX',\r\n  },\r\n  {\r\n    name: 'Cocos (Keeling) Islands',\r\n    dial_code: '+61',\r\n    code: 'CC',\r\n  },\r\n  {\r\n    name: 'Colombia',\r\n    dial_code: '+57',\r\n    code: 'CO',\r\n  },\r\n  {\r\n    name: 'Comoros',\r\n    dial_code: '+269',\r\n    code: 'KM',\r\n  },\r\n  {\r\n    name: 'Congo',\r\n    dial_code: '+242',\r\n    code: 'CG',\r\n  },\r\n  {\r\n    name: 'Congo, The Democratic Republic of the Congo',\r\n    dial_code: '+243',\r\n    code: 'CD',\r\n  },\r\n  {\r\n    name: 'Cook Islands',\r\n    dial_code: '+682',\r\n    code: 'CK',\r\n  },\r\n  {\r\n    name: 'Costa Rica',\r\n    dial_code: '+506',\r\n    code: 'CR',\r\n  },\r\n  {\r\n    name: \"Cote d'Ivoire\",\r\n    dial_code: '+225',\r\n    code: 'CI',\r\n  },\r\n  {\r\n    name: 'Croatia',\r\n    dial_code: '+385',\r\n    code: 'HR',\r\n  },\r\n  {\r\n    name: 'Cuba',\r\n    dial_code: '+53',\r\n    code: 'CU',\r\n  },\r\n  {\r\n    name: 'Cyprus',\r\n    dial_code: '+357',\r\n    code: 'CY',\r\n  },\r\n  {\r\n    name: 'Czech Republic',\r\n    dial_code: '+420',\r\n    code: 'CZ',\r\n  },\r\n  {\r\n    name: 'Denmark',\r\n    dial_code: '+45',\r\n    code: 'DK',\r\n  },\r\n  {\r\n    name: 'Djibouti',\r\n    dial_code: '+253',\r\n    code: 'DJ',\r\n  },\r\n  {\r\n    name: 'Dominica',\r\n    dial_code: '+1767',\r\n    code: 'DM',\r\n  },\r\n  {\r\n    name: 'Dominican Republic',\r\n    dial_code: '+1849',\r\n    code: 'DO',\r\n  },\r\n  {\r\n    name: 'Ecuador',\r\n    dial_code: '+593',\r\n    code: 'EC',\r\n  },\r\n  {\r\n    name: 'Egypt',\r\n    dial_code: '+20',\r\n    code: 'EG',\r\n  },\r\n  {\r\n    name: 'El Salvador',\r\n    dial_code: '+503',\r\n    code: 'SV',\r\n  },\r\n  {\r\n    name: 'Equatorial Guinea',\r\n    dial_code: '+240',\r\n    code: 'GQ',\r\n  },\r\n  {\r\n    name: 'Eritrea',\r\n    dial_code: '+291',\r\n    code: 'ER',\r\n  },\r\n  {\r\n    name: 'Estonia',\r\n    dial_code: '+372',\r\n    code: 'EE',\r\n  },\r\n  {\r\n    name: 'Ethiopia',\r\n    dial_code: '+251',\r\n    code: 'ET',\r\n  },\r\n  {\r\n    name: 'Falkland Islands (Malvinas)',\r\n    dial_code: '+500',\r\n    code: 'FK',\r\n  },\r\n  {\r\n    name: 'Faroe Islands',\r\n    dial_code: '+298',\r\n    code: 'FO',\r\n  },\r\n  {\r\n    name: 'Fiji',\r\n    dial_code: '+679',\r\n    code: 'FJ',\r\n  },\r\n  {\r\n    name: 'Finland',\r\n    dial_code: '+358',\r\n    code: 'FI',\r\n  },\r\n  {\r\n    name: 'France',\r\n    dial_code: '+33',\r\n    code: 'FR',\r\n  },\r\n  {\r\n    name: 'French Guiana',\r\n    dial_code: '+594',\r\n    code: 'GF',\r\n  },\r\n  {\r\n    name: 'French Polynesia',\r\n    dial_code: '+689',\r\n    code: 'PF',\r\n  },\r\n  {\r\n    name: 'Gabon',\r\n    dial_code: '+241',\r\n    code: 'GA',\r\n  },\r\n  {\r\n    name: 'Gambia',\r\n    dial_code: '+220',\r\n    code: 'GM',\r\n  },\r\n  {\r\n    name: 'Georgia',\r\n    dial_code: '+995',\r\n    code: 'GE',\r\n  },\r\n  {\r\n    name: 'Germany',\r\n    dial_code: '+49',\r\n    code: 'DE',\r\n  },\r\n  {\r\n    name: 'Ghana',\r\n    dial_code: '+233',\r\n    code: 'GH',\r\n  },\r\n  {\r\n    name: 'Gibraltar',\r\n    dial_code: '+350',\r\n    code: 'GI',\r\n  },\r\n  {\r\n    name: 'Greece',\r\n    dial_code: '+30',\r\n    code: 'GR',\r\n  },\r\n  {\r\n    name: 'Greenland',\r\n    dial_code: '+299',\r\n    code: 'GL',\r\n  },\r\n  {\r\n    name: 'Grenada',\r\n    dial_code: '+1473',\r\n    code: 'GD',\r\n  },\r\n  {\r\n    name: 'Guadeloupe',\r\n    dial_code: '+590',\r\n    code: 'GP',\r\n  },\r\n  {\r\n    name: 'Guam',\r\n    dial_code: '+1671',\r\n    code: 'GU',\r\n  },\r\n  {\r\n    name: 'Guatemala',\r\n    dial_code: '+502',\r\n    code: 'GT',\r\n  },\r\n  {\r\n    name: 'Guernsey',\r\n    dial_code: '+44',\r\n    code: 'GG',\r\n  },\r\n  {\r\n    name: 'Guinea',\r\n    dial_code: '+224',\r\n    code: 'GN',\r\n  },\r\n  {\r\n    name: 'Guinea-Bissau',\r\n    dial_code: '+245',\r\n    code: 'GW',\r\n  },\r\n  {\r\n    name: 'Guyana',\r\n    dial_code: '+592',\r\n    code: 'GY',\r\n  },\r\n  {\r\n    name: 'Haiti',\r\n    dial_code: '+509',\r\n    code: 'HT',\r\n  },\r\n  {\r\n    name: 'Holy See (Vatican City State)',\r\n    dial_code: '+379',\r\n    code: 'VA',\r\n  },\r\n  {\r\n    name: 'Honduras',\r\n    dial_code: '+504',\r\n    code: 'HN',\r\n  },\r\n  {\r\n    name: 'Hong Kong',\r\n    dial_code: '+852',\r\n    code: 'HK',\r\n  },\r\n  {\r\n    name: 'Hungary',\r\n    dial_code: '+36',\r\n    code: 'HU',\r\n  },\r\n  {\r\n    name: 'Iceland',\r\n    dial_code: '+354',\r\n    code: 'IS',\r\n  },\r\n  {\r\n    name: 'India',\r\n    dial_code: '+91',\r\n    code: 'IN',\r\n  },\r\n  {\r\n    name: 'Indonesia',\r\n    dial_code: '+62',\r\n    code: 'ID',\r\n  },\r\n  {\r\n    name: 'Iran, Islamic Republic of Persian Gulf',\r\n    dial_code: '+98',\r\n    code: 'IR',\r\n  },\r\n  {\r\n    name: 'Iraq',\r\n    dial_code: '+964',\r\n    code: 'IQ',\r\n  },\r\n  {\r\n    name: 'Ireland',\r\n    dial_code: '+353',\r\n    code: 'IE',\r\n  },\r\n  {\r\n    name: 'Isle of Man',\r\n    dial_code: '+44',\r\n    code: 'IM',\r\n  },\r\n  {\r\n    name: 'Israel',\r\n    dial_code: '+972',\r\n    code: 'IL',\r\n  },\r\n  {\r\n    name: 'Italy',\r\n    dial_code: '+39',\r\n    code: 'IT',\r\n  },\r\n  {\r\n    name: 'Jamaica',\r\n    dial_code: '+1876',\r\n    code: 'JM',\r\n  },\r\n  {\r\n    name: 'Japan',\r\n    dial_code: '+81',\r\n    code: 'JP',\r\n  },\r\n  {\r\n    name: 'Jersey',\r\n    dial_code: '+44',\r\n    code: 'JE',\r\n  },\r\n  {\r\n    name: 'Jordan',\r\n    dial_code: '+962',\r\n    code: 'JO',\r\n  },\r\n  {\r\n    name: 'Kazakhstan',\r\n    dial_code: '+7',\r\n    code: 'KZ',\r\n  },\r\n  {\r\n    name: 'Kenya',\r\n    dial_code: '+254',\r\n    code: 'KE',\r\n  },\r\n  {\r\n    name: 'Kiribati',\r\n    dial_code: '+686',\r\n    code: 'KI',\r\n  },\r\n  {\r\n    name: \"Korea, Democratic People's Republic of Korea\",\r\n    dial_code: '+850',\r\n    code: 'KP',\r\n  },\r\n  {\r\n    name: 'Korea, Republic of South Korea',\r\n    dial_code: '+82',\r\n    code: 'KR',\r\n  },\r\n  {\r\n    name: 'Kuwait',\r\n    dial_code: '+965',\r\n    code: 'KW',\r\n  },\r\n  {\r\n    name: 'Kyrgyzstan',\r\n    dial_code: '+996',\r\n    code: 'KG',\r\n  },\r\n  {\r\n    name: 'Laos',\r\n    dial_code: '+856',\r\n    code: 'LA',\r\n  },\r\n  {\r\n    name: 'Latvia',\r\n    dial_code: '+371',\r\n    code: 'LV',\r\n  },\r\n  {\r\n    name: 'Lebanon',\r\n    dial_code: '+961',\r\n    code: 'LB',\r\n  },\r\n  {\r\n    name: 'Lesotho',\r\n    dial_code: '+266',\r\n    code: 'LS',\r\n  },\r\n  {\r\n    name: 'Liberia',\r\n    dial_code: '+231',\r\n    code: 'LR',\r\n  },\r\n  {\r\n    name: 'Libyan Arab Jamahiriya',\r\n    dial_code: '+218',\r\n    code: 'LY',\r\n  },\r\n  {\r\n    name: 'Liechtenstein',\r\n    dial_code: '+423',\r\n    code: 'LI',\r\n  },\r\n  {\r\n    name: 'Lithuania',\r\n    dial_code: '+370',\r\n    code: 'LT',\r\n  },\r\n  {\r\n    name: 'Luxembourg',\r\n    dial_code: '+352',\r\n    code: 'LU',\r\n  },\r\n  {\r\n    name: 'Macao',\r\n    dial_code: '+853',\r\n    code: 'MO',\r\n  },\r\n  {\r\n    name: 'Macedonia',\r\n    dial_code: '+389',\r\n    code: 'MK',\r\n  },\r\n  {\r\n    name: 'Madagascar',\r\n    dial_code: '+261',\r\n    code: 'MG',\r\n  },\r\n  {\r\n    name: 'Malawi',\r\n    dial_code: '+265',\r\n    code: 'MW',\r\n  },\r\n  {\r\n    name: 'Malaysia',\r\n    dial_code: '+60',\r\n    code: 'MY',\r\n  },\r\n  {\r\n    name: 'Maldives',\r\n    dial_code: '+960',\r\n    code: 'MV',\r\n  },\r\n  {\r\n    name: 'Mali',\r\n    dial_code: '+223',\r\n    code: 'ML',\r\n  },\r\n  {\r\n    name: 'Malta',\r\n    dial_code: '+356',\r\n    code: 'MT',\r\n  },\r\n  {\r\n    name: 'Marshall Islands',\r\n    dial_code: '+692',\r\n    code: 'MH',\r\n  },\r\n  {\r\n    name: 'Martinique',\r\n    dial_code: '+596',\r\n    code: 'MQ',\r\n  },\r\n  {\r\n    name: 'Mauritania',\r\n    dial_code: '+222',\r\n    code: 'MR',\r\n  },\r\n  {\r\n    name: 'Mauritius',\r\n    dial_code: '+230',\r\n    code: 'MU',\r\n  },\r\n  {\r\n    name: 'Mayotte',\r\n    dial_code: '+262',\r\n    code: 'YT',\r\n  },\r\n  {\r\n    name: 'Mexico',\r\n    dial_code: '+52',\r\n    code: 'MX',\r\n  },\r\n  {\r\n    name: 'Micronesia, Federated States of Micronesia',\r\n    dial_code: '+691',\r\n    code: 'FM',\r\n  },\r\n  {\r\n    name: 'Moldova',\r\n    dial_code: '+373',\r\n    code: 'MD',\r\n  },\r\n  {\r\n    name: 'Monaco',\r\n    dial_code: '+377',\r\n    code: 'MC',\r\n  },\r\n  {\r\n    name: 'Mongolia',\r\n    dial_code: '+976',\r\n    code: 'MN',\r\n  },\r\n  {\r\n    name: 'Montenegro',\r\n    dial_code: '+382',\r\n    code: 'ME',\r\n  },\r\n  {\r\n    name: 'Montserrat',\r\n    dial_code: '+1664',\r\n    code: 'MS',\r\n  },\r\n  {\r\n    name: 'Morocco',\r\n    dial_code: '+212',\r\n    code: 'MA',\r\n  },\r\n  {\r\n    name: 'Mozambique',\r\n    dial_code: '+258',\r\n    code: 'MZ',\r\n  },\r\n  {\r\n    name: 'Myanmar',\r\n    dial_code: '+95',\r\n    code: 'MM',\r\n  },\r\n  {\r\n    name: 'Namibia',\r\n    dial_code: '+264',\r\n    code: 'NA',\r\n  },\r\n  {\r\n    name: 'Nauru',\r\n    dial_code: '+674',\r\n    code: 'NR',\r\n  },\r\n  {\r\n    name: 'Nepal',\r\n    dial_code: '+977',\r\n    code: 'NP',\r\n  },\r\n  {\r\n    name: 'Netherlands',\r\n    dial_code: '+31',\r\n    code: 'NL',\r\n  },\r\n  {\r\n    name: 'New Caledonia',\r\n    dial_code: '+687',\r\n    code: 'NC',\r\n  },\r\n  {\r\n    name: 'New Zealand',\r\n    dial_code: '+64',\r\n    code: 'NZ',\r\n  },\r\n  {\r\n    name: 'Nicaragua',\r\n    dial_code: '+505',\r\n    code: 'NI',\r\n  },\r\n  {\r\n    name: 'Niger',\r\n    dial_code: '+227',\r\n    code: 'NE',\r\n  },\r\n  {\r\n    name: 'Nigeria',\r\n    dial_code: '+234',\r\n    code: 'NG',\r\n  },\r\n  {\r\n    name: 'Niue',\r\n    dial_code: '+683',\r\n    code: 'NU',\r\n  },\r\n  {\r\n    name: 'Norfolk Island',\r\n    dial_code: '+672',\r\n    code: 'NF',\r\n  },\r\n  {\r\n    name: 'Northern Mariana Islands',\r\n    dial_code: '+1670',\r\n    code: 'MP',\r\n  },\r\n  {\r\n    name: 'Norway',\r\n    dial_code: '+47',\r\n    code: 'NO',\r\n  },\r\n  {\r\n    name: 'Oman',\r\n    dial_code: '+968',\r\n    code: 'OM',\r\n  },\r\n  {\r\n    name: 'Pakistan',\r\n    dial_code: '+92',\r\n    code: 'PK',\r\n  },\r\n  {\r\n    name: 'Palau',\r\n    dial_code: '+680',\r\n    code: 'PW',\r\n  },\r\n  {\r\n    name: 'Palestinian Territory, Occupied',\r\n    dial_code: '+970',\r\n    code: 'PS',\r\n  },\r\n  {\r\n    name: 'Panama',\r\n    dial_code: '+507',\r\n    code: 'PA',\r\n  },\r\n  {\r\n    name: 'Papua New Guinea',\r\n    dial_code: '+675',\r\n    code: 'PG',\r\n  },\r\n  {\r\n    name: 'Paraguay',\r\n    dial_code: '+595',\r\n    code: 'PY',\r\n  },\r\n  {\r\n    name: 'Peru',\r\n    dial_code: '+51',\r\n    code: 'PE',\r\n  },\r\n  {\r\n    name: 'Philippines',\r\n    dial_code: '+63',\r\n    code: 'PH',\r\n  },\r\n  {\r\n    name: 'Pitcairn',\r\n    dial_code: '+64',\r\n    code: 'PN',\r\n  },\r\n  {\r\n    name: 'Poland',\r\n    dial_code: '+48',\r\n    code: 'PL',\r\n  },\r\n  {\r\n    name: 'Portugal',\r\n    dial_code: '+351',\r\n    code: 'PT',\r\n  },\r\n  {\r\n    name: 'Puerto Rico',\r\n    dial_code: '+1',\r\n    code: 'PR',\r\n  },\r\n  {\r\n    name: 'Qatar',\r\n    dial_code: '+974',\r\n    code: 'QA',\r\n  },\r\n  {\r\n    name: 'Romania',\r\n    dial_code: '+40',\r\n    code: 'RO',\r\n  },\r\n  {\r\n    name: 'Russia',\r\n    dial_code: '+7',\r\n    code: 'RU',\r\n  },\r\n  {\r\n    name: 'Rwanda',\r\n    dial_code: '+250',\r\n    code: 'RW',\r\n  },\r\n  {\r\n    name: 'Reunion',\r\n    dial_code: '+262',\r\n    code: 'RE',\r\n  },\r\n  {\r\n    name: 'Saint Barthelemy',\r\n    dial_code: '+590',\r\n    code: 'BL',\r\n  },\r\n  {\r\n    name: 'Saint Helena, Ascension and Tristan Da Cunha',\r\n    dial_code: '+290',\r\n    code: 'SH',\r\n  },\r\n  {\r\n    name: 'Saint Kitts and Nevis',\r\n    dial_code: '+1869',\r\n    code: 'KN',\r\n  },\r\n  {\r\n    name: 'Saint Lucia',\r\n    dial_code: '+1758',\r\n    code: 'LC',\r\n  },\r\n  {\r\n    name: 'Saint Martin',\r\n    dial_code: '+590',\r\n    code: 'MF',\r\n  },\r\n  {\r\n    name: 'Saint Pierre and Miquelon',\r\n    dial_code: '+508',\r\n    code: 'PM',\r\n  },\r\n  {\r\n    name: 'Saint Vincent and the Grenadines',\r\n    dial_code: '+1784',\r\n    code: 'VC',\r\n  },\r\n  {\r\n    name: 'Samoa',\r\n    dial_code: '+685',\r\n    code: 'WS',\r\n  },\r\n  {\r\n    name: 'San Marino',\r\n    dial_code: '+378',\r\n    code: 'SM',\r\n  },\r\n  {\r\n    name: 'Sao Tome and Principe',\r\n    dial_code: '+239',\r\n    code: 'ST',\r\n  },\r\n  {\r\n    name: 'Saudi Arabia',\r\n    dial_code: '+966',\r\n    code: 'SA',\r\n  },\r\n  {\r\n    name: 'Senegal',\r\n    dial_code: '+221',\r\n    code: 'SN',\r\n  },\r\n  {\r\n    name: 'Serbia',\r\n    dial_code: '+381',\r\n    code: 'RS',\r\n  },\r\n  {\r\n    name: 'Seychelles',\r\n    dial_code: '+248',\r\n    code: 'SC',\r\n  },\r\n  {\r\n    name: 'Sierra Leone',\r\n    dial_code: '+232',\r\n    code: 'SL',\r\n  },\r\n  {\r\n    name: 'Singapore',\r\n    dial_code: '+65',\r\n    code: 'SG',\r\n  },\r\n  {\r\n    name: 'Slovakia',\r\n    dial_code: '+421',\r\n    code: 'SK',\r\n  },\r\n  {\r\n    name: 'Slovenia',\r\n    dial_code: '+386',\r\n    code: 'SI',\r\n  },\r\n  {\r\n    name: 'Solomon Islands',\r\n    dial_code: '+677',\r\n    code: 'SB',\r\n  },\r\n  {\r\n    name: 'Somalia',\r\n    dial_code: '+252',\r\n    code: 'SO',\r\n  },\r\n  {\r\n    name: 'South Africa',\r\n    dial_code: '+27',\r\n    code: 'ZA',\r\n  },\r\n  {\r\n    name: 'South Sudan',\r\n    dial_code: '+211',\r\n    code: 'SS',\r\n  },\r\n  {\r\n    name: 'South Georgia and the South Sandwich Islands',\r\n    dial_code: '+500',\r\n    code: 'GS',\r\n  },\r\n  {\r\n    name: 'Spain',\r\n    dial_code: '+34',\r\n    code: 'ES',\r\n  },\r\n  {\r\n    name: 'Sri Lanka',\r\n    dial_code: '+94',\r\n    code: 'LK',\r\n  },\r\n  {\r\n    name: 'Sudan',\r\n    dial_code: '+249',\r\n    code: 'SD',\r\n  },\r\n  {\r\n    name: 'Suriname',\r\n    dial_code: '+597',\r\n    code: 'SR',\r\n  },\r\n  {\r\n    name: 'Svalbard and Jan Mayen',\r\n    dial_code: '+47',\r\n    code: 'SJ',\r\n  },\r\n  {\r\n    name: 'Swaziland',\r\n    dial_code: '+268',\r\n    code: 'SZ',\r\n  },\r\n  {\r\n    name: 'Sweden',\r\n    dial_code: '+46',\r\n    code: 'SE',\r\n  },\r\n  {\r\n    name: 'Switzerland',\r\n    dial_code: '+41',\r\n    code: 'CH',\r\n  },\r\n  {\r\n    name: 'Syrian Arab Republic',\r\n    dial_code: '+963',\r\n    code: 'SY',\r\n  },\r\n  {\r\n    name: 'Taiwan',\r\n    dial_code: '+886',\r\n    code: 'TW',\r\n  },\r\n  {\r\n    name: 'Tajikistan',\r\n    dial_code: '+992',\r\n    code: 'TJ',\r\n  },\r\n  {\r\n    name: 'Tanzania, United Republic of Tanzania',\r\n    dial_code: '+255',\r\n    code: 'TZ',\r\n  },\r\n  {\r\n    name: 'Thailand',\r\n    dial_code: '+66',\r\n    code: 'TH',\r\n  },\r\n  {\r\n    name: 'Timor-Leste',\r\n    dial_code: '+670',\r\n    code: 'TL',\r\n  },\r\n  {\r\n    name: 'Togo',\r\n    dial_code: '+228',\r\n    code: 'TG',\r\n  },\r\n  {\r\n    name: 'Tokelau',\r\n    dial_code: '+690',\r\n    code: 'TK',\r\n  },\r\n  {\r\n    name: 'Tonga',\r\n    dial_code: '+676',\r\n    code: 'TO',\r\n  },\r\n  {\r\n    name: 'Trinidad and Tobago',\r\n    dial_code: '+1868',\r\n    code: 'TT',\r\n  },\r\n  {\r\n    name: 'Tunisia',\r\n    dial_code: '+216',\r\n    code: 'TN',\r\n  },\r\n  {\r\n    name: 'Turkey',\r\n    dial_code: '+90',\r\n    code: 'TR',\r\n  },\r\n  {\r\n    name: 'Turkmenistan',\r\n    dial_code: '+993',\r\n    code: 'TM',\r\n  },\r\n  {\r\n    name: 'Turks and Caicos Islands',\r\n    dial_code: '+1649',\r\n    code: 'TC',\r\n  },\r\n  {\r\n    name: 'Tuvalu',\r\n    dial_code: '+688',\r\n    code: 'TV',\r\n  },\r\n  {\r\n    name: 'Uganda',\r\n    dial_code: '+256',\r\n    code: 'UG',\r\n  },\r\n  {\r\n    name: 'Ukraine',\r\n    dial_code: '+380',\r\n    code: 'UA',\r\n  },\r\n  {\r\n    name: 'United Arab Emirates',\r\n    dial_code: '+971',\r\n    code: 'AE',\r\n  },\r\n  {\r\n    name: 'United Kingdom',\r\n    dial_code: '+44',\r\n    code: 'GB',\r\n  },\r\n  {\r\n    name: 'United States',\r\n    dial_code: '+1',\r\n    code: 'US',\r\n  },\r\n  {\r\n    name: 'Uruguay',\r\n    dial_code: '+598',\r\n    code: 'UY',\r\n  },\r\n  {\r\n    name: 'Uzbekistan',\r\n    dial_code: '+998',\r\n    code: 'UZ',\r\n  },\r\n  {\r\n    name: 'Vanuatu',\r\n    dial_code: '+678',\r\n    code: 'VU',\r\n  },\r\n  {\r\n    name: 'Venezuela, Bolivarian Republic of Venezuela',\r\n    dial_code: '+58',\r\n    code: 'VE',\r\n  },\r\n  {\r\n    name: 'Vietnam',\r\n    dial_code: '+84',\r\n    code: 'VN',\r\n  },\r\n  {\r\n    name: 'Virgin Islands, British',\r\n    dial_code: '+1284',\r\n    code: 'VG',\r\n  },\r\n  {\r\n    name: 'Virgin Islands, U.S.',\r\n    dial_code: '+1340',\r\n    code: 'VI',\r\n  },\r\n  {\r\n    name: 'Wallis and Futuna',\r\n    dial_code: '+681',\r\n    code: 'WF',\r\n  },\r\n  {\r\n    name: 'Yemen',\r\n    dial_code: '+967',\r\n    code: 'YE',\r\n  },\r\n  {\r\n    name: 'Zambia',\r\n    dial_code: '+260',\r\n    code: 'ZM',\r\n  },\r\n  {\r\n    name: 'Zimbabwe',\r\n    dial_code: '+263',\r\n    code: 'ZW',\r\n  },\r\n]\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNull from 'lodash/isNull'\r\nimport isNil from 'lodash/isNil'\r\nimport find from 'lodash/find'\r\nimport startsWith from 'lodash/startsWith'\r\nimport { countryCodes } from '../country/countryCodes'\r\n\r\n// https://github.com/catamphetamine/libphonenumber-js\r\nimport {\r\n  parsePhoneNumberFromString,\r\n  ParseError,\r\n  getCountryCallingCode,\r\n  AsYouType,\r\n} from 'libphonenumber-js'\r\n\r\n// TODO: unit tests\r\n// - null & empty phone numbers\r\n\r\n/**\r\n * Tools to manipulate phone numbers.\r\n * Use https://github.com/seegno/google-libphonenumber, abstract of\r\n * https://github.com/googlei18n/libphonenumber\r\n */\r\nconst MIN_LENGHT_FOR_NUMBER = 3\r\n\r\nexport const formatPhoneNumberAsYouType = (number = null, iso = 'FR') => {\r\n  if (number === null) {\r\n    return null\r\n  }\r\n\r\n  const asYouType = new AsYouType(iso)\r\n\r\n  return {\r\n    input: asYouType.input(number),\r\n    country: asYouType.country,\r\n    number: asYouType.getNumber(),\r\n    nationalNumber: asYouType.getNationalNumber(),\r\n  }\r\n}\r\n\r\nexport const parse = number => {\r\n  try {\r\n    return parsePhoneNumberFromString(number)\r\n  } catch (error) {\r\n    if (error instanceof ParseError) {\r\n      // Not a phone number, non-existent country, etc.\r\n      console.log(error.message)\r\n    } else {\r\n      // throw error\r\n    }\r\n  }\r\n  return null\r\n}\r\n\r\nexport const formatPhoneNumber = (number = null) => {\r\n  if (number === null) {\r\n    return null\r\n  }\r\n\r\n  if (isNull(number) || number.length <= MIN_LENGHT_FOR_NUMBER) {\r\n    return number\r\n  }\r\n\r\n  const phoneNumber = parse(number)\r\n  if (phoneNumber) {\r\n    return phoneNumber.format('INTERNATIONAL')\r\n  }\r\n  return number\r\n}\r\n\r\nexport const isValidPhoneNumber = number => {\r\n  if (isNull(number) || number.length <= MIN_LENGHT_FOR_NUMBER) {\r\n    return false\r\n  }\r\n\r\n  const phoneNumber = parse(number)\r\n  if (phoneNumber) {\r\n    return phoneNumber.isValid()\r\n  }\r\n\r\n  return false\r\n}\r\n\r\n// we don't allow \"+33\" - it's considered as an empty phone number\r\n// to use in combination with isValidPhone to assure a not empty and valid phone number\r\nexport const isPhoneNotEmpty = phoneAsStringWithPrefix =>\r\n  phoneAsStringWithPrefix &&\r\n  getCountryDialCodeFromNumber(phoneAsStringWithPrefix) !== phoneAsStringWithPrefix\r\n\r\n/**\r\n *\r\n * @param number\r\n * @param countryIso\r\n * @returns {*}\r\n */\r\nexport const parseWithIso = (number, countryIso) => {\r\n  const countryCode = getCountryCallingCode(countryIso)\r\n  let parsedPhone = number\r\n\r\n  if (!isEmpty(number)) {\r\n    try {\r\n      parsedPhone = formatPhoneNumber(number)\r\n    } catch (e) {\r\n      // console.log(e)\r\n    }\r\n  }\r\n\r\n  return {\r\n    country_code: countryCode,\r\n    national_number: parsedPhone,\r\n  }\r\n}\r\n\r\nexport const getCountryIndicatorFromNumber = number => {\r\n  if (!isEmpty(number)) {\r\n    try {\r\n      const phoneNumber = parse(number)\r\n      return phoneNumber.countryCallingCode\r\n    } catch (e) {\r\n      console.log(e)\r\n    }\r\n  }\r\n  return null\r\n}\r\n\r\nexport const getCountryIsoForNumber = number => {\r\n  if (!isEmpty(number)) {\r\n    try {\r\n      const phoneNumber = parse(number)\r\n      return phoneNumber.country\r\n    } catch (e) {\r\n      // console.log(e)\r\n    }\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nexport const removeIndicatorOnPhoneNumber = phoneNumber => {\r\n  if (!isEmpty(phoneNumber)) {\r\n    const haveIndicator = phoneNumber.indexOf('+') !== -1\r\n\r\n    if (haveIndicator !== -1) {\r\n      const firstSpaceIndex = phoneNumber.indexOf(' ')\r\n      return phoneNumber.substring(firstSpaceIndex + 1)\r\n    }\r\n  }\r\n\r\n  return phoneNumber\r\n}\r\n\r\n/**\r\n * Inspired by https://github.com/PayMyTable/pmt_AppEngine/blob/develop/ws/src/main/java/com/paymytable/utils/PhoneUtils.java\r\n */\r\nexport const cleanForApi = phoneNumber => {\r\n  if (isNil(phoneNumber)) {\r\n    return ''\r\n  }\r\n  let cleanPhoneNumber = formatPhoneNumber(phoneNumber)\r\n\r\n  // Note: we use lodash/startsWith instead of cleanPhoneNumber.startsWith since IE does not handle\r\n  // it\r\n  // see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\r\n\r\n  if (startsWith(cleanPhoneNumber, '+330')) {\r\n    cleanPhoneNumber = cleanPhoneNumber.replace('+330', '+33')\r\n  }\r\n\r\n  if (startsWith(cleanPhoneNumber, '06')) {\r\n    cleanPhoneNumber = cleanPhoneNumber.replace('06', '+336')\r\n  }\r\n\r\n  if (startsWith(cleanPhoneNumber, '07')) {\r\n    cleanPhoneNumber = cleanPhoneNumber.replace('07', '+337')\r\n  }\r\n\r\n  // remove all spaces\r\n  cleanPhoneNumber = cleanPhoneNumber.replace(new RegExp(' ', 'g'), '')\r\n  // remove all hyphen\r\n  cleanPhoneNumber = cleanPhoneNumber.replace(new RegExp('-', 'g'), '')\r\n\r\n  return isValidPhoneNumber(cleanPhoneNumber) ? cleanPhoneNumber : null\r\n}\r\n\r\nexport const getCountryCodes = () => countryCodes\r\n\r\nexport const getCountryFromCountryCode = countryCode => {\r\n  const country = find(getCountryCodes(), c => countryCode === c.code)\r\n  return !isNil(country) ? country : null\r\n}\r\n\r\nexport const getCountryDialCodeFromNumber = number => {\r\n  const country = find(getCountryCodes(), c => number.indexOf(c.dial_code) === 0)\r\n  return !isNil(country) ? country.dial_code : null\r\n}\r\n\r\nexport const getCountryCodeFromNumber = number => {\r\n  const country = find(getCountryCodes(), c => number.indexOf(c.dial_code) === 0)\r\n  return !isNil(country) ? country.code : null\r\n}\r\n\r\nexport const getCountryDialCodeFromCountryCode = countryCode => {\r\n  const country = find(getCountryCodes(), c => countryCode.indexOf(c.code) === 0)\r\n  return !isNil(country) ? country.dial_code : null\r\n}\r\n","//\r\n// Define predicates that can be used to validate forms\r\n//\r\n\r\nimport isString from 'lodash/isString'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport startsWith from 'lodash/startsWith'\r\n\r\nimport moment from 'moment'\r\n\r\nimport { isValidEmail as isValidEmailUtils } from 'pmt-utils/email'\r\nimport {\r\n  getCountryDialCodeFromNumber,\r\n  isValidPhoneNumber,\r\n  isPhoneNotEmpty as isPhoneNotEmptyUtils,\r\n} from 'pmt-utils/phone'\r\n\r\nexport * from './card'\r\nexport * from './locale'\r\n\r\nexport const notEmpty = obj => {\r\n  // working to check an empty string or a number (0 return true)\r\n  // for empty string, send default value to null to not have an error from your form init\r\n  return obj !== null && typeof obj !== 'undefined' && obj !== ''\r\n}\r\n\r\n// check an empty array\r\nexport const arrayNotEmpty = obj => obj !== null && typeof obj !== 'undefined' && obj.length > 0\r\n\r\nexport const isTrue = obj => obj === true\r\n\r\n/**\r\n * Example:\r\n * ```\r\n * [isGreaterThan(5)]\r\n * ```\r\n */\r\nexport const isGreaterThan = (length, orEqual) => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length > length : obj > length\r\n\r\nexport const isGreaterThanInclude = (length, orEqual) => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length >= length : obj >= length\r\n\r\nexport const isLessThan = length => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length > length : obj < length\r\n\r\nexport const isLessThanInclude = length => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length <= length : obj <= length\r\n\r\nexport const isBetween = (min, max) => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length < max && obj.length > min : obj < max && obj > min\r\n\r\nexport const isBetweenInclude = (min, max) => obj =>\r\n  isString(obj) ? notEmpty(obj) && obj.length <= max && obj.length >= min : obj <= max && obj >= min\r\n\r\nexport const isExpirationDateMonthInFuture = () => (obj, data) =>\r\n  // moment().month() are zero indexed, so January is month 0, that's why\r\n  // it's a strict greater than comparison\r\n  data.expirationDateYear > moment().year() ||\r\n  (data.expirationDateYear === moment().year() && obj > moment().month())\r\n\r\nexport const isValidEmail = email => isValidEmailUtils(email)\r\n\r\nexport const isValidEmailOrEmpty = email => isEmpty(email) || isValidEmail(email)\r\n\r\n// if phone === getCountryCodeFromNumber(phone), then phone is empty so we can return true\r\nexport const isValidPhone = phone =>\r\n  !phone ||\r\n  getCountryDialCodeFromNumber(phone) === phone ||\r\n  (startsWith(phone, getCountryDialCodeFromNumber(phone)) && isValidPhoneNumber(phone))\r\n\r\nexport const isPhoneNotEmpty = phone => isPhoneNotEmptyUtils(phone)\r\n","module.exports = function _isPlaceholder(a) {\n  return a != null &&\n         typeof a === 'object' &&\n         a['@@functional/placeholder'] === true;\n};\n","var _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curry1(fn) {\n  return function f1(a) {\n    if (arguments.length === 0 || _isPlaceholder(a)) {\n      return f1;\n    } else {\n      return fn.apply(this, arguments);\n    }\n  };\n};\n","module.exports = function _identity(x) { return x; };\n","var _curry1 = require('./internal/_curry1');\nvar _identity = require('./internal/_identity');\n\n\n/**\n * A function that does nothing but return the parameter supplied to it. Good\n * as a default or placeholder function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> a\n * @param {*} x The value to return.\n * @return {*} The input value, `x`.\n * @example\n *\n *      R.identity(1); //=> 1\n *\n *      var obj = {};\n *      R.identity(obj) === obj; //=> true\n * @symb R.identity(a) = a\n */\nmodule.exports = _curry1(_identity);\n","var _curry1 = require('./_curry1');\nvar _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curry2(fn) {\n  return function f2(a, b) {\n    switch (arguments.length) {\n      case 0:\n        return f2;\n      case 1:\n        return _isPlaceholder(a) ? f2\n             : _curry1(function(_b) { return fn(a, _b); });\n      default:\n        return _isPlaceholder(a) && _isPlaceholder(b) ? f2\n             : _isPlaceholder(a) ? _curry1(function(_a) { return fn(_a, b); })\n             : _isPlaceholder(b) ? _curry1(function(_b) { return fn(a, _b); })\n             : fn(a, b);\n    }\n  };\n};\n","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n *      _isArray([]); //=> true\n *      _isArray(null); //=> false\n *      _isArray({}); //=> false\n */\nmodule.exports = Array.isArray || function _isArray(val) {\n  return (val != null &&\n          val.length >= 0 &&\n          Object.prototype.toString.call(val) === '[object Array]');\n};\n","module.exports = function _isTransformer(obj) {\n  return typeof obj['@@transducer/step'] === 'function';\n};\n","var _isArray = require('./_isArray');\nvar _isTransformer = require('./_isTransformer');\n\n\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer [xf] to return a new transformer (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} xf transducer to initialize if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\nmodule.exports = function _dispatchable(methodNames, xf, fn) {\n  return function() {\n    if (arguments.length === 0) {\n      return fn();\n    }\n    var args = Array.prototype.slice.call(arguments, 0);\n    var obj = args.pop();\n    if (!_isArray(obj)) {\n      var idx = 0;\n      while (idx < methodNames.length) {\n        if (typeof obj[methodNames[idx]] === 'function') {\n          return obj[methodNames[idx]].apply(obj, args);\n        }\n        idx += 1;\n      }\n      if (_isTransformer(obj)) {\n        var transducer = xf.apply(null, args);\n        return transducer(obj);\n      }\n    }\n    return fn.apply(this, arguments);\n  };\n};\n","module.exports = function _map(fn, functor) {\n  var idx = 0;\n  var len = functor.length;\n  var result = Array(len);\n  while (idx < len) {\n    result[idx] = fn(functor[idx]);\n    idx += 1;\n  }\n  return result;\n};\n","module.exports = function _isString(x) {\n  return Object.prototype.toString.call(x) === '[object String]';\n};\n","var _curry1 = require('./_curry1');\nvar _isArray = require('./_isArray');\nvar _isString = require('./_isString');\n\n\n/**\n * Tests whether or not an object is similar to an array.\n *\n * @private\n * @category Type\n * @category List\n * @sig * -> Boolean\n * @param {*} x The object to test.\n * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.\n * @example\n *\n *      _isArrayLike([]); //=> true\n *      _isArrayLike(true); //=> false\n *      _isArrayLike({}); //=> false\n *      _isArrayLike({length: 10}); //=> false\n *      _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true\n */\nmodule.exports = _curry1(function isArrayLike(x) {\n  if (_isArray(x)) { return true; }\n  if (!x) { return false; }\n  if (typeof x !== 'object') { return false; }\n  if (_isString(x)) { return false; }\n  if (x.nodeType === 1) { return !!x.length; }\n  if (x.length === 0) { return true; }\n  if (x.length > 0) {\n    return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);\n  }\n  return false;\n});\n","module.exports = (function() {\n  function XWrap(fn) {\n    this.f = fn;\n  }\n  XWrap.prototype['@@transducer/init'] = function() {\n    throw new Error('init not implemented on XWrap');\n  };\n  XWrap.prototype['@@transducer/result'] = function(acc) { return acc; };\n  XWrap.prototype['@@transducer/step'] = function(acc, x) {\n    return this.f(acc, x);\n  };\n\n  return function _xwrap(fn) { return new XWrap(fn); };\n}());\n","module.exports = function _arity(n, fn) {\n  /* eslint-disable no-unused-vars */\n  switch (n) {\n    case 0: return function() { return fn.apply(this, arguments); };\n    case 1: return function(a0) { return fn.apply(this, arguments); };\n    case 2: return function(a0, a1) { return fn.apply(this, arguments); };\n    case 3: return function(a0, a1, a2) { return fn.apply(this, arguments); };\n    case 4: return function(a0, a1, a2, a3) { return fn.apply(this, arguments); };\n    case 5: return function(a0, a1, a2, a3, a4) { return fn.apply(this, arguments); };\n    case 6: return function(a0, a1, a2, a3, a4, a5) { return fn.apply(this, arguments); };\n    case 7: return function(a0, a1, a2, a3, a4, a5, a6) { return fn.apply(this, arguments); };\n    case 8: return function(a0, a1, a2, a3, a4, a5, a6, a7) { return fn.apply(this, arguments); };\n    case 9: return function(a0, a1, a2, a3, a4, a5, a6, a7, a8) { return fn.apply(this, arguments); };\n    case 10: return function(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) { return fn.apply(this, arguments); };\n    default: throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n  }\n};\n","var _arity = require('./internal/_arity');\nvar _curry2 = require('./internal/_curry2');\n\n\n/**\n * Creates a function that is bound to a context.\n * Note: `R.bind` does not provide the additional argument-binding capabilities of\n * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @category Object\n * @sig (* -> *) -> {*} -> (* -> *)\n * @param {Function} fn The function to bind to context\n * @param {Object} thisObj The context to bind `fn` to\n * @return {Function} A function that will execute in the context of `thisObj`.\n * @see R.partial\n * @example\n *\n *      var log = R.bind(console.log, console);\n *      R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}\n *      // logs {a: 2}\n * @symb R.bind(f, o)(a, b) = f.call(o, a, b)\n */\nmodule.exports = _curry2(function bind(fn, thisObj) {\n  return _arity(fn.length, function() {\n    return fn.apply(thisObj, arguments);\n  });\n});\n","var _isArrayLike = require('./_isArrayLike');\nvar _xwrap = require('./_xwrap');\nvar bind = require('../bind');\n\n\nmodule.exports = (function() {\n  function _arrayReduce(xf, acc, list) {\n    var idx = 0;\n    var len = list.length;\n    while (idx < len) {\n      acc = xf['@@transducer/step'](acc, list[idx]);\n      if (acc && acc['@@transducer/reduced']) {\n        acc = acc['@@transducer/value'];\n        break;\n      }\n      idx += 1;\n    }\n    return xf['@@transducer/result'](acc);\n  }\n\n  function _iterableReduce(xf, acc, iter) {\n    var step = iter.next();\n    while (!step.done) {\n      acc = xf['@@transducer/step'](acc, step.value);\n      if (acc && acc['@@transducer/reduced']) {\n        acc = acc['@@transducer/value'];\n        break;\n      }\n      step = iter.next();\n    }\n    return xf['@@transducer/result'](acc);\n  }\n\n  function _methodReduce(xf, acc, obj, methodName) {\n    return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc));\n  }\n\n  var symIterator = (typeof Symbol !== 'undefined') ? Symbol.iterator : '@@iterator';\n  return function _reduce(fn, acc, list) {\n    if (typeof fn === 'function') {\n      fn = _xwrap(fn);\n    }\n    if (_isArrayLike(list)) {\n      return _arrayReduce(fn, acc, list);\n    }\n    if (typeof list['fantasy-land/reduce'] === 'function') {\n      return _methodReduce(fn, acc, list, 'fantasy-land/reduce');\n    }\n    if (list[symIterator] != null) {\n      return _iterableReduce(fn, acc, list[symIterator]());\n    }\n    if (typeof list.next === 'function') {\n      return _iterableReduce(fn, acc, list);\n    }\n    if (typeof list.reduce === 'function') {\n      return _methodReduce(fn, acc, list, 'reduce');\n    }\n\n    throw new TypeError('reduce: list must be array or iterable');\n  };\n}());\n","module.exports = {\n  init: function() {\n    return this.xf['@@transducer/init']();\n  },\n  result: function(result) {\n    return this.xf['@@transducer/result'](result);\n  }\n};\n","var _curry2 = require('./_curry2');\nvar _xfBase = require('./_xfBase');\n\n\nmodule.exports = (function() {\n  function XMap(f, xf) {\n    this.xf = xf;\n    this.f = f;\n  }\n  XMap.prototype['@@transducer/init'] = _xfBase.init;\n  XMap.prototype['@@transducer/result'] = _xfBase.result;\n  XMap.prototype['@@transducer/step'] = function(result, input) {\n    return this.xf['@@transducer/step'](result, this.f(input));\n  };\n\n  return _curry2(function _xmap(f, xf) { return new XMap(f, xf); });\n}());\n","var _arity = require('./_arity');\nvar _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curryN(length, received, fn) {\n  return function() {\n    var combined = [];\n    var argsIdx = 0;\n    var left = length;\n    var combinedIdx = 0;\n    while (combinedIdx < received.length || argsIdx < arguments.length) {\n      var result;\n      if (combinedIdx < received.length &&\n          (!_isPlaceholder(received[combinedIdx]) ||\n           argsIdx >= arguments.length)) {\n        result = received[combinedIdx];\n      } else {\n        result = arguments[argsIdx];\n        argsIdx += 1;\n      }\n      combined[combinedIdx] = result;\n      if (!_isPlaceholder(result)) {\n        left -= 1;\n      }\n      combinedIdx += 1;\n    }\n    return left <= 0 ? fn.apply(this, combined)\n                     : _arity(left, _curryN(length, combined, fn));\n  };\n};\n","var _arity = require('./internal/_arity');\nvar _curry1 = require('./internal/_curry1');\nvar _curry2 = require('./internal/_curry2');\nvar _curryN = require('./internal/_curryN');\n\n\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n *   - `g(1)(2)(3)`\n *   - `g(1)(2, 3)`\n *   - `g(1, 2)(3)`\n *   - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n *   - `g(1, 2, 3)`\n *   - `g(_, 2, 3)(1)`\n *   - `g(_, _, 3)(1)(2)`\n *   - `g(_, _, 3)(1, 2)`\n *   - `g(_, 2)(1)(3)`\n *   - `g(_, 2)(1, 3)`\n *   - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n *      var sumArgs = (...args) => R.sum(args);\n *\n *      var curriedAddFourNumbers = R.curryN(4, sumArgs);\n *      var f = curriedAddFourNumbers(1, 2);\n *      var g = f(3);\n *      g(4); //=> 10\n */\nmodule.exports = _curry2(function curryN(length, fn) {\n  if (length === 1) {\n    return _curry1(fn);\n  }\n  return _arity(length, _curryN(length, [], fn));\n});\n","module.exports = function _has(prop, obj) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n","var _has = require('./_has');\n\n\nmodule.exports = (function() {\n  var toString = Object.prototype.toString;\n  return toString.call(arguments) === '[object Arguments]' ?\n    function _isArguments(x) { return toString.call(x) === '[object Arguments]'; } :\n    function _isArguments(x) { return _has('callee', x); };\n}());\n","var _curry1 = require('./internal/_curry1');\nvar _has = require('./internal/_has');\nvar _isArguments = require('./internal/_isArguments');\n\n\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values\n * @example\n *\n *      R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\nmodule.exports = (function() {\n  // cover IE < 9 keys issues\n  var hasEnumBug = !({toString: null}).propertyIsEnumerable('toString');\n  var nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString',\n                            'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n  // Safari bug\n  var hasArgsEnumBug = (function() {\n    'use strict';\n    return arguments.propertyIsEnumerable('length');\n  }());\n\n  var contains = function contains(list, item) {\n    var idx = 0;\n    while (idx < list.length) {\n      if (list[idx] === item) {\n        return true;\n      }\n      idx += 1;\n    }\n    return false;\n  };\n\n  return typeof Object.keys === 'function' && !hasArgsEnumBug ?\n    _curry1(function keys(obj) {\n      return Object(obj) !== obj ? [] : Object.keys(obj);\n    }) :\n    _curry1(function keys(obj) {\n      if (Object(obj) !== obj) {\n        return [];\n      }\n      var prop, nIdx;\n      var ks = [];\n      var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n      for (prop in obj) {\n        if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n          ks[ks.length] = prop;\n        }\n      }\n      if (hasEnumBug) {\n        nIdx = nonEnumerableProps.length - 1;\n        while (nIdx >= 0) {\n          prop = nonEnumerableProps[nIdx];\n          if (_has(prop, obj) && !contains(ks, prop)) {\n            ks[ks.length] = prop;\n          }\n          nIdx -= 1;\n        }\n      }\n      return ks;\n    });\n}());\n","var _curry2 = require('./internal/_curry2');\nvar _dispatchable = require('./internal/_dispatchable');\nvar _map = require('./internal/_map');\nvar _reduce = require('./internal/_reduce');\nvar _xmap = require('./internal/_xmap');\nvar curryN = require('./curryN');\nvar keys = require('./keys');\n\n\n/**\n * Takes a function and\n * a [functor](https://github.com/fantasyland/fantasy-land#functor),\n * applies the function to each of the functor's values, and returns\n * a functor of the same shape.\n *\n * Ramda provides suitable `map` implementations for `Array` and `Object`,\n * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.\n *\n * Dispatches to the `map` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * Also treats functions as functors and will compose them together.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => (a -> b) -> f a -> f b\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {Array} list The list to be iterated over.\n * @return {Array} The new list.\n * @see R.transduce, R.addIndex\n * @example\n *\n *      var double = x => x * 2;\n *\n *      R.map(double, [1, 2, 3]); //=> [2, 4, 6]\n *\n *      R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}\n * @symb R.map(f, [a, b]) = [f(a), f(b)]\n * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) }\n * @symb R.map(f, functor_o) = functor_o.map(f)\n */\nmodule.exports = _curry2(_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) {\n  switch (Object.prototype.toString.call(functor)) {\n    case '[object Function]':\n      return curryN(functor.length, function() {\n        return fn.call(this, functor.apply(this, arguments));\n      });\n    case '[object Object]':\n      return _reduce(function(acc, key) {\n        acc[key] = fn(functor[key]);\n        return acc;\n      }, {}, keys(functor));\n    default:\n      return _map(fn, functor);\n  }\n}));\n","var _curry1 = require('./_curry1');\nvar _curry2 = require('./_curry2');\nvar _isPlaceholder = require('./_isPlaceholder');\n\n\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nmodule.exports = function _curry3(fn) {\n  return function f3(a, b, c) {\n    switch (arguments.length) {\n      case 0:\n        return f3;\n      case 1:\n        return _isPlaceholder(a) ? f3\n             : _curry2(function(_b, _c) { return fn(a, _b, _c); });\n      case 2:\n        return _isPlaceholder(a) && _isPlaceholder(b) ? f3\n             : _isPlaceholder(a) ? _curry2(function(_a, _c) { return fn(_a, b, _c); })\n             : _isPlaceholder(b) ? _curry2(function(_b, _c) { return fn(a, _b, _c); })\n             : _curry1(function(_c) { return fn(a, b, _c); });\n      default:\n        return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3\n             : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function(_a, _b) { return fn(_a, _b, c); })\n             : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function(_a, _c) { return fn(_a, b, _c); })\n             : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function(_b, _c) { return fn(a, _b, _c); })\n             : _isPlaceholder(a) ? _curry1(function(_a) { return fn(_a, b, c); })\n             : _isPlaceholder(b) ? _curry1(function(_b) { return fn(a, _b, c); })\n             : _isPlaceholder(c) ? _curry1(function(_c) { return fn(a, b, _c); })\n             : fn(a, b, c);\n    }\n  };\n};\n","var _curry3 = require('./internal/_curry3');\nvar _reduce = require('./internal/_reduce');\n\n\n/**\n * Returns a single item by iterating through the list, successively calling\n * the iterator function and passing it an accumulator value and the current\n * value from the array, and then passing the result to the next call.\n *\n * The iterator function receives two values: *(acc, value)*. It may use\n * [`R.reduced`](#reduced) to shortcut the iteration.\n *\n * The arguments' order of [`reduceRight`](#reduceRight)'s iterator function\n * is *(value, acc)*.\n *\n * Note: `R.reduce` does not skip deleted or unassigned indices (sparse\n * arrays), unlike the native `Array.prototype.reduce` method. For more details\n * on this behavior, see:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description\n *\n * Dispatches to the `reduce` method of the third argument, if present. When\n * doing so, it is up to the user to handle the [`R.reduced`](#reduced)\n * shortcuting, as this is not implemented by `reduce`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, b) -> a) -> a -> [b] -> a\n * @param {Function} fn The iterator function. Receives two values, the accumulator and the\n *        current element from the array.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduced, R.addIndex, R.reduceRight\n * @example\n *\n *      R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10\n *                -               -10\n *               / \\              / \\\n *              -   4           -6   4\n *             / \\              / \\\n *            -   3   ==>     -3   3\n *           / \\              / \\\n *          -   2           -1   2\n *         / \\              / \\\n *        0   1            0   1\n *\n * @symb R.reduce(f, a, [b, c, d]) = f(f(f(a, b), c), d)\n */\nmodule.exports = _curry3(_reduce);\n","var _curry1 = require('./internal/_curry1');\nvar curryN = require('./curryN');\n\n\n/**\n * Returns a curried equivalent of the provided function. The curried function\n * has two unusual capabilities. First, its arguments needn't be provided one\n * at a time. If `f` is a ternary function and `g` is `R.curry(f)`, the\n * following are equivalent:\n *\n *   - `g(1)(2)(3)`\n *   - `g(1)(2, 3)`\n *   - `g(1, 2)(3)`\n *   - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n *   - `g(1, 2, 3)`\n *   - `g(_, 2, 3)(1)`\n *   - `g(_, _, 3)(1)(2)`\n *   - `g(_, _, 3)(1, 2)`\n *   - `g(_, 2)(1)(3)`\n *   - `g(_, 2)(1, 3)`\n *   - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (* -> a) -> (* -> a)\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curryN\n * @example\n *\n *      var addFourNumbers = (a, b, c, d) => a + b + c + d;\n *\n *      var curriedAddFourNumbers = R.curry(addFourNumbers);\n *      var f = curriedAddFourNumbers(1, 2);\n *      var g = f(3);\n *      g(4); //=> 10\n */\nmodule.exports = _curry1(function curry(fn) {\n  return curryN(fn.length, fn);\n});\n","module.exports = function _filter(fn, list) {\n  var idx = 0;\n  var len = list.length;\n  var result = [];\n\n  while (idx < len) {\n    if (fn(list[idx])) {\n      result[result.length] = list[idx];\n    }\n    idx += 1;\n  }\n  return result;\n};\n","module.exports = function _isObject(x) {\n  return Object.prototype.toString.call(x) === '[object Object]';\n};\n","var _curry2 = require('./_curry2');\nvar _xfBase = require('./_xfBase');\n\n\nmodule.exports = (function() {\n  function XFilter(f, xf) {\n    this.xf = xf;\n    this.f = f;\n  }\n  XFilter.prototype['@@transducer/init'] = _xfBase.init;\n  XFilter.prototype['@@transducer/result'] = _xfBase.result;\n  XFilter.prototype['@@transducer/step'] = function(result, input) {\n    return this.f(input) ? this.xf['@@transducer/step'](result, input) : result;\n  };\n\n  return _curry2(function _xfilter(f, xf) { return new XFilter(f, xf); });\n}());\n","var _curry2 = require('./internal/_curry2');\nvar _dispatchable = require('./internal/_dispatchable');\nvar _filter = require('./internal/_filter');\nvar _isObject = require('./internal/_isObject');\nvar _reduce = require('./internal/_reduce');\nvar _xfilter = require('./internal/_xfilter');\nvar keys = require('./keys');\n\n\n/**\n * Takes a predicate and a `Filterable`, and returns a new filterable of the\n * same type containing the members of the given filterable which satisfy the\n * given predicate. Filterable objects include plain objects or any object\n * that has a filter method such as `Array`.\n *\n * Dispatches to the `filter` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array} Filterable\n * @see R.reject, R.transduce, R.addIndex\n * @example\n *\n *      var isEven = n => n % 2 === 0;\n *\n *      R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]\n *\n *      R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nmodule.exports = _curry2(_dispatchable(['filter'], _xfilter, function(pred, filterable) {\n  return (\n    _isObject(filterable) ?\n      _reduce(function(acc, key) {\n        if (pred(filterable[key])) {\n          acc[key] = filterable[key];\n        }\n        return acc;\n      }, {}, keys(filterable)) :\n    // else\n      _filter(pred, filterable)\n  );\n}));\n","module.exports = function _arrayFromIterator(iter) {\n  var list = [];\n  var next;\n  while (!(next = iter.next()).done) {\n    list.push(next.value);\n  }\n  return list;\n};\n","module.exports = function _functionName(f) {\n  // String(x => x) evaluates to \"x => x\", so the pattern may not match.\n  var match = String(f).match(/^function (\\w*)/);\n  return match == null ? '' : match[1];\n};\n","var _curry2 = require('./internal/_curry2');\n\n\n/**\n * Returns true if its arguments are identical, false otherwise. Values are\n * identical if they reference the same memory. `NaN` is identical to `NaN`;\n * `0` and `-0` are not identical.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> a -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n *      var o = {};\n *      R.identical(o, o); //=> true\n *      R.identical(1, 1); //=> true\n *      R.identical(1, '1'); //=> false\n *      R.identical([], []); //=> false\n *      R.identical(0, -0); //=> false\n *      R.identical(NaN, NaN); //=> true\n */\nmodule.exports = _curry2(function identical(a, b) {\n  // SameValue algorithm\n  if (a === b) { // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    return a !== 0 || 1 / a === 1 / b;\n  } else {\n    // Step 6.a: NaN == NaN\n    return a !== a && b !== b;\n  }\n});\n","var _curry1 = require('./internal/_curry1');\n\n\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig (* -> {*}) -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n *      R.type({}); //=> \"Object\"\n *      R.type(1); //=> \"Number\"\n *      R.type(false); //=> \"Boolean\"\n *      R.type('s'); //=> \"String\"\n *      R.type(null); //=> \"Null\"\n *      R.type([]); //=> \"Array\"\n *      R.type(/[A-z]/); //=> \"RegExp\"\n *      R.type(() => {}); //=> \"Function\"\n */\nmodule.exports = _curry1(function type(val) {\n  return val === null      ? 'Null'      :\n         val === undefined ? 'Undefined' :\n         Object.prototype.toString.call(val).slice(8, -1);\n});\n","var _arrayFromIterator = require('./_arrayFromIterator');\nvar _functionName = require('./_functionName');\nvar _has = require('./_has');\nvar identical = require('../identical');\nvar keys = require('../keys');\nvar type = require('../type');\n\n\nmodule.exports = function _equals(a, b, stackA, stackB) {\n  if (identical(a, b)) {\n    return true;\n  }\n\n  if (type(a) !== type(b)) {\n    return false;\n  }\n\n  if (a == null || b == null) {\n    return false;\n  }\n\n  if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') {\n    return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) &&\n           typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a);\n  }\n\n  if (typeof a.equals === 'function' || typeof b.equals === 'function') {\n    return typeof a.equals === 'function' && a.equals(b) &&\n           typeof b.equals === 'function' && b.equals(a);\n  }\n\n  switch (type(a)) {\n    case 'Arguments':\n    case 'Array':\n    case 'Object':\n      if (typeof a.constructor === 'function' &&\n          _functionName(a.constructor) === 'Promise') {\n        return a === b;\n      }\n      break;\n    case 'Boolean':\n    case 'Number':\n    case 'String':\n      if (!(typeof a === typeof b && identical(a.valueOf(), b.valueOf()))) {\n        return false;\n      }\n      break;\n    case 'Date':\n      if (!identical(a.valueOf(), b.valueOf())) {\n        return false;\n      }\n      break;\n    case 'Error':\n      return a.name === b.name && a.message === b.message;\n    case 'RegExp':\n      if (!(a.source === b.source &&\n            a.global === b.global &&\n            a.ignoreCase === b.ignoreCase &&\n            a.multiline === b.multiline &&\n            a.sticky === b.sticky &&\n            a.unicode === b.unicode)) {\n        return false;\n      }\n      break;\n    case 'Map':\n    case 'Set':\n      if (!_equals(_arrayFromIterator(a.entries()), _arrayFromIterator(b.entries()), stackA, stackB)) {\n        return false;\n      }\n      break;\n    case 'Int8Array':\n    case 'Uint8Array':\n    case 'Uint8ClampedArray':\n    case 'Int16Array':\n    case 'Uint16Array':\n    case 'Int32Array':\n    case 'Uint32Array':\n    case 'Float32Array':\n    case 'Float64Array':\n      break;\n    case 'ArrayBuffer':\n      break;\n    default:\n      // Values of other types are only equal if identical.\n      return false;\n  }\n\n  var keysA = keys(a);\n  if (keysA.length !== keys(b).length) {\n    return false;\n  }\n\n  var idx = stackA.length - 1;\n  while (idx >= 0) {\n    if (stackA[idx] === a) {\n      return stackB[idx] === b;\n    }\n    idx -= 1;\n  }\n\n  stackA.push(a);\n  stackB.push(b);\n  idx = keysA.length - 1;\n  while (idx >= 0) {\n    var key = keysA[idx];\n    if (!(_has(key, b) && _equals(b[key], a[key], stackA, stackB))) {\n      return false;\n    }\n    idx -= 1;\n  }\n  stackA.pop();\n  stackB.pop();\n  return true;\n};\n","var _curry2 = require('./internal/_curry2');\nvar _equals = require('./internal/_equals');\n\n\n/**\n * Returns `true` if its arguments are equivalent, `false` otherwise. Handles\n * cyclical data structures.\n *\n * Dispatches symmetrically to the `equals` methods of both arguments, if\n * present.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> b -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n *      R.equals(1, 1); //=> true\n *      R.equals(1, '1'); //=> false\n *      R.equals([1, 2, 3], [1, 2, 3]); //=> true\n *\n *      var a = {}; a.v = a;\n *      var b = {}; b.v = b;\n *      R.equals(a, b); //=> true\n */\nmodule.exports = _curry2(function equals(a, b) {\n  return _equals(a, b, [], []);\n});\n","module.exports = function _reduced(x) {\n  return x && x['@@transducer/reduced'] ? x :\n    {\n      '@@transducer/value': x,\n      '@@transducer/reduced': true\n    };\n};\n","var _curry2 = require('./_curry2');\nvar _reduced = require('./_reduced');\nvar _xfBase = require('./_xfBase');\n\n\nmodule.exports = (function() {\n  function XAll(f, xf) {\n    this.xf = xf;\n    this.f = f;\n    this.all = true;\n  }\n  XAll.prototype['@@transducer/init'] = _xfBase.init;\n  XAll.prototype['@@transducer/result'] = function(result) {\n    if (this.all) {\n      result = this.xf['@@transducer/step'](result, true);\n    }\n    return this.xf['@@transducer/result'](result);\n  };\n  XAll.prototype['@@transducer/step'] = function(result, input) {\n    if (!this.f(input)) {\n      this.all = false;\n      result = _reduced(this.xf['@@transducer/step'](result, false));\n    }\n    return result;\n  };\n\n  return _curry2(function _xall(f, xf) { return new XAll(f, xf); });\n}());\n","var _curry2 = require('./internal/_curry2');\nvar _dispatchable = require('./internal/_dispatchable');\nvar _xall = require('./internal/_xall');\n\n\n/**\n * Returns `true` if all elements of the list match the predicate, `false` if\n * there are any that don't.\n *\n * Dispatches to the `all` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> Boolean\n * @param {Function} fn The predicate function.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if the predicate is satisfied by every element, `false`\n *         otherwise.\n * @see R.any, R.none, R.transduce\n * @example\n *\n *      var equals3 = R.equals(3);\n *      R.all(equals3)([3, 3, 3, 3]); //=> true\n *      R.all(equals3)([3, 3, 1, 3]); //=> false\n */\nmodule.exports = _curry2(_dispatchable(['all'], _xall, function all(fn, list) {\n  var idx = 0;\n  while (idx < list.length) {\n    if (!fn(list[idx])) {\n      return false;\n    }\n    idx += 1;\n  }\n  return true;\n}));\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.validate = undefined;\n\nvar _identity = require('ramda/src/identity');\n\nvar _identity2 = _interopRequireDefault(_identity);\n\nvar _map = require('ramda/src/map');\n\nvar _map2 = _interopRequireDefault(_map);\n\nvar _reduce = require('ramda/src/reduce');\n\nvar _reduce2 = _interopRequireDefault(_reduce);\n\nvar _curry = require('ramda/src/curry');\n\nvar _curry2 = _interopRequireDefault(_curry);\n\nvar _filter = require('ramda/src/filter');\n\nvar _filter2 = _interopRequireDefault(_filter);\n\nvar _equals = require('ramda/src/equals');\n\nvar _equals2 = _interopRequireDefault(_equals);\n\nvar _all = require('ramda/src/all');\n\nvar _all2 = _interopRequireDefault(_all);\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n *\n * @param {Function} successFn callback function in case of valid input\n * @param {Function} failFn callback function in case of invalid input\n * @param {Array} input\n * @returns {*}\n */\nvar transform = function transform(successFn, failFn, input) {\n  var valid = (0, _all2.default)((0, _equals2.default)(true), input);\n  return valid ? successFn() : failFn((0, _filter2.default)(function (a) {\n    return a !== true;\n  }, input));\n};\n\n/**\n *\n * @param {Function} predicate validation function to apply inputs on\n * @param {String|Function} errorMsg error message to return in case of fail\n * @param {*} value the actual value\n * @param {Object} inputs the input object - in case the predicate function needs access to dependent values\n * @returns {Boolean}\n */\n\nvar runPredicate = function runPredicate(_ref, value, inputs, field) {\n  var _ref2 = _slicedToArray(_ref, 2),\n      predicate = _ref2[0],\n      errorMsg = _ref2[1];\n\n  return predicate(value, inputs // eslint-disable-line no-nested-ternary\n  ) ? true : typeof errorMsg === 'function' ? errorMsg(value, field) : errorMsg;\n};\n\n/**\n *\n * @param {Function} successFn callback function in case of valid input\n * @param {Function} failFn callback function in case of invalid input\n * @param {Object} spec the rule object\n * @param {Object|Function} input the validation input data\n * @returns {{}}\n */\nvar validate = exports.validate = (0, _curry2.default)(function (successFn, failFn, spec, input) {\n  var inputFn = typeof input === 'function' ? input : function (key) {\n    return key ? input : input;\n  };\n  var keys = Object.keys(inputFn());\n  return (0, _reduce2.default)(function (result, key) {\n    var inputObj = inputFn(key);\n    var value = inputObj[key];\n    var predicates = spec[key];\n    if (Array.isArray(predicates)) {\n      return _extends({}, result, _defineProperty({}, key, transform(function () {\n        return successFn(value);\n      }, failFn, (0, _map2.default)(function (f) {\n        return runPredicate(f, value, inputObj, key);\n      }, predicates))));\n    } else if ((typeof predicates === 'undefined' ? 'undefined' : _typeof(predicates)) === 'object') {\n      return _extends({}, result, _defineProperty({}, key, validate(successFn, failFn, predicates, value)));\n    } else if (typeof predicates === 'function') {\n      var rules = predicates(value);\n      return _extends({}, result, _defineProperty({}, key, validate(successFn, failFn, rules, value)));\n    } else {\n      return _extends({}, result, _defineProperty({}, key, successFn([])));\n    }\n  }, {}, keys);\n}\n\n/**\n *\n * @param {Object} spec the rule object\n * @param {Object} input the validation input data\n * @returns {{}}\n */\n);var spected = validate(function () {\n  return true;\n}, _identity2.default);\n\nexports.default = spected;","module.exports = require('./forEach');\n","import { tr } from 'pmt-modules/i18n'\r\nimport forIn from 'lodash/forIn'\r\nimport spected from 'spected'\r\nimport isObject from 'lodash/isObject'\r\nimport isArray from 'lodash/isArray'\r\nimport each from 'lodash/each'\r\n\r\nconst trMessage = key => {\r\n  // Some strings are already translated, while legacy behavior gives the key to translate\r\n  // a key does not have a space, most of the strings have one\r\n  if (key.indexOf(' ') !== -1) {\r\n    return key\r\n  }\r\n\r\n  return tr(key)\r\n}\r\n\r\nconst validateValue = value => {\r\n  if (isArray(value)) {\r\n    // handle key that contains an array of objects\r\n    const isValid = value.length === 0\r\n\r\n    return {\r\n      isValid,\r\n      message: trMessage(value[0]),\r\n      messages: value,\r\n    }\r\n  } else if (isObject(value)) {\r\n    let isValid = true\r\n    each(value, (childValue, childName) => {\r\n      const newChildValue = validateValue(childValue)\r\n      if (newChildValue.isValid === false) {\r\n        isValid = false\r\n      }\r\n      value[childName] = newChildValue\r\n    })\r\n\r\n    return {\r\n      isValid,\r\n      ...value,\r\n    }\r\n  } else {\r\n    // simple value\r\n    //\r\n    if (value === true) {\r\n      return {\r\n        isValid: true,\r\n        message: null,\r\n        messages: [],\r\n      }\r\n    } else {\r\n      return {\r\n        isValid: false,\r\n        message: trMessage(value[0]),\r\n        messages: value,\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n//\r\n// Input:\r\n// - true\r\n// - [ \"error message\" ]\r\n//\r\n// Output:\r\n// {\r\n//   valid,\r\n//   message: '', // the first of messages\r\n//   messages: [],\r\n// }\r\n//\r\nconst formatValidator = validation => {\r\n  // calculate if the whole data isValid\r\n  let isValid = true\r\n\r\n  forIn(validation, (value, field) => {\r\n    const newValue = validateValue(value)\r\n\r\n    if (newValue.isValid === false) {\r\n      isValid = false\r\n    }\r\n\r\n    validation[field] = newValue\r\n  })\r\n\r\n  // add isValid boolean for convenience\r\n  validation.isValid = isValid\r\n\r\n  return validation\r\n}\r\n\r\n/**\r\n * Validate data with the given rules\r\n * @param  {Object} rules See spected documentation for the rules format\r\n * @param  {Object} data  The form data\r\n * @return {Object} See spected documentation for the returned format. Note that we add an 'isValid'\r\n *                      var for convenience\r\n */\r\nexport const validator = (rules, data) => {\r\n  // validate data with spected library\r\n  const validation = spected(rules, data)\r\n\r\n  return formatValidator(validation)\r\n}\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\nimport each from 'lodash/each'\r\n\r\nimport { getValidator, getFormOptions } from './config'\r\n\r\nconst DEFAULT_VALIDATE = {\r\n  isValid: true,\r\n}\r\n\r\nconst getFormState = state => state.form\r\nconst getFormTypeData = (state, props) => getFormState(state).get(props.formType)\r\nconst getFormType = (state, props) => props.formType\r\nconst getValidatorSelector = (formType, props) => getValidator(props.formType)\r\n\r\nexport const makeGetFormDataNotFormatted = () =>\r\n  createSelector([getFormTypeData, getFormType], (formState, formType) => {\r\n    if (isNil(formState)) {\r\n      return {}\r\n    }\r\n    let formData = formState.toJS().formData\r\n\r\n    if (!formData) {\r\n      formData = {}\r\n    }\r\n\r\n    formData.formType = formType\r\n\r\n    return formData\r\n  })\r\n\r\nexport const makeGetFormData = () =>\r\n  createSelector([makeGetFormDataNotFormatted(), getFormType], (formData, formType) => {\r\n    if (isNil(formData)) {\r\n      return {}\r\n    }\r\n    return formData\r\n  })\r\n\r\nconst getFormsDataArray = (state, props) => {\r\n  if (!props.formTypes) {\r\n    // FIXME: should not happend\r\n    return []\r\n  }\r\n\r\n  return props.formTypes.map(formType => ({\r\n    formType,\r\n    ...makeGetFormData()(state, { formType }),\r\n  }))\r\n}\r\n\r\nexport const makeGetFormsData = () =>\r\n  createSelector([getFormsDataArray], formsData => {\r\n    const formattedFormsData = {}\r\n    formsData.forEach(formData => {\r\n      formattedFormsData[formData.formType] = {\r\n        data: formData.data,\r\n        // TODO: put above ?\r\n        ...formData,\r\n      }\r\n    })\r\n\r\n    return formattedFormsData\r\n  })\r\n\r\nexport const makeGetFormOptions = () =>\r\n  createSelector([getFormTypeData], formTypeData => {\r\n    return formTypeData.toJS().options || {}\r\n  })\r\n\r\nexport const makeGetFormErrors = () =>\r\n  createSelector(\r\n    [makeGetFormDataNotFormatted(), getValidatorSelector, makeGetFormOptions()],\r\n    (formData, validator, formOptions) => {\r\n      const { formType } = formData\r\n\r\n      if (isNil(validator)) {\r\n        return DEFAULT_VALIDATE\r\n      }\r\n      const errors = validator(formData, formOptions)\r\n      // set formType again since validator override it\r\n      errors.formType = formType\r\n\r\n      // create invalidFields, an array of the field names that are not valid\r\n      errors.invalidFields = []\r\n      each(errors, (error, fieldName) => {\r\n        if (error.isValid === false) {\r\n          errors.invalidFields.push(fieldName)\r\n        }\r\n      })\r\n\r\n      return errors\r\n    }\r\n  )\r\n\r\nexport const makeIsFormValid = createSelector([makeGetFormErrors()], formErrors => {\r\n  return formErrors.isValid\r\n})\r\n\r\nexport const makeGetFormsErrors = () =>\r\n  createSelector([getFormsDataArray], formsData => {\r\n    // TODO: move to format\r\n    let isValid = true\r\n\r\n    const errors = {}\r\n    formsData.forEach(formData => {\r\n      const { formType } = formData\r\n      const validator = getValidator(formType)\r\n      const formOptions = getFormOptions(formType)\r\n\r\n      if (isNil(validator)) {\r\n        errors[formType] = DEFAULT_VALIDATE\r\n      } else {\r\n        const validation = validator(formData, formOptions)\r\n        if (!validation.isValid) {\r\n          isValid = false\r\n        }\r\n        errors[formType] = validation\r\n      }\r\n      // set formType again since validator override it\r\n      errors[formType].formType = formType\r\n    })\r\n\r\n    return {\r\n      isValid,\r\n      errors,\r\n    }\r\n  })\r\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import React from 'react'\r\n\r\nimport clsx from 'clsx'\r\nimport { withStyles } from '../styles'\r\nimport Button from '@material-ui/core/Button'\r\n\r\nconst styles = theme => ({\r\n  buttonFlat: {\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n    borderRadius: 'none',\r\n    boxShadow: 'none',\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: '100%',\r\n    },\r\n  },\r\n  buttonFlatRaised: {\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n    background: theme.palette.primary.main,\r\n    border: 'none',\r\n    borderRadius: 'none',\r\n    boxShadow: 'none',\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: '100%',\r\n    },\r\n    '&:hover': {\r\n      background: theme.palette.primary.dark,\r\n    },\r\n  },\r\n  buttonFlatInactive: {\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n    background: theme.pmt.colors.white,\r\n    color: theme.pmt.colors.grey500,\r\n    border: `1px solid ${theme.pmt.colors.grey500}`,\r\n    borderRadius: 'none',\r\n    boxShadow: 'none',\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: '100%',\r\n    },\r\n    '&:hover': {\r\n      background: theme.pmt.colors.white,\r\n    },\r\n  },\r\n  buttonFlatWarning: {\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px`,\r\n    background: theme.pmt.colors.red800,\r\n    color: theme.pmt.colors.white,\r\n    border: 'none',\r\n    borderRadius: 'none',\r\n    boxShadow: 'none',\r\n    textTransform: 'initial',\r\n    [theme.breakpoints.down('xs')]: {\r\n      width: '100%',\r\n    },\r\n    '&:hover': {\r\n      background: theme.pmt.colors.red900,\r\n    },\r\n  },\r\n})\r\n\r\nclass ButtonFlat extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      warning,\r\n      inactive,\r\n      // raised will be replaced by contained.\r\n      raised,\r\n      contained,\r\n      className,\r\n      classes,\r\n      children,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    const classNames = warning\r\n      ? clsx(className, classes.buttonFlatWarning)\r\n      : inactive\r\n        ? clsx(className, classes.buttonFlatInactive)\r\n        : raised || contained\r\n          ? clsx(className, classes.buttonFlatRaised)\r\n          : clsx(className, classes.buttonFlat)\r\n\r\n    return (\r\n      <Button\r\n        className={classNames}\r\n        variant={raised || contained ? 'contained' : 'text'}\r\n        {...otherProps}\r\n      >\r\n        {children}\r\n      </Button>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ButtonFlat)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { CircularProgress } from 'pmt-ui/Progress'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\n\r\nconst styles = theme => ({\r\n  loadingBlockContainer: {\r\n    position: 'relative',\r\n    width: '100%',\r\n    height: '100%',\r\n    // minHeight: 50,\r\n  },\r\n  loadingBlock: {\r\n    left: 0,\r\n    top: 0,\r\n    backgroundColor: 'rgba(255, 255, 255, 0.54)',\r\n    zIndex: theme.zIndex.loader || 1000,\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    height: '100%',\r\n  },\r\n  circularProgress: {},\r\n})\r\n\r\nconst LoadingBlock = ({ size = 50, show = false, children = null, classes }) => {\r\n  if (!show) {\r\n    // it happens that the children need data to be rendered. This data is not available while the\r\n    // loading is made.\r\n    // But even if we don't display the children here because we are showing the loading, the children\r\n    // is build\r\n    // Passing the children as a function avoid to re-check the conditions to render it, that is mostly\r\n    // the same condition pass to the `show` prop.\r\n    if (isFunction(children)) {\r\n      return children()\r\n    }\r\n    return children\r\n  }\r\n\r\n  const loadingLabel = trOptional('global.loading') || 'Chargement en cours…'\r\n\r\n  return (\r\n    <div className={classes.loadingBlockContainer} style={{ minHeight: size }}>\r\n      <div className={classes.loadingBlock}>\r\n        <CircularProgress\r\n          size={size}\r\n          className={classes.circularProgress}\r\n          role=\"status\"\r\n          aria-label={loadingLabel}\r\n        />\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nLoadingBlock.propTypes = {\r\n  size: PropTypes.number,\r\n  show: PropTypes.bool,\r\n}\r\n\r\nexport default withStyles(styles)(LoadingBlock)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport LoadingBlock from './LoadingBlock'\r\n\r\nconst styles = theme => ({\r\n  loadingBlockWrapper: {\r\n    position: 'absolute',\r\n    width: '100%',\r\n    height: '100%',\r\n    zIndex: theme.zIndex.loader || 1000,\r\n    top: 0,\r\n    left: 0,\r\n  },\r\n  loadingBlock: {},\r\n  // visually hidden but still announced by screen readers\r\n  srOnly: {\r\n    position: 'absolute',\r\n    width: 1,\r\n    height: 1,\r\n    padding: 0,\r\n    margin: -1,\r\n    overflow: 'hidden',\r\n    clip: 'rect(0, 0, 0, 0)',\r\n    whiteSpace: 'nowrap',\r\n    border: 0,\r\n  },\r\n})\r\n\r\n/**\r\n * This wrapper comes above its first relative parent\r\n * Typically used to load a block or the entire page.\r\n */\r\nconst LoadingBlockWrapper = ({ show, size, children, classes }) => {\r\n  if (!show) {\r\n    return null\r\n  }\r\n\r\n  // span instead of div because we use it on table, and table can't contain div\r\n\r\n  return (\r\n    <span className={classes.loadingBlockWrapper} role=\"status\" aria-live=\"polite\" aria-busy=\"true\">\r\n      <span className={classes.srOnly}>\r\n        {tr('global.a11y.loading', {\r\n          fr: 'Chargement en cours...',\r\n          context: '',\r\n          desc: 'Announced to screen readers while a loading block is shown',\r\n        })}\r\n      </span>\r\n      {children || <LoadingBlock show={show} className={classes.loadingBlock} size={size} />}\r\n    </span>\r\n  )\r\n}\r\n\r\nLoadingBlockWrapper.propTypes = {\r\n  show: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(LoadingBlockWrapper)\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Button from 'pmt-ui/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    textAlign: 'center',\r\n    width: '100%',\r\n    display: 'flex',\r\n    // justifyContent: 'center',\r\n    // alignItems: 'center',\r\n    paddingTop: theme.spacing(3),\r\n    paddingBottom: theme.spacing(3),\r\n  },\r\n  cancelBtn: {\r\n    marginRight: 10,\r\n  },\r\n  submitBtn: {},\r\n})\r\n\r\nconst FormButtons = ({ classes, submit = {}, cancel = {}, onSubmit, onReset }) => (\r\n  <div className={classes.root}>\r\n    <Button\r\n      variant=\"contained\"\r\n      color=\"default\"\r\n      className={classes.cancelBtn}\r\n      disabled={cancel.disabled || false}\r\n      onClick={onReset}\r\n    >\r\n      {tr('global.cancel')}\r\n    </Button>\r\n    <Button\r\n      variant=\"contained\"\r\n      color=\"primary\"\r\n      className={classes.submitBtn}\r\n      disabled={submit.disabled || false}\r\n      onClick={onSubmit}\r\n    >\r\n      {tr('global.save')}\r\n    </Button>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(FormButtons)\r\n","import { ModalType, createShowDialogAction, createHideDialogAction } from 'pmt-modules/dialog'\r\n\r\nexport const displayErrorDialog = (errorMessage, options) => createShowDialogAction(\r\n  ModalType.ERROR,\r\n  {\r\n    errorMessage,\r\n    options\r\n  }\r\n)\r\n\r\nexport const hideErrorDialog = () => createHideDialogAction(\r\n  ModalType.ERROR,\r\n  {}\r\n)\r\n","function _setPrototypeOf(t, e) {\n  return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar setStatic = function setStatic(key, value) {\n  return function (BaseComponent) {\n    /* eslint-disable no-param-reassign */\n    BaseComponent[key] = value;\n    /* eslint-enable no-param-reassign */\n\n    return BaseComponent;\n  };\n};\n\nvar _default = setStatic;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _setStatic = _interopRequireDefault(require(\"./setStatic\"));\n\nvar setDisplayName = function setDisplayName(displayName) {\n  return (0, _setStatic.default)('displayName', displayName);\n};\n\nvar _default = setDisplayName;\nexports.default = _default;","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar getDisplayName = function getDisplayName(Component) {\n  if (typeof Component === 'string') {\n    return Component;\n  }\n\n  if (!Component) {\n    return undefined;\n  }\n\n  return Component.displayName || Component.name || 'Component';\n};\n\nvar _default = getDisplayName;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _getDisplayName = _interopRequireDefault(require(\"./getDisplayName\"));\n\nvar wrapDisplayName = function wrapDisplayName(BaseComponent, hocName) {\n  return hocName + \"(\" + (0, _getDisplayName.default)(BaseComponent) + \")\";\n};\n\nvar _default = wrapDisplayName;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = require(\"react\");\n\nvar _setDisplayName = _interopRequireDefault(require(\"./setDisplayName\"));\n\nvar _wrapDisplayName = _interopRequireDefault(require(\"./wrapDisplayName\"));\n\nvar shouldUpdate = function shouldUpdate(test) {\n  return function (BaseComponent) {\n    var factory = (0, _react.createFactory)(BaseComponent);\n\n    var ShouldUpdate =\n    /*#__PURE__*/\n    function (_Component) {\n      (0, _inheritsLoose2.default)(ShouldUpdate, _Component);\n\n      function ShouldUpdate() {\n        return _Component.apply(this, arguments) || this;\n      }\n\n      var _proto = ShouldUpdate.prototype;\n\n      _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n        return test(this.props, nextProps);\n      };\n\n      _proto.render = function render() {\n        return factory(this.props);\n      };\n\n      return ShouldUpdate;\n    }(_react.Component);\n\n    if (process.env.NODE_ENV !== 'production') {\n      return (0, _setDisplayName.default)((0, _wrapDisplayName.default)(BaseComponent, 'shouldUpdate'))(ShouldUpdate);\n    }\n\n    return ShouldUpdate;\n  };\n};\n\nvar _default = shouldUpdate;\nexports.default = _default;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  // SameValue algorithm\n  if (x === y) {\n    // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    // Added the nonzero y check to make Flow happy, but it is redundant\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    // Step 6.a: NaN == NaN\n    return x !== x && y !== y;\n  }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n  if (is(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = shallowEqual;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _shallowEqual = _interopRequireDefault(require(\"fbjs/lib/shallowEqual\"));\n\nvar _default = _shallowEqual.default;\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _shouldUpdate = _interopRequireDefault(require(\"./shouldUpdate\"));\n\nvar _shallowEqual = _interopRequireDefault(require(\"./shallowEqual\"));\n\nvar _setDisplayName = _interopRequireDefault(require(\"./setDisplayName\"));\n\nvar _wrapDisplayName = _interopRequireDefault(require(\"./wrapDisplayName\"));\n\nvar pure = function pure(BaseComponent) {\n  var hoc = (0, _shouldUpdate.default)(function (props, nextProps) {\n    return !(0, _shallowEqual.default)(props, nextProps);\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    return (0, _setDisplayName.default)((0, _wrapDisplayName.default)(BaseComponent, 'pure'))(hoc(BaseComponent));\n  }\n\n  return hoc(BaseComponent);\n};\n\nvar _default = pure;\nexports.default = _default;","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet NavigationClose = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n  </SvgIcon>\r\n);\r\nNavigationClose = pure(NavigationClose);\r\nNavigationClose.displayName = 'NavigationClose';\r\nNavigationClose.muiName = 'SvgIcon';\r\n\r\nexport default NavigationClose;\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Snackbar from '@material-ui/core/Snackbar'\r\nimport CloseIcon from '../svg-icons/navigation/close'\r\n// import Button from '@material-ui/core/Button'\r\nimport IconButton from '@material-ui/core/IconButton'\r\n\r\nconst styles = theme => ({\r\n  close: {\r\n    width: theme.spacing(4),\r\n    height: theme.spacing(4),\r\n  },\r\n})\r\n\r\nclass SnackbarContainer extends React.Component {\r\n  state = {\r\n    open: false,\r\n  }\r\n\r\n  handleShow = () => {\r\n    this.setState({\r\n      open: true,\r\n    })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.setState({\r\n      open: false,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { message, children, classes, autoHideDuration, action, withCloseAction } = this.props\r\n\r\n    let actions = [...(action || [])]\r\n    if (withCloseAction) {\r\n      actions.push(\r\n        <IconButton\r\n          key=\"close\"\r\n          aria-label=\"Close\"\r\n          color=\"inherit\"\r\n          className={classes.close}\r\n          onClick={this.handleClose}\r\n        >\r\n          <CloseIcon />\r\n        </IconButton>\r\n      )\r\n    }\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {children({\r\n          onShow: this.handleShow,\r\n          open: this.state.open,\r\n        })}\r\n\r\n        <Snackbar\r\n          message={message}\r\n          action={action}\r\n          autoHideDuration={autoHideDuration}\r\n          open={this.state.open}\r\n          onClose={this.handleClose}\r\n        />\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nSnackbarContainer.defaultProps = {\r\n  autoHideDuration: 2000,\r\n  action: null,\r\n  withCloseAction: false,\r\n}\r\n\r\nSnackbarContainer.propTypes = {\r\n  message: PropTypes.string.isRequired,\r\n\r\n  withCloseAction: PropTypes.bool,\r\n}\r\n\r\nexport default withStyles(styles)(SnackbarContainer)\r\n","import React from 'react'\r\n\r\nimport Snackbar from 'pmt-ui/Snackbar'\r\n\r\nclass SnackbarError extends React.Component {\r\n  state = {\r\n    open: true,\r\n  }\r\n\r\n  handleRequestClose = () => {\r\n    this.setState({ open: false })\r\n    if (this.props.onClose) {\r\n      this.props.onClose()\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { errorMessage } = this.props\r\n\r\n    return (\r\n      <Snackbar\r\n        open={this.state.open}\r\n        onClose={this.handleRequestClose}\r\n        message={\r\n          <span id=\"message-id\" role=\"alert\" aria-live=\"assertive\">\r\n            {errorMessage}\r\n          </span>\r\n        }\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nexport default SnackbarError\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PropTypes from 'prop-types'\r\nimport { compose } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport invariant from 'invariant'\r\n\r\nimport isString from 'lodash/isString'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { displayErrorDialog } from './actions'\r\nimport SnackbarError from './SnackbarError'\r\n\r\nconst styles = theme => {\r\n  invariant(\r\n    !isNil(theme.pmt.status) && !isNil(theme.pmt.status.error),\r\n    `theme status error color is not defined`\r\n  )\r\n\r\n  return {\r\n    errorBlock: {\r\n      marginTop: 20,\r\n      color: theme.pmt.status.error,\r\n      textAlign: 'center',\r\n    },\r\n  }\r\n}\r\n\r\nconst DisplayMode = {\r\n  SNACKBAR: 'DISPLAY_MODE::SNACKBAR',\r\n  DIALOG: 'DISPLAY_MODE::DIALOG',\r\n  CUSTOM: 'DISPLAY_MODE::CUSTOM',\r\n}\r\n\r\n/**\r\n * error will be displayed with the color defined in theme: theme.pmt.status.error\r\n * be sure to set it properly in your config theme file\r\n */\r\nclass ErrorBlock extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.setMessage(props)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const newMessage = isEmpty(get(nextProps, 'error.localizedMessage'))\r\n      ? get(nextProps, 'error.message', null)\r\n      : tr(nextProps.error.localizedMessage)\r\n    if (this.message !== newMessage) {\r\n      this.setMessage(nextProps)\r\n    }\r\n  }\r\n\r\n  setMessage(props) {\r\n    if (!isNil(props.error)) {\r\n      if (isString(props.error)) {\r\n        this.message = props.error\r\n      } else {\r\n        this.message = isEmpty(get(props, 'error.localizedMessage'))\r\n          ? get(props, 'error.message', null)\r\n          : tr(props.error.localizedMessage)\r\n      }\r\n      if (props.mode === DisplayMode.DIALOG) {\r\n        props.displayErrorDialog(this.message, props.options)\r\n      }\r\n      this.message = this.message || tr('global.unknown_error')\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { mode, error, classes, customElement, options } = this.props\r\n\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n\r\n    switch (mode) {\r\n      // we don't need to render anything here, since it will be done via the setMessage func\r\n      case DisplayMode.DIALOG:\r\n        return null\r\n\r\n      case DisplayMode.SNACKBAR:\r\n        return <SnackbarError errorMessage={this.message} {...options || {}} />\r\n\r\n      case DisplayMode.CUSTOM:\r\n        return React.cloneElement(customElement, {\r\n          text: this.message,\r\n        })\r\n\r\n      default:\r\n        return <div className={classes.errorBlock}>{this.message}</div>\r\n    }\r\n  }\r\n}\r\n\r\nErrorBlock.defaultProps = {\r\n  mode: DisplayMode.DEFAULT,\r\n}\r\n\r\nErrorBlock.propTypes = {\r\n  error: PropTypes.object,\r\n\r\n  // way to display this error block\r\n  mode: PropTypes.string,\r\n\r\n  /**\r\n   * options can contain,\r\n   *\r\n   * for dialog:\r\n   *   - title: dialog title\r\n   *   - actions: dialog actions\r\n   *\r\n   * For snackbar:\r\n   *   - onClose\r\n   */\r\n  options: PropTypes.object,\r\n\r\n  // cutomElement to be passed with mode DisplayMode.CUSTOM\r\n  customElement: PropTypes.element,\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst ErrorBlockComponent = compose(\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      displayErrorDialog,\r\n    }\r\n  ),\r\n  withStyles(styles)\r\n)(ErrorBlock)\r\n\r\nErrorBlockComponent.Mode = DisplayMode\r\n\r\nexport default ErrorBlockComponent\r\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n *   return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n *   if (isGreeting(objValue) && isGreeting(othValue)) {\n *     return true;\n *   }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n  customizer = typeof customizer == 'function' ? customizer : undefined;\n  var result = customizer ? customizer(value, other) : undefined;\n  return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nmodule.exports = isEqualWith;\n","var baseFlatten = require('./_baseFlatten'),\n    baseRest = require('./_baseRest'),\n    baseUniq = require('./_baseUniq'),\n    isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\nvar union = baseRest(function(arrays) {\n  return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nmodule.exports = union;\n","import isEqualWith from 'lodash/isEqualWith'\r\nimport isObject from 'lodash/isObject'\r\nimport isArray from 'lodash/isArray'\r\nimport keys from 'lodash/keys'\r\nimport union from 'lodash/union'\r\nimport isNull from 'lodash/isNull'\r\n\r\nfunction formDataComparator(value1, value2) {\r\n  //\r\n  // Rule 1: null and empty array are considered equal\r\n  // because when we send an empty array to the backend, it is stored as null, and then returned as null\r\n  if (isNull(value1) && Array.isArray(value2) && value2.length === 0) {\r\n    return true\r\n  }\r\n  if (isNull(value2) && Array.isArray(value1) && value1.length === 0) {\r\n    return true\r\n  }\r\n\r\n  // Rule2: integer and their string representation are considered equal\r\n  if (\r\n    (typeof value1 === 'number' && typeof value2 === 'string' && String(value1) === value2) ||\r\n    (typeof value2 === 'number' && typeof value1 === 'string' && String(value2) === value1)\r\n  ) {\r\n    return true\r\n  }\r\n\r\n  // by default, use lodash isEqual\r\n  return undefined\r\n}\r\n\r\nexport function areFormDataLooselyEqual(obj1, obj2) {\r\n  return isEqualWith(obj1, obj2, formDataComparator)\r\n}\r\n\r\n/**\r\n * Recursively collect all differences between two values.\r\n * Returns an array of objects: { path, initial, current }.\r\n *\r\n * For debug only\r\n */\r\nexport function findAllDifferences(initial, current) {\r\n  const diffs = []\r\n\r\n  function recurse(a, b, path) {\r\n    // identical -> nothing to report\r\n    if (areFormDataLooselyEqual(a, b)) return\r\n\r\n    // If either side is not an object/array, it's a leaf difference\r\n    if (!isObject(a) || !isObject(b) || isArray(a) || isArray(b)) {\r\n      diffs.push({ path: path || '', initial: a, current: b })\r\n      return\r\n    }\r\n\r\n    // both are plain objects -> iterate all keys\r\n    const allKeys = union(keys(a), keys(b))\r\n    for (let k of allKeys) {\r\n      const nextPath = path ? `${path}.${k}` : `${k}`\r\n      recurse(a ? a[k] : undefined, b ? b[k] : undefined, nextPath)\r\n    }\r\n  }\r\n\r\n  recurse(initial, current, '')\r\n  return diffs\r\n}\r\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { getFormCustomActions } from 'pmt-modules/form/config'\r\nimport { areFormDataLooselyEqual } from 'pmt-modules/form/utils'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\n\r\nimport { initForm, updateForm, resetForm } from '../actions'\r\n\r\nimport { makeGetFormData, makeGetFormErrors, makeGetFormOptions } from '../selectors'\r\n\r\nclass FormContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    this.initialDefaultData = null\r\n  }\r\n\r\n  componentWillMount() {\r\n    if (\r\n      !isNull(this.props.defaultData) ||\r\n      // if the defaultData from props is null\r\n      // but the default data defined in the form creation (cf. createForm) is not null\r\n      // we need to init the form with those data\r\n      !isNull(this.props.formData)\r\n    ) {\r\n      const defaultData = {\r\n        ...this.props.formData, // default data defined on the form creation\r\n        ...this.props.defaultData, // given default data from props\r\n      }\r\n      this.props.initForm(this.props.formType, defaultData)\r\n      this.initialDefaultData = cloneDeep(defaultData)\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (isNull(prevProps.defaultData) && !isNull(this.props.defaultData)) {\r\n      const defaultData = {\r\n        ...this.props.formData, // default data defined on the form creation\r\n        ...this.props.defaultData, // given default data from props\r\n      }\r\n      this.props.initForm(this.props.formType, defaultData)\r\n      this.initialDefaultData = cloneDeep(defaultData)\r\n    }\r\n  }\r\n\r\n  handleChange = formData => {\r\n    this.props.updateForm(this.props.formType, formData)\r\n  }\r\n\r\n  handleReset = () => {\r\n    this.props.resetForm(this.props.formType, this.props.defaultData)\r\n  }\r\n\r\n  /**\r\n   * Put the current data as initial data (no more diff)\r\n   */\r\n  reinitForm = () => {\r\n    this.props.initForm(this.props.formType, this.props.formData)\r\n    this.initialDefaultData = cloneDeep(this.props.formData)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      formData,\r\n      formErrors,\r\n      formOptions,\r\n      WrappedComponent,\r\n      children,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    const propsToPass = {\r\n      formData,\r\n      formErrors,\r\n      formOptions,\r\n      formIsValid: formErrors.isValid,\r\n      // TODO deprecated, use formIsValid\r\n      isValid: formErrors.isValid,\r\n      onChange: this.handleChange,\r\n      onReset: this.handleReset,\r\n      hasDiff: !areFormDataLooselyEqual(this.initialDefaultData, formData),\r\n      reinitForm: this.reinitForm,\r\n      ...otherProps,\r\n    }\r\n\r\n    // For debug only\r\n    // keep commented\r\n    // uncomment only if you need to debug the hasDiff logic\r\n    /*\r\n    if (propsToPass.hasDiff === true) {\r\n      const diffs = findAllDifferences(this.initialDefaultData, formData)\r\n      console.log('FormContainer: form ' + this.props.formType + ' has diff:', diffs)\r\n    }\r\n     */\r\n\r\n    if (isFunction(children)) {\r\n      return children(propsToPass)\r\n    }\r\n\r\n    return <WrappedComponent {...propsToPass} />\r\n  }\r\n}\r\n\r\nFormContainer.defaultProps = {\r\n  defaultData: null,\r\n}\r\n\r\nFormContainer.propTypes = {\r\n  formType: PropTypes.string.isRequired,\r\n\r\n  /**\r\n   * Default data to use on form mounting\r\n   */\r\n  defaultData: PropTypes.object,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getFormData = makeGetFormData()\r\n  const getFormErrors = makeGetFormErrors()\r\n  const getFormOptions = makeGetFormOptions()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      formData: getFormData(state, props),\r\n      formErrors: getFormErrors(state, props),\r\n      formOptions: getFormOptions(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => {\r\n  const formCustomActions = getFormCustomActions(ownProps.formType)\r\n\r\n  return {\r\n    initForm: bindActionCreators(initForm, dispatch),\r\n    updateForm: bindActionCreators(updateForm, dispatch),\r\n    resetForm: bindActionCreators(resetForm, dispatch),\r\n    customActions: bindActionCreators(formCustomActions, dispatch),\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  mapDispatchToProps\r\n)(FormContainer)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  updateForm,\r\n} from '../actions'\r\n\r\nimport {\r\n  makeGetFormsData,\r\n  makeGetFormsErrors,\r\n} from '../selectors'\r\n\r\n\r\nclass FormsContainer extends React.Component {\r\n\r\n  handleChange = (formType, formData) => {\r\n    this.props.updateForm(formType, formData)\r\n  }\r\n\r\n  render() {\r\n    const { formsData, formsErrors, WrappedComponent, ...otherProps } = this.props\r\n    return (\r\n      <WrappedComponent\r\n        formsData={formsData}\r\n        formsErrors={formsErrors}\r\n        formsAreValid={formsErrors.isValid}\r\n        onChange={this.handleChange}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nFormsContainer.propTypes = {\r\n  formTypes: PropTypes.array.isRequired,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getFormsData = makeGetFormsData()\r\n  const getFormsErrors = makeGetFormsErrors()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      formsData: getFormsData(state, props),\r\n      formsErrors: getFormsErrors(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(makeMapStateToProps, {\r\n  updateForm,\r\n})(FormsContainer)\r\n","import React from 'react'\r\n\r\nimport FormContainer from './FormContainer'\r\n\r\n/**\r\n* Add the FormContainer as HOC for the given component\r\n* Requirements\r\n* - formType: FormType or Array of FormType\r\n*/\r\nconst withForm = (formType) => (\r\n  (WrappedComponent) => (\r\n    (props) => (\r\n      <FormContainer\r\n        formType={formType}\r\n        WrappedComponent={WrappedComponent}\r\n        {...props}\r\n      />\r\n    )\r\n  )\r\n)\r\n\r\nexport default withForm\r\n","import invariant from 'invariant'\r\n\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isObject from 'lodash/isObject'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport merge from 'lodash/merge'\r\n\r\nimport { validator } from './validation/validator'\r\n\r\nimport { isDev } from '../environment/getters'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nexport const DISABLE_FORM_DEV_DATA_QUERY_PARAM = 'disableFormDevData'\r\n\r\nconst DEFAULT_OPTIONS = {\r\n  customActions: {},\r\n  modifier: null,\r\n}\r\n\r\n/**\r\n *\r\n * @param  {FormType} type          the FormType\r\n * @param  {Object} validationRules object that define the validation rules\r\n * @param  {Object} defaultData     an object or a function that give the default data\r\n * @param  {Object} [devData={}]    the dev data to merge to the default data (on dev environment)\r\n *                                  can be a function or an object\r\n * @param  {Object} options         an object of optional options\r\n *                                    - reducer: mandatory to handle a customAction\r\n *\r\n *                                      const reducer = (data, action) => {\r\n *                                        switch (action.actionName) {\r\n *                                          case SpecificActions.ADD:\r\n *                                            return data\r\n *                                          default:\r\n *                                            return data\r\n *                                        }\r\n *                                     }\r\n *                                   - customActions: mandatory with reducer\r\n *                                   - modifier, like a formatter but modify the data before saving\r\n *                                     it on the state -> the data on the store is the right data\r\n *                                     while using the formatter returns the right data on the\r\n *                                     selector, but the formatted data on the state is one-state\r\n *                                     behind\r\n *\r\n * @return {[type]}                 the form:\r\n *                                  {\r\n *                                    type, // the FormType\r\n *                                    validator, // the validator for the validationRules\r\n *                                    getDefault, // a function that returns the default values\r\n *                                  }\r\n *\r\n * Note: you can set the 'DISABLE_FORM_DEV_DATA_QUERY_PARAM' query url paremeter to `true` to globally disable\r\n * dev data on form\r\n *\r\n */\r\nconst createForm = (type, validationRules, defaultData, devData = null, options = {}) => {\r\n  invariant(!isNil(type), 'form type is required')\r\n  invariant(isObject(validationRules), 'validationRules must be an object')\r\n  invariant(\r\n    isFunction(defaultData) || isNil(defaultData) || !isEmpty(defaultData),\r\n    'default data should not be empty'\r\n  )\r\n\r\n  const getDefault = () => {\r\n    const finalDefaultData = isFunction(defaultData) ? defaultData({ options }) : defaultData || {}\r\n    const finalDevData = isFunction(devData) ? devData({ options }) : devData\r\n\r\n    const disableDevData =\r\n      getQueryParam(DISABLE_FORM_DEV_DATA_QUERY_PARAM, window.location.url) === 'true' // as string since we take it from the url as a string\r\n\r\n    if (isDev() && !isNil(finalDevData) && !disableDevData) {\r\n      return merge(finalDefaultData, devData)\r\n    }\r\n\r\n    return finalDefaultData\r\n  }\r\n\r\n  return {\r\n    type,\r\n    validator: (data, options) =>\r\n      validator(isFunction(validationRules) ? validationRules(options) : validationRules, data),\r\n    getDefault: getDefault,\r\n    options: {\r\n      ...DEFAULT_OPTIONS,\r\n      ...options,\r\n    },\r\n  }\r\n}\r\n\r\nexport default createForm\r\n","//\r\n// To create a new form:\r\n// - add the form constant name on FormType.js (follow the `Tip: NEW_FORM_ABOVE`)\r\n// - register the form on the front (config/forms.js)\r\n//\r\n// Note:\r\n// You can set the `disableFormDevData` query parameter to false to disable dev default data.\r\n// see `createForm`\r\n//\r\nimport { getFormReducer, getFormModifier } from './config'\r\nimport { FormAction } from './actions'\r\n\r\nimport { DataCatcherAction, dataCatcherFormReducer } from '../dataCatcher'\r\n\r\nimport { FORM_CUSTOM_ACTION } from './createFormCustomAction'\r\nimport { DEFAULT_FORM_OPTIONS } from './constants'\r\n\r\nexport { default as FormType } from './FormType'\r\nexport * from './config'\r\nexport * from './validation'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './components'\r\nexport * from './createForm'\r\n\r\nconst dataModifier = (data, formType) => {\r\n  const modifier = getFormModifier(formType)\r\n  return !modifier ? data : modifier(data)\r\n}\r\n\r\nlet DEFAULT_STATE = {}\r\nexport const formReducer = (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case FormAction.CREATE:\r\n      return state.mergeIn([action.formType], {\r\n        formData: dataModifier(action.data, action.formType),\r\n        options: DEFAULT_FORM_OPTIONS,\r\n      })\r\n\r\n    case FormAction.UPDATE:\r\n      return state.mergeIn([action.formType], {\r\n        formData: dataModifier(action.data, action.formType),\r\n      })\r\n\r\n    case FormAction.RESET:\r\n      const resetForm = (state, action) => {\r\n        if (action.withDefaultData) {\r\n          return state.mergeIn([action.formType], {\r\n            formData: dataModifier(action.data, action.formType),\r\n            options: action.options,\r\n          })\r\n        }\r\n\r\n        return state.mergeIn([action.formType], {\r\n          formData: dataModifier(action.data, action.formType),\r\n        })\r\n      }\r\n      return resetForm(state, action)\r\n\r\n    case FormAction.UPDATE_OPTIONS:\r\n      return state.mergeIn([action.formType, 'options'], action.options)\r\n\r\n    case FormAction.ACTIVATION:\r\n      return state.mergeIn([action.formType], {\r\n        options: {\r\n          isActivated: action.isActivated,\r\n        },\r\n      })\r\n\r\n    case FORM_CUSTOM_ACTION:\r\n      const reducer = getFormReducer(action.formType)\r\n      const data = reducer(state.get(action.formType).toJS(), action)\r\n      return state.mergeIn([action.formType], {\r\n        formData: dataModifier(data.formData, action.formType),\r\n        options: data.options,\r\n      })\r\n\r\n    case DataCatcherAction.POST_CATCHED_DATA:\r\n      return dataCatcherFormReducer(state, action)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport invariant from 'invariant'\r\n\r\nlet _searches = []\r\nexport const registerSearches = (searches) => {\r\n  _searches = searches\r\n}\r\n\r\nexport const getSearches = (searches) => (\r\n  _searches\r\n)\r\n\r\n/**\r\n * @param  {string} searchType SearchType of the search to retrive\r\n * @return {SearchConfiguration} the configuration for the given SearchType\r\n */\r\nexport const getSearch = (searchType) => {\r\n  const search = find(_searches, (search) => searchType === search.type)\r\n\r\n  invariant(!isNil(search), 'search ' + searchType + ' not registered')\r\n\r\n  return search\r\n}\r\n\r\nexport const getFormatter = (searchType) => {\r\n  const search = getSearch(searchType)\r\n\r\n  const formatter = search.options.formatter\r\n\r\n  invariant((isNil(formatter) || isFunction(formatter)), 'search ' + searchType + ' has no formatter')\r\n\r\n  return formatter\r\n}\r\n\r\nexport const getSearchApiCallFunc = (searchType) => {\r\n  const search = getSearch(searchType)\r\n\r\n  const apiCallFunc = search.apiCallFunc\r\n  invariant(isFunction(apiCallFunc), 'search ' + searchType + ' has no apiCallFunc')\r\n\r\n  return apiCallFunc\r\n}\r\n","import { createAction } from '../redux'\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\nimport { getSearchApiCallFunc } from './config'\r\n\r\nexport const SearchAction = {\r\n  CREATE: 'SEARCH::CREATE',\r\n  UPDATE: 'SEARCH::UPDATE',\r\n  RESET: 'SEARCH::RESET',\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} TYPE The SearchType\r\n * @param {string} formType The SearchType\r\n * @param {any} data The form data\r\n */\r\nexport const initSearch = (searchType, data) =>\r\n  createAction(SearchAction.CREATE, {\r\n    searchType,\r\n    data,\r\n  })\r\n\r\n/**\r\n *\r\n * @param {string} TYPE The SearchType\r\n * @param {string} searchType The SearchType\r\n * @param {any} data The form data\r\n */\r\nexport const updateSearch = (searchType, data) =>\r\n  createAction(SearchAction.UPDATE, {\r\n    searchType,\r\n    data,\r\n  })\r\n\r\n/**\r\n *\r\n * @param {string} TYPE The SearchType\r\n * @param {string} searchType The SearchType\r\n * @param {any} data The form data\r\n */\r\nexport const resetSearch = (searchType, data) =>\r\n  createAction(SearchAction.RESET, {\r\n    searchType,\r\n    data,\r\n  })\r\n\r\nexport const GetSearchListAction = createApiEnumAction('SEARCH::GET')\r\n\r\nexport const getSearchAction = (searchType, props) =>\r\n  createApiCallAction(GetSearchListAction, getSearchApiCallFunc(searchType)(props), {\r\n    searchType,\r\n    props,\r\n  })\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getFormatter } from './config'\r\n\r\nconst getSearchState = (state) => state.search\r\nconst getSearchTypeData = (state, props) => getSearchState(state).get(props.searchType)\r\nconst getSearchType = (state, props) => props.searchType\r\n\r\nexport const makeGetSearchList = () => createSelector(\r\n  [ getSearchTypeData, getSearchType ],\r\n  (searchData, searchType) => {\r\n    if (isNil(searchData) || isNil(searchData.get('list'))) {\r\n      return []\r\n    }\r\n\r\n    const list = searchData.get('list').toJS()\r\n\r\n    const formatter = getFormatter(searchType)\r\n\r\n    if (formatter) {\r\n      return formatter(list)\r\n    }\r\n\r\n    return list\r\n  }\r\n)\r\n\r\nexport const makeIsFetchingSearchList = () => createSelector(\r\n  [ getSearchTypeData ],\r\n  (searchData) => {\r\n    if (isNil(searchData) || isNil(searchData.get('isFetching'))) {\r\n      return false\r\n    }\r\n\r\n    return searchData.get('isFetching')\r\n  }\r\n)\r\n\r\nexport const makeGetSearchError = () => createSelector(\r\n  [ getSearchTypeData ],\r\n  (searchData) => {\r\n    if (isNil(searchData) || isNil(searchData.get('error'))) {\r\n      return false\r\n    }\r\n\r\n    return searchData.get('error').toJS()\r\n  }\r\n)\r\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var arrayMap = require('./_arrayMap'),\n    baseClone = require('./_baseClone'),\n    baseUnset = require('./_baseUnset'),\n    castPath = require('./_castPath'),\n    copyObject = require('./_copyObject'),\n    customOmitClone = require('./_customOmitClone'),\n    flatRest = require('./_flatRest'),\n    getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nmodule.exports = omit;\n","import clsx from 'clsx'\r\nimport invariant from 'invariant'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport PropTypes from 'prop-types'\r\nimport React from 'react'\r\n\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\nimport { withStyles } from '@material-ui/core/styles'\r\nimport TextField from '@material-ui/core/TextField'\r\n\r\nimport CloseIcon from '@material-ui/icons/Close'\r\nimport SearchIcon from '@material-ui/icons/Search'\r\n\r\nconst styles = theme => ({\r\n  search: {\r\n    position: 'relative',\r\n    marginLeft: 0,\r\n    width: '100%',\r\n    [theme.breakpoints.up('sm')]: {\r\n      width: 300,\r\n    },\r\n  },\r\n})\r\n\r\nclass Search extends React.Component {\r\n  state = {\r\n    query: '',\r\n  }\r\n\r\n  handleChange = value => {\r\n    this.setState({\r\n      query: value,\r\n    })\r\n\r\n    this.props.onChange(value)\r\n  }\r\n\r\n  render() {\r\n    const { className, label, classes, searchError } = this.props\r\n\r\n    if (!this.props.show) {\r\n      return <span />\r\n    }\r\n\r\n    invariant(!isEmpty(label), 'Search must have a label')\r\n\r\n    return (\r\n      <div className={clsx(classes.search, className)}>\r\n        <TextField\r\n          // type=\"search\"\r\n          // this might be more html5 but force an \"ugly\" native reset icon\r\n          fullWidth\r\n          placeholder={label}\r\n          value={this.state.query}\r\n          onChange={e => this.handleChange(e.target.value)}\r\n          error={searchError?.localizedMessage}\r\n          helperText={searchError?.localizedMessage}\r\n          InputProps={{\r\n            startAdornment: (\r\n              <InputAdornment position=\"start\">\r\n                <SearchIcon />\r\n              </InputAdornment>\r\n            ),\r\n            endAdornment: (\r\n              <InputAdornment position=\"end\">\r\n                <IconButton size=\"small\" onClick={() => this.handleChange('')}>\r\n                  <CloseIcon fontSize=\"small\" />\r\n                </IconButton>\r\n              </InputAdornment>\r\n            ),\r\n          }}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nSearch.defaultProps = {\r\n  label: '',\r\n}\r\n\r\nSearch.propTypes = {\r\n  show: PropTypes.bool.isRequired,\r\n  label: PropTypes.string,\r\n  className: PropTypes.string,\r\n  onChange: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(Search)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport invariant from 'invariant'\r\n\r\nimport isEqual from 'lodash/isEqual'\r\nimport merge from 'lodash/merge'\r\nimport omit from 'lodash/omit'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { initSearch, updateSearch, resetSearch, getSearchAction } from '../actions'\r\nimport { makeGetSearchList, makeIsFetchingSearchList, makeGetSearchError } from '../selectors'\r\nimport Search from './Search'\r\n\r\nlet timeOutSearch\r\n\r\nclass SearchContainer extends React.Component {\r\n  state = {\r\n    active: false,\r\n  }\r\n\r\n  componentWillMount() {\r\n    this.props.initSearch(this.props.searchType)\r\n    if (this.props.runSearchAtMount) {\r\n      this.runSearch()\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (!isNull(nextProps.query) && nextProps.query !== this.props.query) {\r\n      this.onHandleChange(nextProps.query)\r\n    } else if (!isEqual(this.props.apiCallProps.body, nextProps.apiCallProps.body)) {\r\n      this.runSearch(null, nextProps)\r\n    }\r\n  }\r\n\r\n  runSearch = (query = null, props = this.props) => {\r\n    props.getSearchAction(props.searchType, {\r\n      body: merge(\r\n        {\r\n          query,\r\n        },\r\n        props.apiCallProps.body\r\n      ),\r\n      ...omit(props.apiCallProps, ['body']),\r\n    })\r\n  }\r\n\r\n  // We save a lot of api calls like that\r\n  static TIMEOUT_SIZE = 800\r\n\r\n  onHandleChange = query => {\r\n    this.props.updateSearch(this.props.searchType, { query })\r\n\r\n    clearTimeout(timeOutSearch)\r\n    if (query.length >= this.props.minLength) {\r\n      timeOutSearch = setTimeout(() => {\r\n        this.runSearch(query)\r\n        this.setState({\r\n          active: true,\r\n        })\r\n      }, SearchContainer.TIMEOUT_SIZE)\r\n\r\n      return\r\n    }\r\n\r\n    this.setState({\r\n      active: false,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { className, label, children, searchList, isFetchingSearchList, searchError, hideInput } =\r\n      this.props\r\n\r\n    invariant(isFunction(children), 'SearchContainer children must be a function')\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <Search\r\n          className={className}\r\n          show={!hideInput}\r\n          label={label}\r\n          onChange={query => {\r\n            this.onHandleChange(query)\r\n          }}\r\n          searchError={searchError}\r\n        />\r\n        {children({\r\n          searchActive: this.state.active,\r\n          searchList,\r\n          isFetchingSearchList,\r\n        })}\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nSearchContainer.defaultProps = {\r\n  hideInput: false,\r\n  runSearchAtMount: false,\r\n  query: null,\r\n\r\n  minLength: 3,\r\n}\r\n\r\nSearchContainer.propTypes = {\r\n  label: PropTypes.string,\r\n  className: PropTypes.string,\r\n  searchType: PropTypes.string.isRequired,\r\n  apiCallProps: PropTypes.object.isRequired,\r\n  hideInput: PropTypes.bool,\r\n\r\n  /**\r\n   * Run the search when mounting the component\r\n   * Used for search with paging and no query required\r\n   */\r\n  runSearchAtMount: PropTypes.bool,\r\n\r\n  /**\r\n   * Defines the query to use.\r\n   * The hideInput prop should be set to true in this case\r\n   */\r\n  query: PropTypes.string,\r\n\r\n  /**\r\n   * Min length of the query to run the search\r\n   */\r\n  minLength: PropTypes.number,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getSearchList = makeGetSearchList()\r\n  const isFetchingSearchList = makeIsFetchingSearchList()\r\n  const getSearchError = makeGetSearchError()\r\n\r\n  return {\r\n    searchList: getSearchList(state, props),\r\n    isFetchingSearchList: isFetchingSearchList(state, props),\r\n    searchError: getSearchError(state, props),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n  initSearch,\r\n  updateSearch,\r\n  resetSearch,\r\n  getSearchAction,\r\n})(SearchContainer)\r\n","import Immutable from 'immutable'\r\n\r\nimport { SearchAction, GetSearchListAction } from './actions'\r\n\r\nexport { default as SearchType } from './SearchType'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './components'\r\nexport * from './config'\r\n\r\nlet DEFAULT_STATE = Immutable.fromJS({})\r\nexport const searchReducer = (state = DEFAULT_STATE, action) => {\r\n  switch (action.type) {\r\n    case SearchAction.CREATE:\r\n      return state.mergeIn([action.searchType], {\r\n        data: null,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case SearchAction.UPDATE:\r\n      return state.mergeIn([action.searchType], {\r\n        data: action.data,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case SearchAction.RESET:\r\n      return state.mergeIn([action.searchType], {\r\n        data: null,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case GetSearchListAction.REQUEST:\r\n      return state.mergeIn([action.data.searchType], {\r\n        list: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetSearchListAction.SUCCESS:\r\n      return state.mergeIn([action.data.searchType], {\r\n        list: action.response.data,\r\n        // TODO: replace by pagination\r\n        from: action.response.from,\r\n        size: action.response.size,\r\n        totalHit: action.response.totalHit,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetSearchListAction.FAILURE:\r\n      return state.mergeIn([action.data.searchType], {\r\n        list: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import find from 'lodash/find'\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport invariant from 'invariant'\r\n\r\n// array of statistics groups (see createGroupStatistics)\r\nlet _statistics = []\r\n\r\nexport const registerStatisticsConfig = statistics => {\r\n  _statistics = statistics\r\n}\r\n\r\nexport const getStatisticsConfig = () => _statistics\r\n\r\n/**\r\n * @param  {string} statisticsGroupType StatisticsGroupType\r\n * @return {SearchConfiguration} the configuration for the given StatisticsGroupType\r\n */\r\nexport const getGroupStatistics = statisticsGroupType => {\r\n  const statistics = find(_statistics, statistics => statisticsGroupType === statistics.type)\r\n\r\n  invariant(!isNil(statistics), 'statistics group ' + statisticsGroupType + ' not registered')\r\n\r\n  return statistics\r\n}\r\n\r\n/**\r\n * @param  {string} statisticsGroupType StatisticsGroupType\r\n * @param  {string} statisticsType  type of the statistics to retrive\r\n * @return {SearchConfiguration} the configuration for the given StatisticsGroupType\r\n */\r\nexport const getStatistics = (statisticsGroupType, statisticsType) => {\r\n  const group = getGroupStatistics(statisticsGroupType)\r\n  const groupStatistics = find(group.statistics, statistics => statisticsType === statistics.type)\r\n\r\n  invariant(\r\n    !isNil(groupStatistics),\r\n    'statistics ' + statisticsType + ' not registered for group ' + statisticsGroupType\r\n  )\r\n\r\n  return groupStatistics\r\n}\r\n\r\nexport const getFormatter = (statisticsGroupType, statisticsType) => {\r\n  const statistics = getStatistics(statisticsGroupType, statisticsType)\r\n\r\n  const formatter = statistics.formatter\r\n\r\n  invariant(\r\n    isNil(formatter) || isFunction(formatter),\r\n    'statistics ' + statisticsType + ' has no formatter'\r\n  )\r\n\r\n  return formatter\r\n}\r\n\r\nexport const getStatisticsApiCallFunc = (statisticsGroupType, statisticsType) => {\r\n  const statistics = getStatistics(statisticsGroupType, statisticsType)\r\n\r\n  const apiCallFunc = statistics.apiCallFunc\r\n  invariant(isFunction(apiCallFunc), 'statistics ' + statisticsType + ' has no apiCallFunc')\r\n\r\n  return apiCallFunc\r\n}\r\n","import { createAction } from '../redux'\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport { getStatisticsApiCallFunc } from './config'\r\n\r\nexport const GetStatisticsAction = createApiEnumAction('ORDER_STATS::GET')\r\n\r\nexport const getStatisticsAction = (statisticsGroupType, statisticsType, props) =>\r\n  createApiCallAction(\r\n    GetStatisticsAction,\r\n    getStatisticsApiCallFunc(statisticsGroupType, statisticsType)(props),\r\n    {\r\n      statisticsGroupType,\r\n      statisticsType,\r\n      props,\r\n      requestId: generateUUID(),\r\n    }\r\n  )\r\n\r\nexport const StatisticsAction = {\r\n  UPDATE: 'STATISTICS::UPDATE',\r\n  INIT_CONFIG: 'STATISTICS::INIT_CONFIG',\r\n}\r\n\r\nexport const updateStatisticsOptions = (statisticsGroupType, options) =>\r\n  createAction(StatisticsAction.UPDATE, {\r\n    statisticsGroupType,\r\n    options,\r\n  })\r\n\r\nexport const initStatisticsConfig = (statisticsGroupType, config) =>\r\n  createAction(StatisticsAction.INIT_CONFIG, {\r\n    statisticsGroupType,\r\n    config,\r\n  })\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet TrendingUp = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z\"/>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n  </SvgIcon>\r\n)\r\n\r\nTrendingUp = pure(TrendingUp)\r\nTrendingUp.displayName = 'TrendingUp'\r\nTrendingUp.pmtName = 'SvgIcon'\r\n\r\nexport default TrendingUp\r\n","export { default as template } from './template'\r\n\r\nexport const capitalizeFirstLetter = string => {\r\n  return string.charAt(0).toUpperCase() + string.slice(1)\r\n}\r\n\r\n// This function is used to insert interpreted spaces in string\r\n// In some cases, spaces are not interpreted so you need this function\r\n// to work this out\r\nexport const replaceSpaceWithUnbreakableUnicodeSpace = string => {\r\n  return string.replace(/ /g, '\\u00a0')\r\n}\r\n","import React from 'react'\r\nimport invariant from 'invariant'\r\nimport PropTypes from 'prop-types'\r\nimport clsx from 'clsx'\r\nimport forEach from 'lodash/forEach'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { capitalizeFirstLetter } from 'pmt-utils/string'\r\n\r\nimport { withStyles, withTheme } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => {\r\n  let stylesObject = {}\r\n  stylesObject['alignCenter'] = {\r\n    textAlign: 'center',\r\n  }\r\n  stylesObject['alignLeft'] = {\r\n    textAlign: 'left',\r\n  }\r\n  stylesObject['alignRight'] = {\r\n    textAlign: 'right',\r\n  }\r\n  stylesObject['defaultThemeTextColor'] = {\r\n    color: theme.palette.text.primary,\r\n  }\r\n\r\n  forEach(theme.pmt.typography.fonts, (value, key) => {\r\n    stylesObject[key] = value.style\r\n  })\r\n\r\n  return stylesObject\r\n}\r\n\r\n// This component is used to set our own font theme's styles for texts\r\n// property component - String - specify the HTML entity you want to wrap your children\r\n// property type - String - specify the type of font to get from theme\r\n// property align - String - align text (values : right - left - center)\r\n\r\nclass TypographyCustom extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      component,\r\n      type,\r\n      align,\r\n      skipColor,\r\n      classes,\r\n      className,\r\n      onClick,\r\n      theme,\r\n      html,\r\n      children,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    const alignDefault = align ? align : 'left'\r\n\r\n    invariant(\r\n      !isUndefined(classes[type]),\r\n      `The props type \"${type}\" specified for TypographyCustom does not exist in your theme`\r\n    )\r\n\r\n    const classNameCombined = clsx(\r\n      classes[type],\r\n      classes[`align${capitalizeFirstLetter(alignDefault)}`],\r\n      className,\r\n      {\r\n        [classes.defaultThemeTextColor]: !skipColor,\r\n      }\r\n    )\r\n\r\n    const Component = component\r\n      ? component\r\n      : theme.pmt.typography.fonts[type].component\r\n        ? theme.pmt.typography.fonts[type].component\r\n        : 'div'\r\n\r\n    const dangerouslySetInnerHTML = !isNil(html) ? { __html: html } : null\r\n\r\n    // we keep this solution in case we want to transmit\r\n    // the applied styled from TypographyCustom to an other component\r\n    // this is useless for text ;)\r\n    // we don't add the wrapper component because it duplicates code with same class\r\n    if (isFunction(children)) {\r\n      return children({\r\n        className: classNameCombined,\r\n        onClick,\r\n        dangerouslySetInnerHTML,\r\n        ...otherProps,\r\n      })\r\n    }\r\n\r\n    return (\r\n      <Component\r\n        className={classNameCombined}\r\n        onClick={onClick}\r\n        dangerouslySetInnerHTML={dangerouslySetInnerHTML}\r\n        {...otherProps}\r\n      >\r\n        {children}\r\n      </Component>\r\n    )\r\n  }\r\n}\r\n\r\nTypographyCustom.defaultProps = {\r\n  skipColor: false,\r\n}\r\n\r\nTypographyCustom.propTypes = {\r\n  component: PropTypes.string,\r\n  type: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n  align: PropTypes.string,\r\n  // if skipColor, the default theme text primary color is not applied\r\n  skipColor: PropTypes.bool,\r\n  className: PropTypes.string,\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default withTheme(withStyles(styles)(TypographyCustom))\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PropTypes from 'prop-types'\r\n\r\nimport clsx from 'clsx'\r\nimport { compose } from 'redux'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNull from 'lodash/isNull'\r\nimport keys from 'lodash/keys'\r\n\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport Paper from 'pmt-ui/Paper'\r\nimport TrendingUp from 'pmt-ui/svg-icons/action/trending-up'\r\nimport Tabs, { Tab } from 'pmt-ui/Tabs'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  header: {\r\n    background: theme.pmt.colors.lightGreen400,\r\n    paddingLeft: theme.spacing(1),\r\n    paddingRight: theme.spacing(1),\r\n  },\r\n  content: {\r\n    padding: theme.spacing(2),\r\n    position: 'relative',\r\n  },\r\n  icon: {\r\n    height: theme.spacing(2),\r\n    marginRight: theme.spacing(1),\r\n    width: theme.spacing(2),\r\n  },\r\n  title: {\r\n    color: theme.pmt.colors.white,\r\n    lineHeight: '48px',\r\n  },\r\n  tab: {\r\n    color: theme.pmt.colors.white,\r\n    minWidth: 50,\r\n  },\r\n  progress: {\r\n    marginTop: 20,\r\n    marginBottom: 20,\r\n  },\r\n  contentHasNoData: {\r\n    height: '100%',\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n  },\r\n})\r\n\r\nconst Graph = ({\r\n  changeFilter,\r\n  classes,\r\n  datasets,\r\n  icon,\r\n  filters,\r\n  filtersState,\r\n  labels,\r\n  options,\r\n  name,\r\n  type,\r\n  isFetching,\r\n}) => {\r\n  const hasData = !isEmpty(datasets) && !isEmpty(datasets[0].data)\r\n\r\n  return (\r\n    <Paper>\r\n      <div className={clsx(classes.header, 'u-overflowHidden')}>\r\n        <Typography className={`${classes.title} u-floatLeft`} variant=\"subtitle1\" align=\"left\">\r\n          {React.cloneElement(icon, {\r\n            className: classes.icon,\r\n          })}\r\n          {name}\r\n        </Typography>\r\n\r\n        {!isEmpty(filters) &&\r\n          !isNull(changeFilter) && (\r\n            <Tabs\r\n              className=\"u-floatRight\"\r\n              value={filtersState}\r\n              onChange={(e, filter) => changeFilter(filter)}\r\n            >\r\n              {keys(filters).map(filter => (\r\n                <Tab\r\n                  key={filter}\r\n                  className={classes.tab}\r\n                  value={filter}\r\n                  label={filters[filter].label}\r\n                />\r\n              ))}\r\n            </Tabs>\r\n          )}\r\n      </div>\r\n\r\n      <div className={clsx(classes.content, { [classes.contentHasNoData]: !hasData })}>\r\n        {isFetching ? (\r\n          <LoadingBlock classes={{ loadingBlockContainer: classes.progress }} show />\r\n        ) : !hasData ? (\r\n          <div>{tr('global.statistics.graph.no_data')}</div>\r\n        ) : (\r\n          React.cloneElement(type, {\r\n            data: {\r\n              labels,\r\n              datasets,\r\n            },\r\n            options,\r\n          })\r\n        )}\r\n      </div>\r\n    </Paper>\r\n  )\r\n}\r\n\r\nGraph.propTypes = {\r\n  changeFilter: PropTypes.func,\r\n  datasets: PropTypes.array.isRequired,\r\n  icon: PropTypes.element,\r\n  filters: PropTypes.object,\r\n  filtersState: PropTypes.string,\r\n  labels: PropTypes.array.isRequired,\r\n  options: PropTypes.object.isRequired,\r\n  name: PropTypes.string.isRequired,\r\n  type: PropTypes.element.isRequired,\r\n}\r\n\r\nGraph.defaultProps = {\r\n  icon: <TrendingUp />,\r\n}\r\n\r\nexport default compose(withStyles(styles))(Graph)\r\n","import { createSelector } from 'reselect'\r\nimport invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getFormatter } from './config'\r\n\r\nconst getStatisticsState = state => state.statistics\r\nconst getStatisticsGroupType = (state, props) => {\r\n  invariant(!isEmpty(props.groupType), `Missing 'groupType' prop`)\r\n  return props.groupType\r\n}\r\nconst getStatisticsType = (state, props) => {\r\n  invariant(!isEmpty(props.type), `Missing 'type' prop`)\r\n  return props.type\r\n}\r\n\r\nconst makeGetStatisticsGroupTypeData = () =>\r\n  createSelector([getStatisticsState, getStatisticsGroupType], (statisticsState, groupType) => {\r\n    if (isNil(statisticsState) || isNil(statisticsState.get(groupType))) {\r\n      return null\r\n    }\r\n\r\n    return statisticsState.get(groupType)\r\n  })\r\n\r\nexport const makeGetStatisticsOptions = () =>\r\n  createSelector([makeGetStatisticsGroupTypeData()], statisticsData => {\r\n    if (isNil(statisticsData) || isNil(statisticsData.get('options'))) {\r\n      return null\r\n    }\r\n\r\n    return statisticsData.get('options').toJS()\r\n  })\r\n\r\nexport const makeGetStatisticsConfig = () =>\r\n  createSelector([makeGetStatisticsGroupTypeData()], statisticsData => {\r\n    if (isNil(statisticsData) || isNil(statisticsData.get('config'))) {\r\n      return null\r\n    }\r\n\r\n    return statisticsData.get('config').toJS()\r\n  })\r\n\r\n// returns the items for the stats\r\nexport const makeGetStatisticsItems = () =>\r\n  createSelector(\r\n    [\r\n      makeGetStatisticsGroupTypeData(),\r\n      getStatisticsGroupType,\r\n      getStatisticsType,\r\n      makeGetStatisticsOptions(),\r\n    ],\r\n    (groupStatisticsState, groupType, type, options) => {\r\n      if (isNil(groupStatisticsState)) {\r\n        return null\r\n      }\r\n\r\n      const statisticsData = groupStatisticsState.get(type)\r\n\r\n      if (isNil(statisticsData) || isNil(statisticsData.get('data'))) {\r\n        return null\r\n      }\r\n\r\n      if (isNil(statisticsData) || isNil(statisticsData.get('isFetching'))) {\r\n        return false\r\n      }\r\n\r\n      const isFetching = statisticsData.get('isFetching')\r\n\r\n      // if we are fetching the data, we don't want to return data:\r\n      // the options has changed, but not the data, so we would call the formatter with inconsistant\r\n      // data.\r\n      // avoid not necessary computing, that could lead to crashed due to the inconsistant data\r\n      if (isFetching) {\r\n        return null\r\n      }\r\n\r\n      const dataState = statisticsData.get('data')\r\n\r\n      if (!dataState) {\r\n        return null\r\n      }\r\n\r\n      const itemsState = dataState.get('items')\r\n\r\n      let data = null\r\n      if (!itemsState) {\r\n        // some requests, like Top up balance for day does not have items list but directly a json.\r\n        // we need to use this data\r\n        data = dataState.toJS()\r\n      } else {\r\n        // otherwise use items\r\n        data = itemsState.toJS()\r\n      }\r\n\r\n      // look for a formatter\r\n      const formatter = getFormatter(groupType, type)\r\n      if (formatter) {\r\n        return formatter(data, options)\r\n      }\r\n\r\n      return data\r\n    }\r\n  )\r\n\r\nexport const makeIsFetchingStatistics = () =>\r\n  createSelector(\r\n    [makeGetStatisticsGroupTypeData(), getStatisticsType],\r\n    (groupStatisticsState, type) => {\r\n      if (isNil(groupStatisticsState)) {\r\n        return null\r\n      }\r\n\r\n      const statisticsData = groupStatisticsState.get(type)\r\n\r\n      if (isNil(statisticsData) || isNil(statisticsData.get('isFetching'))) {\r\n        return false\r\n      }\r\n\r\n      return statisticsData.get('isFetching')\r\n    }\r\n  )\r\n\r\nexport const makeGetStatisticsError = () =>\r\n  createSelector(\r\n    [makeGetStatisticsGroupTypeData(), getStatisticsType],\r\n    (groupStatisticsState, type) => {\r\n      if (isNil(groupStatisticsState)) {\r\n        return null\r\n      }\r\n\r\n      const statisticsData = groupStatisticsState.get(type)\r\n\r\n      if (isNil(statisticsData) || isNil(statisticsData.get('error'))) {\r\n        return null\r\n      }\r\n\r\n      return statisticsData.get('error').toJS()\r\n    }\r\n  )\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isNull from 'lodash/isNull'\r\nimport moment from 'moment'\r\n\r\nimport { getStatisticsAction, updateStatisticsOptions } from '../actions'\r\n\r\nimport {\r\n  makeGetStatisticsItems,\r\n  makeIsFetchingStatistics,\r\n  makeGetStatisticsError,\r\n  makeGetStatisticsOptions,\r\n  makeGetStatisticsConfig,\r\n} from '../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give a restaurants group statistics\r\n *\r\n * Requirements:\r\n * - apiCallProps with rGroupId\r\n * - type defined in ../StatisticsGroupType\r\n *\r\n * see `withRestaurantNews`\r\n */\r\nclass StatisticsContainer extends React.Component {\r\n  componentWillMount() {\r\n    this.loadStatistics(this.props.options)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    /**\r\n     * check if options have changed\r\n     * this is used for imbricated calls to this container\r\n     * this will not impact first level container\r\n     * moment object have identifiers which invalidates isEqual\r\n     * so we use isSame when moment, isEqual otherwise to check if our options have changed\r\n     */\r\n    const res = Object.keys(nextProps.options).filter(option => {\r\n      // we don't want to reload on the API for every option changed.\r\n      // keysThatRunApiReload contains the options keys that must produce a reload\r\n      if (nextProps.config.keysThatRunApiReload.indexOf(option) === -1) {\r\n        return false\r\n      }\r\n\r\n      // this option is listed as an option that re-run the api calls once changed, verify it has\r\n      // changed\r\n\r\n      if (moment.isMoment(nextProps.options[option])) {\r\n        return !nextProps.options[option].isSame(this.props.options[option])\r\n      }\r\n      return !isEqual(nextProps.options[option], this.props.options[option])\r\n    })\r\n\r\n    if (res.length > 0 || !this.props.options) {\r\n      this.loadStatistics(nextProps.options)\r\n    }\r\n  }\r\n\r\n  loadStatistics(options = null) {\r\n    // group container didn't handle options yet\r\n    if (!this.props.options) {\r\n      return\r\n    }\r\n    this.props.getStatisticsAction(this.props.groupType, this.props.type, {\r\n      options: options || this.props.options,\r\n    })\r\n  }\r\n\r\n  handleChangeOptions = (options, reload = false) => {\r\n    !reload\r\n      ? this.props.updateStatisticsOptions(this.props.groupType, options)\r\n      : this.loadStatistics(options)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      className,\r\n      hideTimeRange,\r\n      isFetchingStatistics,\r\n      statistics,\r\n      errorStatistics,\r\n      children,\r\n      options,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    return (\r\n      !isNull(options) &&\r\n      children({\r\n        isFetchingStatistics,\r\n        statistics,\r\n        errorStatistics,\r\n        options,\r\n        onChangeOptions: this.handleChangeOptions,\r\n        ...otherProps,\r\n      })\r\n    )\r\n  }\r\n}\r\n\r\nStatisticsContainer.defaultProps = {}\r\n\r\nStatisticsContainer.propTypes = {\r\n  children: PropTypes.func.isRequired,\r\n\r\n  groupType: PropTypes.string.isRequired,\r\n  type: PropTypes.string.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getStatisticsItems = makeGetStatisticsItems()\r\n  const getIsFetching = makeIsFetchingStatistics()\r\n  const getError = makeGetStatisticsError()\r\n  const getOptions = makeGetStatisticsOptions()\r\n  const getConfig = makeGetStatisticsConfig()\r\n\r\n  return {\r\n    // TODO: rename statisticsItems\r\n    statistics: getStatisticsItems(state, props),\r\n    isFetchingStatistics: getIsFetching(state, props),\r\n    errorStatistics: getError(state, props),\r\n    options: getOptions(state, props),\r\n    config: getConfig(state, props),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n  getStatisticsAction,\r\n  updateStatisticsOptions,\r\n})(StatisticsContainer)\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\nexport const QueryParamType = {\r\n  STRING: 'STRING',\r\n  // can have 'subType' config: 'INTEGER'\r\n  ARRAY: 'ARRAY',\r\n  DATE: 'DATE',\r\n  BOOL: 'BOOL',\r\n  INTEGER: 'INTEGER',\r\n}\r\n\r\nexport const StatisticsPeriod = {\r\n  TODAY: 'TODAY',\r\n  LAST_SEVEN_DAYS: 'LAST_SEVEN_DAYS',\r\n  LAST_THIRTY_DAYS: 'LAST_THIRTY_DAYS',\r\n  LAST_QUARTER: 'LAST_QUARTER',\r\n  CUSTOM: 'CUSTOM',\r\n}\r\n\r\nexport const getStatisticsPeriodOptions = () => {\r\n  return [\r\n    {\r\n      label: tr('global.date.today'),\r\n      value: StatisticsPeriod.TODAY,\r\n    },\r\n    {\r\n      label: tr('global.date.last_seven_days'),\r\n      value: StatisticsPeriod.LAST_SEVEN_DAYS,\r\n    },\r\n    {\r\n      label: tr('global.date.last_thirty_days'),\r\n      value: StatisticsPeriod.LAST_THIRTY_DAYS,\r\n    },\r\n    {\r\n      label: tr('global.date.choose_period'),\r\n      value: StatisticsPeriod.CUSTOM,\r\n    },\r\n  ]\r\n}\r\n\r\nexport const getStatisticsPeriodLabel = period =>\r\n  getStatisticsPeriodOptions().find(periodOption => periodOption.value === period).label\r\n\r\nexport const getSalesFilterKeys = () => ({\r\n  HOUR: 'hour',\r\n  DAY: 'day',\r\n  WEEK: 'week',\r\n  MONTH: 'month',\r\n})\r\n\r\nexport const getSalesFilter = () => ({\r\n  hour: {\r\n    label: tr('global.date.hour'),\r\n    filter: 'DD/MM/YYYY HH:mm',\r\n  },\r\n  day: {\r\n    label: tr('global.date.day'),\r\n    filter: 'DD/MM/YYYY',\r\n  },\r\n  week: {\r\n    label: tr('global.date.week'),\r\n    filter: 'DD/MM/YYYY',\r\n  },\r\n  month: {\r\n    label: tr('global.date.month'),\r\n    filter: 'YYYY-MM',\r\n  },\r\n})\r\n","import moment from 'moment'\r\nimport invariant from 'invariant'\r\nimport isEqualWith from 'lodash/isEqualWith'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { QueryParamType, StatisticsPeriod } from './constants'\r\n\r\nexport const statisticsOptionsAreEqual = (config, options, optionsToCompare) => {\r\n  // no previous props, so nothing to compare with\r\n  if (!options || !optionsToCompare) {\r\n    return\r\n  }\r\n\r\n  const optionsAreEqual = isEqualWith(options, optionsToCompare, (options, optionsToCompare) =>\r\n    getQueryParamsConfig(config).every(queryParamConfig => {\r\n      const optionValue = options[queryParamConfig.name]\r\n      const optionValueToCompare = optionsToCompare[queryParamConfig.name]\r\n\r\n      switch (queryParamConfig.type) {\r\n        case QueryParamType.DATE:\r\n          return (\r\n            optionValue.format(queryParamConfig.dateFormat) ===\r\n            optionValueToCompare.format(queryParamConfig.dateFormat)\r\n          )\r\n\r\n        default:\r\n          return isEqual(optionValue, optionValueToCompare)\r\n      }\r\n    })\r\n  )\r\n  return optionsAreEqual\r\n}\r\n\r\n/**\r\n * keys of the options we must handle on the url and their config\r\n */\r\nexport const getQueryParamsConfig = config => {\r\n  return [\r\n    {\r\n      name: 'fromTime',\r\n      type: QueryParamType.DATE,\r\n      dateFormat: 'DD/MM/YYYY',\r\n    },\r\n    {\r\n      name: 'toTime',\r\n      type: QueryParamType.DATE,\r\n      dateFormat: 'DD/MM/YYYY',\r\n      endOfDay: true,\r\n    },\r\n    {\r\n      name: 'period',\r\n      type: QueryParamType.STRING,\r\n    },\r\n    ...(config && config.queryParamsConfig ? config.queryParamsConfig : []),\r\n  ]\r\n}\r\n\r\nconst getDefaultCustomValue = () => {\r\n  return {\r\n    fromTime: moment().startOf('day'),\r\n    toTime: moment().endOf('day'),\r\n  }\r\n}\r\n\r\nexport const getPeriodDates = (period, defaultCustomValue = getDefaultCustomValue()) => {\r\n  switch (period) {\r\n    case StatisticsPeriod.TODAY:\r\n      return {\r\n        fromTime: moment().startOf('day'),\r\n        toTime: moment().endOf('day'),\r\n      }\r\n\r\n    case StatisticsPeriod.LAST_SEVEN_DAYS:\r\n      return {\r\n        fromTime: moment()\r\n          .subtract(1, 'week')\r\n          .startOf('day'),\r\n        toTime: moment().endOf('day'),\r\n      }\r\n\r\n    case StatisticsPeriod.LAST_THIRTY_DAYS:\r\n      return {\r\n        fromTime: moment()\r\n          .subtract(29, 'days')\r\n          .startOf('day'),\r\n        toTime: moment().endOf('day'),\r\n      }\r\n\r\n    case StatisticsPeriod.CUSTOM:\r\n      return defaultCustomValue\r\n\r\n    default:\r\n      invariant(false, `Invalid period ${period}`)\r\n  }\r\n}\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport invariant from 'invariant'\r\nimport moment from 'moment'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { connect } from 'react-redux'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { updateStatisticsOptions, initStatisticsConfig } from '../actions'\r\nimport { makeGetStatisticsOptions, makeGetStatisticsConfig } from '../selectors'\r\nimport { updatePageQueries, Query } from 'pmt-modules/routing'\r\nimport { statisticsOptionsAreEqual, getQueryParamsConfig, getPeriodDates } from '../utils'\r\nimport { QueryParamType, StatisticsPeriod } from '../constants'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give a restaurants group statistics\r\n *\r\n * Requirements:\r\n * - groupType defined in ../StatisticsGroupType\r\n *\r\n * see `withRestaurantNews`\r\n */\r\nclass StatisticsGroupContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const config = this.props.defaultConfig\r\n\r\n    const keysThatRunApiReload = this.getKeysThatRunApiReload(config)\r\n\r\n    // build options\r\n    // we take the default options and the options in the url\r\n    const options = {\r\n      ...this.props.defaultOptions,\r\n      ...this.getUrlOptions(getQueryParamsConfig(config)),\r\n    }\r\n\r\n    // handle period\r\n\r\n    const periodDates = getPeriodDates(\r\n      options.period,\r\n      // default dates when choosing custom, we want the current dates\r\n      {\r\n        fromTime: options.fromTime,\r\n        toTime: options.toTime,\r\n      }\r\n    )\r\n    options.fromTime = periodDates.fromTime\r\n    options.toTime = periodDates.toTime\r\n\r\n    // in some cases we can have a toTime on the url but not the fromTime (or the inverse). It\r\n    // could lead to invalid time range so we modify it here\r\n    if (options.fromTime.isAfter(options.toTime)) {\r\n      options.fromTime = moment(options.toTime)\r\n        .subtract(1, 'month')\r\n        .startOf('day')\r\n    }\r\n\r\n    config.keysThatRunApiReload = keysThatRunApiReload\r\n\r\n    this.handleInitConfigAndOptions(config, options)\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (!statisticsOptionsAreEqual(this.props.config, prevProps.options, this.props.options)) {\r\n      // options has changed, we want to update the url\r\n\r\n      // when options changes, we put them on the url\r\n      const queryParams = {}\r\n\r\n      getQueryParamsConfig(this.props.config).forEach(queryParamConfig => {\r\n        let value = this.props.options[queryParamConfig.name]\r\n\r\n        switch (queryParamConfig.type) {\r\n          case QueryParamType.DATE:\r\n            value = value.format(queryParamConfig.dateFormat)\r\n            break\r\n\r\n          case queryParamConfig.ARRAY:\r\n            value = value.join(',')\r\n            break\r\n\r\n          default:\r\n          // nothing to format\r\n        }\r\n\r\n        if (value !== null && value.length > 0) {\r\n          queryParams[queryParamConfig.name] = value\r\n        } else {\r\n          queryParams[queryParamConfig.name] = Query.REMOVE_ME\r\n        }\r\n      })\r\n\r\n      // if the period defined is not CUSTOM, we do not need to set the fromTime / toTime\r\n      if (!isEmpty(queryParams['period']) && queryParams['period'] !== StatisticsPeriod.CUSTOM) {\r\n        queryParams.fromTime = Query.REMOVE_ME\r\n        queryParams.toTime = Query.REMOVE_ME\r\n      }\r\n\r\n      this.props.updatePageQueries(queryParams)\r\n    }\r\n  }\r\n\r\n  // list of the keys that must run the api reload of the stats\r\n  // we always have a fromTime and a toTime\r\n  getKeysThatRunApiReload(config) {\r\n    return [\r\n      // put fromTime and toTime as keysThatRunApiReload by default\r\n      'fromTime',\r\n      'toTime',\r\n      'period',\r\n      ...(config && config.keysThatRunApiReload ? config.keysThatRunApiReload : []),\r\n    ]\r\n  }\r\n\r\n  /**\r\n   * Returns the options from the url.\r\n   * For now we handle only the options register on config.keysThatRunApiReload\r\n   */\r\n  getUrlOptions(queryParamsConfig) {\r\n    const urlOptions = {}\r\n\r\n    queryParamsConfig.forEach(queryParamConfig => {\r\n      let queryParam = getQueryParam(queryParamConfig.name)\r\n      if (queryParam) {\r\n        // transform dates\r\n        switch (queryParamConfig.type) {\r\n          case QueryParamType.DATE:\r\n            // Note: for a date, the config must add a dateFormat\r\n            invariant(\r\n              !isEmpty(queryParamConfig.dateFormat),\r\n              `'dateFormat' config requied for '${queryParamConfig.name}'`\r\n            )\r\n            queryParam = moment(queryParam, queryParamConfig.dateFormat).startOf('day')\r\n\r\n            // queryParamConfig accept an endOfDay bool for date QueryParamType.DATE\r\n            if (queryParamConfig.endOfDay === true) {\r\n              queryParam = queryParam.endOf('day')\r\n            }\r\n            break\r\n\r\n          case QueryParamType.INTEGER:\r\n            queryParam = parseInt(queryParam, 10)\r\n            break\r\n\r\n          case QueryParamType.ARRAY:\r\n            // an array on url is a string where each item is seperate with a ','\r\n            queryParam = queryParam.split(',')\r\n            if (queryParamConfig.subType && queryParamConfig.subType === QueryParamType.INTEGER) {\r\n              queryParam = queryParam.map(param => parseInt(param, 10))\r\n            }\r\n            break\r\n\r\n          default:\r\n          // no transformation required\r\n        }\r\n\r\n        urlOptions[queryParamConfig.name] = queryParam\r\n      }\r\n    })\r\n\r\n    // if the period defined is not CUSTOM, we will need to regenerate the fromTime / toTime\r\n    if (!isEmpty(urlOptions['period']) && urlOptions['period'] !== StatisticsPeriod.CUSTOM) {\r\n      urlOptions.fromTime = null\r\n      urlOptions.toTime = null\r\n    }\r\n\r\n    return urlOptions\r\n  }\r\n\r\n  handleInitConfigAndOptions = (config, options) => {\r\n    // Note: we could use options as defaultOptions but options contains the url default params\r\n    // and it would block us from reset all the filters\r\n\r\n    const defaultOptions = {\r\n      ...this.props.defaultOptions,\r\n      // copy default generated data on constructo\r\n      fromTime: options.fromTime,\r\n      toTime: options.toTime,\r\n      period: options.period,\r\n    }\r\n\r\n    this.props.initStatisticsConfig(this.props.groupType, {\r\n      ...config,\r\n      defaultOptions: { ...defaultOptions },\r\n    })\r\n\r\n    this.props.updateStatisticsOptions(this.props.groupType, {\r\n      ...options,\r\n    })\r\n  }\r\n\r\n  handleChangeOptions = options => {\r\n    this.props.updateStatisticsOptions(this.props.groupType, options)\r\n  }\r\n\r\n  handleChangeDateRange = dateRange => {\r\n    if (\r\n      this.props.options.fromTime.valueOf() !== dateRange[0].valueOf() ||\r\n      this.props.options.toTime.valueOf() !== dateRange[1].valueOf()\r\n    ) {\r\n      this.handleChangeOptions({\r\n        ...this.props.options,\r\n        period: StatisticsPeriod.CUSTOM,\r\n        fromTime: dateRange[0],\r\n        toTime: dateRange[1],\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { children, config, options } = this.props\r\n\r\n    if (!config || !options) {\r\n      // wait for default options to be processed\r\n      return null\r\n    }\r\n\r\n    return children({\r\n      options,\r\n      config,\r\n      onChangeOptions: this.handleChangeOptions,\r\n    })\r\n  }\r\n}\r\n\r\nStatisticsGroupContainer.defaultProps = {}\r\n\r\nStatisticsGroupContainer.propTypes = {\r\n  children: PropTypes.func.isRequired,\r\n\r\n  groupType: PropTypes.string.isRequired,\r\n\r\n  defaultOptions: PropTypes.object,\r\n\r\n  config: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getOptions = makeGetStatisticsOptions()\r\n  const getConfig = makeGetStatisticsConfig()\r\n\r\n  return {\r\n    options: getOptions(state, props),\r\n    config: getConfig(state, props),\r\n  }\r\n}\r\n\r\nStatisticsGroupContainer.QueryParamType = QueryParamType\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    initStatisticsConfig,\r\n    updateStatisticsOptions,\r\n    updatePageQueries,\r\n  }\r\n)(StatisticsGroupContainer)\r\n","import findIndex from 'lodash/findIndex'\r\nimport isNumber from 'lodash/isNumber'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\n\r\n// import manually the language files we need\r\n// TODO: do this dynamically\r\nimport 'moment/locale/fr'\r\nimport 'moment/locale/de'\r\nimport 'moment/locale/it'\r\nimport 'moment/locale/es'\r\n// en is imported by default\r\n\r\nimport { DAYS } from 'pmt-modules/api/constants'\r\nimport { getCurrentLanguageWithoutRegionCode } from 'pmt-modules/i18n/utils'\r\nimport { isOrderPlugin } from 'pmt-modules/environment'\r\n\r\nconst keys = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']\r\n\r\nconst MS_FORMAT = 'x'\r\n\r\nexport const DATE_FORMAT_MS = 'DD/MM/YY HH:mm:ss.SSS'\r\n\r\nexport const MINUTE_AS_MS = 60 * 1000\r\nexport const HOUR_AS_MS = 3600 * 1000\r\nexport const DAY_AS_MS = 86400 * 1000\r\n\r\n// we have set the warning 30 minutes before the last authorized order (delay is counted)\r\nexport const DELAY_TO_WARN_CLOSING_HOUR = MINUTE_AS_MS * 30\r\n\r\n// display duration in human readable.\r\n// eg. 3 minutes / a few seconds\r\nexport const formatDuration = (startDate, endDate) => {\r\n  let end = fromMs(endDate)\r\n  let start = fromMs(startDate)\r\n  let diff = end.diff(start)\r\n  const duration = moment.duration(diff)\r\n  return duration.locale(getCurrentLanguageWithoutRegionCode()).humanize()\r\n}\r\n\r\n// display duration in human readable.\r\n// eg. 3 minutes / a few seconds\r\nexport const formatDurationInSeconds = seconds => {\r\n  let diff = now().diff(seconds * 1000)\r\n  const duration = moment.duration(diff)\r\n  return duration.locale(getCurrentLanguageWithoutRegionCode()).humanize()\r\n}\r\n\r\nexport const fromMs = ms => moment(ms, MS_FORMAT).locale(getCurrentLanguageWithoutRegionCode())\r\n\r\nexport const parseDate = (date, format) =>\r\n  moment(date, format).locale(getCurrentLanguageWithoutRegionCode())\r\n\r\nexport const now = () => {\r\n  return moment()\r\n}\r\n\r\nexport const anyToDate = date => {\r\n  if (isNumber(date)) {\r\n    return fromMs(date)\r\n  }\r\n\r\n  if (isNil(date)) {\r\n    return moment()\r\n  }\r\n\r\n  return moment(date) // copy in order to not change the reference data.\r\n}\r\n\r\nexport const getMs = date => {\r\n  if (isNumber(date)) {\r\n    return fromMs(date)\r\n  }\r\n\r\n  const copiedDate = anyToDate(date)\r\n  return copiedDate.valueOf()\r\n}\r\n\r\nexport const millisecondsToMinutes = timestamp => {\r\n  return Math.round(timestamp / MINUTE_AS_MS)\r\n}\r\n\r\nexport const millisecondsToDays = timestamp => {\r\n  return Math.round(timestamp / DAY_AS_MS)\r\n}\r\n\r\n// DateParam: either a moment or an hour timestamp\r\n\r\n/**\r\n * The api use the english day names as keys.\r\n * We use this function to get the key for the given date.\r\n */\r\nexport const getDayKey = dateParam => {\r\n  const date = anyToDate(dateParam)\r\n  const dayIndex = date.day()\r\n\r\n  return keys[dayIndex]\r\n}\r\n\r\nexport const getDayIndexForKey = key => {\r\n  return findIndex(keys, k => k === key)\r\n}\r\n\r\nexport const getI18nDayNameForKey = key => {\r\n  const days = {\r\n    monday: moment.weekdays(1),\r\n    tuesday: moment.weekdays(2),\r\n    wednesday: moment.weekdays(3),\r\n    thursday: moment.weekdays(4),\r\n    friday: moment.weekdays(5),\r\n    saturday: moment.weekdays(6),\r\n    sunday: moment.weekdays(7),\r\n  }\r\n\r\n  return days[key]\r\n}\r\n\r\nexport const getI18nDayShortNameForKey = key => {\r\n  const days = {\r\n    monday: moment.weekdaysShort(1),\r\n    tuesday: moment.weekdaysShort(2),\r\n    wednesday: moment.weekdaysShort(3),\r\n    thursday: moment.weekdaysShort(4),\r\n    friday: moment.weekdaysShort(5),\r\n    saturday: moment.weekdaysShort(6),\r\n    sunday: moment.weekdaysShort(7),\r\n  }\r\n\r\n  return days[key]\r\n}\r\n\r\n/**\r\n * @param date1 Moment|number|MsTimestamp\r\n * @type {[type]}\r\n */\r\nexport const isSameDay = (date1Param, date2Param) => {\r\n  if (isNil(date1Param) || isNil(date1Param)) {\r\n    return false\r\n  }\r\n\r\n  const date1 = anyToDate(date1Param)\r\n  const date2 = anyToDate(date2Param)\r\n\r\n  return date1.isSame(date2, 'day') && date1.isSame(date2, 'month') && date1.isSame(date2, 'year')\r\n}\r\n\r\nexport const getHourFromMs = dateParam => parseInt(getMs(dateParam) / 1000 / 3600, 10) % 24\r\n\r\nexport const getMinuteFromMs = dateParam => parseInt(((getMs(dateParam) / 1000) % 3600) / 60, 10)\r\n\r\nexport const getMsFromHour = hour => parseInt(hour * HOUR_AS_MS, 10)\r\n\r\nexport const getMsFromMinute = minute => parseInt(minute * MINUTE_AS_MS, 10)\r\n\r\nexport const getHourAndMinuteFromMs = date => {\r\n  return {\r\n    hour: getHourFromMs(date),\r\n    minute: getMinuteFromMs(date),\r\n  }\r\n}\r\n\r\nexport const toStartOfDay = dateParam => {\r\n  const date = anyToDate(dateParam)\r\n  return moment(date)\r\n    .hour(0)\r\n    .minute(0)\r\n    .second(0)\r\n    .millisecond(0)\r\n}\r\n\r\n/**\r\n * @param date Moment|number|MsTimestamp\r\n */\r\nexport const isToday = dateParam => {\r\n  let date = anyToDate(dateParam)\r\n  return isSameDay(date, moment())\r\n}\r\n\r\n//\r\n// Format\r\n//\r\n\r\n// const formatTwoDigits = (number) => (\r\n//   number > 9 ? `${number}` : `0${number}`\r\n// )\r\n\r\nexport const formatHour = (dateParam, separator = 'h', shouldUseUtc = false) => {\r\n  let date = anyToDate(dateParam)\r\n\r\n  if (shouldUseUtc) {\r\n    date = date.utcOffset(0)\r\n  }\r\n\r\n  // if (isNumber(date)) {\r\n  //   return `${formatTwoDigits(getHourFromMs(date))}:${formatTwoDigits(getMinuteFromMs(date))}`\r\n  // }\r\n\r\n  return `${date.format('LT')}` // time format, depending on the locale (8:30 PM for english, 20.30 for German, 20h30 for French)\r\n}\r\n\r\nexport const formatDate = (dateParam, format = 'DD-MM-YYYY HH:mm') => {\r\n  const date = anyToDate(dateParam)\r\n\r\n  // https://paymytable.atlassian.net/browse/PP-1025\r\n  if (isOrderPlugin()) {\r\n    return date.utcOffset(0).format(format)\r\n  }\r\n\r\n  return date.format(format)\r\n}\r\n\r\nexport const todayWithHour = hourTimestamp =>\r\n  // /!\\ if you change this part:\r\n  // test the cases with summer time changing at 3am (when ordering D-1 for D, and D for D - D being the day with time change)\r\n  getDateWithHoursAndMinutes(moment(), hourTimestamp)\r\n\r\nexport const diff = (dateParam1, dateParam2, format = 'days') => {\r\n  const d1 = anyToDate(dateParam1)\r\n  const d2 = anyToDate(dateParam2)\r\n\r\n  return d2.diff(d1, format)\r\n}\r\n\r\n/**\r\n * get number of weekdays between two timestamp\r\n */\r\nexport const nbWeekdaysBetween = (d1, d2, isoWeekday) => {\r\n  d1 = moment(d1)\r\n  d2 = moment(d2)\r\n\r\n  var daysToAdd = (7 + isoWeekday - d1.isoWeekday()) % 7\r\n\r\n  var nextDay = d1.clone().add(daysToAdd, 'days')\r\n  if (nextDay.isAfter(d2)) {\r\n    return 0\r\n  }\r\n\r\n  var weeksBetween = d2.diff(nextDay, 'weeks')\r\n\r\n  return weeksBetween + 1\r\n}\r\n\r\nexport const getTimestampForHourWithDate = dateParam => {\r\n  const date = anyToDate(dateParam)\r\n  return (date.hour() * 3600 + date.minute() * 60) * 1000\r\n}\r\n\r\n/**\r\n * moment.js .day() use sunday as first day.\r\n * We use monday as first day on the API.\r\n * Use this function to convert.\r\n *\r\n * @link http://momentjs.com/docs/#/get-set/iso-weekday/\r\n */\r\nexport const getPmtDayIndex = dateParam => {\r\n  const date = anyToDate(dateParam)\r\n\r\n  // In moment: 7 is Monday or Sunday, depending of the iso weekday\r\n  // If the locale assigns Monday as the first day of the week, moment().weekday(0) will be Monday. If Sunday is the first day of the week, moment().weekday(0) will be Sunday.\r\n\r\n  /**\r\n   * isoWeekday: Gets or sets the ISO day of the week with 1 being Monday and 7 being Sunday.\r\n   * day: This method can be used to set the day of the week, with Sunday as 0 and Saturday as 6.\r\n   */\r\n  const day = date.day()\r\n\r\n  const daysMomentToPmt = {\r\n    '0': DAYS.SUNDAY,\r\n    '1': DAYS.MONDAY,\r\n    '2': DAYS.TUESDAY,\r\n    '3': DAYS.WEDNESDAY,\r\n    '4': DAYS.THURSDAY,\r\n    '5': DAYS.FRIDAY,\r\n    '6': DAYS.SATURDAY,\r\n  }\r\n\r\n  return daysMomentToPmt[day]\r\n}\r\n\r\n/**\r\n * Build a Moment with this date and this hours/minutes (from a hour-and-minute timestamp)\r\n *\r\n * /!\\ if you change this part:\r\n * test the cases with summer time changing at 3am (when ordering D-1 for D, and D for D - D being the day with time change)\r\n */\r\nexport const getDateWithHoursAndMinutes = (date, hourMinuteTimestamp) => {\r\n  let hours = Math.floor(hourMinuteTimestamp / 1000 / 60 / 60)\r\n  let minutes = Math.floor(hourMinuteTimestamp / 1000 / 60) - hours * 60\r\n\r\n  return moment(date)\r\n    .hours(hours)\r\n    .minutes(minutes)\r\n}\r\n\r\n/**\r\n * Convert timestamp to hour minute string format HH:mm\r\n */\r\nexport const timestampToHourMinuteAsString = timestamp => {\r\n  let hours = Math.floor(timestamp / 1000 / 60 / 60)\r\n  let minutes = Math.floor(timestamp / 1000 / 60) - hours * 60\r\n\r\n  hours = hours < 10 ? `0${hours}` : hours\r\n  minutes = minutes < 10 ? `0${minutes}` : minutes\r\n\r\n  return `${hours}:${minutes}`\r\n}\r\n\r\n/**\r\n * Convert hour minute string format HH:mm to timestamp\r\n */\r\nexport const hourMinuteAsStringToTimestamp = str => {\r\n  let [hours, minutes] = str.split(':')\r\n\r\n  hours = parseInt(hours, 10) * 60 * 60 * 1000\r\n  minutes = parseInt(minutes, 10) * 60 * 1000\r\n\r\n  return hours + minutes\r\n}\r\n\r\nexport const getCurrentMonth = () => moment().month()\r\nexport const getCurrentYear = () => moment().year()\r\nexport const getMonths = () => moment.months()\r\n","const CalendarMode = {\r\n  SINGLE: 'single',\r\n  MULTIPLE: 'multiple',\r\n  RANGE: 'range',\r\n}\r\n\r\nexport default CalendarMode\r\n","import React, { Component } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport each from 'lodash/each'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport isArray from 'lodash/isArray'\r\nimport moment from 'moment'\r\n\r\nimport { anyToDate } from 'pmt-utils/date'\r\n\r\n// import theme\r\n// airbnb.css\r\n// confetti.css\r\n// dark.css\r\n// light.css\r\n// material_blue.css\r\n// material_green.css\r\n// material_orange.css\r\n// material_red.css\r\n\r\nimport 'flatpickr/dist/themes/airbnb.css'\r\n\r\nimport CalendarMode from './CalendarMode'\r\n\r\n// could be dynamically imported if we want to reduce the bundle size\r\nimport Flatpickr from 'flatpickr'\r\n\r\nexport { default as CalendarMode } from './CalendarMode'\r\n\r\nconst hooks = ['onOpen', 'onMonthChange', 'onYearChange', 'onReady', 'onValueUpdate', 'onDayCreate']\r\n\r\nconst hooksToHandle = ['onChange', 'onClose']\r\n\r\n/**\r\n * see https://github.com/coderhaoxin/react-flatpickr/blob/master/lib/index.js\r\n * @type {Object}\r\n *\r\n *\r\n */\r\nclass Calendar extends Component {\r\n  static propTypes = {\r\n    defaultDate: PropTypes.string,\r\n\r\n    /**\r\n     * Can contains all the flatpickr options and hooks\r\n     * - https://chmln.github.io/flatpickr/options/\r\n     */\r\n    options: PropTypes.object,\r\n\r\n    //\r\n    // https://chmln.github.io/flatpickr/events/#hooks\r\n    //\r\n\r\n    onChange: PropTypes.func,\r\n    onOpen: PropTypes.func,\r\n    onClose: PropTypes.func,\r\n    onMonthChange: PropTypes.func,\r\n    onYearChange: PropTypes.func,\r\n    onReady: PropTypes.func,\r\n    onValueUpdate: PropTypes.func,\r\n    onDayCreate: PropTypes.func,\r\n\r\n    value: PropTypes.oneOfType([\r\n      PropTypes.string,\r\n      PropTypes.array,\r\n      PropTypes.object,\r\n      PropTypes.number,\r\n    ]),\r\n    children: PropTypes.any,\r\n  }\r\n\r\n  static defaultProps = {\r\n    options: {},\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.onReceiveProps(this.props, false)\r\n  }\r\n\r\n  componentWillReceiveProps(props) {\r\n    this.onReceiveProps(props, true)\r\n  }\r\n\r\n  onChange = (selectedDates, dateStr, instance) => {\r\n    if (this.props.onChange) {\r\n      this.notifyCalendarChangement(selectedDates, dateStr, instance, this.props.onChange)\r\n    }\r\n  }\r\n\r\n  onClose = (selectedDates, dateStr, instance) => {\r\n    if (this.props.onClose) {\r\n      this.node.blur && this.node.blur()\r\n      this.notifyCalendarChangement(selectedDates, dateStr, instance, this.props.onClose)\r\n    }\r\n  }\r\n\r\n  notifyCalendarChangement = (selectedDates, dateStr, instance, callback) => {\r\n    // mode can be: single, multiple, range\r\n    // default: single\r\n    if (this.props.options.mode && this.props.options.mode !== CalendarMode.SINGLE) {\r\n      callback(selectedDates.map(date => moment(date)))\r\n    } else {\r\n      callback(moment(selectedDates[0]))\r\n    }\r\n  }\r\n\r\n  onReceiveProps(props, isUpdate) {\r\n    // we mutate the options, so we clone it first\r\n    let options = cloneDeep(props.options)\r\n\r\n    if (!isUpdate) {\r\n      // add creation default options\r\n      options = {\r\n        ...options,\r\n      }\r\n    }\r\n\r\n    // Add prop hooks to options\r\n    each(hooks, hook => {\r\n      if (props[hook]) {\r\n        options[hook] = props[hook]\r\n      }\r\n    })\r\n\r\n    // register the hooks we handle on this component\r\n    each(hooksToHandle, hook => {\r\n      options[hook] = this[hook]\r\n    })\r\n\r\n    //\r\n    // Transform dates, we handle moment dates, but flatpickr handle only javascript date.\r\n    //\r\n\r\n    if (options.minDate) {\r\n      options.minDate = anyToDate(props.options.minDate)\r\n        .toDate()\r\n        .startOf('day')\r\n        .toDate()\r\n    }\r\n\r\n    if (options.maxDate) {\r\n      options.maxDate = anyToDate(props.options.maxDate)\r\n        .toDate()\r\n        .endOf('day')\r\n        .toDate()\r\n    }\r\n\r\n    if (options.defaultDate) {\r\n      options.defaultDate = anyToDate(props.options.defaultDate)\r\n        .startOf('day')\r\n        .toDate()\r\n    }\r\n\r\n    if (!this.flatpickr) {\r\n      // initialize flatpickr object\r\n      if (process.env.FEATURE_FLATPICKR) {\r\n        this.flatpickr = new Flatpickr(this.node, options)\r\n      } else {\r\n        throw new Error('Missing FEATURE_FLATPICKR feature flag')\r\n      }\r\n    } else {\r\n      const optionsKeys = Object.getOwnPropertyNames(options)\r\n\r\n      for (let index = optionsKeys.length - 1; index >= 0; index--) {\r\n        const key = optionsKeys[index]\r\n        let value = options[key]\r\n\r\n        // Hook handlers must be set as an array\r\n        if (hooks.indexOf(key) !== -1 && !isArray(value)) {\r\n          value = [value]\r\n        }\r\n\r\n        if (hooksToHandle.indexOf(key) !== -1 && !isArray(value)) {\r\n          value = [value]\r\n        }\r\n\r\n        this.flatpickr.set(key, value)\r\n      }\r\n    }\r\n\r\n    if (props.hasOwnProperty('value')) {\r\n      let values = null\r\n      if (!isArray(props.value)) {\r\n        values = anyToDate(props.value).toDate()\r\n      } else if (isArray(props.value)) {\r\n        values = props.value.map((value, index) => {\r\n          // force end of day to the selected end day\r\n          // Note: not seem to work, or work only on update, not for the first (defalut) value\r\n          // displayed\r\n          if (index === 1) {\r\n            if (this.props.options.mode === CalendarMode.RANGE && value) {\r\n              return anyToDate(value)\r\n                .endOf('day')\r\n                .toDate()\r\n            }\r\n          }\r\n\r\n          return anyToDate(value).toDate()\r\n        })\r\n      }\r\n\r\n      // setDate(date, triggerChange, dateStrFormat)#\r\n      // Sets the current selected date(s) todate, which can be a date string, a Date, or anArray\r\n      // of the Dates.\r\n      // Optionally, pass true as the second argument to force any onChange events to fire. And if\r\n      // you’re passing a date string with a format other than your dateFormat, provide a\r\n      // dateStrFormat e.g. \"m/d/Y\".\r\n      this.flatpickr.setDate(values, false)\r\n    }\r\n\r\n    if (props.open) {\r\n      this.flatpickr.open()\r\n    }\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    this.flatpickr.destroy()\r\n  }\r\n\r\n  render() {\r\n    // eslint-disable-next-line no-unused-vars\r\n    const { open, options, defaultDate, value, children, ...props } = this.props\r\n\r\n    // Don't pass hooks to dom node\r\n    each(hooks, hook => {\r\n      delete props[hook]\r\n    })\r\n\r\n    return options.wrap ? (\r\n      <div\r\n        {...props}\r\n        ref={node => {\r\n          this.node = node\r\n        }}\r\n      >\r\n        {children}\r\n      </div>\r\n    ) : (\r\n      <input\r\n        {...props}\r\n        style={{\r\n          visibility: 'hidden',\r\n          width: 0,\r\n          height: 0,\r\n        }}\r\n        ref={node => {\r\n          this.node = node\r\n        }}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nCalendar.Mode = CalendarMode\r\n\r\nexport default Calendar\r\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\nmodule.exports = baseRange;\n","var baseRange = require('./_baseRange'),\n    isIterateeCall = require('./_isIterateeCall'),\n    toFinite = require('./toFinite');\n\n/**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n  return function(start, end, step) {\n    if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n      end = step = undefined;\n    }\n    // Ensure the sign of `-0` is preserved.\n    start = toFinite(start);\n    if (end === undefined) {\n      end = start;\n      start = 0;\n    } else {\n      end = toFinite(end);\n    }\n    step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n    return baseRange(start, end, step, fromRight);\n  };\n}\n\nmodule.exports = createRange;\n","var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Popover from 'pmt-ui/Popover'\r\n\r\nconst styles = theme => ({\r\n  header: {\r\n    textAlign: 'center',\r\n    marginTop: theme.spacing(1),\r\n    paddingLeft: theme.spacing(1),\r\n    paddingRight: theme.spacing(1),\r\n  },\r\n  popoverRoot: {\r\n    // maxHeight: '90vh',\r\n    overflow: 'hidden',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n})\r\n\r\n/**\r\n * Display the ListChooser as a popover.\r\n * It is displayed as a dialog on desktop screens.\r\n * It can be forced using the `ListChooser.type` prop with `ListChooserType.POPOVER` value\r\n */\r\n\r\nconst PopoverView = ({ anchorEl, open, header, content, classes, onClose }) => (\r\n  <Popover\r\n    open={open}\r\n    anchorEl={anchorEl}\r\n    onClose={onClose}\r\n    anchorOrigin={{\r\n      vertical: 'bottom',\r\n      horizontal: 'center',\r\n    }}\r\n    className={classes.popoverRoot}\r\n    transformOrigin={{\r\n      vertical: 'center',\r\n      horizontal: 'center',\r\n    }}\r\n  >\r\n    {header && <div className={classes.header}>{header}</div>}\r\n\r\n    {content}\r\n  </Popover>\r\n)\r\n\r\nexport default withStyles(styles)(PopoverView)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Dialog, { DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\n\r\nconst styles = theme => ({\r\n  dialogPaper: {\r\n    height: '80vh',\r\n    overflow: 'hidden',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    minWidth: '20vw',\r\n  },\r\n  dialogContent: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n})\r\n\r\n/**\r\n * Display the ListChooser as a dialog.\r\n * It is displayed as a dialog on small screens.\r\n * It can be forced using the `ListChooser.type` prop with `ListChooserType.DIALOG` value\r\n */\r\nconst DialogView = ({ anchorEl, open, header, content, classes, onClose }) => (\r\n  <Dialog\r\n    open={open}\r\n    onClose={onClose}\r\n    onBackdropClick={onClose}\r\n    classes={{\r\n      paper: classes.dialogPaper,\r\n    }}\r\n    disableBackdropClick={false}\r\n    disableEscapeKeyDown={false}\r\n  >\r\n    <DialogTitle>{header}</DialogTitle>\r\n\r\n    <DialogContent\r\n      classes={{\r\n        root: classes.dialogContent,\r\n      }}\r\n    >\r\n      {content}\r\n    </DialogContent>\r\n  </Dialog>\r\n)\r\n\r\nexport default withStyles(styles)(DialogView)\r\n","/**\r\n * The list chooser can be displayed in different type of views, defined here.\r\n *\r\n * See `ListChooser.type` prop to force the type.\r\n */\r\nexport default {\r\n  /**\r\n   * Display as popover. Default for desktop screens.\r\n   */\r\n  POPOVER: 'ListChooserType::POPOVER',\r\n\r\n  /**\r\n   * Display as a dialog. Default for non-desktop screens.\r\n   */\r\n  DIALOG: 'ListChooserType::DIALOG',\r\n}\r\n","/**\r\n * Default: null\r\n *\r\n * Defines different display possibilities for the Body\r\n */\r\nconst ViewType = {\r\n  // Must not be on 'multiple' mode.\r\n  // Will display a radio button next to the selected value\r\n  RADIO: 'radio',\r\n}\r\n\r\nexport default ViewType\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Button from 'pmt-ui/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    margin: `${theme.spacing(1)} auto`,\r\n  },\r\n})\r\n\r\nconst Pagination = ({ paging, onLoadMore, classes }) => {\r\n  if (paging && paging.cursors && paging.cursors.after) {\r\n    return (\r\n      <Button className={classes.root} onClick={() => onLoadMore(paging.cursors.after)}>\r\n        {tr('global.load_more')}\r\n      </Button>\r\n    )\r\n  }\r\n  return null\r\n}\r\nexport default withStyles(styles)(Pagination)\r\n","import warning from 'warning'\r\n\r\n/**\r\n * Returns a number whose value is limited to the given range.\r\n *\r\n * @param {number} value The value to be clamped\r\n * @param {number} min The lower boundary of the output range\r\n * @param {number} max The upper boundary of the output range\r\n * @returns {number} A number in the range [min, max]\r\n */\r\nfunction clamp(value, min, max) {\r\n  if (value < min) {\r\n    return min\r\n  }\r\n  if (value > max) {\r\n    return max\r\n  }\r\n  return value\r\n}\r\n\r\n/**\r\n * Converts a color object with type and values to a string.\r\n *\r\n * @param {object} color - Decomposed color\r\n * @param {string} color.type - One of, 'rgb', 'rgba', 'hsl', 'hsla'\r\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\r\n * @returns {string} A CSS color string\r\n */\r\nexport function convertColorToString(color) {\r\n  const { type, values } = color\r\n\r\n  if (type.indexOf('rgb') > -1) {\r\n    // Only convert the first 3 values to int (i.e. not alpha)\r\n    for (let i = 0; i < 3; i++) {\r\n      values[i] = parseInt(values[i], 10)\r\n    }\r\n  }\r\n\r\n  let colorString\r\n\r\n  if (type.indexOf('hsl') > -1) {\r\n    colorString = `${color.type}(${values[0]}, ${values[1]}%, ${values[2]}%`\r\n  } else {\r\n    colorString = `${color.type}(${values[0]}, ${values[1]}, ${values[2]}`\r\n  }\r\n\r\n  if (values.length === 4) {\r\n    colorString += `, ${color.values[3]})`\r\n  } else {\r\n    colorString += ')'\r\n  }\r\n\r\n  return colorString\r\n}\r\n\r\n/**\r\n * see http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript\r\n * @param color\r\n * @returns {String}\r\n */\r\nexport function uintColorToHexadecimal(color) {\r\n  return '#' + ('000000' + (color & 0xffffff).toString(16)).slice(-6)\r\n}\r\n\r\nexport function hexadecimalToUintColor(color) {\r\n  // remove '#'\r\n  if (color && color.length > 1 && color[0] === '#') {\r\n    color = color.slice(1, color.length)\r\n  }\r\n  return Number(parseInt(color, 16).toString(10))\r\n}\r\n\r\n/**\r\n * Converts a color from CSS hex format to CSS rgb format.\r\n *\r\n *  @param {string} color - Hex color, i.e. #nnn or #nnnnnn\r\n *  @returns {string} A CSS rgb color string\r\n */\r\nexport function convertHexToRGB(color) {\r\n  if (color.length === 4) {\r\n    let extendedColor = '#'\r\n    for (let i = 1; i < color.length; i++) {\r\n      extendedColor += color.charAt(i) + color.charAt(i)\r\n    }\r\n    color = extendedColor\r\n  }\r\n\r\n  const values = {\r\n    r: parseInt(color.substr(1, 2), 16),\r\n    g: parseInt(color.substr(3, 2), 16),\r\n    b: parseInt(color.substr(5, 2), 16),\r\n  }\r\n\r\n  return `rgb(${values.r}, ${values.g}, ${values.b})`\r\n}\r\n\r\n/**\r\n * Returns an object with the type and values of a color.\r\n *\r\n * Note: Does not support rgb % values and color names.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {{type, values: number[]}} A MUI color object\r\n */\r\nexport function decomposeColor(color) {\r\n  if (color.charAt(0) === '#') {\r\n    return decomposeColor(convertHexToRGB(color))\r\n  }\r\n\r\n  const marker = color.indexOf('(')\r\n\r\n  warning(\r\n    marker !== -1,\r\n    `Material-UI: The ${color} color was not parsed correctly,\r\n  because it has an unsupported format (color name or RGB %). This may cause issues in component rendering.`\r\n  )\r\n\r\n  const type = color.substring(0, marker)\r\n  let values = color.substring(marker + 1, color.length - 1).split(',')\r\n  values = values.map(value => parseFloat(value))\r\n\r\n  return { type, values }\r\n}\r\n\r\n/**\r\n * Calculates the contrast ratio between two colors.\r\n *\r\n * Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\r\n *\r\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {number} A contrast ratio value in the range 0 - 21 with 2 digit precision.\r\n */\r\nexport function getContrastRatio(foreground, background) {\r\n  const lumA = getLuminance(foreground)\r\n  const lumB = getLuminance(background)\r\n  const contrastRatio = (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05)\r\n\r\n  return Number(contrastRatio.toFixed(2)) // Truncate at two digits\r\n}\r\n\r\n/**\r\n * The relative brightness of any point in a color space,\r\n * normalized to 0 for darkest black and 1 for lightest white.\r\n *\r\n * Formula: https://www.w3.org/WAI/GL/wiki/Relative_luminance\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {number} The relative brightness of the color in the range 0 - 1\r\n */\r\nexport function getLuminance(color) {\r\n  color = decomposeColor(color)\r\n\r\n  if (color.type.indexOf('rgb') > -1) {\r\n    const rgb = color.values.map(val => {\r\n      val /= 255 // normalized\r\n      return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4)\r\n    })\r\n    return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3)) // Truncate at 3 digits\r\n  } else if (color.type.indexOf('hsl') > -1) {\r\n    return color.values[2] / 100\r\n  }\r\n}\r\n\r\n/**\r\n * Darken or lighten a colour, depending on its luminance.\r\n * Light colors are darkened, dark colors are lightened.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\r\nexport function emphasize(color, coefficient = 0.15) {\r\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient)\r\n}\r\n\r\n/**\r\n * Set the absolute transparency of a color.\r\n * Any existing alpha values are overwritten.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} value - value to set the alpha channel to in the range 0 -1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\r\nexport function fade(color, value) {\r\n  color = decomposeColor(color)\r\n  value = clamp(value, 0, 1)\r\n\r\n  if (color.type === 'rgb' || color.type === 'hsl') {\r\n    color.type += 'a'\r\n  }\r\n  color.values[3] = value\r\n\r\n  return convertColorToString(color)\r\n}\r\n\r\n/**\r\n * Darkens a color.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\r\nexport function darken(color, coefficient) {\r\n  color = decomposeColor(color)\r\n  coefficient = clamp(coefficient, 0, 1)\r\n\r\n  if (color.type.indexOf('hsl') > -1) {\r\n    color.values[2] *= 1 - coefficient\r\n  } else if (color.type.indexOf('rgb') > -1) {\r\n    for (let i = 0; i < 3; i++) {\r\n      color.values[i] *= 1 - coefficient\r\n    }\r\n  }\r\n  return convertColorToString(color)\r\n}\r\n\r\n/**\r\n * Lightens a color.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\r\nexport function lighten(color, coefficient) {\r\n  color = decomposeColor(color)\r\n  coefficient = clamp(coefficient, 0, 1)\r\n\r\n  if (color.type.indexOf('hsl') > -1) {\r\n    color.values[2] += (100 - color.values[2]) * coefficient\r\n  } else if (color.type.indexOf('rgb') > -1) {\r\n    for (let i = 0; i < 3; i++) {\r\n      color.values[i] += (255 - color.values[i]) * coefficient\r\n    }\r\n  }\r\n\r\n  return convertColorToString(color)\r\n}\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport find from 'lodash/find'\r\nimport isObject from 'lodash/isObject'\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport ViewType from '../ViewType'\r\nimport { LoadingBlock } from 'pmt-ui/LoadingBlock'\r\nimport List, { ListItem } from 'pmt-ui/List'\r\nimport TextField from 'pmt-ui/TextField'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport Pagination from './Pagination'\r\nimport { lighten } from 'pmt-utils/theme/colorManipulator'\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\nimport Radio from 'pmt-ui/Radio'\r\n\r\nconst styles = theme => ({\r\n  body: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  listContainer: {\r\n    display: 'flex',\r\n    minHeight: 40,\r\n  },\r\n  list: {\r\n    overflowY: 'auto',\r\n    width: '100%',\r\n  },\r\n  fieldArea: {\r\n    margin: theme.spacing(1),\r\n    marginTop: 0,\r\n  },\r\n  itemSelectedNotMultiple: {\r\n    background: lighten(theme.palette.primary.light, 0.5),\r\n  },\r\n  itemMultipleCheckbox: {\r\n    width: 24,\r\n    height: 24,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n  itemSingleRadio: {\r\n    width: 24,\r\n    height: 24,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n})\r\n\r\nconst OptionSingle = ({ option, viewType, selected, classes }) => {\r\n  switch (viewType) {\r\n    case ViewType.RADIO:\r\n      return (\r\n        <span>\r\n          <Radio checked={selected} color=\"primary\" className={classes.itemSingleRadio} />\r\n          &nbsp;\r\n          {option.label}\r\n        </span>\r\n      )\r\n\r\n    default:\r\n      return <span>{option.label}</span>\r\n  }\r\n}\r\n\r\nconst Option = ({ option, optionRenderer, multiple, selected, viewType, classes, onClick }) => (\r\n  <ListItem\r\n    className={clsx({\r\n      [classes.itemSelectedNotMultiple]: selected && !multiple && viewType !== ViewType.RADIO,\r\n    })}\r\n    button\r\n    onClick={onClick}\r\n    disabled={option.disabled}\r\n  >\r\n    {optionRenderer ? (\r\n      optionRenderer(option)\r\n    ) : multiple ? (\r\n      <React.Fragment>\r\n        <Checkbox checked={selected} color=\"primary\" className={classes.itemMultipleCheckbox} />\r\n        {option.label}\r\n      </React.Fragment>\r\n    ) : (\r\n      <OptionSingle viewType={viewType} option={option} classes={classes} selected={selected} />\r\n    )}\r\n  </ListItem>\r\n)\r\n\r\n/**\r\n * View that display the content of the select view:\r\n * - a text field to search on the list (query)\r\n * - the list. It is filtered if there is any query\r\n */\r\nconst Body = ({\r\n  classes,\r\n  values,\r\n  comparator,\r\n  hasOptions,\r\n  filteredOptions,\r\n  query,\r\n  isFetching,\r\n  multiple,\r\n  onSelect,\r\n  handleQueryChange,\r\n  disableSearch,\r\n  paging,\r\n  onLoadMore,\r\n  viewType,\r\n}) => (\r\n  <div className={classes.body}>\r\n    {!disableSearch && (\r\n      <div className={classes.fieldArea}>\r\n        <TextField\r\n          autoComplete=\"off\"\r\n          autoFocus\r\n          label={tr('global.list_chooser.search')}\r\n          value={query}\r\n          onChange={handleQueryChange}\r\n          margin=\"normal\"\r\n          onKeyPress={event => {\r\n            // handle key enter press\r\n            if (event.key === 'Enter') {\r\n              event.preventDefault()\r\n              if (!isEmpty(filteredOptions)) {\r\n                onSelect(filteredOptions[0].value)\r\n              }\r\n            }\r\n          }}\r\n        />\r\n      </div>\r\n    )}\r\n\r\n    <div className={classes.listContainer}>\r\n      <LoadingBlock show={isFetching}>\r\n        {!hasOptions ? (\r\n          <div>\r\n            <Typography variant=\"caption\">{tr('global.list_chooser.no_data_available')}</Typography>\r\n          </div>\r\n        ) : isEmpty(filteredOptions) ? (\r\n          isEmpty(query) ? (\r\n            <div>\r\n              <Typography variant=\"caption\">{tr('global.list_chooser.search')}</Typography>\r\n            </div>\r\n          ) : (\r\n            <Typography variant=\"caption\">{tr('global.list_chooser.no_results')}</Typography>\r\n          )\r\n        ) : (\r\n          <List className={classes.list}>\r\n            {filteredOptions.map((option, index) => (\r\n              <Option\r\n                key={isObject(option.value) ? index : option.value}\r\n                classes={classes}\r\n                multiple={multiple}\r\n                option={option}\r\n                viewType={viewType}\r\n                selected={\r\n                  find(values, value => {\r\n                    if (!value) {\r\n                      // if value is null we check the option value is null\r\n                      return !option.value\r\n                    }\r\n\r\n                    // use comparator if exists and there is a value (avoir to check null on the\r\n                    // comparator)\r\n                    if (comparator && value) {\r\n                      return comparator(option.value, value)\r\n                    }\r\n\r\n                    if (value && value.id && option.value.id) {\r\n                      return value.id === option.value.id\r\n                    }\r\n\r\n                    return option.value === value\r\n                  }) !== undefined\r\n                }\r\n                onClick={() => onSelect(option.value)}\r\n              />\r\n            ))}\r\n          </List>\r\n        )}\r\n      </LoadingBlock>\r\n    </div>\r\n\r\n    <Pagination paging={paging} onLoadMore={onLoadMore} />\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(Body)\r\n","import React from 'react'\r\n\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\n/**\r\n * Content header view.\r\n * Display the title of the select view.\r\n */\r\nconst Header = ({ title }) =>\r\n  !title ? null : (\r\n    <Typography variant=\"body2\" component=\"header\">\r\n      {title}\r\n    </Typography>\r\n  )\r\n\r\nexport default Header\r\n","/*!\n * Fuse.js v3.2.1 - Lightweight fuzzy-search (http://fusejs.io)\n * \n * Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Fuse\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Fuse\"] = factory();\n\telse\n\t\troot[\"Fuse\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 8);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (obj) {\n  return !Array.isArray ? Object.prototype.toString.call(obj) === '[object Array]' : Array.isArray(obj);\n};\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar bitapRegexSearch = __webpack_require__(5);\nvar bitapSearch = __webpack_require__(7);\nvar patternAlphabet = __webpack_require__(4);\n\nvar Bitap = function () {\n  function Bitap(pattern, _ref) {\n    var _ref$location = _ref.location,\n        location = _ref$location === undefined ? 0 : _ref$location,\n        _ref$distance = _ref.distance,\n        distance = _ref$distance === undefined ? 100 : _ref$distance,\n        _ref$threshold = _ref.threshold,\n        threshold = _ref$threshold === undefined ? 0.6 : _ref$threshold,\n        _ref$maxPatternLength = _ref.maxPatternLength,\n        maxPatternLength = _ref$maxPatternLength === undefined ? 32 : _ref$maxPatternLength,\n        _ref$isCaseSensitive = _ref.isCaseSensitive,\n        isCaseSensitive = _ref$isCaseSensitive === undefined ? false : _ref$isCaseSensitive,\n        _ref$tokenSeparator = _ref.tokenSeparator,\n        tokenSeparator = _ref$tokenSeparator === undefined ? / +/g : _ref$tokenSeparator,\n        _ref$findAllMatches = _ref.findAllMatches,\n        findAllMatches = _ref$findAllMatches === undefined ? false : _ref$findAllMatches,\n        _ref$minMatchCharLeng = _ref.minMatchCharLength,\n        minMatchCharLength = _ref$minMatchCharLeng === undefined ? 1 : _ref$minMatchCharLeng;\n\n    _classCallCheck(this, Bitap);\n\n    this.options = {\n      location: location,\n      distance: distance,\n      threshold: threshold,\n      maxPatternLength: maxPatternLength,\n      isCaseSensitive: isCaseSensitive,\n      tokenSeparator: tokenSeparator,\n      findAllMatches: findAllMatches,\n      minMatchCharLength: minMatchCharLength\n    };\n\n    this.pattern = this.options.isCaseSensitive ? pattern : pattern.toLowerCase();\n\n    if (this.pattern.length <= maxPatternLength) {\n      this.patternAlphabet = patternAlphabet(this.pattern);\n    }\n  }\n\n  _createClass(Bitap, [{\n    key: 'search',\n    value: function search(text) {\n      if (!this.options.isCaseSensitive) {\n        text = text.toLowerCase();\n      }\n\n      // Exact match\n      if (this.pattern === text) {\n        return {\n          isMatch: true,\n          score: 0,\n          matchedIndices: [[0, text.length - 1]]\n        };\n      }\n\n      // When pattern length is greater than the machine word length, just do a a regex comparison\n      var _options = this.options,\n          maxPatternLength = _options.maxPatternLength,\n          tokenSeparator = _options.tokenSeparator;\n\n      if (this.pattern.length > maxPatternLength) {\n        return bitapRegexSearch(text, this.pattern, tokenSeparator);\n      }\n\n      // Otherwise, use Bitap algorithm\n      var _options2 = this.options,\n          location = _options2.location,\n          distance = _options2.distance,\n          threshold = _options2.threshold,\n          findAllMatches = _options2.findAllMatches,\n          minMatchCharLength = _options2.minMatchCharLength;\n\n      return bitapSearch(text, this.pattern, this.patternAlphabet, {\n        location: location,\n        distance: distance,\n        threshold: threshold,\n        findAllMatches: findAllMatches,\n        minMatchCharLength: minMatchCharLength\n      });\n    }\n  }]);\n\n  return Bitap;\n}();\n\n// let x = new Bitap(\"od mn war\", {})\n// let result = x.search(\"Old Man's War\")\n// console.log(result)\n\nmodule.exports = Bitap;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isArray = __webpack_require__(0);\n\nvar deepValue = function deepValue(obj, path, list) {\n  if (!path) {\n    // If there's no path left, we've gotten to the object we care about.\n    list.push(obj);\n  } else {\n    var dotIndex = path.indexOf('.');\n    var firstSegment = path;\n    var remaining = null;\n\n    if (dotIndex !== -1) {\n      firstSegment = path.slice(0, dotIndex);\n      remaining = path.slice(dotIndex + 1);\n    }\n\n    var value = obj[firstSegment];\n\n    if (value !== null && value !== undefined) {\n      if (!remaining && (typeof value === 'string' || typeof value === 'number')) {\n        list.push(value.toString());\n      } else if (isArray(value)) {\n        // Search each item in the array.\n        for (var i = 0, len = value.length; i < len; i += 1) {\n          deepValue(value[i], remaining, list);\n        }\n      } else if (remaining) {\n        // An object. Recurse further.\n        deepValue(value, remaining, list);\n      }\n    }\n  }\n\n  return list;\n};\n\nmodule.exports = function (obj, path) {\n  return deepValue(obj, path, []);\n};\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function () {\n  var matchmask = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var minMatchCharLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n  var matchedIndices = [];\n  var start = -1;\n  var end = -1;\n  var i = 0;\n\n  for (var len = matchmask.length; i < len; i += 1) {\n    var match = matchmask[i];\n    if (match && start === -1) {\n      start = i;\n    } else if (!match && start !== -1) {\n      end = i - 1;\n      if (end - start + 1 >= minMatchCharLength) {\n        matchedIndices.push([start, end]);\n      }\n      start = -1;\n    }\n  }\n\n  // (i-1 - start) + 1 => i - start\n  if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n    matchedIndices.push([start, i - 1]);\n  }\n\n  return matchedIndices;\n};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (pattern) {\n  var mask = {};\n  var len = pattern.length;\n\n  for (var i = 0; i < len; i += 1) {\n    mask[pattern.charAt(i)] = 0;\n  }\n\n  for (var _i = 0; _i < len; _i += 1) {\n    mask[pattern.charAt(_i)] |= 1 << len - _i - 1;\n  }\n\n  return mask;\n};\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar SPECIAL_CHARS_REGEX = /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g;\n\nmodule.exports = function (text, pattern) {\n  var tokenSeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : / +/g;\n\n  var regex = new RegExp(pattern.replace(SPECIAL_CHARS_REGEX, '\\\\$&').replace(tokenSeparator, '|'));\n  var matches = text.match(regex);\n  var isMatch = !!matches;\n  var matchedIndices = [];\n\n  if (isMatch) {\n    for (var i = 0, matchesLen = matches.length; i < matchesLen; i += 1) {\n      var match = matches[i];\n      matchedIndices.push([text.indexOf(match), match.length - 1]);\n    }\n  }\n\n  return {\n    // TODO: revisit this score\n    score: isMatch ? 0.5 : 1,\n    isMatch: isMatch,\n    matchedIndices: matchedIndices\n  };\n};\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (pattern, _ref) {\n  var _ref$errors = _ref.errors,\n      errors = _ref$errors === undefined ? 0 : _ref$errors,\n      _ref$currentLocation = _ref.currentLocation,\n      currentLocation = _ref$currentLocation === undefined ? 0 : _ref$currentLocation,\n      _ref$expectedLocation = _ref.expectedLocation,\n      expectedLocation = _ref$expectedLocation === undefined ? 0 : _ref$expectedLocation,\n      _ref$distance = _ref.distance,\n      distance = _ref$distance === undefined ? 100 : _ref$distance;\n\n  var accuracy = errors / pattern.length;\n  var proximity = Math.abs(expectedLocation - currentLocation);\n\n  if (!distance) {\n    // Dodge divide by zero error.\n    return proximity ? 1.0 : accuracy;\n  }\n\n  return accuracy + proximity / distance;\n};\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bitapScore = __webpack_require__(6);\nvar matchedIndices = __webpack_require__(3);\n\nmodule.exports = function (text, pattern, patternAlphabet, _ref) {\n  var _ref$location = _ref.location,\n      location = _ref$location === undefined ? 0 : _ref$location,\n      _ref$distance = _ref.distance,\n      distance = _ref$distance === undefined ? 100 : _ref$distance,\n      _ref$threshold = _ref.threshold,\n      threshold = _ref$threshold === undefined ? 0.6 : _ref$threshold,\n      _ref$findAllMatches = _ref.findAllMatches,\n      findAllMatches = _ref$findAllMatches === undefined ? false : _ref$findAllMatches,\n      _ref$minMatchCharLeng = _ref.minMatchCharLength,\n      minMatchCharLength = _ref$minMatchCharLeng === undefined ? 1 : _ref$minMatchCharLeng;\n\n  var expectedLocation = location;\n  // Set starting location at beginning text and initialize the alphabet.\n  var textLen = text.length;\n  // Highest score beyond which we give up.\n  var currentThreshold = threshold;\n  // Is there a nearby exact match? (speedup)\n  var bestLocation = text.indexOf(pattern, expectedLocation);\n\n  var patternLen = pattern.length;\n\n  // a mask of the matches\n  var matchMask = [];\n  for (var i = 0; i < textLen; i += 1) {\n    matchMask[i] = 0;\n  }\n\n  if (bestLocation !== -1) {\n    var score = bitapScore(pattern, {\n      errors: 0,\n      currentLocation: bestLocation,\n      expectedLocation: expectedLocation,\n      distance: distance\n    });\n    currentThreshold = Math.min(score, currentThreshold);\n\n    // What about in the other direction? (speed up)\n    bestLocation = text.lastIndexOf(pattern, expectedLocation + patternLen);\n\n    if (bestLocation !== -1) {\n      var _score = bitapScore(pattern, {\n        errors: 0,\n        currentLocation: bestLocation,\n        expectedLocation: expectedLocation,\n        distance: distance\n      });\n      currentThreshold = Math.min(_score, currentThreshold);\n    }\n  }\n\n  // Reset the best location\n  bestLocation = -1;\n\n  var lastBitArr = [];\n  var finalScore = 1;\n  var binMax = patternLen + textLen;\n\n  var mask = 1 << patternLen - 1;\n\n  for (var _i = 0; _i < patternLen; _i += 1) {\n    // Scan for the best match; each iteration allows for one more error.\n    // Run a binary search to determine how far from the match location we can stray\n    // at this error level.\n    var binMin = 0;\n    var binMid = binMax;\n\n    while (binMin < binMid) {\n      var _score3 = bitapScore(pattern, {\n        errors: _i,\n        currentLocation: expectedLocation + binMid,\n        expectedLocation: expectedLocation,\n        distance: distance\n      });\n\n      if (_score3 <= currentThreshold) {\n        binMin = binMid;\n      } else {\n        binMax = binMid;\n      }\n\n      binMid = Math.floor((binMax - binMin) / 2 + binMin);\n    }\n\n    // Use the result from this iteration as the maximum for the next.\n    binMax = binMid;\n\n    var start = Math.max(1, expectedLocation - binMid + 1);\n    var finish = findAllMatches ? textLen : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n    // Initialize the bit array\n    var bitArr = Array(finish + 2);\n\n    bitArr[finish + 1] = (1 << _i) - 1;\n\n    for (var j = finish; j >= start; j -= 1) {\n      var currentLocation = j - 1;\n      var charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n      if (charMatch) {\n        matchMask[currentLocation] = 1;\n      }\n\n      // First pass: exact match\n      bitArr[j] = (bitArr[j + 1] << 1 | 1) & charMatch;\n\n      // Subsequent passes: fuzzy match\n      if (_i !== 0) {\n        bitArr[j] |= (lastBitArr[j + 1] | lastBitArr[j]) << 1 | 1 | lastBitArr[j + 1];\n      }\n\n      if (bitArr[j] & mask) {\n        finalScore = bitapScore(pattern, {\n          errors: _i,\n          currentLocation: currentLocation,\n          expectedLocation: expectedLocation,\n          distance: distance\n        });\n\n        // This match will almost certainly be better than any existing match.\n        // But check anyway.\n        if (finalScore <= currentThreshold) {\n          // Indeed it is\n          currentThreshold = finalScore;\n          bestLocation = currentLocation;\n\n          // Already passed `loc`, downhill from here on in.\n          if (bestLocation <= expectedLocation) {\n            break;\n          }\n\n          // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n          start = Math.max(1, 2 * expectedLocation - bestLocation);\n        }\n      }\n    }\n\n    // No hope for a (better) match at greater error levels.\n    var _score2 = bitapScore(pattern, {\n      errors: _i + 1,\n      currentLocation: expectedLocation,\n      expectedLocation: expectedLocation,\n      distance: distance\n    });\n\n    // console.log('score', score, finalScore)\n\n    if (_score2 > currentThreshold) {\n      break;\n    }\n\n    lastBitArr = bitArr;\n  }\n\n  // console.log('FINAL SCORE', finalScore)\n\n  // Count exact matches (those with a score of 0) to be \"almost\" exact\n  return {\n    isMatch: bestLocation >= 0,\n    score: finalScore === 0 ? 0.001 : finalScore,\n    matchedIndices: matchedIndices(matchMask, minMatchCharLength)\n  };\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Bitap = __webpack_require__(1);\nvar deepValue = __webpack_require__(2);\nvar isArray = __webpack_require__(0);\n\nvar Fuse = function () {\n  function Fuse(list, _ref) {\n    var _ref$location = _ref.location,\n        location = _ref$location === undefined ? 0 : _ref$location,\n        _ref$distance = _ref.distance,\n        distance = _ref$distance === undefined ? 100 : _ref$distance,\n        _ref$threshold = _ref.threshold,\n        threshold = _ref$threshold === undefined ? 0.6 : _ref$threshold,\n        _ref$maxPatternLength = _ref.maxPatternLength,\n        maxPatternLength = _ref$maxPatternLength === undefined ? 32 : _ref$maxPatternLength,\n        _ref$caseSensitive = _ref.caseSensitive,\n        caseSensitive = _ref$caseSensitive === undefined ? false : _ref$caseSensitive,\n        _ref$tokenSeparator = _ref.tokenSeparator,\n        tokenSeparator = _ref$tokenSeparator === undefined ? / +/g : _ref$tokenSeparator,\n        _ref$findAllMatches = _ref.findAllMatches,\n        findAllMatches = _ref$findAllMatches === undefined ? false : _ref$findAllMatches,\n        _ref$minMatchCharLeng = _ref.minMatchCharLength,\n        minMatchCharLength = _ref$minMatchCharLeng === undefined ? 1 : _ref$minMatchCharLeng,\n        _ref$id = _ref.id,\n        id = _ref$id === undefined ? null : _ref$id,\n        _ref$keys = _ref.keys,\n        keys = _ref$keys === undefined ? [] : _ref$keys,\n        _ref$shouldSort = _ref.shouldSort,\n        shouldSort = _ref$shouldSort === undefined ? true : _ref$shouldSort,\n        _ref$getFn = _ref.getFn,\n        getFn = _ref$getFn === undefined ? deepValue : _ref$getFn,\n        _ref$sortFn = _ref.sortFn,\n        sortFn = _ref$sortFn === undefined ? function (a, b) {\n      return a.score - b.score;\n    } : _ref$sortFn,\n        _ref$tokenize = _ref.tokenize,\n        tokenize = _ref$tokenize === undefined ? false : _ref$tokenize,\n        _ref$matchAllTokens = _ref.matchAllTokens,\n        matchAllTokens = _ref$matchAllTokens === undefined ? false : _ref$matchAllTokens,\n        _ref$includeMatches = _ref.includeMatches,\n        includeMatches = _ref$includeMatches === undefined ? false : _ref$includeMatches,\n        _ref$includeScore = _ref.includeScore,\n        includeScore = _ref$includeScore === undefined ? false : _ref$includeScore,\n        _ref$verbose = _ref.verbose,\n        verbose = _ref$verbose === undefined ? false : _ref$verbose;\n\n    _classCallCheck(this, Fuse);\n\n    this.options = {\n      location: location,\n      distance: distance,\n      threshold: threshold,\n      maxPatternLength: maxPatternLength,\n      isCaseSensitive: caseSensitive,\n      tokenSeparator: tokenSeparator,\n      findAllMatches: findAllMatches,\n      minMatchCharLength: minMatchCharLength,\n      id: id,\n      keys: keys,\n      includeMatches: includeMatches,\n      includeScore: includeScore,\n      shouldSort: shouldSort,\n      getFn: getFn,\n      sortFn: sortFn,\n      verbose: verbose,\n      tokenize: tokenize,\n      matchAllTokens: matchAllTokens\n    };\n\n    this.setCollection(list);\n  }\n\n  _createClass(Fuse, [{\n    key: 'setCollection',\n    value: function setCollection(list) {\n      this.list = list;\n      return list;\n    }\n  }, {\n    key: 'search',\n    value: function search(pattern) {\n      this._log('---------\\nSearch pattern: \"' + pattern + '\"');\n\n      var _prepareSearchers2 = this._prepareSearchers(pattern),\n          tokenSearchers = _prepareSearchers2.tokenSearchers,\n          fullSearcher = _prepareSearchers2.fullSearcher;\n\n      var _search2 = this._search(tokenSearchers, fullSearcher),\n          weights = _search2.weights,\n          results = _search2.results;\n\n      this._computeScore(weights, results);\n\n      if (this.options.shouldSort) {\n        this._sort(results);\n      }\n\n      return this._format(results);\n    }\n  }, {\n    key: '_prepareSearchers',\n    value: function _prepareSearchers() {\n      var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n      var tokenSearchers = [];\n\n      if (this.options.tokenize) {\n        // Tokenize on the separator\n        var tokens = pattern.split(this.options.tokenSeparator);\n        for (var i = 0, len = tokens.length; i < len; i += 1) {\n          tokenSearchers.push(new Bitap(tokens[i], this.options));\n        }\n      }\n\n      var fullSearcher = new Bitap(pattern, this.options);\n\n      return { tokenSearchers: tokenSearchers, fullSearcher: fullSearcher };\n    }\n  }, {\n    key: '_search',\n    value: function _search() {\n      var tokenSearchers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var fullSearcher = arguments[1];\n\n      var list = this.list;\n      var resultMap = {};\n      var results = [];\n\n      // Check the first item in the list, if it's a string, then we assume\n      // that every item in the list is also a string, and thus it's a flattened array.\n      if (typeof list[0] === 'string') {\n        // Iterate over every item\n        for (var i = 0, len = list.length; i < len; i += 1) {\n          this._analyze({\n            key: '',\n            value: list[i],\n            record: i,\n            index: i\n          }, {\n            resultMap: resultMap,\n            results: results,\n            tokenSearchers: tokenSearchers,\n            fullSearcher: fullSearcher\n          });\n        }\n\n        return { weights: null, results: results };\n      }\n\n      // Otherwise, the first item is an Object (hopefully), and thus the searching\n      // is done on the values of the keys of each item.\n      var weights = {};\n      for (var _i = 0, _len = list.length; _i < _len; _i += 1) {\n        var item = list[_i];\n        // Iterate over every key\n        for (var j = 0, keysLen = this.options.keys.length; j < keysLen; j += 1) {\n          var key = this.options.keys[j];\n          if (typeof key !== 'string') {\n            weights[key.name] = {\n              weight: 1 - key.weight || 1\n            };\n            if (key.weight <= 0 || key.weight > 1) {\n              throw new Error('Key weight has to be > 0 and <= 1');\n            }\n            key = key.name;\n          } else {\n            weights[key] = {\n              weight: 1\n            };\n          }\n\n          this._analyze({\n            key: key,\n            value: this.options.getFn(item, key),\n            record: item,\n            index: _i\n          }, {\n            resultMap: resultMap,\n            results: results,\n            tokenSearchers: tokenSearchers,\n            fullSearcher: fullSearcher\n          });\n        }\n      }\n\n      return { weights: weights, results: results };\n    }\n  }, {\n    key: '_analyze',\n    value: function _analyze(_ref2, _ref3) {\n      var key = _ref2.key,\n          _ref2$arrayIndex = _ref2.arrayIndex,\n          arrayIndex = _ref2$arrayIndex === undefined ? -1 : _ref2$arrayIndex,\n          value = _ref2.value,\n          record = _ref2.record,\n          index = _ref2.index;\n      var _ref3$tokenSearchers = _ref3.tokenSearchers,\n          tokenSearchers = _ref3$tokenSearchers === undefined ? [] : _ref3$tokenSearchers,\n          _ref3$fullSearcher = _ref3.fullSearcher,\n          fullSearcher = _ref3$fullSearcher === undefined ? [] : _ref3$fullSearcher,\n          _ref3$resultMap = _ref3.resultMap,\n          resultMap = _ref3$resultMap === undefined ? {} : _ref3$resultMap,\n          _ref3$results = _ref3.results,\n          results = _ref3$results === undefined ? [] : _ref3$results;\n\n      // Check if the texvaluet can be searched\n      if (value === undefined || value === null) {\n        return;\n      }\n\n      var exists = false;\n      var averageScore = -1;\n      var numTextMatches = 0;\n\n      if (typeof value === 'string') {\n        this._log('\\nKey: ' + (key === '' ? '-' : key));\n\n        var mainSearchResult = fullSearcher.search(value);\n        this._log('Full text: \"' + value + '\", score: ' + mainSearchResult.score);\n\n        if (this.options.tokenize) {\n          var words = value.split(this.options.tokenSeparator);\n          var scores = [];\n\n          for (var i = 0; i < tokenSearchers.length; i += 1) {\n            var tokenSearcher = tokenSearchers[i];\n\n            this._log('\\nPattern: \"' + tokenSearcher.pattern + '\"');\n\n            // let tokenScores = []\n            var hasMatchInText = false;\n\n            for (var j = 0; j < words.length; j += 1) {\n              var word = words[j];\n              var tokenSearchResult = tokenSearcher.search(word);\n              var obj = {};\n              if (tokenSearchResult.isMatch) {\n                obj[word] = tokenSearchResult.score;\n                exists = true;\n                hasMatchInText = true;\n                scores.push(tokenSearchResult.score);\n              } else {\n                obj[word] = 1;\n                if (!this.options.matchAllTokens) {\n                  scores.push(1);\n                }\n              }\n              this._log('Token: \"' + word + '\", score: ' + obj[word]);\n              // tokenScores.push(obj)\n            }\n\n            if (hasMatchInText) {\n              numTextMatches += 1;\n            }\n          }\n\n          averageScore = scores[0];\n          var scoresLen = scores.length;\n          for (var _i2 = 1; _i2 < scoresLen; _i2 += 1) {\n            averageScore += scores[_i2];\n          }\n          averageScore = averageScore / scoresLen;\n\n          this._log('Token score average:', averageScore);\n        }\n\n        var finalScore = mainSearchResult.score;\n        if (averageScore > -1) {\n          finalScore = (finalScore + averageScore) / 2;\n        }\n\n        this._log('Score average:', finalScore);\n\n        var checkTextMatches = this.options.tokenize && this.options.matchAllTokens ? numTextMatches >= tokenSearchers.length : true;\n\n        this._log('\\nCheck Matches: ' + checkTextMatches);\n\n        // If a match is found, add the item to <rawResults>, including its score\n        if ((exists || mainSearchResult.isMatch) && checkTextMatches) {\n          // Check if the item already exists in our results\n          var existingResult = resultMap[index];\n          if (existingResult) {\n            // Use the lowest score\n            // existingResult.score, bitapResult.score\n            existingResult.output.push({\n              key: key,\n              arrayIndex: arrayIndex,\n              value: value,\n              score: finalScore,\n              matchedIndices: mainSearchResult.matchedIndices\n            });\n          } else {\n            // Add it to the raw result list\n            resultMap[index] = {\n              item: record,\n              output: [{\n                key: key,\n                arrayIndex: arrayIndex,\n                value: value,\n                score: finalScore,\n                matchedIndices: mainSearchResult.matchedIndices\n              }]\n            };\n\n            results.push(resultMap[index]);\n          }\n        }\n      } else if (isArray(value)) {\n        for (var _i3 = 0, len = value.length; _i3 < len; _i3 += 1) {\n          this._analyze({\n            key: key,\n            arrayIndex: _i3,\n            value: value[_i3],\n            record: record,\n            index: index\n          }, {\n            resultMap: resultMap,\n            results: results,\n            tokenSearchers: tokenSearchers,\n            fullSearcher: fullSearcher\n          });\n        }\n      }\n    }\n  }, {\n    key: '_computeScore',\n    value: function _computeScore(weights, results) {\n      this._log('\\n\\nComputing score:\\n');\n\n      for (var i = 0, len = results.length; i < len; i += 1) {\n        var output = results[i].output;\n        var scoreLen = output.length;\n\n        var currScore = 1;\n        var bestScore = 1;\n\n        for (var j = 0; j < scoreLen; j += 1) {\n          var weight = weights ? weights[output[j].key].weight : 1;\n          var score = weight === 1 ? output[j].score : output[j].score || 0.001;\n          var nScore = score * weight;\n\n          if (weight !== 1) {\n            bestScore = Math.min(bestScore, nScore);\n          } else {\n            output[j].nScore = nScore;\n            currScore *= nScore;\n          }\n        }\n\n        results[i].score = bestScore === 1 ? currScore : bestScore;\n\n        this._log(results[i]);\n      }\n    }\n  }, {\n    key: '_sort',\n    value: function _sort(results) {\n      this._log('\\n\\nSorting....');\n      results.sort(this.options.sortFn);\n    }\n  }, {\n    key: '_format',\n    value: function _format(results) {\n      var finalOutput = [];\n\n      if (this.options.verbose) {\n        this._log('\\n\\nOutput:\\n\\n', JSON.stringify(results));\n      }\n\n      var transformers = [];\n\n      if (this.options.includeMatches) {\n        transformers.push(function (result, data) {\n          var output = result.output;\n          data.matches = [];\n\n          for (var i = 0, len = output.length; i < len; i += 1) {\n            var item = output[i];\n\n            if (item.matchedIndices.length === 0) {\n              continue;\n            }\n\n            var obj = {\n              indices: item.matchedIndices,\n              value: item.value\n            };\n            if (item.key) {\n              obj.key = item.key;\n            }\n            if (item.hasOwnProperty('arrayIndex') && item.arrayIndex > -1) {\n              obj.arrayIndex = item.arrayIndex;\n            }\n            data.matches.push(obj);\n          }\n        });\n      }\n\n      if (this.options.includeScore) {\n        transformers.push(function (result, data) {\n          data.score = result.score;\n        });\n      }\n\n      for (var i = 0, len = results.length; i < len; i += 1) {\n        var result = results[i];\n\n        if (this.options.id) {\n          result.item = this.options.getFn(result.item, this.options.id)[0];\n        }\n\n        if (!transformers.length) {\n          finalOutput.push(result.item);\n          continue;\n        }\n\n        var data = {\n          item: result.item\n        };\n\n        for (var j = 0, _len2 = transformers.length; j < _len2; j += 1) {\n          transformers[j](result, data);\n        }\n\n        finalOutput.push(data);\n      }\n\n      return finalOutput;\n    }\n  }, {\n    key: '_log',\n    value: function _log() {\n      if (this.options.verbose) {\n        var _console;\n\n        (_console = console).log.apply(_console, arguments);\n      }\n    }\n  }]);\n\n  return Fuse;\n}();\n\nmodule.exports = Fuse;\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=fuse.js.map","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isArray from 'lodash/isArray'\r\n\r\nimport invariant from 'invariant'\r\n\r\nimport { compose } from 'redux'\r\nimport withWidth from 'pmt-ui/utils/withWidth'\r\n\r\nimport PopoverView from './PopoverView'\r\nimport DialogView from './DialogView'\r\n\r\nimport ListChooserType from './ListChooserType'\r\nimport Body from './components/Body'\r\nimport Header from './components/Header'\r\nimport isString from 'lodash/isString'\r\n\r\n//could be dynamically imported if we want to reduce the bundle size,\r\n// but it is used in the render method, so /!\\ to not slow it down\r\nimport Fuse from 'pmt-utils/fuse'\r\n\r\nconst showAsPopoverBreakpoints = ['md', 'lg', 'xl']\r\n\r\nclass Content extends React.Component {\r\n  state = {\r\n    query: '',\r\n  }\r\n\r\n  shouldComponentUpdate(nextProps, nextState) {\r\n    return (\r\n      nextProps.open !== this.props.open ||\r\n      nextProps.value !== this.props.value ||\r\n      nextProps.options !== this.props.options ||\r\n      nextProps.isFetching !== this.props.isFetching ||\r\n      nextState.query !== this.state.query ||\r\n      nextProps.paging !== this.props.paging\r\n    )\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (!this.props.open && nextProps.open) {\r\n      // reset query if open the dialog\r\n      this.setState({\r\n        query: '',\r\n      })\r\n    }\r\n  }\r\n\r\n  getForType(type, viewProps) {\r\n    switch (type) {\r\n      case ListChooserType.POPOVER:\r\n        return <PopoverView {...viewProps} />\r\n\r\n      case ListChooserType.DIALOG:\r\n        return <DialogView {...viewProps} />\r\n\r\n      default:\r\n        invariant(false, `invalid ListChooserType ${type}`)\r\n    }\r\n  }\r\n\r\n  handleQueryChange = event => {\r\n    this.setState({\r\n      query: event.target.value,\r\n    })\r\n\r\n    if (this.props.onQueryChange) {\r\n      this.props.onQueryChange(event.target.value)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const props = this.props\r\n\r\n    let values = props.values || props.value\r\n\r\n    // transform to array\r\n    if (!isArray(values)) {\r\n      values = [values]\r\n    }\r\n\r\n    let filteredOptions = props.options\r\n\r\n    if (this.state.query.length > 0 && !this.props.disableFiltering) {\r\n      if (this.props.filteringWithContains) {\r\n        // \"contains\" search\r\n        filteredOptions = props.options.filter(\r\n          o =>\r\n            (o.value && isString(o.value) && o.value.includes(this.state.query)) ||\r\n            (o.label && isString(o.label) && o.label.includes(this.state.query)) ||\r\n            (o.search && isString(o.search) && o.search.includes(this.state.query))\r\n        )\r\n      } else {\r\n        // approximative search\r\n        const fuseOptions = {\r\n          shouldSort: true,\r\n          threshold: 0.6,\r\n          location: 0,\r\n          findAllMatches: false,\r\n          distance: 50,\r\n          maxPatternLength: 32,\r\n          minMatchCharLength: 1,\r\n          keys: ['label', 'value', 'search'],\r\n        }\r\n\r\n        // see https://sentry.io/share/issue/6924fc536e934857ba95ee033a45311e/\r\n        if (process.env.FEATURE_FUSE && !isEmpty(props.options)) {\r\n          const fuse = new Fuse(props.options, fuseOptions)\r\n          filteredOptions = fuse.search(this.state.query)\r\n        }\r\n      }\r\n    }\r\n\r\n    const viewProps = {\r\n      open: props.open,\r\n      anchorEl: props.anchorEl,\r\n      onClose: props.onClose,\r\n      header: props.title || props.label ? <Header title={props.title || props.label} /> : null,\r\n      content: (\r\n        <Body\r\n          values={values}\r\n          hasOptions={!isEmpty(props.options)}\r\n          filteredOptions={filteredOptions}\r\n          comparator={props.comparator}\r\n          query={this.state.query}\r\n          onSelect={props.onSelect}\r\n          handleQueryChange={this.handleQueryChange}\r\n          isFetching={props.isFetching}\r\n          disableSearch={props.disableSearch}\r\n          paging={props.paging}\r\n          onLoadMore={props.onLoadMore}\r\n          multiple={props.multiple}\r\n          viewType={props.viewType}\r\n        />\r\n      ),\r\n    }\r\n\r\n    const type = props.type\r\n\r\n    if (type !== null) {\r\n      return this.getForType(type, viewProps)\r\n    } else {\r\n      // on desktop, display as popover\r\n      if (showAsPopoverBreakpoints.indexOf(props.width) !== -1) {\r\n        return this.getForType(ListChooserType.POPOVER, viewProps)\r\n      }\r\n\r\n      return this.getForType(ListChooserType.DIALOG, viewProps)\r\n    }\r\n  }\r\n}\r\n\r\nContent.propTypes = {\r\n  /**\r\n   *\r\n   */\r\n  open: PropTypes.bool.isRequired,\r\n\r\n  /**\r\n   * Dom node of the element that displayed the content\r\n   */\r\n  anchorEl: PropTypes.object,\r\n\r\n  /**\r\n   * An optionnal title\r\n   * @type {[type]}\r\n   */\r\n  title: PropTypes.node,\r\n\r\n  /**\r\n   * Value or array of values that has been selected\r\n   */\r\n  value: PropTypes.any,\r\n\r\n  multiple: PropTypes.bool.isRequired,\r\n\r\n  /**\r\n   * Disable filtering of the list using the query state\r\n   * Set to true when the query / options filtering are handled by the parent.\r\n   */\r\n  disableFiltering: PropTypes.bool,\r\n\r\n  /**\r\n   * Switch the filtering mode to \"contains\".\r\n   * By default, false. So the filtering is done with fuse.js that makes an approximative search\r\n   */\r\n  filteringWithContains: PropTypes.bool,\r\n\r\n  /**\r\n   * Optionnal\r\n   *\r\n   * function that receive the option and returns the view to display for this option\r\n   * If not specified we display the option.label\r\n   */\r\n  optionRenderer: PropTypes.func,\r\n\r\n  /**\r\n   * Array of options to display\r\n   * {\r\n   *    label: 'label', // used for search and to be display if there is no optionRenderer prop\r\n   *    value: 0, // the value of the option\r\n   * }\r\n   */\r\n  options: PropTypes.array,\r\n\r\n  /**\r\n   * Function called when an option is selected.\r\n   * Take the option.value as parameter\r\n   */\r\n  onSelect: PropTypes.func.isRequired,\r\n\r\n  /**\r\n   * Function called when the user request to close the dialog\r\n   */\r\n  onClose: PropTypes.func.isRequired,\r\n\r\n  /**\r\n   * See ViewType\r\n   */\r\n  viewType: PropTypes.string,\r\n}\r\n\r\nexport default compose(withWidth())(Content)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet ContentClear = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\r\n  </SvgIcon>\r\n)\r\nContentClear = pure(ContentClear)\r\nContentClear.displayName = 'ContentClear'\r\nContentClear.muiName = 'SvgIcon'\r\n\r\nexport default ContentClear\r\n","\r\nconst TextFieldSuffixType = {\r\n  CLEAR: 'TextFieldSuffixType::CLEAR',\r\n}\r\n\r\nexport default TextFieldSuffixType\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport invariant from 'invariant'\r\n\r\nimport ClearIcon from 'pmt-ui/svg-icons/content/clear'\r\nimport TextField from 'pmt-ui/TextField'\r\nimport { withTheme } from 'pmt-ui/styles'\r\n\r\nimport TextFieldSuffixType from './TextFieldSuffixType'\r\n\r\nclass TextFieldCustom extends React.Component {\r\n  state = {\r\n    focus: false,\r\n  }\r\n\r\n  // Component styles.\r\n  styles = {\r\n    // Make sure the field label is on the right.\r\n    label: {\r\n      right: 0,\r\n    },\r\n    // Allow absolute positioning within the field's wrapper.\r\n    // We need this to make the prefix show inline with the field.\r\n    fieldWrapper: {\r\n      position: 'relative',\r\n      display: 'inline-block',\r\n    },\r\n    prefix: {\r\n      position: 'absolute',\r\n      right: -10,\r\n      bottom: 0,\r\n      lineHeight: '29px',\r\n      fontSize: '15px',\r\n      cursor: 'pointer',\r\n      zIndex: 200,\r\n    },\r\n    clearIcon: {\r\n      color: this.props.theme.pmt.status.inactive,\r\n    },\r\n    prefixFocus: {\r\n      color: this.props.theme.palette.primary.main,\r\n    },\r\n  }\r\n\r\n  // Handle field change event, pass name and value to the onChange callback.\r\n  handleChange = (event, index) => {\r\n    if (this.props.onChange !== null) {\r\n      // Run callback with the name and value.\r\n      this.props.onChange(this.props.name, event.target.value)\r\n    }\r\n  }\r\n\r\n  toggleFocus(focus) {\r\n    this.setState({\r\n      focus,\r\n    })\r\n  }\r\n\r\n  handleFocus = () => {\r\n    this.toggleFocus(true)\r\n  }\r\n\r\n  handleBlur = () => {\r\n    this.toggleFocus(false)\r\n  }\r\n\r\n  componentWillMount() {\r\n    if (this.props.fullWidth) {\r\n      this.styles.fieldWrapper.display = 'block'\r\n    }\r\n  }\r\n\r\n  getSuffixForType(suffixType) {\r\n    switch (suffixType) {\r\n      case TextFieldSuffixType.CLEAR:\r\n        return (\r\n          // className clearIcon is useful to hide the icon and show it only on :hover\r\n          // to define with the parent makeStyles :\r\n          // listChooser:{\r\n          //     '& .clearIcon':{\r\n          //       visibility: 'hidden',\r\n          //     },\r\n          //     '&:hover .clearIcon':{\r\n          //       visibility: 'visible',\r\n          //     }\r\n          //   }\r\n          <span className=\"clearIcon\" style={this.styles.clearIcon}>\r\n            <ClearIcon />\r\n          </span>\r\n        )\r\n\r\n      default:\r\n        invariant(false, `invalid suffixType ${suffixType}`)\r\n    }\r\n  }\r\n\r\n  // Render component.\r\n  render() {\r\n    // Optional symbol prefix, example use: currency or percentage.\r\n    // TODO: prefix is a suffix, use suffix.\r\n    let prefix = this.props.prefix || this.props.suffix || ''\r\n    const prefixStyles = this.state.focus\r\n      ? { ...this.styles.prefix, ...this.styles.prefixFocus }\r\n      : this.styles.prefix\r\n\r\n    if (this.props.suffixType) {\r\n      prefix = this.getSuffixForType(this.props.suffixType)\r\n    }\r\n\r\n    return (\r\n      <div className={this.props.className}>\r\n        <label style={this.styles.fieldWrapper}>\r\n          <TextField\r\n            type=\"text\"\r\n            onClick={this.props.onClick}\r\n            label={this.props.label}\r\n            value={this.props.value}\r\n            onChange={this.handleChange}\r\n            onFocus={this.handleFocus}\r\n            onBlur={this.handleBlur}\r\n            name={this.props.name}\r\n            fullWidth={this.props.fullWidth}\r\n            disabled={this.props.disabled || false}\r\n            helperText={this.props.helperText}\r\n            required={this.props.required}\r\n          />\r\n\r\n          {prefix ? (\r\n            <span\r\n              style={prefixStyles}\r\n              onClick={event => {\r\n                if (!this.props.disabled && this.props.onSuffixClick) {\r\n                  event.preventDefault()\r\n                  event.stopPropagation()\r\n                  this.props.onSuffixClick(event)\r\n                }\r\n              }}\r\n            >\r\n              {prefix}\r\n            </span>\r\n          ) : null}\r\n        </label>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nTextFieldCustom.defaultProps = {\r\n  onChange: null,\r\n\r\n  suffixType: null,\r\n}\r\n\r\nTextFieldCustom.propTypes = {\r\n  /**\r\n   * @deprecated\r\n   * Use suffix\r\n   */\r\n  prefix: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n\r\n  suffix: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n\r\n  /**\r\n   * Event called when clicking on the text field\r\n   * @type {[type]}\r\n   */\r\n  onClick: PropTypes.func,\r\n\r\n  onSuffixClick: PropTypes.func,\r\n\r\n  /**\r\n   * Some generic suffix can be used directly by specifing this suffixType\r\n   */\r\n  suffixType: PropTypes.oneOf([TextFieldSuffixType.CLEAR]),\r\n}\r\n\r\n// hoc delete static, so we set our static on the hoc result\r\nconst TextFieldCustomWithHOC = withTheme(TextFieldCustom)\r\n\r\nTextFieldCustomWithHOC.SuffixType = TextFieldSuffixType\r\n\r\nexport default TextFieldCustomWithHOC\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport isNull from 'lodash/isNull'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isString from 'lodash/isString'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport TextFieldCustom from 'pmt-ui/TextFieldCustom'\r\nimport Chip from 'pmt-ui/Chip'\r\nimport { InputLabel } from 'pmt-ui/Input'\r\nimport { FormControl } from 'pmt-ui/Form'\r\nimport Button from 'pmt-ui/Button'\r\nimport clsx from 'clsx'\r\n\r\nconst styles = theme => ({\r\n  multipleViewRoot: {\r\n    width: '100%',\r\n  },\r\n  chipList: {\r\n    display: 'flex',\r\n    flexWrap: 'wrap',\r\n    paddingRight: theme.spacing(3),\r\n  },\r\n  chipListWithTitle: {\r\n    padding: '6px 24px 7px 0',\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  chipListNotEmpty: {\r\n    cursor: 'pointer',\r\n  },\r\n  chip: {\r\n    margin: theme.spacing(0.25),\r\n  },\r\n  label: {\r\n    width: '100%',\r\n    top: 0,\r\n    left: 0,\r\n    position: 'absolute',\r\n    transform: 'translate(0, 1.5px) scale(0.75)',\r\n    transformOrigin: 'top left',\r\n  },\r\n  value: {\r\n    '& input': {\r\n      cursor: 'pointer',\r\n    },\r\n  },\r\n})\r\n\r\nconst MultipleView = ({\r\n  label,\r\n  isFetching, // TODO: handle isFetching\r\n  helperText, // TODO: handle helperText\r\n  disabled,\r\n  required,\r\n  valueIconFormatter,\r\n  valueFormatter,\r\n  values,\r\n  classes,\r\n  onDeleteValue,\r\n  onOpen,\r\n  emptyRender,\r\n  alwaysDisplayAddButton,\r\n}) => (\r\n  <FormControl className={classes.multipleViewRoot}>\r\n    {!isEmpty(label) && (\r\n      <InputLabel className={classes.label} disabled={disabled}>\r\n        {label}\r\n        {/* handle required field */}\r\n        {required && <span>&thinsp;*</span>}\r\n      </InputLabel>\r\n    )}\r\n    {!isEmpty(values) ? (\r\n      <div\r\n        className={clsx(classes.chipList, classes.chipListNotEmpty, {\r\n          [classes.chipListWithTitle]: !isEmpty(label),\r\n        })}\r\n        onClick={onOpen}\r\n      >\r\n        {values.map((value, index) => (\r\n          <Chip\r\n            disabled={disabled}\r\n            className={classes.chip}\r\n            icon={!isNull(valueIconFormatter) ? valueIconFormatter(value) : null}\r\n            key={`${value}_${index}`}\r\n            label={valueFormatter(value)}\r\n            onDelete={() => !disabled && onDeleteValue(value)}\r\n          />\r\n        ))}\r\n        {alwaysDisplayAddButton && (\r\n          <Button\r\n            variant=\"outlined\"\r\n            color=\"primary\"\r\n            onClick={onOpen}\r\n            className={classes.chip}\r\n            disabled={disabled}\r\n          >\r\n            {tr('global.add')}\r\n          </Button>\r\n        )}\r\n      </div>\r\n    ) : (\r\n      <div\r\n        className={clsx(classes.chipList, {\r\n          [classes.chipListWithTitle]: !isEmpty(label),\r\n        })}\r\n      >\r\n        {emptyRender}\r\n      </div>\r\n    )}\r\n  </FormControl>\r\n)\r\n\r\n/**\r\n * Default view to display for the value\r\n * if not specified, we display:\r\n * - a TextField is there is only one value possible\r\n * - a list of chips (https://material-ui-1dab0.firebaseapp.com/demos/chips/) if there is multiple\r\n *   values possible\r\n */\r\nconst ValueView = ({\r\n  label,\r\n  required,\r\n  disabled,\r\n  clearable,\r\n  value,\r\n  multiple,\r\n  valueIconFormatter = null,\r\n  valueFormatter = null,\r\n  valueFormatterHandleNullValue = false,\r\n  classes,\r\n  helperText,\r\n  isFetching,\r\n  onDeleteValue,\r\n  onOpen,\r\n  emptyRender,\r\n  alwaysDisplayAddButton,\r\n}) => {\r\n  if (multiple) {\r\n    return (\r\n      <MultipleView\r\n        label={label}\r\n        required={required}\r\n        isFetching={isFetching}\r\n        disabled={disabled}\r\n        classes={classes}\r\n        valueIconFormatter={valueIconFormatter}\r\n        valueFormatter={valueFormatter}\r\n        values={value}\r\n        onDeleteValue={onDeleteValue}\r\n        onOpen={onOpen}\r\n        helperText={helperText}\r\n        emptyRender={emptyRender}\r\n        alwaysDisplayAddButton={alwaysDisplayAddButton}\r\n      />\r\n    )\r\n  } else {\r\n    // Note: TextFieldCustom does not handle null values, we need to pass an empty value to clear\r\n    // the field\r\n    const formattedValue =\r\n      !isNull(valueFormatter) && (!isNull(value) || valueFormatterHandleNullValue)\r\n        ? valueFormatter(value)\r\n        : value || ''\r\n\r\n    if (isString(formattedValue)) {\r\n      return (\r\n        <TextFieldCustom\r\n          className={clsx('u-sizeFullWidth', classes.value)}\r\n          label={isFetching ? tr('global.loading') : label}\r\n          fullWidth\r\n          value={formattedValue}\r\n          required={required}\r\n          disabled={disabled}\r\n          onClick={onOpen}\r\n          onSuffixClick={onDeleteValue}\r\n          onChange={null}\r\n          helperText={helperText}\r\n          suffixType={clearable ? TextFieldCustom.SuffixType.CLEAR : null}\r\n        />\r\n      )\r\n    } else {\r\n      return (\r\n        <div\r\n          className=\"u-sizeFullWidth\"\r\n          style={{ display: 'inline-block', cursor: 'pointer' }}\r\n          onClick={onOpen}\r\n        >\r\n          {formattedValue}\r\n        </div>\r\n      )\r\n    }\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ValueView)\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport Button from 'pmt-ui/Button'\r\n\r\n/**\r\n * View displayed on multiple mode, when there is no value selected.\r\n */\r\nconst EmptyValue = ({ show, label = tr('global.add'), onClickOpen, disabled }) =>\r\n  !show ? null : (\r\n    <Button variant=\"outlined\" color=\"primary\" onClick={onClickOpen} disabled={disabled}>\r\n      {label}\r\n    </Button>\r\n  )\r\n\r\nexport default EmptyValue\r\n","import React from 'react'\r\n\r\nimport PropTypes from 'prop-types'\r\n// import { findDOMNode } from 'react-dom'\r\n\r\nimport isNull from 'lodash/isNull'\r\nimport isArray from 'lodash/isArray'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport invariant from 'invariant'\r\n\r\nimport { toggleArrayValue } from 'pmt-utils/array'\r\n\r\nimport Content from './Content'\r\nimport ListChooserType from './ListChooserType'\r\nimport ValueView from './components/ValueView'\r\nimport EmptyValue from './components/EmptyValue'\r\n\r\nclass ListChooser extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // ref for our root object\r\n    this.root = null\r\n\r\n    this.state = {\r\n      open: false,\r\n    }\r\n  }\r\n\r\n  handleSelect = value => {\r\n    if (this.props.disabled) {\r\n      return\r\n    }\r\n\r\n    if (!this.props.multiple) {\r\n      this.props.onChange(value)\r\n      this.handleRequestClose()\r\n    } else {\r\n      this.props.onChange(toggleArrayValue(this.props.value, value))\r\n    }\r\n  }\r\n\r\n  handleClickOpen = () => {\r\n    if (this.props.disabled) {\r\n      return\r\n    }\r\n\r\n    this.setState({\r\n      open: true,\r\n    })\r\n  }\r\n\r\n  handleRequestClose = () => {\r\n    this.setState({\r\n      open: false,\r\n    })\r\n  }\r\n\r\n  handleDeleteValue = (valueToDelete = null) => {\r\n    const values = this.props.value\r\n\r\n    if (this.props.multiple) {\r\n      const newValues = values.filter(value => value !== valueToDelete)\r\n\r\n      this.props.onChange(newValues)\r\n    } else {\r\n      // not multiple mode, erase the value\r\n      this.props.onChange(null)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      className,\r\n      label,\r\n      labelButton,\r\n      value,\r\n      children,\r\n      title,\r\n      options,\r\n      // onChange,\r\n      // error, // TODO: handle\r\n      helperText,\r\n      type,\r\n      valueIconFormatter,\r\n      valueFormatter,\r\n      valueFormatterHandleNullValue,\r\n      multiple,\r\n      required,\r\n      disableFiltering,\r\n      isFetching,\r\n      comparator,\r\n      clearable,\r\n      disableSearch,\r\n      disabled,\r\n      paging,\r\n      onLoadMore,\r\n      viewType,\r\n      alwaysDisplayAddButton,\r\n      filteringWithContains,\r\n    } = this.props\r\n\r\n    invariant(\r\n      !multiple || !isNull(valueFormatter),\r\n      `[ListChooser] '${label}' valueFormatter required for multiple mode`\r\n    )\r\n    invariant(\r\n      !multiple || isArray(value),\r\n      `[ListChooser] '${label}' value '${value}' must be an array for multiple mode`\r\n    )\r\n\r\n    return (\r\n      <div className={className} ref={ref => (this.root = ref)}>\r\n        {children ? (\r\n          children({\r\n            onOpen: this.handleClickOpen,\r\n          })\r\n        ) : (\r\n          <ValueView\r\n            disabled={disabled}\r\n            multiple={multiple}\r\n            label={label}\r\n            value={value}\r\n            helperText={helperText}\r\n            isFetching={isFetching}\r\n            valueIconFormatter={valueIconFormatter}\r\n            valueFormatter={valueFormatter}\r\n            valueFormatterHandleNullValue={valueFormatterHandleNullValue}\r\n            onDeleteValue={this.handleDeleteValue}\r\n            required={required}\r\n            clearable={clearable}\r\n            onOpen={this.handleClickOpen}\r\n            emptyRender={\r\n              <EmptyValue\r\n                show={multiple && isEmpty(value)}\r\n                label={labelButton}\r\n                onClickOpen={this.handleClickOpen}\r\n                disabled={disabled}\r\n              />\r\n            }\r\n            alwaysDisplayAddButton={alwaysDisplayAddButton}\r\n          />\r\n        )}\r\n\r\n        <Content\r\n          type={type}\r\n          //anchorEl={findDOMNode(this.root)}\r\n          anchorEl={this.root}\r\n          open={this.state.open}\r\n          title={title}\r\n          value={value}\r\n          options={(options || []).filter(Boolean)}\r\n          onQueryChange={this.props.onQueryChange}\r\n          onClose={this.handleRequestClose}\r\n          onSelect={this.handleSelect}\r\n          disableFiltering={disableFiltering}\r\n          filteringWithContains={filteringWithContains}\r\n          isFetching={isFetching}\r\n          comparator={comparator}\r\n          disableSearch={disableSearch}\r\n          paging={paging}\r\n          onLoadMore={onLoadMore}\r\n          multiple={multiple}\r\n          viewType={viewType}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nListChooser.defaultProps = {\r\n  type: null,\r\n\r\n  multiple: false,\r\n\r\n  valueFormatter: null,\r\n\r\n  valueFormatterHandleNullValue: false,\r\n\r\n  onQueryChange: null,\r\n\r\n  required: false,\r\n\r\n  disableFiltering: false,\r\n\r\n  isFetching: false,\r\n\r\n  value: null,\r\n\r\n  clearable: false,\r\n\r\n  disableSearch: false,\r\n\r\n  filteringWithContains: false,\r\n\r\n  viewType: null,\r\n\r\n  alwaysDisplayAddButton: false,\r\n}\r\n\r\nListChooser.propTypes = {\r\n  /**\r\n   * Force the type of the list chooser.\r\n   * If not specified we display as popover on desktop, and as dialog on smaller screens.\r\n   */\r\n  type: PropTypes.oneOf([ListChooserType.POPOVER, ListChooserType.DIALOG]),\r\n\r\n  /**\r\n   * Array of option object:\r\n   * {\r\n   *    label: '',\r\n   *    value: ...,\r\n   * }\r\n   */\r\n  options: PropTypes.array,\r\n\r\n  /**\r\n   * Label to display on the default children view\r\n   */\r\n  label: PropTypes.string,\r\n\r\n  helperText: PropTypes.any,\r\n\r\n  /**\r\n   * @optionnal\r\n   * Name of the list selection view (dialog / popover)\r\n   */\r\n  title: PropTypes.string,\r\n\r\n  onChange: PropTypes.func.isRequired,\r\n\r\n  multiple: PropTypes.bool,\r\n\r\n  /**\r\n   * true to display a loader.\r\n   * Used when the options are loaded on the api via the query.\r\n   */\r\n  isFetching: PropTypes.bool,\r\n\r\n  /**\r\n   * Disable filtering of the list using the query state\r\n   * Set to true when the query / options filtering are handled by the parent.\r\n   */\r\n  disableFiltering: PropTypes.bool,\r\n\r\n  /**\r\n   * Switch the filtering mode to \"contains\".\r\n   * By default, false. So the filtering is done with fuse.js that makes an approximative search\r\n   */\r\n  filteringWithContains: PropTypes.bool,\r\n\r\n  /**\r\n   * One or multiple selected values\r\n   */\r\n  value: PropTypes.oneOfType([\r\n    PropTypes.string,\r\n    PropTypes.number,\r\n    PropTypes.array,\r\n    PropTypes.object,\r\n  ]),\r\n\r\n  /**\r\n   * @optionnal\r\n   *\r\n   * View to display for the value\r\n   * Must be a function, that will receive:\r\n   * - onOpen -> function to call to open the list view\r\n   *\r\n   * if not specified, we display:\r\n   * - a TextField is there is only one value possible\r\n   * - a list of chips (https://material-ui-1dab0.firebaseapp.com/demos/chips/) if there is multiple\r\n   *   values possible\r\n   */\r\n  children: PropTypes.func,\r\n\r\n  /**\r\n   * @optionnal if not in `multiple` mode\r\n   * formatted value to display on the default children view\r\n   */\r\n  valueFormatter: PropTypes.func,\r\n\r\n  /**\r\n   * By legacy, null value will not call the valueFormatter. Set this to true to force it.\r\n   */\r\n  valueFormatterHandleNullValue: PropTypes.bool,\r\n\r\n  /**\r\n   * @optionnal\r\n   *\r\n   * function to compare two options objects.\r\n   * Note that we handle comparaison between two objects that have an 'id' key.\r\n   * Used to compare the value and the option.\r\n   */\r\n  comparator: PropTypes.func,\r\n\r\n  /**\r\n   * Function called when the input query changed.\r\n   * Used when the query has to be known from the parent (ex: SearchListChooser)\r\n   */\r\n  onQueryChange: PropTypes.func,\r\n\r\n  /**\r\n   * If not required, a single choice can be removed, the onChange function will receive null.\r\n   */\r\n  required: PropTypes.bool,\r\n\r\n  clearable: PropTypes.bool,\r\n\r\n  /**\r\n   * Disable search\r\n   * Set to true if you don't want to display search option.\r\n   */\r\n  disableSearch: PropTypes.bool,\r\n\r\n  /**\r\n   * Disable possibility to choose on a list\r\n   */\r\n  disabled: PropTypes.bool,\r\n\r\n  /**\r\n   * In case the options could be paginated, we can pass a paging object and a `onLoadMore`\r\n   * prop\r\n   */\r\n  paging: PropTypes.object,\r\n\r\n  /**\r\n   * func (nextCursor)\r\n   *\r\n   * TODO: when we load more, the list will increase in size, but since we don't close / open\r\n   * the view, the Popover will not be resized.\r\n   * Note: it could be resolved by the material-ui v1 update\r\n   */\r\n  onLoadMore: PropTypes.func,\r\n\r\n  /**\r\n   * Allows to define the type of view to display on the Body\r\n   * see ViewType\r\n   */\r\n  viewType: PropTypes.string,\r\n\r\n  /**\r\n   * in 'multiple' mode, indicates that we want the \"add\" button to be always displayed (default: false => displayed only when no values are selected)\r\n   */\r\n  alwaysDisplayAddButton: PropTypes.bool,\r\n}\r\n\r\nexport default ListChooser\r\n","import React from 'react'\r\n\r\nimport moment from 'moment'\r\nimport range from 'lodash/range'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { InputLabel } from 'pmt-ui/Input'\r\nimport ListChooser from 'pmt-ui/ListChooser'\r\n\r\nimport { anyToDate } from 'pmt-utils/date'\r\n\r\nconst styles = {\r\n  root: {},\r\n  elements: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n  },\r\n  element: {\r\n    display: 'flex',\r\n    flexGrow: '1',\r\n    maxWidth: 50,\r\n    textAlign: 'center',\r\n  },\r\n}\r\n\r\nconst Day = ({ day, className, onChange }) => (\r\n  <ListChooser\r\n    title=\"Choisir le jour\"\r\n    label=\"Jour\"\r\n    value={day}\r\n    options={range(1, 31 + 1).map(day => ({\r\n      label: day,\r\n      value: day,\r\n    }))}\r\n    onChange={onChange}\r\n    className={className}\r\n  />\r\n)\r\n\r\nconst Month = ({ month, className, onChange }) => (\r\n  <ListChooser\r\n    title=\"Choisir le mois\"\r\n    label=\"Mois\"\r\n    value={month}\r\n    options={range(1, 12 + 1).map(month => ({\r\n      label: month,\r\n      value: month,\r\n    }))}\r\n    onChange={onChange}\r\n    className={className}\r\n  />\r\n)\r\n\r\nconst Year = ({ minYear, maxYear, year, className, onChange }) => (\r\n  <ListChooser\r\n    title={`Choisir l'année`}\r\n    label=\"Année\"\r\n    value={year}\r\n    options={range(minYear, maxYear)\r\n      .reverse()\r\n      .map(year => ({\r\n        label: year,\r\n        value: year,\r\n      }))}\r\n    onChange={onChange}\r\n    className={className}\r\n  />\r\n)\r\n\r\nclass InlineDate extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    this.state = this.calculateState(props)\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    this.setState(this.calculateState(nextProps))\r\n  }\r\n\r\n  calculateState(props) {\r\n    const { value, options } = props\r\n\r\n    let date = value\r\n    if (!date && options.defaultValue) {\r\n      date = options.defaultValue\r\n    }\r\n\r\n    date = anyToDate(date)\r\n\r\n    const day = date.date()\r\n    const month = date.month() + 1 // index based 0\r\n    const year = date.year()\r\n\r\n    let minYear = 1900\r\n    if (options.minDate) {\r\n      minYear = anyToDate(options.minDate).year()\r\n    }\r\n\r\n    let maxYear = 2100\r\n    if (options.maxDate) {\r\n      maxYear = anyToDate(options.maxDate).year()\r\n    }\r\n\r\n    return {\r\n      day,\r\n      month,\r\n      year,\r\n      minYear,\r\n      maxYear,\r\n    }\r\n  }\r\n\r\n  handleChange = (day, month, year) => {\r\n    const date = moment()\r\n      .startOf('day')\r\n      .date(day)\r\n      .month(month - 1)\r\n      .year(year)\r\n    this.props.onChange(date)\r\n  }\r\n\r\n  render() {\r\n    const { classes, label, required } = this.props\r\n    const { day, month, year, minYear, maxYear } = this.state\r\n    try {\r\n      return (\r\n        <div className={classes.root}>\r\n          <InputLabel\r\n          // focused // force focus to be on top mode\r\n          >\r\n            {label}\r\n            {/* handle required field */}\r\n            {required && <span>&thinsp;*</span>}\r\n          </InputLabel>\r\n          <div className={classes.elements}>\r\n            <Day\r\n              className={classes.element}\r\n              day={day}\r\n              onChange={day => this.handleChange(day, month, year)}\r\n            />\r\n            <Month\r\n              className={classes.element}\r\n              month={month}\r\n              onChange={month => this.handleChange(day, month, year)}\r\n            />\r\n            <Year\r\n              className={classes.element}\r\n              minYear={minYear}\r\n              maxYear={maxYear}\r\n              year={year}\r\n              onChange={year => this.handleChange(day, month, year)}\r\n            />\r\n          </div>\r\n        </div>\r\n      )\r\n    } catch (e) {\r\n      console.error(e)\r\n    }\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(InlineDate)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport moment from 'moment'\r\nimport invariant from 'invariant'\r\nimport noop from 'lodash/noop'\r\n\r\nimport TextField from 'pmt-ui/TextField'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { formatDate } from 'pmt-utils/date'\r\n\r\nimport Calendar, { CalendarMode } from '../Calendar'\r\nimport InlineDate from './InlineDate'\r\n\r\nconst propDatesAreSame = (a, b) => (!a && !b) || (a && b && moment(a).isSame(b))\r\n\r\nconst getDateChangedErrorMsg = varName =>\r\n  `${varName} date has changed. Consider using 'momentObject.startOf('day').`\r\n\r\nconst styles = theme => ({\r\n  calendarContainer: {\r\n    position: 'relative',\r\n  },\r\n  calendar: {\r\n    position: 'absolute',\r\n    bottom: 0,\r\n    left: 0,\r\n  },\r\n})\r\n\r\n/**\r\n * DateField\r\n *\r\n *\r\n * Note: we don't handle the type 'CalendarMode.multiple' for the moment\r\n */\r\nclass DateField extends React.Component {\r\n  static DEFAULT_DATE_FORMAT = 'dddd DD MMMM YYYY'\r\n\r\n  state = {\r\n    displayCalendar: false,\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps, nextState) {\r\n    const { props } = this\r\n\r\n    //\r\n    // The following options can't be changed !\r\n    // Otherwise we get an infinite loop from flatpickr..\r\n    //\r\n\r\n    const defaultDateIsSame = propDatesAreSame(\r\n      nextProps.options.defaultDate,\r\n      props.options.defaultDate\r\n    )\r\n\r\n    const minDateIsSame = propDatesAreSame(nextProps.options.minDate, props.options.minDate)\r\n\r\n    const maxDateIsSame = propDatesAreSame(nextProps.options.maxDate, props.options.maxDate)\r\n\r\n    invariant(defaultDateIsSame, getDateChangedErrorMsg('defaultDate'))\r\n\r\n    invariant(minDateIsSame, getDateChangedErrorMsg('minDate'))\r\n\r\n    invariant(maxDateIsSame, getDateChangedErrorMsg('maxDate'))\r\n  }\r\n\r\n  shouldComponentUpdate(nextProps, nextState) {\r\n    const { props, state } = this\r\n\r\n    if (state.displayCalendar !== nextState.displayCalendar) {\r\n      return true\r\n    }\r\n\r\n    if (\r\n      props.value !== nextProps.value ||\r\n      (moment.isMoment(nextProps) && nextProps.value.isSame(props.value))\r\n    ) {\r\n      return true\r\n    }\r\n\r\n    return false\r\n  }\r\n\r\n  handleOpenCalendar = () => {\r\n    this.setState({\r\n      displayCalendar: true,\r\n    })\r\n  }\r\n\r\n  handleCloseCalendar = dates => {\r\n    this.setState({\r\n      displayCalendar: false,\r\n    })\r\n\r\n    this.handleChange(dates)\r\n  }\r\n\r\n  handleChange = dates => {\r\n    // force end of day to the selected end day\r\n    if (this.props.options.mode === CalendarMode.RANGE && dates[1]) {\r\n      dates[1] = dates[1].endOf('day')\r\n    }\r\n    this.props.onChange(dates)\r\n  }\r\n\r\n  renderInline() {\r\n    const { options, label, required, value } = this.props\r\n\r\n    return (\r\n      <InlineDate\r\n        value={value}\r\n        label={label}\r\n        required={required}\r\n        onChange={this.handleChange}\r\n        options={options}\r\n      />\r\n    )\r\n  }\r\n\r\n  renderCalendar() {\r\n    const { classes, onChange, options, label, renderValue, value, ...otherProps } = this.props\r\n\r\n    const open = this.state.displayCalendar && !options.inline\r\n\r\n    let formattedValue = null\r\n    if (!value) {\r\n      formattedValue = ''\r\n    } else if (renderValue) {\r\n      formattedValue = renderValue(value)\r\n    } else if (!options.mode || options.mode === 'single') {\r\n      formattedValue = formatDate(value, 'DD-MM-YYYY')\r\n    } else if (options.mode === CalendarMode.RANGE) {\r\n      formattedValue = `${formatDate(value[0], 'DD-MM-YYYY')} - ${formatDate(\r\n        value[1],\r\n        'DD-MM-YYYY'\r\n      )}`\r\n    } else {\r\n      invariant(false, 'mode not handled to format value')\r\n    }\r\n\r\n    return (\r\n      <div className={classes.calendarContainer}>\r\n        {this.props.children ? (\r\n          this.props.children({\r\n            openCalendar: this.handleOpenCalendar,\r\n            closeCalendar: this.handleCloseCalendar,\r\n          })\r\n        ) : (\r\n          <TextField\r\n            className=\"u-sizeFullWidth\"\r\n            label={label}\r\n            onClick={this.handleOpenCalendar}\r\n            value={formattedValue}\r\n            onChange={noop}\r\n          />\r\n        )}\r\n\r\n        {/* TODO: open calendar on modal on small screens */}\r\n        {/* {open && ( */}\r\n        <Calendar\r\n          className={classes.calendar}\r\n          open={open}\r\n          value={value}\r\n          options={{\r\n            ...options,\r\n            ...{\r\n              clickOpens: false,\r\n            },\r\n          }}\r\n          // Note: here onChange is called each time the user select a date, and cause infinite loop,\r\n          // so we use the onClose\r\n          // onChange={this.handleChange}\r\n          onClose={this.handleCloseCalendar}\r\n          {...otherProps}\r\n        />\r\n        {/* )} */}\r\n      </div>\r\n    )\r\n  }\r\n\r\n  render() {\r\n    switch (this.props.mode) {\r\n      case DateField.Mode.INLINE:\r\n        return this.renderInline()\r\n\r\n      case DateField.Mode.CALENDAR:\r\n        return this.renderCalendar()\r\n\r\n      default:\r\n        invariant(false, 'Invalid DateField mode')\r\n    }\r\n  }\r\n}\r\n\r\nDateField.Mode = {\r\n  /**\r\n   * Display the date field as a calendar\r\n   * In this mode the prop options is the options of flatpickr\r\n   * @type {String}\r\n   */\r\n  CALENDAR: 'calendar',\r\n\r\n  /**\r\n   * Display the date field as three list selector (day, month, year)\r\n   * In this mode the prop option can contains:\r\n   * - defaultDate\r\n   * - minDate\r\n   * - maxDate\r\n   */\r\n  INLINE: 'inline',\r\n}\r\n\r\nDateField.defaultProps = {\r\n  mode: DateField.Mode.CALENDAR,\r\n  required: false,\r\n  options: {\r\n    mode: 'single',\r\n  },\r\n}\r\n\r\n/**\r\n * TODO: handle:\r\n * - validation\r\n * - required\r\n * @type {Object}\r\n */\r\nDateField.propTypes = {\r\n  label: PropTypes.string.isRequired,\r\n\r\n  required: PropTypes.bool,\r\n\r\n  mode: PropTypes.oneOf([DateField.Mode.CALENDAR, DateField.Mode.INLINE]),\r\n\r\n  // param: moment date\r\n  onChange: PropTypes.func.isRequired,\r\n\r\n  /**\r\n   * In mode CALENDAR it  can contains all the flatpickr options and hooks\r\n   * - https://chmln.github.io/flatpickr/options/\r\n   * - https://chmln.github.io/flatpickr/events/#hooks\r\n   *\r\n   * Otherwise see DateField.Mode.INLINE (or the corresponding mode)\r\n   */\r\n  options: PropTypes.object.isRequired,\r\n\r\n  value: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\r\n}\r\n\r\nexport default withStyles(styles)(DateField)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport { updateStatisticsOptions } from '../actions'\r\nimport { makeGetStatisticsOptions, makeGetStatisticsConfig } from '../selectors'\r\nimport { statisticsOptionsAreEqual } from '../utils'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that handles the options for a statistics.\r\n * It retains the options modifications on its state.\r\n * We update them on the store only when the given function `onApplyOptions` is called.\r\n *\r\n * Requirements:\r\n * - groupType defined in ../StatisticsGroupType\r\n */\r\nclass StatisticsOptionsModifierContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state = {\r\n      options: { ...props.options },\r\n      optionsChanged: false,\r\n      optionsAreDefault: this.areOptionsDefault(props, props.options),\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (!statisticsOptionsAreEqual(this.props.config, this.props.options, prevProps.options)) {\r\n      this.setState({\r\n        options: this.props.options,\r\n        optionsChanged: false,\r\n      })\r\n    }\r\n  }\r\n\r\n  areOptionsDefault(props, options) {\r\n    return isEqual(props.config.defaultOptions, options)\r\n  }\r\n\r\n  handleChangeOptions = options => {\r\n    this.setState({\r\n      options,\r\n      optionsChanged: true,\r\n      optionsAreDefault: this.areOptionsDefault(this.props, options),\r\n    })\r\n  }\r\n\r\n  handleApplyOptions = () => {\r\n    this.props.updateStatisticsOptions(this.props.groupType, this.state.options)\r\n  }\r\n\r\n  handleResetOptions = () => {\r\n    this.setState(\r\n      {\r\n        options: {\r\n          ...this.props.config.defaultOptions,\r\n        },\r\n        optionsChanged: true,\r\n        optionsAreDefault: true,\r\n      },\r\n      () => {\r\n        // directly apply options and reload data\r\n        this.handleApplyOptions()\r\n      }\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const { children, config } = this.props\r\n\r\n    const { options, optionsChanged, optionsAreDefault } = this.state\r\n\r\n    if (!options || !config) {\r\n      // wait for default options to be processed\r\n      return null\r\n    }\r\n\r\n    return children({\r\n      options,\r\n      config,\r\n      optionsChanged,\r\n      optionsAreDefault,\r\n      onChangeOptions: this.handleChangeOptions,\r\n      onApplyOptions: this.handleApplyOptions,\r\n      onResetOptions: this.handleResetOptions,\r\n    })\r\n  }\r\n}\r\n\r\nStatisticsOptionsModifierContainer.defaultProps = {}\r\n\r\nStatisticsOptionsModifierContainer.propTypes = {\r\n  children: PropTypes.func.isRequired,\r\n\r\n  groupType: PropTypes.string.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  const getOptions = makeGetStatisticsOptions()\r\n  const getConfig = makeGetStatisticsConfig()\r\n\r\n  return {\r\n    options: getOptions(state, props),\r\n    config: getConfig(state, props),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n  updateStatisticsOptions,\r\n})(StatisticsOptionsModifierContainer)\r\n","import Immutable from 'immutable'\r\nimport { createReducer } from '../redux'\r\n\r\nimport { GetStatisticsAction, StatisticsAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './components'\r\nexport * from './config'\r\nexport * from './constants'\r\nexport * from './utils'\r\nexport * from './selectors'\r\nexport { default as createStatistics } from './createStatistics'\r\nexport { default as createGroupStatistics } from './createGroupStatistics'\r\n\r\nexport { default as StatisticsGroupType } from './StatisticsGroupType'\r\n\r\nconst checkRequestId = reduceFunc => (state, action) => {\r\n  const requestId = state.getIn([\r\n    action.data.statisticsGroupType,\r\n    action.data.statisticsType,\r\n    'requestId',\r\n  ])\r\n\r\n  if (requestId === action.data.requestId) {\r\n    return reduceFunc(state, action)\r\n  }\r\n\r\n  console.debug(`Response ignore due to invalid requestId '${action.data.requestId}'`)\r\n  return state\r\n}\r\n\r\nlet DEFAULT_STATE = Immutable.fromJS({})\r\n\r\nexport const statisticsReducer = createReducer(DEFAULT_STATE, {\r\n  [StatisticsAction.UPDATE]: (state, action) =>\r\n    state.mergeIn(\r\n      [action.statisticsGroupType],\r\n      Immutable.fromJS({\r\n        options: action.options,\r\n      })\r\n    ),\r\n\r\n  [StatisticsAction.INIT_CONFIG]: (state, action) =>\r\n    state.mergeIn(\r\n      [action.statisticsGroupType],\r\n      Immutable.fromJS({\r\n        config: action.config,\r\n      })\r\n    ),\r\n\r\n  [GetStatisticsAction.REQUEST]: (state, action) =>\r\n    state\r\n      .mergeIn(\r\n        [action.data.statisticsGroupType],\r\n        Immutable.fromJS({\r\n          options: action.data.props.options,\r\n        })\r\n      )\r\n      .mergeIn([action.data.statisticsGroupType, action.data.statisticsType], {\r\n        data: null,\r\n        isFetching: true,\r\n        error: null,\r\n        //\r\n        // We keep an id of the last request run. We will ignore success / failure responses of old\r\n        // request (who don't have this requestId)\r\n        //\r\n        requestId: action.data.requestId,\r\n      }),\r\n\r\n  [GetStatisticsAction.SUCCESS]: checkRequestId((state, action) =>\r\n    state.mergeIn([action.data.statisticsGroupType, action.data.statisticsType], {\r\n      data: action.response,\r\n      isFetching: false,\r\n      error: null,\r\n    })\r\n  ),\r\n\r\n  [GetStatisticsAction.FAILURE]: checkRequestId((state, action) =>\r\n    state.mergeIn([action.data.statisticsGroupType, action.data.statisticsType], {\r\n      data: null,\r\n      isFetching: false,\r\n      error: action.error,\r\n    })\r\n  ),\r\n})\r\n","let _reducers = {}\r\n\r\nexport const registerReducers = reducers => {\r\n  _reducers = reducers\r\n}\r\n\r\nexport const getReducers = () => _reducers\r\n\r\nexport const registerEntities = entities => {\r\n  _reducers = {\r\n    ..._reducers,\r\n    entities,\r\n  }\r\n}\r\n\r\nexport const getEntities = () => _reducers.entities\r\n","import { createTransform } from 'redux-persist'\r\nimport each from 'lodash/each'\r\nimport Immutable from 'immutable'\r\nimport { immutable } from '@redux-devtools/serialize'\r\n\r\nimport { getEntities } from 'pmt-modules/reducers'\r\nimport Logger from 'pmt-utils/logger/index.js'\r\n\r\nconst PERSIST_EXPIRE_DEFAULT_KEY = 'persistExpiresAt'\r\nconst PERSIST_EXPIRE_DELAY_DEFAULT_KEY = 'persistExpireDelay'\r\n\r\n// Same serializer used by immutableTransform, so the default state we emit on\r\n// expiration is reconstructed as an Immutable structure by the next transform\r\n// in the chain (instead of a plain object that would break `.get()` calls).\r\nconst { stringify: immutableStringify } = immutable(Immutable)\r\n\r\nexport const createExpirationTransform = config => {\r\n  config = config || {}\r\n  config.expireKey = config.expireKey || PERSIST_EXPIRE_DEFAULT_KEY\r\n  config.expireDelayKey = config.expireDelayKey || PERSIST_EXPIRE_DELAY_DEFAULT_KEY\r\n\r\n  const dateToUnix = date => +(date.getTime() / 1000).toFixed(0)\r\n\r\n  // Builds the serialized state to store when an entry has expired.\r\n  // We must reset to the reducer's real initial state (correct Immutable shape,\r\n  // e.g. cart's `itemList`), otherwise a generic `{}` hard-overwrites the entity\r\n  // (hardSet reconciler) and later actions like ADD_TO_CART can't mutate it.\r\n  const getExpiredState = key => {\r\n    if (config.defaultState !== undefined) {\r\n      return Immutable.fromJS(config.defaultState)\r\n    }\r\n\r\n    const reducer = getEntities()[key]\r\n\r\n    if (typeof reducer === 'function') {\r\n      // Calling the reducer with `undefined` returns its initial state,\r\n      // already as an Immutable structure.\r\n      return reducer(undefined, { type: '@@REDUX_PERSIST_EXPIRE_RESET' })\r\n    }\r\n\r\n    // Last resort fallback.\r\n    return Immutable.Map()\r\n  }\r\n\r\n  const inbound = (state, key) => {\r\n    try {\r\n      const entity = getEntities()[key]\r\n      const options = (entity && entity.options) || {}\r\n\r\n      // Rolling expiration: compute the expiry timestamp NOW (at write time),\r\n      // so the delay always restarts from the last write instead of app start.\r\n      const delay = options[config.expireDelayKey]\r\n      // Legacy support: an already-computed absolute expiry date.\r\n      const absoluteExpiresAt = options[config.expireKey]\r\n\r\n      let expiresAt = null\r\n      if (delay != null) {\r\n        expiresAt = new Date(Date.now() + delay).toISOString()\r\n      } else if (absoluteExpiresAt) {\r\n        expiresAt = absoluteExpiresAt\r\n      }\r\n\r\n      console.info(\r\n        `createExpirationTransform: setting expirationDate for key \"${key}\" ${expiresAt} (local: ${new Date(expiresAt).toLocaleString()})`\r\n      )\r\n\r\n      if (expiresAt) {\r\n        const jsonState = JSON.parse(state)\r\n        jsonState.data = {\r\n          ...jsonState.data,\r\n          [config.expireKey]: expiresAt,\r\n        }\r\n        state = JSON.stringify(jsonState)\r\n      }\r\n\r\n      return state\r\n    } catch (error) {\r\n      Logger.error(`createExpirationTransform: inbound failed for key \"${key}\"`, error)\r\n      throw error\r\n    }\r\n  }\r\n\r\n  const outbound = (state, key) => {\r\n    if (!state) {\r\n      return state\r\n    }\r\n\r\n    try {\r\n      // --- SIMULATION: simulate an expired entry to reproduce the outbound crash ---\r\n      // Pass `config.simulateExpired = true` (or `config.simulateExpired = 'cart'` to target a specific key)\r\n      // to force the expiration branch below.\r\n      if (config.simulateExpired === true || config.simulateExpired === key) {\r\n        const parsed = JSON.parse(state)\r\n        // Yesterday, guaranteed to be in the past.\r\n        const expiredDate = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()\r\n        // The expire key lives inside `data` (see inbound), so it must be set\r\n        // there for the outbound expiration loop to pick it up.\r\n        parsed.data = {\r\n          ...parsed.data,\r\n          [config.expireKey]: expiredDate,\r\n        }\r\n        state = JSON.stringify(parsed)\r\n        console.log(\r\n          `createExpirationTransform: SIMULATING expired entry for key \"${key}\" (${expiredDate})`\r\n        )\r\n      }\r\n      // --- END SIMULATION ---\r\n\r\n      let isExpired = false\r\n      let expiredAt = null\r\n\r\n      each(JSON.parse(state), value => {\r\n        if (!value || typeof value !== 'object') {\r\n          return\r\n        }\r\n\r\n        if (!value.hasOwnProperty(config.expireKey)) {\r\n          return\r\n        }\r\n\r\n        var expireDate = value[config.expireKey]\r\n\r\n        if (!expireDate) {\r\n          return\r\n        }\r\n\r\n        if (dateToUnix(new Date(expireDate)) < dateToUnix(new Date())) {\r\n          isExpired = true\r\n          expiredAt = expireDate\r\n          // stop iterating, we already know the state is expired\r\n          return false\r\n        }\r\n      })\r\n\r\n      if (isExpired) {\r\n        const expiredDate = new Date(expiredAt)\r\n        const now = new Date()\r\n        console.warn(\r\n          `createExpirationTransform: outbound state expired for key \"${key}\", resetting to default state ` +\r\n            `(expired at ${expiredDate.toISOString()} (local: ${expiredDate.toLocaleString()}), ` +\r\n            `now ${now.toISOString()} (local: ${now.toLocaleString()}))`\r\n        )\r\n        // `state` is a serialized string at this point, and later transforms in\r\n        // the chain (e.g. immutableTransform) expect a string to parse. A plain\r\n        // JSON object would be parsed back as a plain object (no `.get`), while\r\n        // the real (non-expired) state is an Immutable KeyedIterable. So we\r\n        // serialize the reducer's initial (Immutable) state to stay consistent.\r\n        return immutableStringify(getExpiredState(key))\r\n      }\r\n    } catch (error) {\r\n      Logger.error(`createExpirationTransform: outbound failed for key \"${key}\"`, error)\r\n      throw error\r\n    }\r\n\r\n    return state\r\n  }\r\n\r\n  return createTransform(inbound, outbound)\r\n}\r\n\r\nexport default createExpirationTransform\r\n","import { combineReducers } from 'redux'\r\nimport { persistReducer } from 'redux-persist'\r\nimport storage from 'redux-persist/lib/storage' // defaults to localStorage for web and AsyncStorage for react-native\r\nimport hardSet from 'redux-persist/lib/stateReconciler/hardSet'\r\nimport immutableTransform from 'pmt-modules/redux/immutableTransform'\r\nimport { connectRouter } from 'connected-react-router'\r\n\r\nimport pickBy from 'lodash/pickBy'\r\nimport identity from 'lodash/identity'\r\n\r\nimport { uiReducer } from 'pmt-modules/reduxUi'\r\nimport uxReducer from './uxReducer'\r\nimport { formReducer } from '../../form'\r\nimport { searchReducer } from '../../search'\r\nimport { statisticsReducer } from '../../statistics'\r\n\r\nimport { i18nReducer } from 'pmt-modules/i18n'\r\nimport { getHistory } from 'pmt-modules/routing'\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { createExpirationTransform } from './reduxPersistTransformExpire'\r\n\r\n// In development, ?simulateStorageFull=1 lets the initial write succeed, then rejects later writes.\r\nconst simulateStorageFull =\r\n  import.meta.env.DEV &&\r\n  new URLSearchParams(window.location.search).get('simulateStorageFull') === '1'\r\nlet successfulWrites = 0\r\n\r\nconst loggingStorage = {\r\n  ...storage,\r\n  setItem: (key, value) => {\r\n    const write =\r\n      simulateStorageFull && successfulWrites >= 1\r\n        ? Promise.reject(new DOMException('Simulated storage quota exceeded', 'QuotaExceededError'))\r\n        : storage.setItem(key, value)\r\n\r\n    return write\r\n      .then(() => {\r\n        successfulWrites += 1\r\n      })\r\n      .catch(error => {\r\n        // adding in the debug log the approximative size of each key stored in the state\r\n        // so we can identify, if the failure is due to storage quota being exceeded, which key we may have to optimize\r\n        let keySizes = 'unavailable (could not inspect serialized state)'\r\n        try {\r\n          keySizes = Object.entries(JSON.parse(value))\r\n            .map(\r\n              ([stateKey, serializedState]) =>\r\n                `${stateKey}: ${(\r\n                  ((JSON.stringify(stateKey).length + 1 + JSON.stringify(serializedState).length) *\r\n                    2) /\r\n                  1024\r\n                ).toFixed(1)} KiB`\r\n            )\r\n            .join(', ')\r\n        } catch (inspectionError) {\r\n          // Preserve the original storage error even if the diagnostic payload cannot be parsed.\r\n        }\r\n\r\n        // we want any write failure to be sent to Sentry, so we can see that it failed, and understand why\r\n        Logger.error(\r\n          `redux-persist: failed to write storage key \"${key}\" (approximate UTF-16 sizes: ${keySizes}; total: ${(\r\n            (value.length * 2) /\r\n            1024\r\n          ).toFixed(1)} KiB)`,\r\n          error\r\n        )\r\n        throw error\r\n      })\r\n  },\r\n}\r\n\r\nconst persistConfig = {\r\n  key: 'root',\r\n  storage: loggingStorage,\r\n  stateReconciler: hardSet,\r\n  transforms: [\r\n    immutableTransform(),\r\n    // uncomment the `simulateExpired` option if you want to simulate a state expiration\r\n    createExpirationTransform({\r\n      // simulateExpired: 'orderPost', // force the \"orderPost\" key to behave as being expired\r\n    }),\r\n  ],\r\n  timeout: 10000, // 10s. default is 5s but we want to be sure that the rehydration is done before the app is rendered\r\n}\r\n\r\nconst configureRootReducer = appOptions => {\r\n  let reducers = {\r\n    router: connectRouter(getHistory()),\r\n    // entities are defined by the project with persistence set to false by default\r\n    // we use whitelist to persist only reducers with the option set in [project]/src/config/entities\r\n    entities: persistReducer(\r\n      {\r\n        ...persistConfig,\r\n        whitelist: Object.keys(appOptions.entities).filter(\r\n          reducerName =>\r\n            appOptions.entities[reducerName].options &&\r\n            appOptions.entities[reducerName].options.persist\r\n        ),\r\n      },\r\n      // It is an object, so we have to use combineReducers.\r\n      combineReducers(appOptions.entities)\r\n    ),\r\n\r\n    ux: uxReducer,\r\n    ui: uiReducer,\r\n    form: formReducer,\r\n    search: searchReducer,\r\n    statistics: statisticsReducer,\r\n\r\n    i18n: i18nReducer,\r\n  }\r\n\r\n  // remove null reducers\r\n  reducers = pickBy(reducers, identity)\r\n\r\n  return combineReducers(reducers)\r\n}\r\n\r\nexport default configureRootReducer\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nimport { createStore, compose } from 'redux'\r\n\r\nconst createStoreCustom = appOptions => {\r\n  // verify\r\n  if (process.env.__DEV__) {\r\n    appOptions.middlewares.forEach((middleware, index) => {\r\n      invariant(!isNil(middleware), `defined middleware is nil at index ${index}`)\r\n    })\r\n  }\r\n\r\n  let creators = []\r\n\r\n  if (!isEmpty(creators)) {\r\n    return compose(...creators)(createStore)\r\n  }\r\n\r\n  return createStore\r\n}\r\n\r\nexport default createStoreCustom\r\n","function createThunkMiddleware(extraArgument) {\n  return function (_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        if (typeof action === 'function') {\n          return action(dispatch, getState, extraArgument);\n        }\n\n        return next(action);\n      };\n    };\n  };\n}\n\nvar thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\n\nexport default thunk;","/**\r\n * middleware that catch any error while dispatching an action\r\n *\r\n *\r\n * @link https://blog.sentry.io/2016/08/24/redux-middleware-error-logging\r\n *\r\n * see https://github.com/captbaritone/raven-for-redux/blob/master/index.js\r\n *\r\n * https://github.com/ngokevin/redux-raven-middleware/blob/master/index.es6\r\n *\r\n */\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport isNil from 'lodash/isNil'\r\n\r\nconst crashReporter = store => next => action => {\r\n  try {\r\n    if (isNil(action)) {\r\n      Logger.warn('crashReporter', 'Action is nil')\r\n    } else {\r\n      return next(action) // dispatch\r\n    }\r\n  } catch (err) {\r\n    Logger.reduxException(err, action, store.getState())\r\n\r\n    throw err // re-throw error in order to be seen on console\r\n  }\r\n}\r\n\r\nexport default crashReporter\r\n","export const UnauthorizedAction = 'API::API_RESULT::UNAUTHORIZED'\r\n\r\nexport const unauthorized = error => ({\r\n  type: UnauthorizedAction,\r\n  error,\r\n})\r\n","// import Immutable from 'immutable'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nimport ApiManager from '../ApiManager'\r\n\r\nimport { REQUEST, TYPES, DATA, API_CALL } from '../constants'\r\nimport { unauthorized } from '../actions'\r\nimport { createMiddleware } from '../../redux'\r\nimport { isActionApiCall } from '../utils'\r\n\r\n// Fetches an API response. It is here we should normalizes the result JSON according to schema.\r\n// This would make every API response have the same shape, regardless of how nested it was.\r\nconst callApi = (request, schema) =>\r\n  new Promise((resolve, reject) => {\r\n    const success = (responseJsonContent, response) => {\r\n      resolve({ responseJsonContent, response })\r\n    }\r\n\r\n    const failure = apiError => {\r\n      reject(apiError)\r\n    }\r\n\r\n    request.success = success\r\n    request.failure = failure\r\n\r\n    ApiManager.run(request)\r\n  })\r\n\r\n// A Redux middleware that interprets actions with API_CALL info specified.\r\n// Performs the call and promises when such actions are dispatched.\r\nexport const apiMiddleware = createMiddleware(\r\n  isActionApiCall,\r\n  ({ getState, dispatch, next, action }) => {\r\n    const apiCall = action[API_CALL]\r\n\r\n    const request = apiCall[REQUEST]\r\n    const types = apiCall[TYPES]\r\n    const data = apiCall[DATA]\r\n\r\n    const { schema } = request\r\n\r\n    // if (!schema) {\r\n    //   throw new Error('Specify one of the exported Schemas.')\r\n    // }\r\n\r\n    if (!Array.isArray(types) || types.length !== 3) {\r\n      throw new Error('Expected an array of three action types.')\r\n    }\r\n\r\n    if (!types.every(type => typeof type === 'string')) {\r\n      throw new Error('Expected action types to be strings.')\r\n    }\r\n\r\n    const actionWith = data => {\r\n      const finalAction = Object.assign({}, action, data)\r\n      delete finalAction[API_CALL]\r\n      return finalAction\r\n    }\r\n\r\n    const [requestType, successType, failureType] = types\r\n    next(\r\n      actionWith({\r\n        type: requestType,\r\n        request: request,\r\n        data: data,\r\n      })\r\n    )\r\n\r\n    request.attemptRefreshOptions = {\r\n      // The next 3 parameters are simply the arguments of\r\n      // the middleware function\r\n      action,\r\n      next,\r\n      getState,\r\n      dispatch,\r\n      failureAction: unauthorized,\r\n      ...request.attemptRefreshOptions,\r\n    }\r\n\r\n    return callApi(request, schema)\r\n      .then(({ responseJsonContent, response }) =>\r\n        next(\r\n          actionWith({\r\n            type: successType,\r\n            response: responseJsonContent,\r\n            data: data,\r\n            responseData: {\r\n              status: response && response.status,\r\n              headers: response && response.headers,\r\n              ok: response && response.ok,\r\n              url: response && response.url,\r\n            },\r\n          })\r\n        )\r\n      )\r\n      .catch(apiError => {\r\n        // see oauth attemptRefresh\r\n        if (isFunction(request.attemptRefresh)) {\r\n          request.attemptRefresh(request.attemptRefreshOptions)(apiError)\r\n        }\r\n\r\n        next(\r\n          actionWith({\r\n            type: failureType,\r\n            error: apiError,\r\n            data: data,\r\n          })\r\n        )\r\n      })\r\n  }\r\n)\r\n","/**\r\n * Authentication mode\r\n * Caution: this is a bitfield\r\n */\r\nexport const AuthMode = {\r\n  NORMAL: 0,\r\n  LIGHT: 1,\r\n  INCOGNITO_ONLY: 2,\r\n}\r\n\r\n/**\r\n * Delay within token should force refresh before doing anything else\r\n */\r\nexport const ACCESS_TOKEN_DELAY_REFRESH = 1 * 60 * 1000 // 1 minutes\r\n\r\n/**\r\n * Delay within it is acceptable to refresh token in background\r\n */\r\nexport const ACCESS_TOKEN_DELAY_REFRESH_SOON = 3 * 60 * 1000 // 3 minutes\r\n\r\n/**\r\n * Refresh token lifetime. Used to expire cookie.\r\n */\r\nexport const REFRESH_TOKEN_LIFETIME = 13 * 24 * 60 * 60 * 1000 // 13 days\r\n\r\nexport const INCOGNITO_TOKEN_LIFETIME = 365 * 24 * 60 * 60 * 1000 // 365 days\r\n\r\nexport const StorageItem = {\r\n  ACCESS_TOKEN: 'STORAGE::ACCESS_TOKEN',\r\n}\r\n","import moment from 'moment'\r\n\r\nimport { getCookie, setCookie, deleteCookie } from 'pmt-modules/storage'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport {\r\n  ACCESS_TOKEN_DELAY_REFRESH,\r\n  ACCESS_TOKEN_DELAY_REFRESH_SOON,\r\n  REFRESH_TOKEN_LIFETIME,\r\n  INCOGNITO_TOKEN_LIFETIME,\r\n  StorageItem,\r\n} from '../constants'\r\n\r\nlet _clientId = null\r\n\r\nconst getCookieKey = () => `${StorageItem.ACCESS_TOKEN}::${_clientId}`\r\n\r\nexport const setClientId = clientId => (_clientId = clientId)\r\n\r\nexport const saveAccessToken = token => {\r\n  setCookie(getCookieKey(), JSON.stringify(token), REFRESH_TOKEN_LIFETIME)\r\n}\r\n\r\nexport const removeAccessToken = () => {\r\n  deleteCookie(getCookieKey())\r\n}\r\n\r\nexport const getAuthCookie = () => {\r\n  try {\r\n    return JSON.parse(getCookie(getCookieKey()))\r\n  } catch (e) {\r\n    return null\r\n  }\r\n}\r\n\r\n/**\r\n * default access token can be defined if is passed as GET query parameter\r\n * otherwise, we take the cookie access token\r\n */\r\nexport const getAuthorization = () => {\r\n  if (getQueryParam('access_token')) {\r\n    return `Bearer ${getQueryParam('access_token')}`\r\n  }\r\n\r\n  const cookie = getAuthCookie()\r\n\r\n  if (cookie && cookie.access_token) {\r\n    return `Bearer ${cookie.access_token}`\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * Check if token has expired or will expire within a short delay\r\n */\r\nexport const hasTokenExpired = (expirationMoment, now = moment()) =>\r\n  now.isAfter(expirationMoment) ||\r\n  moment(now)\r\n    .add(ACCESS_TOKEN_DELAY_REFRESH, 'ms')\r\n    .isAfter(expirationMoment)\r\n\r\n/**\r\n * Check if token has expired or will expire within a  relative short delay\r\n */\r\nexport const willTokenExpireSoon = (expirationMoment, now = moment()) =>\r\n  moment(now)\r\n    .add(ACCESS_TOKEN_DELAY_REFRESH_SOON, 'ms')\r\n    .isAfter(expirationMoment)\r\n\r\nlet _restaurantsGroupId = null\r\n\r\nexport const setRestaurantsGroupId = restaurantsGroupId =>\r\n  (_restaurantsGroupId = restaurantsGroupId)\r\n\r\nconst getUserLightCookieKey = () => `ul::${_restaurantsGroupId}`\r\n\r\nconst getIncognitoCookieKey = () => `incognito::${_restaurantsGroupId}`\r\n\r\nexport const saveUserLightCookie = user => {\r\n  setCookie(getUserLightCookieKey(), JSON.stringify(user), INCOGNITO_TOKEN_LIFETIME)\r\n}\r\n\r\nexport const saveIncognitoCookie = userId => {\r\n  setCookie(getIncognitoCookieKey(), JSON.stringify(userId), INCOGNITO_TOKEN_LIFETIME)\r\n}\r\n\r\nexport const removeUserLight = () => {\r\n  deleteCookie(getUserLightCookieKey())\r\n}\r\n\r\nexport const removeIncognitoCookie = () => {\r\n  deleteCookie(getIncognitoCookieKey())\r\n}\r\n\r\nexport const getUserLightCookie = () => {\r\n  try {\r\n    return JSON.parse(getCookie(getUserLightCookieKey()))\r\n  } catch (e) {\r\n    return null\r\n  }\r\n}\r\n\r\nexport const getIncognitoCookie = () => {\r\n  try {\r\n    return JSON.parse(getCookie(getIncognitoCookieKey()))\r\n  } catch (e) {\r\n    return null\r\n  }\r\n}\r\n","var baseProperty = require('./_baseProperty');\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nmodule.exports = asciiSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n    rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n    rsCombo = '[' + rsComboRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n  var result = reUnicode.lastIndex = 0;\n  while (reUnicode.test(string)) {\n    ++result;\n  }\n  return result;\n}\n\nmodule.exports = unicodeSize;\n","var asciiSize = require('./_asciiSize'),\n    hasUnicode = require('./_hasUnicode'),\n    unicodeSize = require('./_unicodeSize');\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n  return hasUnicode(string)\n    ? unicodeSize(string)\n    : asciiSize(string);\n}\n\nmodule.exports = stringSize;\n","var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArrayLike = require('./isArrayLike'),\n    isString = require('./isString'),\n    stringSize = require('./_stringSize');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n  if (collection == null) {\n    return 0;\n  }\n  if (isArrayLike(collection)) {\n    return isString(collection) ? stringSize(collection) : collection.length;\n  }\n  var tag = getTag(collection);\n  if (tag == mapTag || tag == setTag) {\n    return collection.size;\n  }\n  return baseKeys(collection).length;\n}\n\nmodule.exports = size;\n","export const stopIterationValues = ['fr', 'en']\r\n\r\nexport const checkAccessSecurityModes = {\r\n  TABLE_NUMBER: 'TABLE_NUMBER',\r\n  POS_CHECK_ID: 'POS_CHECK_ID',\r\n}\r\n\r\n// This, as the whole module, is a duplicate of ApiConsumer module because of legacy\r\nexport const AppConfigPresets = {\r\n  PLUGIN_ORDER: 'PLUGIN_ORDER',\r\n  DIGITAL_MENU: 'DIGITAL_MENU',\r\n}\r\n\r\nexport const defaultTexts = {\r\n  ORDER_PLUGIN: {\r\n    labelForOrderMode: {\r\n      '0': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '1': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '2': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n    },\r\n    titleForOrderMode: {\r\n      '0': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '1': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '2': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n    },\r\n    totalCartlabelForOrderMode: {\r\n      '0': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '1': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n      '2': {\r\n        fr: '',\r\n        en: '',\r\n      },\r\n    },\r\n  },\r\n}\r\n","import forEach from 'lodash/forEach'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport size from 'lodash/size'\r\n\r\nimport { stopIterationValues } from '../constants'\r\n\r\nconst containsStopIteration = object => {\r\n  let _return = false\r\n\r\n  forEach(object, (_obj, key) => {\r\n    if (stopIterationValues.indexOf(key) !== -1) {\r\n      _return = key\r\n    }\r\n  })\r\n\r\n  return _return\r\n}\r\n\r\nexport const reduceAppConfigTexts = (texts, locale) => {\r\n  const _locale = locale\r\n\r\n  const recursiveCall = object => {\r\n    let finalObject = object\r\n\r\n    for (let key in object) {\r\n      const _obj = object[key]\r\n      const hasKey = containsStopIteration(_obj)\r\n\r\n      // n'a pas de fr ou en\r\n      if (!hasKey) {\r\n        // objet n'est pas vide\r\n        if (size(_obj) > 0) {\r\n          finalObject = { ...finalObject, [key]: recursiveCall(_obj) }\r\n\r\n          // objet vide\r\n        } else {\r\n          finalObject = { ...finalObject, [key]: null }\r\n        }\r\n\r\n        // fr ou en présent\r\n      } else {\r\n        // variable existe avec la locale\r\n        if (!isUndefined(_obj[_locale])) {\r\n          finalObject = { ...finalObject, [key]: _obj[_locale] }\r\n\r\n          // variable n'existe pas\r\n        } else {\r\n          finalObject = { ...finalObject, [key]: null }\r\n        }\r\n      }\r\n    }\r\n\r\n    return finalObject\r\n  }\r\n\r\n  return recursiveCall(texts)\r\n}\r\n\r\nexport const formatTexts = (texts, locale) => reduceAppConfigTexts(texts, locale)\r\n","let _appConfig = {}\r\n\r\nexport const setDefaultAppConfig = appConfig => {\r\n  _appConfig = appConfig\r\n}\r\n\r\n// default {} since the backoffice does not have a default app config\r\nexport const getDefaultAppConfig = () => _appConfig || {}\r\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   if (_.isArray(objValue)) {\n *     return objValue.concat(srcValue);\n *   }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n  baseMerge(object, source, srcIndex, customizer);\n});\n\nmodule.exports = mergeWith;\n","import mergeWith from 'lodash/mergeWith'\r\nimport isNil from 'lodash/isNil'\r\nimport isArray from 'lodash/isArray'\r\nimport { getDefaultAppConfig } from './config'\r\n\r\n// mergeWith customizer when array, we don't want to merge, but to replace\r\nconst customizer = (objValue, srcValue) =>\r\n  isArray(objValue) && srcValue !== null ? srcValue : srcValue === null ? objValue : undefined\r\n\r\n/**\r\n * merge two config objects, using a customizer.\r\n * @param {object} defaultData\r\n * @param {object} currentData\r\n */\r\nexport const mergeConfigObject = (defaultData, currentData) =>\r\n  mergeWith(defaultData || {}, currentData || {}, customizer)\r\n\r\n/**\r\n * add default configs to the given config\r\n * @param {object} config base config\r\n */\r\nexport const mergeAppConfigWithDefault = (config = {}) => {\r\n  if (isNil(config)) {\r\n    config = {}\r\n  }\r\n  // Note: we don't handle default texts here since it is used to pass a config to our modules\r\n  // who don't requires texts.\r\n  // Plus we need a locale that we don't have here, and we could not change the app config texts if\r\n  // the locale change\r\n\r\n  // keys of the app config objects to apply defaults value to\r\n  const appConfigDefaultKeys = ['security', 'front', 'user']\r\n\r\n  let updatedConfig = config\r\n  appConfigDefaultKeys.forEach(key => {\r\n    updatedConfig[key] = mergeConfigObject(getDefaultAppConfig()[key], config[key], customizer)\r\n  })\r\n\r\n  return updatedConfig\r\n}\r\n","import invariant from 'invariant'\r\nimport isNaN from 'lodash/isNaN'\r\nimport { getLocale } from 'pmt-modules/i18n'\r\nimport { isKiosk } from 'pmt-modules/environment'\r\n\r\n/**\r\n * Currency is set as global var\r\n * we may set this for example when we fetch the restaurant\r\n * Default still remains as EUR\r\n */\r\nlet _currency = 'EUR'\r\n\r\nexport const setCurrency = currency => (_currency = currency)\r\n\r\n// deprecated, use formatPriceWithCurrency instead\r\n// this will allow to have 123$ or $123 depending on the locale, and so on\r\nexport const getCurrencySymbol = (currency = _currency) => {\r\n  switch (currency) {\r\n    case 'AED':\r\n      return 'د.إ'\r\n    case 'ALL':\r\n      return 'L'\r\n    case 'AMD':\r\n      return '֏'\r\n    case 'AOA':\r\n      return 'Kz'\r\n    case 'ARS':\r\n      return 'AR$'\r\n    case 'AUD':\r\n      return 'A$'\r\n    case 'AWG':\r\n      return 'ƒ'\r\n    case 'AZN':\r\n      return '₼'\r\n    case 'BAM':\r\n      return 'KM'\r\n    case 'BBD':\r\n      return 'Bds$'\r\n    case 'BDT':\r\n      return '৳'\r\n    case 'BGN':\r\n      return 'Лв'\r\n    case 'BHD':\r\n      return '.د.ب'\r\n    case 'BMD':\r\n      return '$'\r\n    case 'BND':\r\n      return 'B$'\r\n    case 'BOB':\r\n      return 'Bs.'\r\n    case 'BRL':\r\n      return 'R$'\r\n    case 'BSD':\r\n      return 'B$'\r\n    case 'BWP':\r\n      return 'P'\r\n    case 'BYN':\r\n      return 'Br'\r\n    case 'BZD':\r\n      return 'BZ$'\r\n    case 'CAD':\r\n      return 'C$'\r\n    case 'CHF':\r\n      return 'CHF'\r\n    case 'CLP':\r\n      return 'CLP$'\r\n    case 'CNH':\r\n      return '¥'\r\n    case 'CNY':\r\n      return '¥'\r\n    case 'COP':\r\n      return 'COL$'\r\n    case 'CRC':\r\n      return '₡'\r\n    case 'CUP':\r\n      return '₱'\r\n    case 'CVE':\r\n      return 'Esc'\r\n    case 'CZK':\r\n      return 'Kč'\r\n    case 'DJF':\r\n      return 'Fdj'\r\n    case 'DKK':\r\n      return 'kr'\r\n    case 'DOP':\r\n      return 'RD$'\r\n    case 'DZD':\r\n      return 'دج'\r\n    case 'EGP':\r\n      return 'E£'\r\n    case 'ETB':\r\n      return 'Br'\r\n    case 'EUR':\r\n      return '€'\r\n    case 'FJD':\r\n      return 'FJ$'\r\n    case 'FKP':\r\n      return '£'\r\n    case 'GBP':\r\n      return '£'\r\n    case 'GEL':\r\n      return '₾'\r\n    case 'GHS':\r\n      return 'GH₵'\r\n    case 'GIP':\r\n      return '£'\r\n    case 'GMD':\r\n      return 'D'\r\n    case 'GNF':\r\n      return 'FG'\r\n    case 'GTQ':\r\n      return 'Q'\r\n    case 'GYD':\r\n      return 'G$'\r\n    case 'HKD':\r\n      return 'HK$'\r\n    case 'HNL':\r\n      return 'L'\r\n    case 'HTG':\r\n      return 'G'\r\n    case 'HUF':\r\n      return 'Ft'\r\n    case 'IDR':\r\n      return 'Rp'\r\n    case 'ILS':\r\n      return '₪'\r\n    case 'INR':\r\n      return '₹'\r\n    case 'IQD':\r\n      return 'ع.د'\r\n    case 'ISK':\r\n      return 'kr'\r\n    case 'JMD':\r\n      return 'J$'\r\n    case 'JOD':\r\n      return 'JD'\r\n    case 'JPY':\r\n      return '¥'\r\n    case 'KES':\r\n      return 'KSh'\r\n    case 'KGS':\r\n      return 'сом'\r\n    case 'KHR':\r\n      return '៛'\r\n    case 'KMF':\r\n      return 'CF'\r\n    case 'KRW':\r\n      return '₩'\r\n    case 'KWD':\r\n      return 'KD'\r\n    case 'KYD':\r\n      return 'CI$'\r\n    case 'KZT':\r\n      return '₸'\r\n    case 'LAK':\r\n      return '₭'\r\n    case 'LBP':\r\n      return 'ل.ل'\r\n    case 'LKR':\r\n      return 'Rs'\r\n    case 'LYD':\r\n      return 'LD'\r\n    case 'MAD':\r\n      return 'د.م.'\r\n    case 'MDL':\r\n      return 'L'\r\n    case 'MKD':\r\n      return 'ден'\r\n    case 'MMK':\r\n      return 'K'\r\n    case 'MNT':\r\n      return '₮'\r\n    case 'MOP':\r\n      return 'MOP$'\r\n    case 'MRU':\r\n      return 'UM'\r\n    case 'MUR':\r\n      return '₨'\r\n    case 'MVR':\r\n      return 'Rf'\r\n    case 'MWK':\r\n      return 'MK'\r\n    case 'MXN':\r\n      return 'MX$'\r\n    case 'MYR':\r\n      return 'RM'\r\n    case 'MZN':\r\n      return 'MT'\r\n    case 'NAD':\r\n      return 'N$'\r\n    case 'NGN':\r\n      return '₦'\r\n    case 'NIO':\r\n      return 'C$'\r\n    case 'NOK':\r\n      return 'kr'\r\n    case 'NPR':\r\n      return '₨'\r\n    case 'NZD':\r\n      return 'NZ$'\r\n    case 'OMR':\r\n      return '﷼'\r\n    case 'PAB':\r\n      return 'B/.'\r\n    case 'PEN':\r\n      return 'S/'\r\n    case 'PGK':\r\n      return 'K'\r\n    case 'PHP':\r\n      return '₱'\r\n    case 'PKR':\r\n      return '₨'\r\n    case 'PLN':\r\n      return 'zł'\r\n    case 'PYG':\r\n      return '₲'\r\n    case 'QAR':\r\n      return '﷼'\r\n    case 'RON':\r\n      return 'lei'\r\n    case 'RSD':\r\n      return 'дин'\r\n    case 'RUB':\r\n      return '₽'\r\n    case 'RWF':\r\n      return 'FRw'\r\n    case 'SAR':\r\n      return '﷼'\r\n    case 'SBD':\r\n      return 'SI$'\r\n    case 'SCR':\r\n      return '₨'\r\n    case 'SEK':\r\n      return 'kr'\r\n    case 'SGD':\r\n      return 'S$'\r\n    case 'SHP':\r\n      return '£'\r\n    case 'SLE':\r\n      return 'Le'\r\n    case 'SOS':\r\n      return 'S'\r\n    case 'SRD':\r\n      return 'SR$'\r\n    case 'STN':\r\n      return 'Db'\r\n    case 'SVC':\r\n      return '$'\r\n    case 'SZL':\r\n      return 'L'\r\n    case 'THB':\r\n      return '฿'\r\n    case 'TND':\r\n      return 'د.ت'\r\n    case 'TOP':\r\n      return 'T$'\r\n    case 'TRY':\r\n      return '₺'\r\n    case 'TTD':\r\n      return 'TT$'\r\n    case 'TWD':\r\n      return 'NT$'\r\n    case 'TZS':\r\n      return 'TSh'\r\n    case 'UAH':\r\n      return '₴'\r\n    case 'UGX':\r\n      return 'USh'\r\n    case 'USD':\r\n      return '$'\r\n    case 'UYU':\r\n      return '$U'\r\n    case 'UZS':\r\n      return 'лв'\r\n    case 'VEF':\r\n      return 'Bs'\r\n    case 'VND':\r\n      return '₫'\r\n    case 'VUV':\r\n      return 'VT'\r\n    case 'WST':\r\n      return 'WS$'\r\n    case 'XAF':\r\n      return 'FCFA'\r\n    case 'XCD':\r\n      return 'EC$'\r\n    case 'XCG':\r\n      return 'XCG'\r\n    case 'XOF':\r\n      return 'CFA'\r\n    case 'XPF':\r\n      return '₣'\r\n    case 'YER':\r\n      return '﷼'\r\n    case 'ZAR':\r\n      return 'R'\r\n    case 'ZMW':\r\n      return 'ZK'\r\n    default:\r\n      return currency\r\n  }\r\n}\r\n\r\n/**\r\n * ISO_4217 format expected\r\n * @link https://www.wikiwand.com/en/ISO_4217\r\n */\r\nexport const Currencies = {\r\n  AED: 'AED', // UAE Dirham\r\n  ALL: 'ALL', // Albanian Lek\r\n  AMD: 'AMD', // Armenian Dram\r\n  AOA: 'AOA', // Angolan Kwanza\r\n  ARS: 'ARS', // Nuevo Argentine Peso\r\n  AUD: 'AUD', // Australian Dollar\r\n  AWG: 'AWG', // Aruban Guilder\r\n  AZN: 'AZN', // Azerbaijani manat\r\n  BAM: 'BAM', // Bosnia and Herzegovina Convertible Marks\r\n  BBD: 'BBD', // Barbados Dollar\r\n  BDT: 'BDT', // Bangladesh Taka\r\n  BGN: 'BGN', // New Bulgarian Lev\r\n  BHD: 'BHD', // Bahraini Dinar\r\n  BMD: 'BMD', // Bermudian Dollar\r\n  BND: 'BND', // Brunei Dollar\r\n  BOB: 'BOB', // Bolivia Boliviano\r\n  BRL: 'BRL', // Brazilian Real\r\n  BSD: 'BSD', // Bahamian Dollar\r\n  BWP: 'BWP', // Botswana Pula\r\n  BYN: 'BYN', // New Belarusian Ruble\r\n  BZD: 'BZD', // Belize Dollar\r\n  CAD: 'CAD', // Canadian Dollar\r\n  CHF: 'CHF', // Swiss Franc\r\n  CLP: 'CLP', // Chilean Peso\r\n  CNH: 'CNH', // Yuan Renminbi (offshore)\r\n  CNY: 'CNY', // Yuan Renminbi (onshore)\r\n  COP: 'COP', // Colombian Peso\r\n  CRC: 'CRC', // Costa Rican Colon\r\n  CUP: 'CUP', // Cuban Peso\r\n  CVE: 'CVE', // Cape Verdi Escudo\r\n  CZK: 'CZK', // Czech Koruna\r\n  DJF: 'DJF', // Djibouti Franc\r\n  DKK: 'DKK', // Danish Krone\r\n  DOP: 'DOP', // Dominican Republic Peso\r\n  DZD: 'DZD', // Algerian Dinar\r\n  EGP: 'EGP', // Egyptian Pound\r\n  ETB: 'ETB', // Ethiopian Birr\r\n  EUR: 'EUR', // Euro\r\n  FJD: 'FJD', // Fiji Dollar\r\n  FKP: 'FKP', // Falkland Islands Pound\r\n  GBP: 'GBP', // Pound Sterling\r\n  GEL: 'GEL', // Georgian Lari\r\n  GHS: 'GHS', // Ghanaian Cedi (3rd)\r\n  GIP: 'GIP', // Gibraltar Pound\r\n  GMD: 'GMD', // Gambia Delasi\r\n  GNF: 'GNF', // Guinea Franc\r\n  GTQ: 'GTQ', // Guatemala Quetzal\r\n  GYD: 'GYD', // Guyanese Dollar\r\n  HKD: 'HKD', // Hong Kong Dollar\r\n  HNL: 'HNL', // Honduras Lempira\r\n  HTG: 'HTG', // Haitian Gourde\r\n  HUF: 'HUF', // Hungarian Forint\r\n  IDR: 'IDR', // Indonesian Rupiah\r\n  ILS: 'ILS', // New Israeli Scheqel\r\n  INR: 'INR', // Indian Rupee\r\n  IQD: 'IQD', // Iraqi Dinar\r\n  ISK: 'ISK', // Iceland Krona\r\n  JMD: 'JMD', // Jamaican Dollar\r\n  JOD: 'JOD', // Jordanian Dinar\r\n  JPY: 'JPY', // Japanese Yen\r\n  KES: 'KES', // Kenyan Shilling\r\n  KGS: 'KGS', // Kyrgyzstan Som\r\n  KHR: 'KHR', // Cambodia Riel\r\n  KMF: 'KMF', // Comoro Franc\r\n  KRW: 'KRW', // South-Korean Won\r\n  KWD: 'KWD', // Kuwaiti Dinar\r\n  KYD: 'KYD', // Cayman Islands Dollar\r\n  KZT: 'KZT', // Kazakhstani Tenge\r\n  LAK: 'LAK', // Laos Kip\r\n  LBP: 'LBP', // Lebanese Pound\r\n  LKR: 'LKR', // Sri Lanka Rupee\r\n  LYD: 'LYD', // Libyan Dinar\r\n  MAD: 'MAD', // Moroccan Dirham\r\n  MDL: 'MDL', // Moldovia Leu\r\n  MKD: 'MKD', // Macedonian Denar\r\n  MMK: 'MMK', // Myanmar Kyat\r\n  MNT: 'MNT', // Mongolia Tugrik\r\n  MOP: 'MOP', // Macau Pataca\r\n  MRU: 'MRU', // Mauritania Ouguiya\r\n  MUR: 'MUR', // Mauritius Rupee\r\n  MVR: 'MVR', // Maldives Rufiyaa\r\n  MWK: 'MWK', // Malawi Kwacha\r\n  MXN: 'MXN', // Mexican Peso\r\n  MYR: 'MYR', // Malaysian Ringgit\r\n  MZN: 'MZN', // Mozambican Metical\r\n  NAD: 'NAD', // Namibian Dollar\r\n  NGN: 'NGN', // Nigerian Naira\r\n  NIO: 'NIO', // Nicaragua Cordoba Oro\r\n  NOK: 'NOK', // Norwegian Krone\r\n  NPR: 'NPR', // Nepalese Rupee\r\n  NZD: 'NZD', // New Zealand Dollar\r\n  OMR: 'OMR', // Rial Omani\r\n  PAB: 'PAB', // Panamanian Balboa\r\n  PEN: 'PEN', // Peruvian Nuevo Sol\r\n  PGK: 'PGK', // New Guinea Kina\r\n  PHP: 'PHP', // Philippine Peso\r\n  PKR: 'PKR', // Pakistan Rupee\r\n  PLN: 'PLN', // New Polish Zloty\r\n  PYG: 'PYG', // Paraguay Guarani\r\n  QAR: 'QAR', // Qatari Rial\r\n  RON: 'RON', // New Romanian Lei\r\n  RSD: 'RSD', // Serbian Dinar\r\n  RUB: 'RUB', // Russian Ruble\r\n  RWF: 'RWF', // Rwanda Franc\r\n  SAR: 'SAR', // Saudi Riyal\r\n  SBD: 'SBD', // Solomon Island Dollar\r\n  SCR: 'SCR', // Seychelles Rupee\r\n  SEK: 'SEK', // Swedish Krone\r\n  SGD: 'SGD', // Singapore Dollar\r\n  SHP: 'SHP', // St. Helena Pound\r\n  SLE: 'SLE', // Sierra Leone Leone\r\n  SOS: 'SOS', // Somalia Shilling\r\n  SRD: 'SRD', // Surinamese dollar\r\n  STN: 'STN', // Sao Tome & Principe Dobra\r\n  SVC: 'SVC', // El Salvador Colón\r\n  SZL: 'SZL', // Swaziland Lilangeni\r\n  THB: 'THB', // Thai Baht\r\n  TND: 'TND', // Tunisian Dinar\r\n  TOP: 'TOP', // Tonga Pa'anga\r\n  TRY: 'TRY', // New Turkish Lira\r\n  TTD: 'TTD', // Trinidad & Tobago Dollar\r\n  TWD: 'TWD', // New Taiwan Dollar\r\n  TZS: 'TZS', // Tanzanian Shilling\r\n  UAH: 'UAH', // Ukraine Hryvnia\r\n  UGX: 'UGX', // Uganda Shilling\r\n  USD: 'USD', // US Dollars\r\n  UYU: 'UYU', // Peso Uruguayo\r\n  UZS: 'UZS', // Uzbekistani Som\r\n  VEF: 'VEF', // Venezuelan Bolívar\r\n  VND: 'VND', // Vietnamese New Dong\r\n  VUV: 'VUV', // Vanuatu Vatu\r\n  WST: 'WST', // Samoan Tala\r\n  XAF: 'XAF', // CFA Franc BEAC\r\n  XCG: 'XCG', // Caribbean Guilder\r\n  XCD: 'XCD', // East Caribbean Dollar\r\n  XOF: 'XOF', // CFA Franc BCEAO\r\n  XPF: 'XPF', // CFP Franc\r\n  YER: 'YER', // Yemeni Rial\r\n  ZAR: 'ZAR', // South African Rand\r\n  ZMW: 'ZMW', // Zambian Kwacha\r\n}\r\n\r\nexport const getFloorAmount = amount => (Math.floor(amount * 100) / 100).toFixed(2)\r\n\r\n// this transforms the amount in a formatted string\r\nexport const getRoundAmount = amount => (Math.round(amount * 100) / 100).toFixed(2)\r\n\r\n// this rounds the amount (but it's still a number)\r\nexport const getRoundAmountNumber = amount => Math.round(amount * 100) / 100\r\n\r\nexport const getCeilAmount = amount => (Math.ceil(amount * 100) / 100).toFixed(2)\r\n\r\n// result sometimes goes from 9.7 to 969.9999999999999, so we round it.\r\nexport const getAmountInCents = amount => Math.round(amount * 100)\r\n\r\n// Helper: check if currency is a valid ISO 4217 code\r\nconst isValidCurrency = code => {\r\n  try {\r\n    new Intl.NumberFormat('en', { style: 'currency', currency: code })\r\n    return true\r\n  } catch {\r\n    return false\r\n  }\r\n}\r\n\r\nexport const formatPriceWithCurrency = (price, currency = _currency) => {\r\n  invariant(!isNaN(price), `${price} is not a number`)\r\n  let locale = getLocale() || 'fr'\r\n\r\n  // If unknown or invalid currency → use ¤\r\n  if (!currency || !isValidCurrency(currency)) {\r\n    return new Intl.NumberFormat(locale, {\r\n      style: 'currency',\r\n      currency: 'XXX', // ISO code for \"no currency\". should produce ¤ in most locales.\r\n      currencyDisplay: 'symbol',\r\n    })\r\n      .format(price)\r\n      .replace('XXX', multipleOrUnknownCurrency) // force ¤ if needed\r\n  }\r\n\r\n  if (currency === 'CHF') {\r\n    // for swiss amounts, we want to be sure the amount will be formatted in the \"swiss\" way,\r\n    // aka it-CH/de-CH/fr-CH, even if the user's browser is configured as  \"it\" or \"it_IT\"\r\n    // (because swiss people don't bother to configure computer/browser with the country-related locale,\r\n    // but complain when the formatting is not as they are used to)\r\n    if (locale.startsWith('it')) {\r\n      locale = 'it-CH'\r\n    }\r\n    if (locale.startsWith('fr')) {\r\n      locale = 'fr-CH'\r\n    }\r\n    if (locale.startsWith('de')) {\r\n      locale = 'de-CH'\r\n    }\r\n  }\r\n  return new Intl.NumberFormat(locale, {\r\n    style: 'currency',\r\n    currency: currency,\r\n    // we don't define minimumFractionDigits / maximumFractionDigits so the decimals will be defined based on the currency:\r\n    // Most currencies (e.g., USD, EUR) default to 2 decimal places.\r\n    // Currencies like ISK, JPY (without fractional units) default to 0 decimal places.\r\n    // Certain currencies like KWD (Kuwaiti Dinar) default to 3 decimal places.\r\n\r\n    // kiosk is using chrome 65, which reached its end of support on April 24, 2018.\r\n    currencyDisplay: isKiosk() ? 'symbol' : 'narrowSymbol', // to have $ and not US$ (= the daily-life symbol, and not the very-specific symbol). The ambiguity (between US$ and CA$, for example) should not be a problem, as the restaurant belongs to only one country, so the $ symbol is the one of this country\r\n  }).format(price)\r\n}\r\n\r\n/**\r\n * \"step\" value to use in an input of type \"number\"\r\n */\r\nexport const getStepValue = (currency = _currency) => {\r\n  // Use Intl.NumberFormat to determine the fraction digits for the selected currency\r\n  const formatter = new Intl.NumberFormat(undefined, {\r\n    style: 'currency',\r\n    currency: currency,\r\n  })\r\n  const fractionDigits = formatter.resolvedOptions().maximumFractionDigits\r\n\r\n  // Calculate the step based on fraction digits (e.g., 2 -> 0.01, 0 -> 1)\r\n  const stepValue = Math.pow(10, -fractionDigits)\r\n  return stepValue\r\n}\r\n\r\nexport const formatPrice = price => {\r\n  const priceAsFloat = price !== null ? parseFloat(price) : 0\r\n  return priceAsFloat.toLocaleString(getLocale() || 'fr', {\r\n    minimumFractionDigits: 2,\r\n    maximumFractionDigits: 2,\r\n  })\r\n}\r\n\r\nexport const formatPercent = v => `${v} %`\r\n\r\nexport const convertMillionPrice = price => parseFloat(price / 1000000)\r\n\r\nexport const formatMillionPrice = price => formatPrice(convertMillionPrice(price))\r\n\r\nexport const multipleOrUnknownCurrency = '¤'\r\n\r\nexport const formatMillionPriceWithCurrency = (price, currency = multipleOrUnknownCurrency) =>\r\n  formatPriceWithCurrency(convertMillionPrice(price), currency)\r\n\r\nexport const truncatePrice = price => {\r\n  return parseFloat(price.toFixed(2))\r\n}\r\n","import invariant from 'invariant'\r\nimport isArray from 'lodash/isArray'\r\nimport isNil from 'lodash/isNil'\r\nimport isString from 'lodash/isString'\r\nimport isFunction from 'lodash/isFunction'\r\n\r\nconst createDeepFormatter = (itemFormatter, getChildren, updateChildren) => (item, props) => {\r\n  invariant(isFunction(itemFormatter), `'itemFormatter' must be a function`)\r\n  invariant(\r\n    isFunction(getChildren) || isString(getChildren),\r\n    `'getChildren' must be a function or a string`\r\n  )\r\n  // if getChildren is a string, no need of updateChildren\r\n  invariant(\r\n    isFunction(updateChildren) || isString(getChildren),\r\n    `'updateChildren' must be a function`\r\n  )\r\n\r\n  item = itemFormatter(item)\r\n\r\n  let children\r\n\r\n  if (isFunction(getChildren)) {\r\n    children = getChildren(item)\r\n  } else {\r\n    // getChildren is a string, that define the path to retrieve the children\r\n    children = item[getChildren]\r\n  }\r\n\r\n  if (!isNil(children)) {\r\n    // true if the children is an array, false otherwise\r\n    if (!isArray(children)) {\r\n      children = [children]\r\n    }\r\n\r\n    const deepFormatter = createDeepFormatter(itemFormatter, getChildren, updateChildren)\r\n\r\n    let formattedChildren = []\r\n    children.forEach(child => {\r\n      if (child) {\r\n        formattedChildren.push(deepFormatter(child, props))\r\n      }\r\n    })\r\n    if (isFunction(getChildren)) {\r\n      item = updateChildren(item, formattedChildren)\r\n    } else {\r\n      // getChildren is a string, that define the path to retrieve the children\r\n      item[getChildren] = formattedChildren\r\n    }\r\n  }\r\n\r\n  return item\r\n}\r\n\r\nexport default createDeepFormatter\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isArray from 'lodash/isArray'\r\n\r\nimport invariant from 'invariant'\r\n\r\nconst createFormatter = (...functions) => {\r\n  return (data, props = {}) => {\r\n    invariant(\r\n      isNil(props) || typeof props === 'object',\r\n      `createFormatter: format props must be an object not ${props}`\r\n    )\r\n\r\n    if (isNil(data)) {\r\n      return null\r\n    }\r\n\r\n    let res = isArray(data) ? [...data] : { ...data }\r\n\r\n    if (isEmpty(functions)) {\r\n      return res\r\n    }\r\n\r\n    functions.forEach(func => {\r\n      invariant(isFunction(func), 'invalid parameter pass to createFormatter')\r\n\r\n      const funcRes = func(res, props)\r\n\r\n      invariant(!isNil(funcRes), `[formatter] invalid return, data is nil on ${func}`)\r\n\r\n      res = funcRes\r\n    })\r\n\r\n    return res\r\n  }\r\n}\r\n\r\nexport default createFormatter\r\n","import isArray from 'lodash/isArray'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nconst createListFormatter = (itemFormatter, callback = null) => (list, props) => {\r\n  invariant(\r\n    isNil(props) || typeof props === 'object',\r\n    `createListFormatter: format props must be an object not ${props}`\r\n  )\r\n  invariant(\r\n    isArray(list),\r\n    `createListFormatter: list to format is not array ${JSON.stringify(list)}`\r\n  )\r\n  // TODO:\r\n  // invariant((callback === null || isFunction(list)), 'callback is not a function')\r\n\r\n  const listResult = (list || []).map(item => itemFormatter(item, props))\r\n\r\n  return callback ? callback(listResult) : listResult\r\n}\r\n\r\nexport default createListFormatter\r\n","import forEach from 'lodash/forEach'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nconst createMapFormatter = itemFormatter => (mapObject, props) => {\r\n  invariant(\r\n    isNil(props) || typeof props === 'object',\r\n    `createMapFormatter: format props must be an object not ${props}`\r\n  )\r\n\r\n  const res = {}\r\n  forEach(mapObject || {}, (item, key) => {\r\n    res[key] = itemFormatter(item, props)\r\n  })\r\n\r\n  return res\r\n}\r\n\r\nexport default createMapFormatter\r\n","var baseIndexOf = require('./_baseIndexOf'),\n    isArrayLike = require('./isArrayLike'),\n    isString = require('./isString'),\n    toInteger = require('./toInteger'),\n    values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n  collection = isArrayLike(collection) ? collection : values(collection);\n  fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n  var length = collection.length;\n  if (fromIndex < 0) {\n    fromIndex = nativeMax(length + fromIndex, 0);\n  }\n  return isString(collection)\n    ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n    : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isFunction from 'lodash/isFunction'\r\nimport includes from 'lodash/includes'\r\n\r\nimport invariant from 'invariant'\r\n\r\nconst createSubObjectFormatter = (path, ...functions) => {\r\n  return (data, props = {}) => {\r\n    if (isNil(data)) {\r\n      return null\r\n    }\r\n\r\n    invariant(!includes(path, '.'), `invalid path ${path}, nested paths not handled.`)\r\n\r\n    let parentObject = { ...data }\r\n\r\n    if (isEmpty(functions)) {\r\n      return parentObject\r\n    }\r\n\r\n    functions.forEach(func => {\r\n      invariant(isFunction(func), 'invalid parameter pass to createSubObjectFormatter')\r\n\r\n      if (!isNil(parentObject[path])) {\r\n        const funcRes = func(parentObject[path], props)\r\n        invariant(!isNil(funcRes), `[formatter] invalid return, data is nil on ${func}`)\r\n        parentObject[path] = funcRes\r\n      }\r\n    })\r\n\r\n    return parentObject\r\n  }\r\n}\r\n\r\nexport default createSubObjectFormatter\r\n","export const UnavailabilityReason = {\r\n  ORDER_MODE: 'Order mode not available for this item',\r\n  OPENING_HOURS: 'Opening hours not available for this item',\r\n  AVAILABILITY_DATES: 'Dates not available for this item',\r\n  PRODUCTS_NOT_AVAILABLE_FOR_MENU_PART: \"Menu's part is not available\",\r\n  STOCK: 'Item has no stock',\r\n  EMPTY: 'Category is empty of product / menu / subcategory',\r\n  EMPTY_SUBCATEGORIES: 'Category only contains empty subcategories',\r\n  ALL_ITEMS_SHOULD_NOT_BE_DISPLAYED: 'All items should not be displayed',\r\n  ONE_MANDATORY_OPTION_NOT_AVAILABLE: \"One product's mandatory option is not available\",\r\n}\r\n\r\nexport const CatalogItemType = {\r\n  CATEGORY: 0,\r\n  MENU: 1,\r\n  PRODUCT: 2,\r\n}\r\n\r\n/**\r\n * Defines all the possible type values for a CartModifier's action\r\n */\r\nexport const CartModifierActionType = {\r\n  DISCOUNT_AMOUNT: 'DISCOUNT_AMOUNT',\r\n  DISCOUNT_PERCENTAGE: 'DISCOUNT_PERCENTAGE',\r\n}\r\n\r\nexport const CartModifierTargetType = {\r\n  /**\r\n   * a list of products, menus and/or categories\r\n   */\r\n  SPECIFIC_ITEMS: 'SPECIFIC_ITEMS',\r\n\r\n  /**\r\n   * all but a list of products, menus and/or categories\r\n   */\r\n  ALL_ITEMS_EXCEPT: 'ALL_ITEMS_EXCEPT',\r\n\r\n  /**\r\n   * on the shipping cost\r\n   */\r\n  SHIPPING_COST: 'SHIPPING_COST',\r\n\r\n  /**\r\n   * on the total of the cart\r\n   */\r\n  TOTAL: 'TOTAL',\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getForCurrentLocale } from 'pmt-modules/i18n'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { createSubObjectFormatter, createListFormatter, createFormatter } from 'pmt-utils/format'\r\nimport { CartModifierActionType, CartModifierTargetType } from '../constants'\r\n\r\nconst removeComplexCartModifier = cartModifiers => {\r\n  const newCartModifiers = (cartModifiers || []).filter(cartModifier => !cartModifier.complex)\r\n\r\n  return !isEmpty(newCartModifiers) ? newCartModifiers : null\r\n}\r\n\r\nexport const formatItemsCartModifiers = items => {\r\n  items = items.map(item => {\r\n    item.cartModifiers.list = removeComplexCartModifier(item.cartModifiers.list)\r\n    item.hasCartModifier = !isNil(item.cartModifiers.list)\r\n\r\n    if (item.hasCartModifier) {\r\n      item.cartModifiers.newPriceFormatted = formatPriceWithCurrency(item.cartModifiers.newPrice)\r\n      item.basePrice = item.price\r\n      item.basePriceFormatted = item.priceFormatted\r\n      item.price = item.cartModifiers.newPrice\r\n      item.priceFormatted = item.cartModifiers.newPriceFormatted\r\n    }\r\n    return item\r\n  })\r\n\r\n  return items\r\n}\r\n\r\nconst recursiveFormatSubcategoriesCartModifiers = category => {\r\n  if (!isEmpty(category.categories)) {\r\n    category.categories = category.categories.map(category => {\r\n      return recursiveFormatSubcategoriesCartModifiers(category)\r\n    })\r\n  }\r\n\r\n  category.items = formatItemsCartModifiers(category.items)\r\n\r\n  return category\r\n}\r\n\r\nexport const formatCartModifier = createFormatter(recursiveFormatSubcategoriesCartModifiers)\r\n\r\nexport const formatCartModifiers = createFormatter(\r\n  createSubObjectFormatter('categories', createListFormatter(formatCartModifier))\r\n)\r\n\r\nexport const formatModifier = createFormatter(modifier => {\r\n  modifier.name = getForCurrentLocale(modifier.localizedNames)\r\n  modifier.description = getForCurrentLocale(modifier.localizedDescriptions)\r\n\r\n  modifier.isAutomatic = modifier.automatic\r\n  modifier.isComplex = modifier.condition.itemCondition !== null\r\n  modifier.isTargetTypeTotal = modifier.target.type === CartModifierTargetType.TOTAL\r\n\r\n  if (modifier.action.type === CartModifierActionType.DISCOUNT_AMOUNT) {\r\n    modifier.action.valueFormatted = formatPriceWithCurrency(modifier.action.value)\r\n  } else if (modifier.action.type === CartModifierActionType.DISCOUNT_PERCENTAGE) {\r\n    modifier.action.valueFormatted = `${modifier.action.value} %`\r\n  }\r\n\r\n  return modifier\r\n})\r\n\r\nexport const formatModifiers = createFormatter(createListFormatter(formatModifier))\r\n","export const FeeSettingStatus = {\r\n  ENABLED: 'ENABLED',\r\n\r\n  DISABLED: 'DISABLED',\r\n}\r\n\r\nexport const FeeType = {\r\n  DELIVERY: 'DELIVERY',\r\n\r\n  SERVICE: 'SERVICE',\r\n}\r\n","import { getForCurrentLocale } from 'pmt-modules/i18n/'\r\n\r\nimport { formatPercent, formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\n\r\nimport { FeeSettingStatus, FeeType } from '../constants'\r\n\r\n//  {\r\n//   \"type\": \"DELIVERY\",\r\n//   \"name\": [\r\n//     {\r\n//       \"locale\": \"fr-FR\",\r\n//       \"text\": \"Frais de livraison\"\r\n//     },\r\n//     {\r\n//       \"locale\": \"en-US\",\r\n//       \"text\": \"Delivery price\"\r\n//     }\r\n//   ],\r\n//   \"amountIncludingTax\": 2.42,\r\n//   \"taxPercent\": 20,\r\n//   \"taxAmount\": 0.4\r\n// }\r\n\r\nconst formatOrderFee = orderFee => {\r\n  orderFee.isStatusEnabled = orderFee.status === FeeSettingStatus.ENABLED\r\n\r\n  orderFee.isTypeDelivery = orderFee.type === FeeType.DELIVERY\r\n  orderFee.isTypeService = orderFee.type === FeeType.SERVICE\r\n\r\n  orderFee.nameFormatted = getForCurrentLocale(orderFee.name)\r\n  // TODO: i18n\r\n  orderFee.typeFormatted = orderFee.type\r\n  orderFee.publicDescriptionFormatted = getForCurrentLocale(orderFee.publicDescription)\r\n\r\n  orderFee.amountIncludingTaxFormatted = formatPriceWithCurrency(orderFee.amountIncludingTax)\r\n\r\n  orderFee.minimumPriceForFreeFormatted = formatPriceWithCurrency(orderFee.minimumPriceForFree)\r\n\r\n  orderFee.taxPercentFormatted = formatPercent(orderFee.taxPercent)\r\n\r\n  orderFee.taxAmountFormatted = formatPercent(orderFee.taxAmount)\r\n\r\n  return orderFee\r\n}\r\n\r\nexport const formatOrderFees = createFormatter(createListFormatter(formatOrderFee))\r\n","import { getForCurrentLocale } from 'pmt-modules/i18n/'\r\n\r\nimport { formatPercent, formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\n\r\nimport { FeeSettingStatus, FeeType } from '../constants'\r\n\r\n//  \"fees\": [\r\n//     {\r\n//       \"type\": \"DELIVERY\", // DELIVERY / SERVICE\r\n//       \"status\": \"ENABLED\",\r\n//       \"name\": [\r\n//         {\r\n//           \"locale\": \"fr-FR\",\r\n//           \"text\": \"Frais de livraison\"\r\n//         },\r\n//         {\r\n//           \"locale\": \"en-US\",\r\n//           \"text\": \"Delivery\"\r\n//         }\r\n//       ],\r\n//       \"publicDescription\": [\r\n//         {\r\n//           \"locale\": \"fr-FR\",\r\n//           \"text\": \"Explication du pourquoi de la fee\"\r\n//         },\r\n//         {\r\n//           \"locale\": \"en-US\",\r\n//           \"text\": \"delivery fee explanation\"\r\n//         }\r\n//       ],\r\n//       \"privateComment\": \"comment for the pro only: why we do this\",\r\n//       \"settings\": {\r\n//         \"amountIncludingTax\": 4.42,\r\n//         \"taxPercent\": 20,\r\n//         \"minimumPriceForFree\": 20,\r\n//         \"filters\": {\r\n//           \"modes\": [\r\n//             2\r\n//           ]\r\n//         },\r\n//         \"posProductId\": null\r\n//       }\r\n//     }\r\n//   ]\r\n\r\nconst formatOrderSettingsFee = feeSetting => {\r\n  feeSetting.isStatusEnabled = feeSetting.status === FeeSettingStatus.ENABLED\r\n\r\n  feeSetting.isTypeDelivery = feeSetting.type === FeeType.DELIVERY\r\n  feeSetting.isTypeService = feeSetting.type === FeeType.SERVICE\r\n\r\n  feeSetting.nameFormatted = getForCurrentLocale(feeSetting.name)\r\n  feeSetting.publicDescriptionFormatted = getForCurrentLocale(feeSetting.publicDescription)\r\n\r\n  feeSetting.settings.amountIncludingTaxFormatted = formatPriceWithCurrency(\r\n    feeSetting.settings.amountIncludingTax\r\n  )\r\n  feeSetting.settings.minimumPriceForFreeFormatted = formatPriceWithCurrency(\r\n    feeSetting.settings.minimumPriceForFree\r\n  )\r\n  feeSetting.settings.taxPercentFormatted = formatPercent(feeSetting.settings.taxPercent)\r\n\r\n  feeSetting.settings.taxAmountFormatted = formatPercent(feeSetting.settings.taxAmount)\r\n\r\n  // minimum to 0 === no minimum\r\n  feeSetting.settings.hasMinimumPriceForFree = feeSetting.settings.minimumPriceForFree > 0\r\n\r\n  return feeSetting\r\n}\r\n\r\nexport const formatOrderSettingsFees = createFormatter(createListFormatter(formatOrderSettingsFee))\r\n","import { createFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { formatPrice, formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\n// TODO: handle currency\r\nconst formatEntryPrice = entry => {\r\n  // entry price comes as a total price, so we divide quantity to get unit price\r\n  entry.unitPrice = entry.price / (entry.quantity || 1)\r\n  entry.unitPriceFormatted = formatPriceWithCurrency(entry.unitPrice || 0)\r\n\r\n  entry.priceFormatted = formatPrice(entry.price)\r\n  entry.priceWithCurrencyFormatted = formatPriceWithCurrency(entry.price)\r\n\r\n  return entry\r\n}\r\n\r\nconst formatEntry = createFormatter(formatEntryPrice)\r\n\r\nexport const formatEntries = createFormatter(createListFormatter(formatEntry))\r\n","import { createFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nimport { formatEntries } from './entry'\r\n\r\nconst formatTableNumber = check => {\r\n  // TODO\r\n  check.tableNumberLabel = `Table ${check.tableNumber}`\r\n  return check\r\n}\r\n\r\nconst formatTotal = check => {\r\n  check.totalFormatted = formatPriceWithCurrency(check.total, check.currency)\r\n  check.tips = check.tips || 0\r\n  check.totalWithoutTipsFormatted = formatPriceWithCurrency(\r\n    check.total - check.tips,\r\n    check.currency\r\n  )\r\n  check.outstandingBalanceFormatted = formatPriceWithCurrency(\r\n    check.outstandingBalance,\r\n    check.currency\r\n  )\r\n\r\n  check.hasOutstandingBalance = check.outstandingBalance > 0\r\n\r\n  check.hasOverPayment = check.outstandingBalance < 0\r\n  check.hasUnderPayment = check.outstandingBalance > 0 && check.outstandingBalance !== check.total\r\n\r\n  if (check.hasOverPayment) {\r\n    check.outstandingBalanceOverPaymentFormatted = formatPriceWithCurrency(\r\n      -check.outstandingBalance,\r\n      check.currency\r\n    )\r\n  }\r\n  if (check.hasUnderPayment) {\r\n    check.outstandingBalanceUnderPaymentFormatted = formatPriceWithCurrency(\r\n      check.outstandingBalance,\r\n      check.currency\r\n    )\r\n  }\r\n  return check\r\n}\r\n\r\nexport const formatCheck = createFormatter(\r\n  formatTableNumber,\r\n  formatTotal,\r\n  createSubObjectFormatter('entries', formatEntries)\r\n)\r\n","import isNil from 'lodash/isNil'\r\n\r\n/**\r\n * Data neeeded for 3DS v2\r\n *\r\n * https://www.notion.so/paymytable/Mangopay-3DS2-543d705dd4534a908b3dc1a64882e7a6.\r\n */\r\nexport const getAsyncPaymentBrowserInfo = () => ({\r\n  colorDepth: window.screen.colorDepth,\r\n  javaEnabled: navigator.javaEnabled(),\r\n  javascriptEnabled: true,\r\n  language: navigator.language || navigator.userLanguage,\r\n  screenHeight: window.screen.height,\r\n  screenWidth: window.screen.width,\r\n  timeZoneOffset: new Date().getTimezoneOffset().toString(),\r\n  userAgent: navigator.userAgent,\r\n})\r\n\r\n// taken from https://cdn.paymytable.com/outdatedBrowser.js (detectBrowser)\r\n// instead we could use https://github.com/lancedikson/bowser\r\n//\r\n// /!\\ do not use for audit, we fallback to the current user agent.\r\nexport const getBrowserInfo = () => {\r\n  var ua = navigator.userAgent,\r\n    tem,\r\n    M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || []\r\n  if (/trident/i.test(M[1])) {\r\n    tem = /\\brv[ :]+(\\d+)/g.exec(ua) || []\r\n    return { name: 'IE', version: tem[1] || '' }\r\n  }\r\n  if (M[1] === 'Chrome') {\r\n    tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/)\r\n    if (tem != null) return { name: tem[1].replace('OPR', 'Opera'), version: tem[2] }\r\n  }\r\n  M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?']\r\n  if ((tem = ua.match(/version\\/(\\d+)/i)) != null) M.splice(1, 1, tem[1])\r\n  return { name: M[0], version: M[1] }\r\n}\r\n\r\n/**\r\n * Extracts the browser name and version number from the given user agent string.\r\n *\r\n * /!\\ since it is used for audit, we do not fallback to the current user agent.\r\n *\r\n * @param userAgent\r\n *            The user agent string to parse. If not specified, the contents of\r\n *            navigator.userAgent are parsed.\r\n * @param elements\r\n *            How many elements of the version number should be returned. A\r\n *            value of 0 means the whole version. If not specified, defaults to\r\n *            2 (major and minor release number).\r\n * @return A string containing the browser name and version number, or null if\r\n *         the user agent string is unknown.\r\n *\r\n * http://odyniec.net/blog/2010/09/decrypting-the-user-agent-string-in-javascript/\r\n */\r\nexport const identifyBrowserWithUserAgent = (userAgent, elements) => {\r\n  var regexps = {\r\n      Chrome: [/Chrome\\/(\\S+)/],\r\n      Firefox: [/Firefox\\/(\\S+)/],\r\n      MSIE: [/MSIE (\\S+);/],\r\n      Opera: [/Opera\\/.*?Version\\/(\\S+)/ /* Opera 10 */, /Opera\\/(\\S+)/ /* Opera 9 and older */],\r\n      Safari: [/Version\\/(\\S+).*?Safari\\//],\r\n    },\r\n    re,\r\n    m,\r\n    browser,\r\n    version\r\n\r\n  if (isNil(userAgent)) {\r\n    return null\r\n  }\r\n\r\n  if (elements === undefined || elements === null) {\r\n    elements = 2\r\n  } else if (elements === 0) {\r\n    elements = 1337\r\n  }\r\n\r\n  for (browser in regexps)\r\n    while ((re = regexps[browser].shift())) {\r\n      m = userAgent.match(re)\r\n      if (m) {\r\n        version = m[1].match(new RegExp('[^.]+(?:.[^.]+){0,' + --elements + '}'))[0]\r\n        return browser + ' ' + version\r\n      }\r\n    }\r\n\r\n  return null\r\n}\r\n","import { createFormatter } from 'pmt-utils/format'\r\nimport { formatPrice, formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nconst formatQuantity = item => {\r\n  let quantityFormatted = ''\r\n\r\n  if (item.share.enabled) {\r\n    quantityFormatted = `${item.share.multiplier}/${item.share.divider}`\r\n  } else {\r\n    quantityFormatted = item.quantity\r\n  }\r\n\r\n  item.quantityFormatted = quantityFormatted\r\n  return item\r\n}\r\n\r\n// TODO: handle currency\r\nconst formatItemPrice = item => {\r\n  item.totalFormatted = formatPrice(item.total)\r\n  item.unitPriceFormatted = formatPrice(item.unitPrice)\r\n  item.totalFormattedWithCurrency = formatPriceWithCurrency(item.total)\r\n  item.absoluteTotalFormattedWithCurrency = formatPriceWithCurrency(item.absoluteTotal)\r\n  item.unitPriceFormattedWithCurrency = formatPriceWithCurrency(item.unitPrice)\r\n  item = formatQuantity(item)\r\n  return item\r\n}\r\n\r\nconst formatEntry = createFormatter(formatItemPrice)\r\n\r\nexport const formatItemsMap = payment => {\r\n  const items = payment.items || {}\r\n  Object.keys(items).map(key => {\r\n    const item = items[key]\r\n    const formattedItem = formatEntry(item)\r\n    items[formattedItem.id] = formattedItem\r\n    return null\r\n  })\r\n\r\n  payment.items = items\r\n  return payment\r\n}\r\n","import { getAsyncPaymentBrowserInfo } from 'pmt-utils/browser'\r\nimport { createFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { formatItemsMap } from './item'\r\n\r\n// /!\\ We format UserCheck here not really a transaction/payment.\r\n\r\nexport const formatAmount = payment => {\r\n  payment.amount = Number(payment.amount || 0)\r\n  payment.amountFormatted = formatPriceWithCurrency(payment.amount, payment.currency)\r\n\r\n  if (!payment.tips && !payment.tip) {\r\n    payment.tips = 0\r\n  }\r\n  if (!payment.tips) {\r\n    payment.tips = payment.tip || 0\r\n  } else {\r\n    payment.tip = payment.tips || 0\r\n  }\r\n\r\n  payment.totalWithTipFormatted = formatPriceWithCurrency(\r\n    payment.amount + payment.tips,\r\n    payment.currency\r\n  )\r\n\r\n  payment.irlTotalAmount = Number(payment.irlTotalAmount || 0)\r\n  payment.totalIrlAmountFormatted = formatPriceWithCurrency(\r\n    payment.irlTotalAmount,\r\n    payment.currency\r\n  )\r\n\r\n  payment.pspTotalAmount = Number(payment.pspTotalAmount || 0)\r\n  payment.totalPspAmountFormatted = formatPriceWithCurrency(\r\n    payment.pspTotalAmount,\r\n    payment.currency\r\n  )\r\n\r\n  payment.vouchersTotalAmount = Number(payment.vouchersTotalAmount || 0)\r\n  payment.totalVouchersAmountFormatted = formatPriceWithCurrency(\r\n    payment.vouchersTotalAmount,\r\n    payment.currency\r\n  )\r\n\r\n  if (payment.share) {\r\n    payment.share.amountPerPersonFormatted = formatPriceWithCurrency(\r\n      payment.share.amountPerPerson,\r\n      payment.currency\r\n    )\r\n  }\r\n\r\n  payment.paymentType = payment.type\r\n\r\n  return payment\r\n}\r\n\r\n/**\r\n * Data neeeded for 3DS v2\r\n *\r\n * https://www.notion.so/paymytable/Mangopay-3DS2-543d705dd4534a908b3dc1a64882e7a6.\r\n */\r\nconst formatBrowserInfo = data => ({\r\n  ...data,\r\n  browserInfo: getAsyncPaymentBrowserInfo(),\r\n})\r\n\r\nexport const formatPayment = createFormatter(formatAmount, formatItemsMap, formatBrowserInfo)\r\n\r\nexport const formatPaymentMade = createFormatter(paymentMade => {\r\n  return {\r\n    ...paymentMade,\r\n    totalWithTipFormatted: formatPriceWithCurrency(\r\n      paymentMade.amount + paymentMade.tips,\r\n      paymentMade.currency\r\n    ),\r\n  }\r\n})\r\n","import isNil from 'lodash/isNil'\r\n\r\nexport { default } from './GeolocUtils'\r\n\r\n//https://stackoverflow.com/questions/27928/calculate-distance-between-two-latitude-longitude-points-haversine-formula\r\nexport const getDistanceFromLatLon = (lat1, lon1, lat2, lon2) => {\r\n  if (isNil(lat1) || isNil(lon1) || isNil(lat2) || isNil(lon2)) {\r\n    return null\r\n  }\r\n\r\n  var R = 6371 // Radius of the earth in km\r\n  var dLat = deg2rad(lat2 - lat1) // deg2rad below\r\n  var dLon = deg2rad(lon2 - lon1)\r\n  var a =\r\n    Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2)\r\n\r\n  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\r\n  var d = R * c // Distance in km\r\n\r\n  return d\r\n}\r\n\r\nexport const deg2rad = deg => {\r\n  return deg * (Math.PI / 180)\r\n}\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\nexport const RestaurantStatus = {\r\n  CREATED: 'CREATED',\r\n  ENABLED: 'ENABLED',\r\n  DISABLED: 'DISABLED',\r\n  ARCHIVED: 'ARCHIVED',\r\n}\r\n\r\nexport const getRestaurantStatusLabel = status => {\r\n  switch (status) {\r\n    case RestaurantStatus.CREATED:\r\n      return tr('global.restaurant.status.CREATED')\r\n    case RestaurantStatus.ENABLED:\r\n      return tr('global.restaurant.status.ENABLED')\r\n    case RestaurantStatus.DISABLED:\r\n      return tr('global.restaurant.status.DISABLED')\r\n    case RestaurantStatus.ARCHIVED:\r\n      return tr('global.restaurant.status.ARCHIVED')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getRestaurantStatusExplainationText = status => {\r\n  switch (status) {\r\n    case RestaurantStatus.CREATED:\r\n      return tr('global.restaurant.status.explain.CREATED')\r\n    case RestaurantStatus.ENABLED:\r\n      return tr('global.restaurant.status.explain.ENABLED')\r\n    case RestaurantStatus.DISABLED:\r\n      return tr('global.restaurant.status.explain.DISABLED')\r\n    case RestaurantStatus.ARCHIVED:\r\n      return tr('global.restaurant.status.explain.ARCHIVED')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const PspType = {\r\n  MANGOPAY: 'MANGOPAY',\r\n  PAYZEN: 'PAYZEN',\r\n  PAYGREEN: 'PAYGREEN',\r\n  SAFERPAY: 'SAFERPAY',\r\n  FAKE: 'FAKE',\r\n  ADYEN: 'ADYEN',\r\n  EPAY: 'EPAY',\r\n}\r\n\r\nexport const getPspTypeChoices = () => [\r\n  { label: 'MangoPay', value: PspType.MANGOPAY, deprecated: true },\r\n  { label: 'PayZen', value: PspType.PAYZEN, deprecated: true },\r\n  { label: 'PayGreen', value: PspType.PAYGREEN, deprecated: true },\r\n  // deprecated values\r\n  { label: 'Saferpay', value: PspType.SAFERPAY, deprecated: false },\r\n  { label: 'Adyen', value: PspType.ADYEN, deprecated: false },\r\n  { label: 'Epay', value: PspType.EPAY, deprecated: false },\r\n  { label: 'FAKE', value: PspType.FAKE, deprecated: false },\r\n]\r\n\r\nexport const getPspLabel = type => {\r\n  const choice = getPspTypeChoices().find(c => c.value === type)\r\n  return choice ? choice.label : type\r\n}\r\n\r\nexport const PosType = {\r\n  POS_DEMO: '',\r\n  POS_CASHPAD: 'cashpad',\r\n  POS_CSI: 'csi',\r\n  POS_IKENTOO: 'ikentoo',\r\n  POS_ORCHESTRA: 'orchestra',\r\n  POS_ORCHESTRA_V2: 'orchestra-v2',\r\n  POS_PAYMYTABLE: 'paymytable',\r\n  POS_TILLER: 'tiller',\r\n  POS_TCPOS: 'tcpos',\r\n  POS_TCPOS_7_1: 'tcpos7.1',\r\n  POS_TCPOS_7_4: 'tcpos7.4',\r\n  POS_ZELTY: 'zelty',\r\n  POS_SEQUOIASOFT: 'sequoiasoft',\r\n  POS_ORACLE: 'oracle',\r\n}\r\n\r\nexport const getPosTypeChoices = () => [\r\n  { label: 'PayMyTable', value: PosType.POS_PAYMYTABLE, deprecated: false },\r\n  { label: 'Tcpos 7.4+', value: PosType.POS_TCPOS_7_4, deprecated: false },\r\n  { label: 'Tcpos 7.1', value: PosType.POS_TCPOS_7_1, deprecated: false },\r\n  { label: 'Tcpos < 7.1', value: PosType.POS_TCPOS, deprecated: false },\r\n  { label: 'Demo', value: PosType.POS_DEMO, deprecated: false },\r\n  // deprecated values\r\n  { label: 'Cashpad', value: PosType.POS_CASHPAD, deprecated: true },\r\n  { label: 'CSI - CashSystemes', value: PosType.POS_CSI, deprecated: true },\r\n  { label: 'Ikentoo', value: PosType.POS_IKENTOO, deprecated: true },\r\n  { label: 'Oracle', value: PosType.POS_ORACLE, deprecated: true },\r\n  { label: 'Orchestra', value: PosType.POS_ORCHESTRA, deprecated: true },\r\n  { label: 'Orchestra v2', value: PosType.POS_ORCHESTRA_V2, deprecated: true },\r\n  { label: 'SequoiaSoft', value: PosType.POS_SEQUOIASOFT, deprecated: true },\r\n  { label: 'Tiller', value: PosType.POS_TILLER, deprecated: true },\r\n  { label: 'Zelty', value: PosType.POS_ZELTY, deprecated: true },\r\n]\r\n\r\nexport const getPosTypeLabel = type => {\r\n  const choice = getPosTypeChoices().find(c => c.value === type)\r\n  return choice ? choice.label : type\r\n}\r\n\r\nexport const RestaurantFeatures = {\r\n  ORDERS: 1, // Bit 0: 1 << 0 = 1\r\n  PAYMENT_AT_TABLE: 2, // Bit 1: 1 << 1 = 2\r\n}\r\n\r\nexport const hasFeature = (features, feature) => {\r\n  return (features & feature) === feature\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport keys from 'lodash/keys'\r\nimport moment from 'moment'\r\n\r\nimport { getMsFromHour, getMsFromMinute } from 'pmt-utils/date'\r\nimport { findOnArray } from 'pmt-utils/array'\r\nimport {\r\n  getDayKey,\r\n  getDayIndexForKey,\r\n  getI18nDayNameForKey,\r\n  getI18nDayShortNameForKey,\r\n  formatHour,\r\n  todayWithHour,\r\n} from 'pmt-utils/date'\r\n\r\nconst formatOpeningHours = (openingHours, manufactureDelay) =>\r\n  (openingHours || []).map(openingHour => ({\r\n    ...openingHour,\r\n    // FIXME: the formatted hour is displayed with one hour in more (11-23 instead of 10-22)\r\n    // if we don't use todayWithHour\r\n    formattedOpening: formatHour(todayWithHour(openingHour.opening)),\r\n    formattedClosing: formatHour(todayWithHour(openingHour.closing)),\r\n    closingWithManufactureDelay: openingHour.closing - manufactureDelay,\r\n    formattedClosingWithManufactureDelay: formatHour(\r\n      todayWithHour(openingHour.closing - manufactureDelay)\r\n    ),\r\n  }))\r\n\r\n/**\r\n * Transform openingHours to openingHoursList, an array\r\n *\r\n * Entry:\r\n *\r\n * ```\r\n * {\r\n * \"openingHours\": {\r\n *   \"monday\": [\r\n *     {\r\n *       \"opening\": 0,\r\n *       \"closing\": 12000,\r\n *     }\r\n *   ]\r\n * ```\r\n *\r\n * Result:\r\n *\r\n * ```\r\n * {\r\n *   \"openingHoursList\": [\r\n *      {\r\n *        \"dayKeyName\": \"monday\",\r\n *        \"dayName\": \"lundi\",\r\n *        \"day\": 1,\r\n *        \"isCurrentDay\": true,\r\n *        \"openingHours\": [\r\n *          {\r\n *            \"opening\": 0,\r\n *            \"closing\": 12000,\r\n *            \"formattedOpening\": \"09:00\",\r\n *            \"formattedClosing\": \"20:00\"\r\n *          }\r\n *        ],\r\n *      }\r\n *   ]\r\n * }\r\n * ```\r\n */\r\nconst formatOpeningHoursList = (openingHoursArray, manufactureDelay) => {\r\n  const today = moment()\r\n  const currentDayName = getDayKey(today)\r\n\r\n  return keys(openingHoursArray).map(dayKeyName => ({\r\n    dayKeyName: dayKeyName,\r\n    dayName: getI18nDayNameForKey(dayKeyName),\r\n    dayNameShort: getI18nDayShortNameForKey(dayKeyName),\r\n    dayIndex: getDayIndexForKey(dayKeyName),\r\n    openingHours: formatOpeningHours(openingHoursArray[dayKeyName], manufactureDelay),\r\n    isCurrentDay: currentDayName === dayKeyName,\r\n  }))\r\n}\r\n\r\nconst getNextOpening = (openingHoursList, date, maxNumberToCheck = 7) => {\r\n  const i = date.day()\r\n  const day = findOnArray(openingHoursList, day => day.dayIndex === i)\r\n\r\n  if (!isNil(day) && !isEmpty(day.openingHours)) {\r\n    return {\r\n      date,\r\n      // get first opening of the day\r\n      nextOpeningHour: day.openingHours[0],\r\n      ...day,\r\n    }\r\n  }\r\n\r\n  // only check next opening day for a week\r\n  if (maxNumberToCheck > 0) {\r\n    return getNextOpening(openingHoursList, date.add(1, 'd'), --maxNumberToCheck)\r\n  }\r\n\r\n  return null\r\n}\r\n\r\n/**\r\n * Require `formatOpeningHoursList`\r\n * Warning: data can either be the restaurant or directly orderSettings\r\n */\r\nexport const formatRestaurantOpeningHours = data => {\r\n  if (!data.manufactureDelay) {\r\n    data.manufactureDelay = 0\r\n  }\r\n  const delayAsHours = data.manufactureDelay / 1000 / 60 / 60\r\n\r\n  data.openingHoursList = formatOpeningHoursList(data.openingHours, data.manufactureDelay)\r\n  const now = moment()\r\n\r\n  data.willOpenLaterToday = false\r\n  data.isCurrentlyOpen = false\r\n  data.nextOpening = null\r\n\r\n  // opening hours have not been defined yet, don't bother to proceed\r\n  if (isEmpty(data.openingHoursList)) {\r\n    return data\r\n  }\r\n\r\n  const currentDay = findOnArray(data.openingHoursList, openingHour => openingHour.isCurrentDay)\r\n  // don't check currentDay opening if manufacture delay goes beyond anyway\r\n  if (delayAsHours < 24 && !isNil(currentDay) && !isEmpty(currentDay.openingHours)) {\r\n    const hours = now.format('HH')\r\n    const minutes = now.format('mm')\r\n    const seconds = now.format('ss')\r\n    const nowToCompare = getMsFromHour(hours) + getMsFromMinute(minutes) + seconds * 1000\r\n\r\n    currentDay.openingHours.forEach(openingHour => {\r\n      // Check for currentDay if we are in a range of opening hours\r\n      if (\r\n        nowToCompare >= openingHour.opening &&\r\n        nowToCompare <= openingHour.closing - data.manufactureDelay\r\n      ) {\r\n        data.currentOpeningHour = openingHour\r\n        data.isCurrentlyOpen = true\r\n      }\r\n      // Check for currentDay if we are in a range of opening hours later today, and we do not have\r\n      // set it yet. This will avoid overriding when restaurant have multiple openingHours.\r\n      else if (openingHour.opening > nowToCompare && !data.nextOpening) {\r\n        data.willOpenLaterToday = true\r\n        data.nextOpening = {\r\n          date: now,\r\n          nextOpeningHour: openingHour,\r\n          ...currentDay,\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  if (isEmpty(data.nextOpening)) {\r\n    // we don't have a nextOpening for today, so we start looking for next day\r\n    // BUT manufacture delay might be > 1 day, if so, we start directly at this point\r\n    let nextDay = null\r\n    if (delayAsHours >= 24) {\r\n      nextDay = moment().add(delayAsHours, 'hours')\r\n    } else {\r\n      nextDay = moment()\r\n        .add(1, 'days')\r\n        .startOf('day')\r\n    }\r\n\r\n    data.nextOpening = getNextOpening(data.openingHoursList, nextDay)\r\n  }\r\n\r\n  return data\r\n}\r\n","import { formatRestaurantOpeningHours } from './openingHours'\r\n\r\n/**\r\n * Require `formatOpeningHoursList`\r\n */\r\nexport const formatOrderSettings = restaurant => {\r\n  if (restaurant.orderSettings) {\r\n    restaurant.orderSettings = formatRestaurantOpeningHours(restaurant.orderSettings)\r\n\r\n    // in minutes\r\n    restaurant.orderSettings.manufactureDelayInMinutes =\r\n      restaurant.orderSettings.manufactureDelay / 1000 / 60\r\n\r\n    // in minutes\r\n    restaurant.orderSettings.deliverySettings.deliveryTimeInMinutes =\r\n      restaurant.orderSettings.deliverySettings.deliveryTimeSettings.fixTimeSettings.time /\r\n      1000 /\r\n      60\r\n  }\r\n\r\n  return restaurant\r\n}\r\n","\r\n/**\r\n * The different features handled by PayMyTable.\r\n * Multiple usages, such as restaurant's features, notification settings, etc.\r\n */\r\nconst Feature = {\r\n  PAYMENT: 1,\r\n\r\n  ORDER: 2,\r\n\r\n  BOOKING: 4,\r\n\r\n  NEWS: 8,\r\n\r\n  REVIEW: 16,\r\n}\r\n\r\nexport default Feature\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\n/**\r\n * Define all the different ways to pay a check\r\n */\r\nexport const PaymentType = {\r\n  /**\r\n   * Pay all the check\r\n   */\r\n  ALL: 1,\r\n\r\n  /**\r\n   * Pay a part of the check\r\n   * == DEVIDE\r\n   */\r\n  SHARE: 2,\r\n\r\n  /**\r\n   * Pay a specific amount of the check\r\n   */\r\n  AMOUNT: 3,\r\n\r\n  /**\r\n   * Pay for the attached entries\r\n   */\r\n  ENTRIES: 4,\r\n\r\n  /**\r\n   * distant payment request\r\n   */\r\n  DISTANT_PAYMENT: 5,\r\n\r\n  ORDER: 6,\r\n\r\n  /**\r\n   * Irl payment via TPE.\r\n   * Only a Restaurant can use this PaymentType.\r\n   */\r\n  IRL_CREDIT_CARD: 8,\r\n}\r\n\r\nexport const getPaymentTypeLabel = paymentType => {\r\n  switch (paymentType) {\r\n    case PaymentType.ALL:\r\n      return tr('global.PaymentType.ALL')\r\n    case PaymentType.SHARE:\r\n      return tr('global.PaymentType.SHARE')\r\n    case PaymentType.AMOUNT:\r\n      return tr('global.PaymentType.AMOUNT')\r\n    case PaymentType.ENTRIES:\r\n      return tr('global.PaymentType.ENTRIES')\r\n    case PaymentType.DISTANT_PAYMENT:\r\n      return tr('global.PaymentType.DISTANT_PAYMENT')\r\n    case PaymentType.ORDER:\r\n      return tr('global.PaymentType.ORDER')\r\n    case PaymentType.IRL_CREDIT_CARD:\r\n      return tr('global.PaymentType.IRL_CREDIT_CARD')\r\n    default:\r\n      return paymentType\r\n  }\r\n}\r\n\r\nexport default PaymentType\r\n","/**\r\n * http://stackoverflow.com/questions/1436438/how-do-you-set-clear-and-toggle-a-single-bit-in-javascript\r\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators\r\n */\r\n\r\nexport const isBitSet = (mask, flag) => {\r\n  return (flag & mask) !== 0\r\n}\r\n\r\nexport const setBit = (mask, flag) => {\r\n  return flag | mask\r\n}\r\n\r\nexport const toggleBit = (mask, flag) => {\r\n  return flag ^ mask\r\n}\r\n\r\nexport const removeBit = (mask, flag) => {\r\n  return flag & ~mask\r\n}\r\n","import { isBitSet } from 'pmt-utils/bit'\r\n\r\nimport { Feature } from '../constants'\r\n\r\nexport const formatFeatures = (object) => {\r\n  object.hasFeaturePayment = isBitSet(object.features, Feature.PAYMENT)\r\n  object.hasFeatureOrder = isBitSet(object.features, Feature.ORDER)\r\n  object.hasFeatureBooking = isBitSet(object.features, Feature.BOOKING)\r\n  object.hasFeatureNews = isBitSet(object.features, Feature.NEWS)\r\n  object.hasFeatureReview = isBitSet(object.features, Feature.REVIEW)\r\n\r\n  return object\r\n}\r\n","import find from 'lodash/find'\r\nimport { countryCodes } from './countryCodes'\r\n\r\nexport * from './countryCodes'\r\n\r\nexport const getCountryNameForCode = (countryCode) => {\r\n  let country = find(countryCodes, (country) => country.code === countryCode)\r\n\r\n  if (!country) {\r\n    return null\r\n  }\r\n\r\n  return country.name\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { PspType } from 'pmt-modules/restaurant/constants'\r\nimport { isProd } from 'pmt-modules/environment'\r\n\r\n// Note: all of this is duplicated on the API, maybe the API should serialize those for audit permissions?\r\n\r\nexport const getPspBoUrl = psp => {\r\n  switch (psp) {\r\n    case PspType.PAYGREEN:\r\n      if (isProd()) {\r\n        return 'https://paygreen.fr'\r\n      }\r\n      return 'https://sandbox.paygreen.fr'\r\n\r\n    case PspType.MANGOPAY:\r\n      if (isProd()) {\r\n        return 'https://dashboard.mangopay.com'\r\n      }\r\n      return 'https://dashboard.sandbox.mangopay.com'\r\n\r\n    case PspType.SAFERPAY:\r\n      // TODO: we can have saferpay tests on production..\r\n      if (isProd()) {\r\n        return 'https://www.saferpay.com/BO/'\r\n      }\r\n      return 'https://test.saferpay.com/BO/'\r\n\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const formatPspShopUrl = (psp, pspRestaurantId) => {\r\n  if (isEmpty(pspRestaurantId)) {\r\n    return ''\r\n  }\r\n  switch (psp) {\r\n    case PspType.MANGOPAY:\r\n      return getPspBoUrl(psp) + `/User/${pspRestaurantId}/Details`\r\n\r\n    case PspType.PAYGREEN:\r\n      return getPspBoUrl(psp) + `/shop/switch-current/id/${pspRestaurantId}`\r\n\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const formatPspUserUrl = pspUserId => {\r\n  if (isEmpty(pspUserId)) {\r\n    return ''\r\n  }\r\n  // TODO: we do not have the user's psp for now.. Maybe we could trick:\r\n  // only MangoPay has a pspUserId for now. For PayGreen we generate a big string. It could help\r\n  // differentiate both.\r\n  if (pspUserId && pspUserId.length < 15) {\r\n    // same as formatPspShopUrl\r\n    return getPspBoUrl(PspType.MANGOPAY) + `/User/${pspUserId}/Details`\r\n  }\r\n  return ''\r\n}\r\n\r\nexport const formatPspTransactionUrl = (psp, transactionId) => {\r\n  switch (psp) {\r\n    case PspType.PAYGREEN:\r\n      return getPspBoUrl(psp) + '/transactions/show-details/id/' + transactionId\r\n\r\n    case PspType.MANGOPAY:\r\n      return getPspBoUrl(psp) + '/PayIn/' + transactionId\r\n\r\n    case PspType.SAFERPAY:\r\n      return getPspBoUrl(psp) + '/Commerce/JournalOverview/Detail?gxid=' + transactionId\r\n\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const formatPspRefundUrl = (psp, refundId) => {\r\n  switch (psp) {\r\n    case PspType.PAYGREEN:\r\n      return getPspBoUrl(psp) + '/transactions/show-details/id/' + refundId\r\n\r\n    case PspType.MANGOPAY:\r\n      return getPspBoUrl(psp) + '/Refund/' + refundId\r\n\r\n    case PspType.SAFERPAY:\r\n      return getPspBoUrl(psp) + '/Commerce/JournalOverview/Detail?gxid=' + refundId\r\n\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n","import { createFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport { getCountryNameForCode } from 'pmt-utils/country'\r\nimport { formatPspShopUrl } from 'pmt-modules/psp/format'\r\n\r\nconst formatLegalRepresentative = legal => {\r\n  const representative = legal.representative\r\n\r\n  legal.hasRepresentative = !isNil(representative)\r\n\r\n  if (representative) {\r\n    const address = representative.address\r\n    representative.hasAddress =\r\n      !isEmpty(address) &&\r\n      (!isEmpty(address.street) || !isEmpty(address.postCode) || !isEmpty(address.city))\r\n    if (representative.hasAddress) {\r\n      representative.formattedAddress = `${address.street}, ${address.postCode} ${address.city}`\r\n    } else {\r\n      representative.formattedAddress = ''\r\n    }\r\n\r\n    representative.hasCountryOfResidence = !isEmpty(representative.countryOfResidence)\r\n    representative.countryOfResidenceLabel =\r\n      getCountryNameForCode(representative.countryOfResidence) || representative.countryOfResidence\r\n\r\n    representative.hasNationality = !isEmpty(representative.nationality)\r\n    representative.nationalityLabel =\r\n      getCountryNameForCode(representative.nationality) || representative.nationality\r\n  }\r\n\r\n  return legal\r\n}\r\n\r\nconst formatBank = (bank, props) => {\r\n  bank.pspShopUrl = formatPspShopUrl(props.restaurant.psp, bank.pspRestaurantId)\r\n\r\n  return bank\r\n}\r\n\r\nexport const formatLegal = createFormatter(\r\n  formatLegalRepresentative,\r\n  createSubObjectFormatter('bank', formatBank)\r\n)\r\n","import sortBy from 'lodash/sortBy'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { isBo, getApiUrl } from 'pmt-modules/environment'\r\nimport { createFormatter, createMapFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { getDistanceFromLatLon } from 'pmt-utils/geoloc'\r\nimport { formatDate } from 'pmt-utils/date'\r\nimport { PspType } from 'pmt-modules/restaurant/constants'\r\n\r\nimport { RestaurantStatus, getRestaurantStatusLabel } from '../constants'\r\n\r\nimport { formatRestaurantOpeningHours } from './openingHours'\r\nimport { formatOrderSettings } from './orderSettings'\r\nimport { formatFeatures } from '../../global'\r\nimport { formatLegal } from './formatLegal'\r\n\r\nconst formatAddress = restaurant => {\r\n  if (!restaurant.geoPt) {\r\n    restaurant.geoPt = {\r\n      latitude: 0,\r\n      longitude: 0,\r\n    }\r\n  }\r\n\r\n  const address = restaurant.address\r\n  if (!address) {\r\n    restaurant.address = {}\r\n  }\r\n  restaurant.hasAddress = !isEmpty(address?.street)\r\n  if (restaurant.hasAddress) {\r\n    restaurant.formattedAddress = `${address.street}, ${address.postCode} ${address.city}`\r\n  } else {\r\n    restaurant.formattedAddress = ``\r\n  }\r\n  return restaurant\r\n}\r\n\r\nconst formatDistance = (restaurant, { latitude, longitude }) => {\r\n  restaurant.geoPt.distance = null\r\n  restaurant.geoPt.distanceFormatted = null\r\n\r\n  if (!isNil(latitude) && !isNil(longitude)) {\r\n    const distance = getDistanceFromLatLon(\r\n      latitude,\r\n      longitude,\r\n      restaurant.geoPt.latitude,\r\n      restaurant.geoPt.longitude\r\n    )\r\n    restaurant.geoPt.distance = Math.round(distance * 1000)\r\n\r\n    if (distance < 1) {\r\n      restaurant.geoPt.distanceFormatted = `${Math.round(distance * 1000)}m`\r\n    } else {\r\n      restaurant.geoPt.distanceFormatted = `${Math.round(distance * 10) / 10}km`\r\n    }\r\n  }\r\n\r\n  return restaurant\r\n}\r\n\r\nconst sortByName = list => sortBy(list, [restaurant => restaurant.name.toLowerCase()], ['desc'])\r\n\r\nconst formatLogo = restaurant => {\r\n  restaurant.hasLogo = !isEmpty(restaurant.logo)\r\n  return restaurant\r\n}\r\n\r\nconst formatPicture = restaurant => {\r\n  restaurant.hasPicture = !isEmpty(restaurant.picture)\r\n  return restaurant\r\n}\r\n\r\nconst formatPsp = restaurant => {\r\n  restaurant.isPspMangoPay = restaurant.psp === PspType.MANGOPAY\r\n  restaurant.isPspPayZen = restaurant.psp === PspType.PAYZEN\r\n  restaurant.isPspPayGreen = restaurant.psp === PspType.PAYGREEN\r\n  restaurant.isPspSaferpay = restaurant.psp === PspType.SAFERPAY\r\n\r\n  return restaurant\r\n}\r\n\r\nconst formatData = restaurant => {\r\n  restaurant.isStatusEnabled = restaurant.status === RestaurantStatus.ENABLED\r\n  restaurant.isStatusDisabled = restaurant.status === RestaurantStatus.DISABLED\r\n  restaurant.isStatusCreated = restaurant.status === RestaurantStatus.CREATED\r\n  restaurant.isStatusArchived = restaurant.status === RestaurantStatus.ARCHIVED\r\n\r\n  restaurant.hasVoucherFeatureEnabled =\r\n    restaurant.voucherSettings && restaurant.voucherSettings.enableVouchers\r\n\r\n  // Deprecated: this property is not used anymore, but we keep it for backward compatibility\r\n  restaurant.hasPaymentWithCardPrint = false\r\n\r\n  if (isBo()) {\r\n    restaurant.hasExternalId =\r\n      !isNil(restaurant.externalId) &&\r\n      !isEmpty(restaurant.externalId) &&\r\n      // handle bug with populate data script that send \"null\" as a string instead of null\r\n      restaurant.externalId !== 'null'\r\n    restaurant.statusLabel = getRestaurantStatusLabel(restaurant.status)\r\n\r\n    restaurant.modificationDateFormatted = formatDate(\r\n      restaurant.modificationDate,\r\n      'DD/MM/YYYY HH:mm:ss'\r\n    )\r\n\r\n    restaurant.restaurantMenuLink = `${getApiUrl()}/restaurants/${\r\n      restaurant.id\r\n    }/menu?stocksSource=LOCAL_ONLY&menuSource=LOCAL_ONLY`\r\n  }\r\n\r\n  restaurant.hasTheme = !isNil(restaurant.theme)\r\n  return restaurant\r\n}\r\n\r\nexport const formatRestaurant = createFormatter(\r\n  formatRestaurantOpeningHours, // must be after `formatRestaurantOpeningHoursList`\r\n  formatData,\r\n  formatFeatures,\r\n  formatAddress,\r\n  formatDistance,\r\n  formatOrderSettings,\r\n  formatLogo,\r\n  formatPicture,\r\n  formatPsp,\r\n  restaurant => {\r\n    restaurant.legal = formatLegal(restaurant.legal, { restaurant })\r\n    return restaurant\r\n  }\r\n)\r\n\r\nexport const formatRestaurantsMap = createMapFormatter(formatRestaurant)\r\n\r\nexport const formatRestaurantList = createListFormatter(formatRestaurant)\r\n\r\nexport const formatSearchRestaurantsList = createFormatter(\r\n  formatRestaurantList,\r\n  sortByName,\r\n  list => {\r\n    return {\r\n      list,\r\n      counters: {\r\n        statusEnabled: list.filter(r => r.isStatusEnabled).length,\r\n        statusDisabled: list.filter(r => r.isStatusDisabled).length,\r\n        statusCreated: list.filter(r => r.isStatusCreated).length,\r\n        statusArchived: list.filter(r => r.isStatusArchived).length,\r\n      },\r\n    }\r\n  }\r\n)\r\n\r\n/* spec: https://www.notion.so/paymytable/Am-liorer-l-affichage-des-r-sultats-du-store-locator-2669fffd951f483280655bcbb2124fc6# */\r\nexport const formatRestaurantsListData = createFormatter(data => {\r\n  const Type = {\r\n    /**\r\n     * No geo pt data were found.\r\n     */\r\n    NO_GEO_PT: 'NO_GEO_PT',\r\n\r\n    /**\r\n     * Use the latitude/longitude infer from the ip address.\r\n     */\r\n    USE_IP: 'USE_IP',\r\n\r\n    /**\r\n     * Use the latitude/longitude of the specified restaurant\r\n     */\r\n    RESTAURANT_GEO_PT: 'RESTAURANT_GEO_PT',\r\n\r\n    /**\r\n     * Use the latitude/longitude given by the front\r\n     */\r\n    GIVEN_GEO_PT: 'GIVEN_GEO_PT',\r\n  }\r\n\r\n  data.isTypeNoGeoPt = data.type === Type.NO_GEO_PT\r\n  data.isTypeUseIp = data.type === Type.USE_IP\r\n  data.isTypeRestaurantGeoPt = data.type === Type.RESTAURANT_GEO_PT\r\n  data.isTypeGivenGeoPt = data.type === Type.GIVEN_GEO_PT\r\n\r\n  data.geoPtIsLowAccuracy = data.isTypeNoGeoPt || data.isTypeUseIp\r\n  data.geoPtUsed = data.isTypeUseIp || data.isTypeRestaurantGeoPt || data.isTypeGivenGeoPt\r\n  return data\r\n})\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\n/**\r\n * This corresponds to ThirdPartyTypeEnum from the API (it's the thirdparty type, not the thirdparty identifier)\r\n */\r\nexport const ThirdParty = {\r\n  LEGACY_PMT: 'LEGACY_PMT', // not a real Third Party, so several specific behaviours\r\n  DELIVEROO: 'DELIVEROO', // specificity : doesn't give the user infos\r\n  ZDP_STANDARD: 'ZDP_STANDARD', // a thirdparty of this type follows the ZDP standard (the API we defined)\r\n  UBER_EATS: 'UBER_EATS',\r\n}\r\n\r\nexport function getThirdPartyLabel(thirdParty) {\r\n  switch (thirdParty) {\r\n    case ThirdParty.LEGACY_PMT:\r\n      return tr('global.thirdparty.LEGACY_PMT')\r\n    case ThirdParty.DELIVEROO:\r\n      return tr('global.thirdparty.DELIVEROO')\r\n    case ThirdParty.ZDP_STANDARD:\r\n      return tr('global.thirdparty.ZDP_STANDARD') // aka LYVEAT as it's the only one using this standard\r\n    case ThirdParty.UBER_EATS:\r\n      return tr('global.thirdparty.UBER_EATS')\r\n    default:\r\n      return thirdParty\r\n  }\r\n}\r\n\r\nexport const UberEatsEnv = ['PREPROD', 'PROD_TEST', 'PROD']\r\n\r\nexport const DeliverooEnv = [\r\n  'PAYMYTABLE_SANDBOX',\r\n  'PAYMYTABLE_PROD',\r\n  // 'SEQUOIASOFT_TEST', should not be used anymore, so not displaying it in BO V2\r\n]\r\n","import isNil from 'lodash/isNil'\r\nimport get from 'lodash/get'\r\n\r\nconst getElement = (address_components, type, propertyToReturn) => {\r\n  const firstOccurence = address_components.filter(c => c.types.includes(type)).shift()\r\n  return get(firstOccurence, propertyToReturn, null) \r\n}\r\n\r\nexport const getAddressElementsFromGooglePlace = place => {\r\n\r\n  if (isNil(place)){\r\n    return null\r\n  }\r\n\r\n  const address_components = place.address_components\r\n\r\n  // street_address indicates a precise street address.\r\n  const preciseStreetAddress = getElement(address_components, \"street_address\", \"short_name\")\r\n  const streetNumber = getElement(address_components, \"street_number\", \"short_name\")\r\n  const route = getElement(address_components, \"route\", \"short_name\")\r\n\r\n  // streetNumber/route concatenation order depends of the country\r\n  // ex: 7 rue de Paris / Via Milano 7 / Berlin-Strasse 7\r\n  // we could extract it from formattedAddress, as being the first part before the first comma\r\n  // but it can be problematic as the formatted address can be of several forms:\r\n  // 7 rue de Paris, 75009 Paris, France\r\n  // 7 rue de Paris, 75009, Paris, France\r\n  // 7, rue de Paris, 75009 Paris, France\r\n  // Via Toledo, 123, 80135 Napoli NA, Italy\r\n  // so for now, if the street_address is not provided by Google, we use the street_number+route concatenation\r\n  // with an order depending of the country\r\n  const countryCode = getElement(address_components, \"country\", \"short_name\")\r\n  const streetConcatenation = countryCode === \"FR\" || countryCode === \"RE\" ? streetNumber + \" \"+ route : route + \" \"+ streetNumber\r\n\r\n  const street =  preciseStreetAddress || streetConcatenation\r\n  const postCode = getElement(address_components, \"postal_code\", \"short_name\")\r\n  const city = getElement(address_components, \"locality\", \"short_name\") || getElement(address_components, \"postal_town\", \"short_name\")\r\n  const country = getElement(address_components, \"country\", \"long_name\")\r\n  return {\r\n    street,\r\n    postCode,\r\n    city,\r\n    country,\r\n    formattedAddress: place.formatted_address\r\n  }\r\n}\r\n\r\n// deprecated, do not handle well all addresses (ex: french addresses with a comma between street number and street name, or italian addresses with a comma between street name and street number)\r\nexport const getAddressElementsFromFormattedAddress = formatted_address => {\r\n  const mainComponents = formatted_address.split(', ')\r\n\r\n  if (mainComponents.length !== 3 && mainComponents.length !== 4) {\r\n    return null\r\n  }\r\n\r\n  if (mainComponents.length === 3) {\r\n    const street = mainComponents[0]\r\n    const postCode = mainComponents[1].substr(0, mainComponents[1].indexOf(' '))\r\n    const city = mainComponents[1].split(/ (.+)/)[1]\r\n    const country = mainComponents[2]\r\n\r\n    return {\r\n      street,\r\n      postCode,\r\n      city,\r\n      country,\r\n      formattedAddress: formatted_address,\r\n    }\r\n  } else {\r\n    const street = mainComponents[0]\r\n    const city = mainComponents[1]\r\n    const postCode = mainComponents[2]\r\n    const country = mainComponents[3]\r\n\r\n    return {\r\n      street,\r\n      postCode,\r\n      city,\r\n      country,\r\n      formattedAddress: formatted_address,\r\n    }\r\n  }\r\n}\r\n\r\nexport const getGoogleMapsUrl = (position, zoom = 14) =>\r\n  `http://maps.google.com/maps?z=${zoom}&t=m&q=loc:${position.latitude}+${position.longitude}`\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\n\r\nimport Chip from '@material-ui/core/Chip'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  default: {\r\n    background: theme.pmt.status.white,\r\n    border: `1px solid #ccc!important`,\r\n  },\r\n  inactive: {\r\n    background: theme.pmt.status.inactive,\r\n  },\r\n  info: {\r\n    background: theme.pmt.status.info,\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  valid: {\r\n    background: theme.pmt.status.valid,\r\n  },\r\n  warning: {\r\n    background: theme.pmt.status.warning,\r\n  },\r\n  error: {\r\n    background: theme.pmt.status.error,\r\n    color: theme.pmt.colors.white,\r\n  },\r\n}))\r\n\r\n/**\r\n * This component should not be used as is\r\n * It only provides Status Type enum\r\n * see app/components/StatusChip for details\r\n */\r\nconst StatusChip = ({ className, status, ...otherProps }) => {\r\n  const classes = useStyles()\r\n\r\n  return <Chip {...otherProps} className={clsx(className, classes[status])} />\r\n}\r\n\r\nStatusChip.Status = {\r\n  DEFAULT: 'default',\r\n  INACTIVE: 'inactive',\r\n  INFO: 'info',\r\n  VALID: 'valid',\r\n  WARNING: 'warning',\r\n  ERROR: 'error',\r\n}\r\n\r\nexport default StatusChip\r\n","const OrderMode = {\r\n  ON_SITE: 0,\r\n  TAKE_AWAY: 1,\r\n  DELIVERY: 2,\r\n}\r\n\r\nexport default OrderMode\r\n","const OrderStatus = {\r\n  CREATED: 'CREATED',\r\n  SENT: 'SENT',\r\n  RECEIVED: 'RECEIVED',\r\n  PRODUCING: 'PRODUCING',\r\n  READY: 'READY',\r\n  IN_DELIVERY: 'IN_DELIVERY',\r\n  DELIVERED: 'DELIVERED',\r\n  CANCELED: 'CANCELED',\r\n  FAILED: 'FAILED',\r\n}\r\n\r\nexport default OrderStatus\r\n","import keys from 'lodash/keys'\r\n\r\nimport StatusChip from 'pmt-ui/StatusChip'\r\n\r\nimport OrderMode from './OrderMode'\r\nimport OrderStatus from './OrderStatus'\r\nimport { tr } from '../../i18n/utils'\r\n\r\nexport { default as OrderMode } from './OrderMode'\r\n\r\nexport const PaymentFlowEnum = {\r\n  /**\r\n   * Full payment is to be made with the order\r\n   */\r\n  FULL_PAYMENT_WITH_ORDER: 'FULL_PAYMENT_WITH_ORDER',\r\n  /**\r\n   * Payment is to be made later\r\n   */\r\n  NO_PAYMENT_WITH_ORDER: 'NO_PAYMENT_WITH_ORDER',\r\n}\r\n\r\nexport function getPaymentFlowEnumLabel(paymentFlowEnum) {\r\n  switch (paymentFlowEnum) {\r\n    case PaymentFlowEnum.FULL_PAYMENT_WITH_ORDER:\r\n      return tr('global.order.PaymentFlowEnum.FULL_PAYMENT_WITH_ORDER')\r\n    case PaymentFlowEnum.NO_PAYMENT_WITH_ORDER:\r\n      return tr('global.order.PaymentFlowEnum.NO_PAYMENT_WITH_ORDER')\r\n    default:\r\n      return paymentFlowEnum\r\n  }\r\n}\r\n\r\nexport const OrderOnGoingStatus = [\r\n  OrderStatus.SENT,\r\n  OrderStatus.RECEIVED,\r\n  OrderStatus.PRODUCING,\r\n  OrderStatus.READY,\r\n  OrderStatus.IN_DELIVERY,\r\n]\r\n\r\nexport const getOrderStatusLabel = status => {\r\n  switch (status) {\r\n    case OrderStatus.CREATED:\r\n      return tr('global.order.status.CREATED')\r\n    case OrderStatus.SENT:\r\n      return tr('global.order.status.SENT')\r\n    case OrderStatus.RECEIVED:\r\n      return tr('global.order.status.RECEIVED')\r\n    case OrderStatus.PRODUCING:\r\n      return tr('global.order.status.PRODUCING')\r\n    case OrderStatus.READY:\r\n      return tr('global.order.status.READY')\r\n    case OrderStatus.IN_DELIVERY:\r\n      return tr('global.order.status.IN_DELIVERY')\r\n    case OrderStatus.DELIVERED:\r\n      return tr('global.order.status.DELIVERED')\r\n    case OrderStatus.CANCELED:\r\n      return tr('global.order.status.CANCELED')\r\n    case OrderStatus.FAILED:\r\n      return tr('global.order.status.FAILED')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getOrderStatusType = status => {\r\n  switch (status) {\r\n    case OrderStatus.CREATED:\r\n      return StatusChip.Status.WARNING\r\n    case OrderStatus.SENT:\r\n      // TODO: for now the API is using SENT, it does not set RECEIVED status when received by the POS\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.RECEIVED:\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.PRODUCING:\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.READY:\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.IN_DELIVERY:\r\n      return StatusChip.Status.INFO\r\n    case OrderStatus.DELIVERED:\r\n      return StatusChip.Status.VALID\r\n    case OrderStatus.CANCELED:\r\n      return StatusChip.Status.ERROR\r\n    case OrderStatus.FAILED:\r\n      return StatusChip.Status.ERROR\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getOrderModeLabel = mode => {\r\n  switch (mode) {\r\n    case OrderMode.ON_SITE:\r\n      return tr('global.order.mode.on_site')\r\n    case OrderMode.TAKE_AWAY:\r\n      return tr('global.order.mode.take_away')\r\n    case OrderMode.DELIVERY:\r\n      return tr('global.order.mode.delivery')\r\n    default:\r\n      //Logger.warning('OrderViewUtils', `getOrderModeLabel: invalid mode ${mode}`)\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const getOrderModeStr = mode => {\r\n  const modes = {\r\n    0: 'ON_SITE',\r\n    1: 'TAKE_AWAY',\r\n    2: 'DELIVERY',\r\n  }\r\n  return modes[mode]\r\n}\r\n\r\nexport const getOrderModeFromStr = modeStr => {\r\n  const modes = {\r\n    ON_SITE: 0,\r\n    TAKE_AWAY: 1,\r\n    DELIVERY: 2,\r\n  }\r\n  return modes[modeStr]\r\n}\r\n\r\nexport const getOrderModeLabelAsArray = () =>\r\n  keys(OrderMode).map(value => ({\r\n    label: getOrderModeLabel(OrderMode[value]),\r\n    value,\r\n  }))\r\n\r\nexport const ORDER_MINIMUM_AMOUNT = 0.5\r\n\r\nexport const OrderErrorCode = {\r\n  INVALID_DUE_DATE: '150',\r\n  RESTAURANT_DISABLED: '432',\r\n  ORDER_MODE_DISABLED: '151',\r\n  TABLE_NOT_FOUND: '402',\r\n}\r\n\r\n/**\r\n * Only used for display purpose\r\n * These values have no meaning in order data.\r\n * TODO: maybe the API should gives us this info.\r\n */\r\nexport const OrderPaymentStatus = {\r\n  NOT_PAID: 'NOT_PAID',\r\n  PAID: 'PAID',\r\n  UNDERPAYMENT: 'UNDERPAYMENT',\r\n  OVERPAYMENT: 'OVERPAYMENT',\r\n  PAID_THIRD_PARTY: 'PAID_THIRD_PARTY',\r\n}\r\n\r\nexport const getOrderPaymentStatusLabel = status => {\r\n  switch (status) {\r\n    case OrderPaymentStatus.NOT_PAID:\r\n      return tr('global.order.payment.status.NOT_PAID')\r\n    case OrderPaymentStatus.PAID:\r\n      return tr('global.order.payment.status.PAID')\r\n    case OrderPaymentStatus.UNDERPAYMENT:\r\n      return tr('global.order.payment.status.UNDERPAYMENT')\r\n    case OrderPaymentStatus.OVERPAYMENT:\r\n      return tr('global.order.payment.status.OVERPAYMENT')\r\n    case OrderPaymentStatus.PAID_THIRD_PARTY:\r\n      return tr('global.order.payment.status.PAID_THIRD_PARTY')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getOrderPaymentStatusType = status => {\r\n  switch (status) {\r\n    case OrderPaymentStatus.NOT_PAID:\r\n      return StatusChip.Status.INFO\r\n    case OrderPaymentStatus.PAID:\r\n    case OrderPaymentStatus.PAID_THIRD_PARTY:\r\n      return StatusChip.Status.VALID\r\n    case OrderPaymentStatus.UNDERPAYMENT:\r\n      return StatusChip.Status.ERROR\r\n    case OrderPaymentStatus.OVERPAYMENT:\r\n      return StatusChip.Status.WARNING\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const CancellingParty = {\r\n  MERCHANT: 'MERCHANT',\r\n  CUSTOMER: 'CUSTOMER',\r\n  THIRD_PARTY: 'THIRD_PARTY',\r\n  UNKNOWN: 'UNKNOWN',\r\n}\r\n\r\nexport const getCancellingPartyFormatted = cancellingParty => {\r\n  switch (cancellingParty) {\r\n    case CancellingParty.MERCHANT:\r\n      return tr('global.order.cancellingParty.MERCHANT')\r\n    case CancellingParty.CUSTOMER:\r\n      return tr('global.order.cancellingParty.CUSTOMER')\r\n    case CancellingParty.THIRD_PARTY:\r\n      return tr('global.order.cancellingParty.THIRD_PARTY')\r\n    case CancellingParty.UNKNOWN:\r\n      return tr('global.order.cancellingParty.UNKNOWN')\r\n    default:\r\n      return cancellingParty\r\n  }\r\n}\r\n\r\nexport const OrderItemTrackingType = {\r\n  ADDED_BY_MANUALLY_CONFIGURED_SUGGESTIONS: 'ADDED_BY_MANUALLY_CONFIGURED_SUGGESTIONS',\r\n  ADDED_BY_MANUALLY_CONFIGURED_UPSELLS: 'ADDED_BY_MANUALLY_CONFIGURED_UPSELLS',\r\n  ADDED_BY_AI_GENERATED_UPSELLS: 'ADDED_BY_AI_GENERATED_UPSELLS',\r\n}\r\n","import { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nconst formatAdmissionFee = admissionFee => {\r\n  admissionFee.amountIncludingTaxFormatted = formatPriceWithCurrency(\r\n    admissionFee.amountIncludingTax\r\n  )\r\n\r\n  return admissionFee\r\n}\r\n\r\nconst formatAdmissionFeesData = admissionFees => {\r\n  admissionFees.amountIncludingTaxFormatted = formatPriceWithCurrency(\r\n    admissionFees.amountIncludingTax\r\n  )\r\n\r\n  return admissionFees\r\n}\r\n\r\nexport const formatAdmissionFees = createFormatter(\r\n  formatAdmissionFeesData,\r\n  createSubObjectFormatter('fees', createListFormatter(formatAdmissionFee))\r\n)\r\n","import { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nexport const formatSubsidy = subsidy => {\r\n  subsidy.grantAmountFormatted = formatPriceWithCurrency(subsidy.grantAmount)\r\n  return subsidy\r\n}\r\n\r\nconst formatSubsidiesData = subsidies => {\r\n  subsidies.grantAmountFormatted = formatPriceWithCurrency(subsidies.grantAmount)\r\n  subsidies.hasSubsidies = subsidies.subsidies.length > 0\r\n  return subsidies\r\n}\r\n\r\nconst formatSubsidies = createFormatter(\r\n  formatSubsidiesData,\r\n  createSubObjectFormatter('subsidies', createListFormatter(formatSubsidy))\r\n)\r\n\r\nconst formatUserAccountPaymentData = userAccountPayment => {\r\n  userAccountPayment.grantAmountFormatted = formatPriceWithCurrency(userAccountPayment.grantAmount)\r\n\r\n  return userAccountPayment\r\n}\r\n\r\nexport const formatUserAccountPayment = createFormatter(\r\n  formatUserAccountPaymentData,\r\n  createSubObjectFormatter('subsidies', formatSubsidies)\r\n)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport capitalize from 'lodash/capitalize'\r\nimport get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\n\r\nimport { formatModifiers } from 'pmt-modules/catalog/format/cartModifiers'\r\nimport { isBo } from 'pmt-modules/environment'\r\nimport { formatOrderFees } from 'pmt-modules/fees'\r\nimport { formatCheck } from 'pmt-modules/payment/check/format'\r\nimport { formatAmount } from 'pmt-modules/payment/payment/format'\r\n\r\nimport { formatRestaurant } from 'pmt-modules/restaurant/format'\r\nimport { ThirdParty } from 'pmt-modules/thirdParty/constants'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { DATE_FORMAT_MS, formatDate, isToday } from 'pmt-utils/date'\r\nimport { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { getGoogleMapsUrl } from 'pmt-utils/google'\r\n\r\nimport {\r\n  OrderMode,\r\n  OrderPaymentStatus,\r\n  getCancellingPartyFormatted,\r\n  getOrderModeLabel,\r\n  getOrderPaymentStatusLabel,\r\n  getOrderPaymentStatusType,\r\n  getOrderStatusLabel,\r\n  getOrderStatusType,\r\n} from '../constants'\r\nimport OrderStatus from '../constants/OrderStatus'\r\n\r\nimport { formatAdmissionFees } from './formatAdmissionFees'\r\nimport { formatUserAccountPayment } from './formatUserAccountPayment'\r\n\r\nconst formatThirdParty = order => {\r\n  order.isFromThirdParty = order.thirdPartyIdentifier !== ThirdParty.LEGACY_PMT\r\n  order.isThirdPartyDeliveroo = order.thirdPartyIdentifier === ThirdParty.DELIVEROO\r\n  return order\r\n}\r\n\r\nconst formatOrderNumber = order => {\r\n  order.orderId = order.posDisplayId\r\n\r\n  if (!isEmpty(order.posDisplayId) && order.posDisplayId.length >= 3) {\r\n    // keep only the last 3 digits\r\n    // (because it must be easily memorizable by the user, and it must not cause any issue when printing the ticket)\r\n    // for TCPOS: this was previously done by the API, but now we want the full number in the OrderPaidEmail\r\n    // so we store the full number and do the truncation only when needed - aka here\r\n    order.truncOrderId = order.posDisplayId.substr(order.posDisplayId.length - 3)\r\n  } else {\r\n    order.truncOrderId = order.posDisplayId || order.posCheckNumber || 'N/A' // N/A when order failed\r\n  }\r\n\r\n  // /!\\ This was an atempt with bo v2. After rebase we use the truncOrderId above, defined for the\r\n  // web order front.\r\n  // let orderNumber = null\r\n  // const posCheckNumber = get(order, 'check.posCheckNumber', null)\r\n  // if (!isEmpty(posCheckNumber)) {\r\n  //   orderNumber = posCheckNumber.substr(posCheckNumber.length - 3)\r\n  // } else if (!isNil(order.id)) {\r\n  //   const orderIdAsString = order.id.toString()\r\n  //   orderNumber = orderIdAsString.substr(orderIdAsString.length - 3)\r\n  // }\r\n\r\n  // TODO: refactor orderNumber to posDisplayId\r\n  order.orderNumber = order.posDisplayId\r\n\r\n  order.hasOrderNumber = order.truncOrderId !== null\r\n\r\n  return order\r\n}\r\n\r\nconst formatDates = order => {\r\n  order.formattedDueDate = formatDate(order.dueDate, 'DD/MM/YY HH:mm')\r\n\r\n  // adding a more friendly format of formatted due date\r\n  // like \"Mercredi 5 février à 11:00\"\r\n  let dayText = formatDate(order.dueDate, 'dddd')\r\n  dayText = dayText.charAt(0).toUpperCase() + dayText.slice(1)\r\n  order.formattedDueDateTotal = tr('global.date_at', {\r\n    date: `${dayText} ${formatDate(order.dueDate, 'D MMMM')}`,\r\n    hour: formatDate(order.dueDate, 'HH:mm'),\r\n  })\r\n\r\n  const dueDate = moment(order.dueDate)\r\n\r\n  order.dueDateFormatted = null\r\n  const date = isToday(dueDate) ? tr('global.today') : dueDate.format('dddd D MMM')\r\n\r\n  order.dueDateFormatted = tr(`order.slots.dueDate.${order.mode}`, {\r\n    date,\r\n    dateCapitalized: capitalize(date),\r\n    time: dueDate.format('HH:mm'),\r\n  })\r\n\r\n  if (order.creationDate) {\r\n    order.creationDateFormatted = formatDate(order.creationDate, DATE_FORMAT_MS)\r\n  }\r\n\r\n  if (order.modificationDate) {\r\n    order.modificationDateFormatted = formatDate(order.modificationDate, DATE_FORMAT_MS)\r\n  }\r\n\r\n  if (order.limitRefundDate) {\r\n    order.limitRefundDateFormatted = formatDate(order.limitRefundDate)\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatOrderMode = order => {\r\n  order.orderModeLabel = getOrderModeLabel(order.mode)\r\n  order.isDeliveryMode = order.mode === OrderMode.DELIVERY\r\n  order.isOnSiteMode = order.mode === OrderMode.ON_SITE\r\n  order.isTakeAwayMode = order.mode === OrderMode.TAKE_AWAY\r\n  return order\r\n}\r\n\r\nconst formatStatus = order => {\r\n  if (isBo()) {\r\n    order.statusFormatted = getOrderStatusLabel(order.status)\r\n    order.statusType = getOrderStatusType(order.status)\r\n  }\r\n\r\n  order.isStatusCreated = order.status === OrderStatus.CREATED\r\n  order.isStatusSent = order.status === OrderStatus.SENT\r\n  order.isStatusReceived = order.status === OrderStatus.RECEIVED\r\n  order.isStatusProducing = order.status === OrderStatus.PRODUCING\r\n  order.isStatusReady = order.status === OrderStatus.READY\r\n  order.isStatusInDelivery = order.status === OrderStatus.IN_DELIVERY\r\n  order.isStatusDelivered = order.status === OrderStatus.DELIVERED\r\n  order.isStatusCanceled = order.status === OrderStatus.CANCELED\r\n  order.isStatusFailed = order.status === OrderStatus.FAILED\r\n\r\n  if (order.isStatusCanceled) {\r\n    order.cancellingPartyFormatted = getCancellingPartyFormatted(order.cancellingParty)\r\n  }\r\n\r\n  order.isFlowOnGoing =\r\n    !order.isStatusCanceled &&\r\n    !order.isStatusFailed &&\r\n    !order.isStatusDelivered &&\r\n    !order.isStatusCreated\r\n\r\n  order.isFlowFinished = !order.isFlowOnGoing\r\n  return order\r\n}\r\n\r\nconst formatOrderRestaurant = (order, props) => {\r\n  if (props.formattedRestaurantsMap) {\r\n    const restaurant = props.formattedRestaurantsMap[order.restaurantId]\r\n    if (restaurant) {\r\n      order.restaurant = formatRestaurant(restaurant)\r\n    }\r\n  }\r\n  return order\r\n}\r\n\r\nconst formatPrices = order => {\r\n  order.totalPriceFormatted = formatPriceWithCurrency(order.totalPrice, order.currency)\r\n  order.tipsFormatted = formatPriceWithCurrency(order.tips, order.currency)\r\n  order.cartTotalPriceFormatted = formatPriceWithCurrency(order.cartTotalPrice, order.currency)\r\n\r\n  const ON_SITE_PAYMENT_ID = 0 // TODO: still used?\r\n\r\n  const { userAccountPayment, irlPayment } = order\r\n\r\n  order.hasIrlPayment = !isNil(irlPayment)\r\n  order.hasUserAccountPayment = !isNil(userAccountPayment)\r\n  order.hasThirdPartyPayment = order.isFromThirdParty\r\n  order.hasPayment =\r\n    order.paymentId &&\r\n    order.paymentId !== ON_SITE_PAYMENT_ID &&\r\n    order.check && // when retrieving order on a list, we do not have the check loaded.\r\n    order.check.outstandingBalance !== order.check.total\r\n  order.isOnSitePayment =\r\n    !order.hasIrlPayment &&\r\n    !order.hasUserAccountPayment &&\r\n    !order.paymentId &&\r\n    (!order.check || order.check.outstandingBalance === order.check.total)\r\n\r\n  // TODO add payment when API will send it (order.payment !== null ? order.payment.amount : 0)\r\n  order.totalPaidPrice = 0\r\n  if (order.hasIrlPayment) {\r\n    // /!\\ order.payment is null in this case\r\n    order.totalPaidPrice += irlPayment.amount\r\n    irlPayment.amountFormatted = formatPriceWithCurrency(irlPayment.amount, order.currency)\r\n    irlPayment.totalWithTipFormatted = formatPriceWithCurrency(irlPayment.amount, order.currency) // no tips on irlPayment for now\r\n  }\r\n  if (order.hasUserAccountPayment) {\r\n    order.totalPaidPrice +=\r\n      userAccountPayment.amountFromAccount + get(userAccountPayment, 'subsidies.grantAmount', 0)\r\n    userAccountPayment.amountFromAccountFormatted = formatPriceWithCurrency(\r\n      userAccountPayment.amountFromAccount,\r\n      order.currency\r\n    )\r\n  }\r\n\r\n  if (order.hasPayment) {\r\n    order.totalPaidPrice += order.payment.amount + order.payment.tips\r\n  }\r\n\r\n  if (order.hasThirdPartyPayment) {\r\n    // TODO: reduce? for now we only have one payment.\r\n    // empty only on test payments\r\n    order.totalPaidPrice = !isEmpty(order.payments) ? order.payments[0].amount : 0\r\n  }\r\n\r\n  order.totalPaidPriceFormatted = formatPriceWithCurrency(order.totalPaidPrice, order.currency)\r\n\r\n  order.fees = formatOrderFees(order.fees)\r\n\r\n  // use only outstandingBalance to verify payment status\r\n  // see https://www.notion.so/paymytable/Am-liorer-le-label-Rester-payer-sur-la-vue-d-une-commande-d-un-client-780ca5bbe89040c1be821f7e804213bf\r\n  order.paymentStatus = null\r\n  const calculateIsFullyPaid = order => {\r\n    if (isNil(order.check)) {\r\n      return null // not really false, we just didn't loaded the data\r\n    }\r\n\r\n    if (order.hasThirdPartyPayment) {\r\n      order.paymentStatus = OrderPaymentStatus.PAID_THIRD_PARTY\r\n      return true\r\n    }\r\n\r\n    if (order.check.outstandingBalance === 0) {\r\n      order.paymentStatus = OrderPaymentStatus.PAID\r\n      return true\r\n    } else if (order.check.outstandingBalance < 0) {\r\n      order.paymentStatus = OrderPaymentStatus.OVERPAYMENT\r\n      order.isPaymentStatusOverPayment = true\r\n      return true\r\n    } else if (\r\n      order.check.outstandingBalance > 0 &&\r\n      order.check.outstandingBalance < order.totalPrice\r\n    ) {\r\n      order.paymentStatus = OrderPaymentStatus.UNDERPAYMENT\r\n      return false\r\n    } else if (order.check.outstandingBalance >= order.totalPrice) {\r\n      // this should never be superior but we never know\r\n      order.paymentStatus = OrderPaymentStatus.NOT_PAID\r\n      return false\r\n    }\r\n\r\n    return false\r\n  }\r\n  order.isFullyPaid = calculateIsFullyPaid(order)\r\n\r\n  order.paymentStatusLabel = getOrderPaymentStatusLabel(order.paymentStatus)\r\n  order.paymentStatusType = getOrderPaymentStatusType(order.paymentStatus)\r\n\r\n  return order\r\n}\r\n\r\nconst formatAmountFromAccount = order => {\r\n  if (!isNil(order.userAccountPayment)) {\r\n    order.userAccountPayment.amountFromAccountFormatted = formatPriceWithCurrency(\r\n      order.userAccountPayment.amountFromAccount,\r\n      order.currency\r\n    )\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatGrantAmount = order => {\r\n  if (!isNil(order.admissionFees)) {\r\n    order.admissionFees.amountIncludingTaxFormatted = formatPriceWithCurrency(\r\n      order.admissionFees.amountIncludingTax,\r\n      order.currency\r\n    )\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatSource = order => {\r\n  const source = order.source || {}\r\n\r\n  order.hasSource = !isNil(order.source)\r\n\r\n  source.isPlatformKiosk = source.platform === 'KIOSK'\r\n  source.hasIdentifier = !isEmpty(source.identifier)\r\n\r\n  order.source = source\r\n  return order\r\n}\r\n\r\nconst formatOrderUser = order => {\r\n  order.isLinkedToPayMyTableUser = !isNil(order.userId)\r\n  order.isLinkedToUser = !isNil(order.eater)\r\n\r\n  if (order.eater) {\r\n    order.eater.fullName = [order.eater.firstName, order.eater.lastName].filter(Boolean).join(' ')\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatAddress = order => {\r\n  const address = order.address\r\n\r\n  order.shouldHaveAddress = !order.isFromThirdParty\r\n  order.hasAddress = !isNil(address)\r\n  if (address) {\r\n    address.gmapLink = getGoogleMapsUrl({\r\n      latitude: address.geoPt.latitude,\r\n      longitude: address.geoPt.longitude,\r\n    })\r\n  }\r\n\r\n  return order\r\n}\r\n\r\nconst formatData = order => {\r\n  order.hasTableNumber = !isEmpty(order.tableNumber)\r\n  // trick for \"at bar\": on site order with table number set to \"bar\"\r\n  order.isOnBar = order.hasTableNumber && order.tableNumber.toLowerCase() === 'bar'\r\n\r\n  order.hasFees = !isEmpty(order.fees)\r\n\r\n  if (order.check) {\r\n    order.check = formatCheck(order.check)\r\n  }\r\n\r\n  order.hasComment = !isEmpty(order.comment)\r\n  order.hasAdmissionFees = !isNil(order.admissionFees) && !isEmpty(order.admissionFees.fees)\r\n\r\n  return order\r\n}\r\n\r\nconst formatItems = order => {\r\n  order.menus = order.menus || []\r\n  order.products = order.products || []\r\n  order.items = order.menus.concat(order.products)\r\n\r\n  return order\r\n}\r\n\r\nconst formatOptionValue = (value, props = {}) => {\r\n  value.hasAdditionalPrice = value.additionalPrice !== 0\r\n  value.additionalPriceFormatted = formatPriceWithCurrency(value.additionalPrice, props.currency)\r\n  return value\r\n}\r\n\r\nconst formatOption = createFormatter(\r\n  createSubObjectFormatter('values', createListFormatter(formatOptionValue))\r\n)\r\n\r\nconst formatProduct = createFormatter(\r\n  createSubObjectFormatter('options', createListFormatter(formatOption)),\r\n  (product, props = {}) => {\r\n    product.hasComment = !isEmpty(product.comment)\r\n\r\n    if (props.fromMenu) {\r\n      product.additionalPriceFormatted = formatPriceWithCurrency(\r\n        product.additionalPrice,\r\n        props.currency\r\n      )\r\n    } else {\r\n      product.priceFormatted = formatPriceWithCurrency(product.price, props.currency)\r\n    }\r\n    return product\r\n  }\r\n)\r\n\r\nconst formatPart = createFormatter(\r\n  createSubObjectFormatter(\r\n    'products',\r\n    createListFormatter((product, props = {}) =>\r\n      formatProduct(product, { ...props, fromMenu: true })\r\n    )\r\n  )\r\n)\r\n\r\nconst formatMenu = createFormatter(\r\n  createSubObjectFormatter('parts', createListFormatter(formatPart)),\r\n  (menu, props = {}) => {\r\n    menu.priceFormatted = formatPriceWithCurrency(menu.price, props.currency)\r\n    return menu\r\n  }\r\n)\r\n\r\nconst formatDeliveryAddress = data => {\r\n  if (!isNil(data.address) && !isNil(data.address.id)) {\r\n    data.address.formattedAddress = `${data.address.street}, ${data.address.postCode} ${\r\n      data.address.city\r\n    }, ${data.address.country}`\r\n  }\r\n\r\n  return data\r\n}\r\n\r\nconst formatPayment = payment => {\r\n  return formatAmount(payment)\r\n}\r\n\r\nexport const formatOrder = createFormatter(\r\n  formatThirdParty,\r\n  formatOrderNumber,\r\n  formatDates,\r\n  formatOrderMode,\r\n  formatDeliveryAddress,\r\n  formatStatus,\r\n  formatOrderRestaurant,\r\n  formatPrices,\r\n  formatAmountFromAccount,\r\n  formatGrantAmount,\r\n  formatSource,\r\n  formatOrderUser,\r\n  formatAddress,\r\n  formatData,\r\n  createSubObjectFormatter('modifiers', formatModifiers),\r\n  createSubObjectFormatter('payment', formatPayment),\r\n  createSubObjectFormatter('fees', formatOrderFees),\r\n  (order, props = {}) => {\r\n    return createSubObjectFormatter('products', createListFormatter(formatProduct))(order, {\r\n      ...props,\r\n      currency: order.currency,\r\n    })\r\n  },\r\n  (order, props = {}) => {\r\n    return createSubObjectFormatter('menus', createListFormatter(formatMenu))(order, {\r\n      ...props,\r\n      currency: order.currency,\r\n    })\r\n  },\r\n  createSubObjectFormatter('userAccountPayment', formatUserAccountPayment),\r\n  createSubObjectFormatter('admissionFees', formatAdmissionFees),\r\n  formatItems\r\n)\r\n\r\nexport const formatOrders = createListFormatter(formatOrder)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport StatusChip from 'pmt-ui/StatusChip'\r\n\r\nexport const getApiConsumerListStateKey = withParents => `withParents_${withParents ?? false}`\r\n\r\nexport const ApiConsumerStatus = {\r\n  CREATED: 'CREATED',\r\n  ENABLED: 'ENABLED',\r\n  DISABLED: 'DISABLED',\r\n  ARCHIVED: 'ARCHIVED',\r\n}\r\n\r\nexport const getApiConsumerStatusLabel = status => {\r\n  switch (status) {\r\n    case ApiConsumerStatus.CREATED:\r\n      return tr('global.apiConsumer.status.label.CREATED')\r\n    case ApiConsumerStatus.ENABLED:\r\n      return tr('global.apiConsumer.status.label.ENABLED')\r\n    case ApiConsumerStatus.DISABLED:\r\n      return tr('global.apiConsumer.status.label.DISABLED')\r\n    case ApiConsumerStatus.ARCHIVED:\r\n      return tr('global.apiConsumer.status.label.ARCHIVED')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\nexport const getApiConsumerStatusType = status => {\r\n  switch (status) {\r\n    case ApiConsumerStatus.CREATED:\r\n      return StatusChip.Status.INFO\r\n    case ApiConsumerStatus.ENABLED:\r\n      return StatusChip.Status.VALID\r\n    case ApiConsumerStatus.DISABLED:\r\n      return StatusChip.Status.WARNING\r\n    case ApiConsumerStatus.ARCHIVED:\r\n      return StatusChip.Status.INACTIVE\r\n    default:\r\n      return status\r\n  }\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const ApiConsumerPreset = {\r\n  PLUGIN_ORDER: 'PLUGIN_ORDER',\r\n\r\n  ORDER_THIRD_PARTY: 'ORDER_THIRD_PARTY',\r\n\r\n  DIGITAL_MENU: 'DIGITAL_MENU',\r\n\r\n  PLUGIN_BOOKING: 'PLUGIN_BOOKING',\r\n\r\n  /**\r\n   * top up, badge, history\r\n   */\r\n  WEB_CUSTOMER_CATERING: 'WEB_CUSTOMER_CATERING',\r\n\r\n  WEB_CUSTOMER_PAYMENT: 'WEB_CUSTOMER_PAYMENT',\r\n\r\n  WEB_CUSTOMER_OAUTH_AUTHORIZE: 'WEB_CUSTOMER_OAUTH_AUTHORIZE',\r\n\r\n  WEB_CUSTOMER_TOP_UP: 'WEB_CUSTOMER_TOP_UP',\r\n\r\n  WEB_CUSTOMER_ORDER: 'WEB_CUSTOMER_ORDER',\r\n\r\n  // unused for now\r\n  MOBILE_APP: 'MOBILE_APP',\r\n\r\n  KIOSK_ORDER: 'KIOSK_ORDER',\r\n\r\n  KIOSK_TOP_UP: 'KIOSK_TOP_UP',\r\n\r\n  // unused for now\r\n  KIOSK_ORDER_TOP_UP: 'KIOSK_ORDER_TOP_UP',\r\n\r\n  KIOSK_SELF_CHECKOUT: 'KIOSK_SELF_CHECKOUT',\r\n\r\n  // TODO: is it still used?\r\n  TABLET_PAYMENT_ORDER: 'TABLET_PAYMENT_ORDER',\r\n\r\n  POS: 'POS',\r\n\r\n  BACKOFFICE: 'BACKOFFICE',\r\n\r\n  /**\r\n   * web global website (Feedback, etc).\r\n   */\r\n  WEB_GLOBAL: 'WEB_GLOBAL',\r\n\r\n  /**\r\n   * For external scripts / APIs etc used by PMT. Better than using the OTHER preset which gives us\r\n   * no indication of the api consumer goal.\r\n   */\r\n  SCRIPT: 'SCRIPT',\r\n\r\n  /**\r\n   * For external scripts / APIs etc used by external. Better than using the OTHER preset which\r\n   * gives us no indication of the api consumer goal.\r\n   */\r\n  THIRD_PARTY: 'THIRD_PARTY',\r\n\r\n  /**\r\n   * Used mostly for:\r\n   *\r\n   * <ul>\r\n   *   <li>dev purposes, to avoid forcing the preset creation to implement a new feature.\r\n   *   <li>very specific api consumers that does not have a preset.\r\n   * </ul>\r\n   */\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const getApiConsumerPresetLabel = preset => {\r\n  switch (preset) {\r\n    case ApiConsumerPreset.PLUGIN_ORDER:\r\n      return tr('global.apiConsumer.preset.label.PLUGIN_ORDER')\r\n    case ApiConsumerPreset.ORDER_THIRD_PARTY:\r\n      return tr('global.apiConsumer.preset.label.ORDER_THIRD_PARTY')\r\n    case ApiConsumerPreset.DIGITAL_MENU:\r\n      return tr('global.apiConsumer.preset.label.DIGITAL_MENU')\r\n    case ApiConsumerPreset.PLUGIN_BOOKING:\r\n      return tr('global.apiConsumer.preset.label.PLUGIN_BOOKING')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_CATERING:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_CATERING')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_PAYMENT:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_PAYMENT')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_OAUTH_AUTHORIZE:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_OAUTH_AUTHORIZE')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_TOP_UP:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_TOP_UP')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_ORDER:\r\n      return tr('global.apiConsumer.preset.label.WEB_CUSTOMER_ORDER')\r\n    case ApiConsumerPreset.MOBILE_APP:\r\n      return tr('global.apiConsumer.preset.label.MOBILE_APP')\r\n    case ApiConsumerPreset.KIOSK_ORDER:\r\n      return tr('global.apiConsumer.preset.label.KIOSK_ORDER')\r\n    case ApiConsumerPreset.KIOSK_TOP_UP:\r\n      return tr('global.apiConsumer.preset.label.KIOSK_TOP_UP')\r\n    case ApiConsumerPreset.KIOSK_ORDER_TOP_UP:\r\n      return tr('global.apiConsumer.preset.label.KIOSK_ORDER_TOP_UP')\r\n    case ApiConsumerPreset.KIOSK_SELF_CHECKOUT:\r\n      return tr('global.apiConsumer.preset.label.KIOSK_SELF_CHECKOUT')\r\n    case ApiConsumerPreset.TABLET_PAYMENT_ORDER:\r\n      return tr('global.apiConsumer.preset.label.TABLET_PAYMENT_ORDER')\r\n    case ApiConsumerPreset.POS:\r\n      return tr('global.apiConsumer.preset.label.POS')\r\n    case ApiConsumerPreset.BACKOFFICE:\r\n      return tr('global.apiConsumer.preset.label.BACKOFFICE')\r\n    case ApiConsumerPreset.WEB_GLOBAL:\r\n      return tr('global.apiConsumer.preset.label.WEB_GLOBAL')\r\n    case ApiConsumerPreset.SCRIPT:\r\n      return tr('global.apiConsumer.preset.label.SCRIPT')\r\n    case ApiConsumerPreset.THIRD_PARTY:\r\n      return tr('global.apiConsumer.preset.label.THIRD_PARTY')\r\n    case ApiConsumerPreset.OTHER:\r\n      return tr('global.apiConsumer.preset.label.OTHER')\r\n    default:\r\n      return preset\r\n  }\r\n}\r\n\r\nexport const getApiConsumerPresetExplaination = preset => {\r\n  switch (preset) {\r\n    case ApiConsumerPreset.PLUGIN_ORDER:\r\n      return tr('global.apiConsumer.preset.explaination.PLUGIN_ORDER')\r\n    case ApiConsumerPreset.ORDER_THIRD_PARTY:\r\n      return tr('global.apiConsumer.preset.explaination.ORDER_THIRD_PARTY')\r\n    case ApiConsumerPreset.DIGITAL_MENU:\r\n      return tr('global.apiConsumer.preset.explaination.DIGITAL_MENU')\r\n    case ApiConsumerPreset.PLUGIN_BOOKING:\r\n      return tr('global.apiConsumer.preset.explaination.PLUGIN_BOOKING')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_CATERING:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_CATERING')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_PAYMENT:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_PAYMENT')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_OAUTH_AUTHORIZE:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_OAUTH_AUTHORIZE')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_TOP_UP:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_TOP_UP')\r\n    case ApiConsumerPreset.WEB_CUSTOMER_ORDER:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_CUSTOMER_ORDER')\r\n    case ApiConsumerPreset.MOBILE_APP:\r\n      return tr('global.apiConsumer.preset.explaination.MOBILE_APP')\r\n    case ApiConsumerPreset.KIOSK_ORDER:\r\n      return tr('global.apiConsumer.preset.explaination.KIOSK_ORDER')\r\n    case ApiConsumerPreset.KIOSK_TOP_UP:\r\n      return tr('global.apiConsumer.preset.explaination.KIOSK_TOP_UP')\r\n    case ApiConsumerPreset.KIOSK_ORDER_TOP_UP:\r\n      return tr('global.apiConsumer.preset.explaination.KIOSK_ORDER_TOP_UP')\r\n    case ApiConsumerPreset.KIOSK_SELF_CHECKOUT:\r\n      return tr('global.apiConsumer.preset.explaination.KIOSK_SELF_CHECKOUT')\r\n    case ApiConsumerPreset.TABLET_PAYMENT_ORDER:\r\n      return tr('global.apiConsumer.preset.explaination.TABLET_PAYMENT_ORDER')\r\n    case ApiConsumerPreset.POS:\r\n      return tr('global.apiConsumer.preset.explaination.POS')\r\n    case ApiConsumerPreset.BACKOFFICE:\r\n      return tr('global.apiConsumer.preset.explaination.BACKOFFICE')\r\n    case ApiConsumerPreset.WEB_GLOBAL:\r\n      return tr('global.apiConsumer.preset.explaination.WEB_GLOBAL')\r\n    case ApiConsumerPreset.SCRIPT:\r\n      return tr('global.apiConsumer.preset.explaination.SCRIPT')\r\n    case ApiConsumerPreset.THIRD_PARTY:\r\n      return tr('global.apiConsumer.preset.explaination.THIRD_PARTY')\r\n    case ApiConsumerPreset.OTHER:\r\n      return tr('global.apiConsumer.preset.explaination.OTHER')\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const Front = {\r\n  PLUGIN_ORDER: 'PLUGIN_ORDER',\r\n  DIGITAL_MENU: 'DIGITAL_MENU',\r\n  KIOSK: 'KIOSK',\r\n  WEB_CUSTOMER: 'WEB_CUSTOMER',\r\n  PLUGIN_BOOKING: 'PLUGIN_BOOKING',\r\n  WEB_GLOBAL: 'WEB_GLOBAL',\r\n  BACKOFFICE: 'BACKOFFICE',\r\n  POS: 'POS',\r\n  SCRIPT: 'SCRIPT',\r\n  TABLET: 'TABLET',\r\n  THIRD_PARTY: 'THIRD_PARTY',\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const getFrontI18nLabelsDirectoryName = front => {\r\n  switch (front) {\r\n    case Front.KIOSK:\r\n      return 'pmt-web-kiosk'\r\n\r\n    case Front.WEB_CUSTOMER:\r\n      return 'pmt_web_customer'\r\n\r\n    case Front.PLUGIN_ORDER:\r\n    case Front.DIGITAL_MENU:\r\n      return 'pmt-order-plugin'\r\n\r\n    // override of the i18n labels is not implemented for those fronts yet (or is not relevant at all)\r\n    case Front.PLUGIN_BOOKING:\r\n    case Front.WEB_GLOBAL:\r\n    case Front.BACKOFFICE:\r\n    case Front.POS:\r\n    case Front.SCRIPT:\r\n    case Front.TABLET:\r\n    case Front.THIRD_PARTY:\r\n    case Front.OTHER:\r\n    default:\r\n      return null\r\n  }\r\n}\r\n\r\nexport const getFrontlabel = front => {\r\n  // TODO:\r\n  return front\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst getFrontPresets = () => ({\r\n  [Front.KIOSK]: [\r\n    ApiConsumerPreset.KIOSK_ORDER,\r\n    ApiConsumerPreset.KIOSK_ORDER_TOP_UP,\r\n    ApiConsumerPreset.KIOSK_SELF_CHECKOUT,\r\n    ApiConsumerPreset.KIOSK_TOP_UP,\r\n  ],\r\n  [Front.WEB_CUSTOMER]: [\r\n    ApiConsumerPreset.WEB_CUSTOMER_CATERING,\r\n    ApiConsumerPreset.WEB_CUSTOMER_OAUTH_AUTHORIZE,\r\n    ApiConsumerPreset.WEB_CUSTOMER_PAYMENT,\r\n    ApiConsumerPreset.WEB_CUSTOMER_TOP_UP,\r\n    ApiConsumerPreset.WEB_CUSTOMER_ORDER,\r\n  ],\r\n  [Front.PLUGIN_ORDER]: [ApiConsumerPreset.PLUGIN_ORDER, ApiConsumerPreset.WEB_CUSTOMER_ORDER],\r\n  [Front.DIGITAL_MENU]: [ApiConsumerPreset.DIGITAL_MENU],\r\n  [Front.PLUGIN_BOOKING]: [ApiConsumerPreset.PLUGIN_BOOKING],\r\n  [Front.WEB_GLOBAL]: [ApiConsumerPreset.WEB_GLOBAL],\r\n  [Front.BACKOFFICE]: [ApiConsumerPreset.BACKOFFICE],\r\n  [Front.POS]: [ApiConsumerPreset.POS],\r\n  [Front.SCRIPT]: [ApiConsumerPreset.SCRIPT],\r\n  [Front.TABLET]: [ApiConsumerPreset.TABLET],\r\n  [Front.THIRD_PARTY]: [ApiConsumerPreset.THIRD_PARTY, ApiConsumerPreset.ORDER_THIRD_PARTY],\r\n  [Front.OTHER]: [ApiConsumerPreset.OTHER],\r\n})\r\n\r\nexport const getPresetsForFront = front => {\r\n  return getFrontPresets()[front]\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const CheckAccessSecurityMode = {\r\n  POS_CHECK_ID: 'POS_CHECK_ID',\r\n  TABLE_NUMBER: 'TABLE_NUMBER',\r\n}\r\n\r\nexport const getCheckAccessSecurityModeLabel = mode => {\r\n  switch (mode) {\r\n    case CheckAccessSecurityMode.POS_CHECK_ID:\r\n      return tr('global.apiConsumer.checkAccessSecurityMode.POS_CHECK_ID')\r\n    case CheckAccessSecurityMode.TABLE_NUMBER:\r\n      return tr('global.apiConsumer.checkAccessSecurityMode.TABLE_NUMBER')\r\n    default:\r\n      return mode\r\n  }\r\n}\r\n\r\nexport const PagerCaptureModes = {\r\n  NUMERIC_PAD: 'NUMERIC_PAD',\r\n  SCANNER_2D: 'SCANNER_2D',\r\n  CONTACTLESS: 'CONTACTLESS',\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { OrderMode } from 'pmt-modules/order'\r\nimport { PagerCaptureModes } from 'pmt-modules/apiConsumer/constants'\r\n\r\nimport { createFormatter } from 'pmt-utils/format'\r\n\r\nimport { AppConfigPresets } from '../constants'\r\n\r\nconst formatOrderModes = appConfig => {\r\n  // when using Digital Menu preset, order settings are null\r\n  // so we use order modes but from digitalMenu settings\r\n  if (isEmpty(appConfig.order) && !isEmpty(appConfig.digitalMenu?.modes)) {\r\n    appConfig.order = {\r\n      modes: appConfig.digitalMenu.modes,\r\n    }\r\n  }\r\n\r\n  if (appConfig.order) {\r\n    let formattedDatas = {\r\n      hasOnSite: false,\r\n      hasTakeAway: false,\r\n      hasDelivery: false,\r\n    }\r\n\r\n    const modes = !isNil(appConfig.order.modes) ? appConfig.order.modes : []\r\n    modes.forEach(mode => {\r\n      switch (mode) {\r\n        case OrderMode.ON_SITE:\r\n          formattedDatas.hasOnSite = true\r\n          break\r\n        case OrderMode.TAKE_AWAY:\r\n          formattedDatas.hasTakeAway = true\r\n          break\r\n        case OrderMode.DELIVERY:\r\n          formattedDatas.hasDelivery = true\r\n          break\r\n        default:\r\n          break\r\n      }\r\n    })\r\n\r\n    appConfig.order.modesFormatted = { ...appConfig.order.modes, ...formattedDatas }\r\n  }\r\n\r\n  return appConfig\r\n}\r\n\r\nexport const formatOrderAppConfig = createFormatter(order => {\r\n  order.orderParamsForModes = {\r\n    [OrderMode.ON_SITE]: order.onSite,\r\n    [OrderMode.TAKE_AWAY]: order.takeAway,\r\n    [OrderMode.DELIVERY]: order.delivery,\r\n  }\r\n\r\n  order.hasPagerCaptureNumericPad =\r\n    order.pagerCaptureMode?.indexOf(PagerCaptureModes.NUMERIC_PAD) >= 0\r\n  order.hasPagerCaptureScanner2D =\r\n    order.pagerCaptureMode?.indexOf(PagerCaptureModes.SCANNER_2D) >= 0\r\n  order.hasPagerCaptureContactless =\r\n    order.pagerCaptureMode?.indexOf(PagerCaptureModes.CONTACTLESS) >= 0\r\n\r\n  return order\r\n})\r\n\r\nexport const formatAppConfig = createFormatter(formatOrderModes)\r\n\r\nexport const formatAppConfigPreset = createFormatter(data => {\r\n  data.isPluginOrder = data.preset === AppConfigPresets.PLUGIN_ORDER\r\n  data.isDigitalMenu = data.preset === AppConfigPresets.DIGITAL_MENU\r\n\r\n  return data\r\n})\r\n","import isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport Immutable from 'immutable'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { getCurrentSupportedLanguage } from 'pmt-modules/i18n'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { formatTexts } from './format/texts'\r\nimport { getDefaultAppConfig } from './config'\r\nimport { mergeConfigObject } from './utils'\r\nimport { formatAppConfig, formatOrderAppConfig, formatAppConfigPreset } from './format'\r\n\r\nconst getState = state => state.entities.appConfig\r\n\r\n// sometimes there is a weird state where the app config data is not immutable\r\n// we avoid crashes at the moment by forcing immutability\r\nconst getAppConfigState = createSelector([getState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return null\r\n  }\r\n\r\n  if (!isFunction(appConfigState.toJS)) {\r\n    console.log('state is not immutable')\r\n    return Immutable.fromJS(appConfigState)\r\n  }\r\n\r\n  return appConfigState\r\n})\r\n\r\nexport const isFetchingAppConfig = createSelector([getAppConfigState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return false\r\n  }\r\n\r\n  return appConfigState.get('isFetching', false)\r\n})\r\n\r\nexport const getAppConfigError = createSelector([getAppConfigState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return null\r\n  }\r\n\r\n  const error = appConfigState.get('error', null)\r\n  return isNil(error) ? null : error.toJS()\r\n})\r\n\r\nexport const getAppConfigData = createSelector([getAppConfigState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return null\r\n  }\r\n\r\n  const appConfigData = appConfigState.get('data', null)\r\n  if (isNil(appConfigData)) {\r\n    return null\r\n  }\r\n\r\n  // sometimes sentry is fired because toJS is not a function\r\n  // add some logs to see where this comes from\r\n  if (!isFunction(appConfigData.toJS)) {\r\n    Logger.warn('AppConfig', 'data is not immutable', {\r\n      appConfigState,\r\n      appConfigData,\r\n    })\r\n    return Immutable.fromJS(appConfigData)\r\n  }\r\n\r\n  return appConfigData\r\n})\r\n\r\nexport const getAppConfig = createSelector(\r\n  [getAppConfigData],\r\n  appConfigData => (isNil(appConfigData) ? null : formatAppConfig(appConfigData.toJS()))\r\n)\r\n\r\nexport const getOauthClient = createSelector([getAppConfigData], appConfigData => {\r\n  if (isNil(appConfigData)) {\r\n    return null\r\n  }\r\n\r\n  const auth = appConfigData.get('authentication', null)\r\n  if (!isNil(auth)) {\r\n    const oauth = auth.get('oauth2', null)\r\n\r\n    return !isNil(oauth) ? oauth.toJS() : null\r\n  }\r\n\r\n  return null\r\n})\r\n\r\nexport const getMergedConfig = (data, type) => {\r\n  if (isNil(data)) {\r\n    return getDefaultAppConfig()[type]\r\n  }\r\n\r\n  let typeConfig = data.get(type, null)\r\n  if (!isNil(typeConfig)) {\r\n    typeConfig = typeConfig.toJS()\r\n  }\r\n\r\n  return mergeConfigObject(getDefaultAppConfig()[type], typeConfig)\r\n}\r\nexport const getAppTexts = createSelector(\r\n  [getAppConfigData, getCurrentSupportedLanguage],\r\n  (appConfigData, locale) => formatTexts(getMergedConfig(appConfigData, 'texts'), locale)\r\n)\r\n\r\n/**\r\n * returns user settings of the current app config\r\n */\r\nexport const getUserSettings = createSelector([getAppConfigData], appConfigData =>\r\n  getMergedConfig(appConfigData, 'user')\r\n)\r\n\r\n/**\r\n * returns front settings of the current app config\r\n */\r\nexport const getFrontSettings = createSelector([getAppConfigData], appConfigData =>\r\n  getMergedConfig(appConfigData, 'front')\r\n)\r\n\r\n/**\r\n * returns order settings of the current app config\r\n */\r\nexport const getOrderSettings = createSelector([getAppConfigData], appConfigData =>\r\n  formatOrderAppConfig(getMergedConfig(appConfigData, 'order'))\r\n)\r\n\r\n/**\r\n * returns security settings of the current app config\r\n */\r\nexport const getSecuritySettings = createSelector([getAppConfigData], appConfigData =>\r\n  getMergedConfig(appConfigData, 'security')\r\n)\r\n\r\nexport const getAppConfigPreset = createSelector([getAppConfigState], appConfigState => {\r\n  if (isNil(appConfigState)) {\r\n    return null\r\n  }\r\n\r\n  return formatAppConfigPreset({ preset: appConfigState.get('preset', null) })\r\n})\r\n","const ApiEndpoints = {\r\n  RESTAURANTS_GROUPS: '/restaurants-groups',\r\n\r\n  RESTAURANTS_GROUP: '/restaurants-groups/:restaurantsGroupId',\r\n  RESTAURANTS_GROUP_RESTAURANTS: '/restaurants-groups/restaurants',\r\n  RESTAURANTS_GROUP_HIERARCHY: '/restaurants-groups/hierarchy',\r\n\r\n  API_CONSUMERS: '/restaurants-groups/:restaurantsGroupId/api-consumers',\r\n  API_CONSUMERS_RESTAURANT: '/api-consumers/restaurants/:restaurantId',\r\n  API_CONSUMER: '/api-consumers/:apiConsumerId',\r\n  API_KEY: '/api-consumers/:apiConsumerId/apikey',\r\n  API_CONSUMER_VALIDATION: '/api-consumers/:apiConsumerId/validate',\r\n  CREATE_API_CONSUMER: '/api-consumers',\r\n\r\n  RESTAURANTS: '/restaurants',\r\n  RESTAURANT_LIST: '/restaurants',\r\n  RESTAURANT: '/restaurants/:restaurantId',\r\n  RESTAURANT_NEW_ARCHI: '/v1/pro/stores/:restaurantId/',\r\n\r\n  RESTAURANT_CHECKUP: '/checkup/restaurants',\r\n\r\n  RESTAURANT_DOCUMENTS_KYC: '/restaurants/:restaurantId/docs/kyc',\r\n\r\n  RESTAURANTS_GROUP_SEARCH_USERS: '/restaurants-groups/:rGroupId/users/search',\r\n\r\n  KIOSK_SETTINGS: '/restaurants/:restaurantId/kiosk-settings',\r\n\r\n  // TODO: add 's'\r\n  GET_CHECK_TABLE_NUMBER: '/restaurant/:restaurantId/table/:tableNumber/check',\r\n\r\n  GET_CHECK_POS_ID: '/restaurant/:restaurantId/pos-check-id/:posCheckId/check',\r\n\r\n  GET_CHECK: '/restaurants/:restaurantId/checks/:checkId',\r\n\r\n  PUT_MERGE_CHECKS: '/restaurants/:restaurantId/checks/merge',\r\n\r\n  GET_CHECK_CODE: '/restaurant/:restaurantId/code/:code/check',\r\n\r\n  RESTAURANT_USER_ACCOUNTS: '/restaurants/:restaurantId/user-accounts',\r\n\r\n  OAUTH_TOKEN: '/oauth/token',\r\n\r\n  OAUTH_AUTHORIZE_APP: '/oauth/authorize',\r\n\r\n  REGISTER: '/users',\r\n\r\n  USER_ME: '/users/me',\r\n\r\n  USER_ACCOUNTS: '/users/:userId/accounts',\r\n  USER_ACCOUNT: '/users/:userId/accounts/:userAccountId',\r\n  USER_ACCOUNT_TRANSACTIONS: '/users/:userId/accounts/:userAccountId/transactions',\r\n\r\n  USER_ADDRESSES: '/users/:userId/addresses',\r\n  USER_ADDRESS: '/users/:userId/addresses/:addressId',\r\n  USER_FORGOT_PASSWORD: '/users/password-recovery/recover',\r\n\r\n  RGROUP_USERS: '/restaurants-groups/:rGroupId/users',\r\n  RGROUP_USER: '/restaurants-groups/:rGroupId/users/:userId',\r\n\r\n  USERS: '/users',\r\n  USER: '/users/:userId',\r\n\r\n  DEPOSITS: '/deposits',\r\n  DEPOSIT: '/deposits/:depositId',\r\n\r\n  GET_PAYMENT: '/payments/:paymentId',\r\n  POST_PAYMENT_EMAIL: '/payments/:paymentId/email',\r\n  GET_PAYMENT_PDF_LINK: '/payments/:paymentId/pdf/link',\r\n  POST_PAYMENT: '/restaurant/:restaurantId/check/:checkId/payment',\r\n  GET_ASYNC_PAYMENT: '/payments/async/:paymentId',\r\n\r\n  HISTORY_USER_ORDERS: '/orders',\r\n  HISTORY_USER_BOOKINGS: '/bookings',\r\n  HISTORY_USER_PAYMENTS: '/payments',\r\n\r\n  PAYMENTS_HISTORY: '/payments',\r\n\r\n  ORDER_PREVIEW: '/orders-previews',\r\n\r\n  ORDERS: '/orders',\r\n  ORDERS_ON_GOING: '/orders/on-goings',\r\n  ORDERS_HISTORY: '/orders',\r\n\r\n  ORDER: '/orders/:orderId',\r\n\r\n  PRO_ME: '/pro/accounts/me',\r\n\r\n  PRO_ACCOUNTS: '/pro/accounts',\r\n\r\n  PRO_ACCOUNT: '/pro/accounts/:proAccountId',\r\n\r\n  PRO_DOMAINS: '/pro/domains',\r\n\r\n  PRO_DOMAIN: '/pro/domains/:domainId',\r\n\r\n  PRO_ME_DOMAINS: '/pro/accounts/me/domains',\r\n\r\n  PRO_ME_DOMAIN: '/pro/domains/:domainId',\r\n\r\n  PRO_ROLES: '/pro/roles',\r\n  PRO_ROLE: '/pro/roles/:roleId',\r\n\r\n  PRO_FORGOT_PASSWORD: '/pro/password-recovery/recover',\r\n\r\n  IMPORT_USER: '/restaurants-groups/:rGroupId/import/user-accounts',\r\n\r\n  /**\r\n   * Statistics\r\n   */\r\n  STATISTICS_ORDER: '/restaurants-groups/:restaurantsGroupId/stats/order/general-stats',\r\n  STATISTICS_DEPOSIT: '/restaurants-groups/:restaurantsGroupId/stats/deposit/general-stats',\r\n  STATISTICS_BALANCE_FOR_DAY: '/restaurants-groups/:restaurantsGroupId/stats/balance/for-day',\r\n\r\n  EXPORT_DEPOSITS: '/restaurants-groups/:restaurantsGroupId/export/deposits',\r\n  EXPORT_SUBSIDY_BILL: '/restaurants-groups/:restaurantsGroupId/export/subsidy-bill',\r\n  EXPORT_SALES: '/restaurants-groups/:restaurantsGroupId/export/sales',\r\n\r\n  EXPORT_RESTAURANTS_GROUP_DATA: '/restaurants-groups/:restaurantsGroupId/export',\r\n\r\n  /**\r\n   * CATALOG\r\n   */\r\n  MENU: '/restaurants/:restaurantId/menu',\r\n\r\n  /**\r\n   * CATALOG\r\n   */\r\n  CATALOG: '/restaurants/:restaurantId/catalog/v2',\r\n  UPSELLINGS: '/v1/user/upsell/store/:restaurantId',\r\n\r\n  //\r\n  //\r\n  //\r\n\r\n  ENTITY_HISTORY_LIST: '/history',\r\n  ENTITY_HISTORY: '/history/:entityHistoryId',\r\n  ENTITY_HISTORY_FOR_SESSION: '/history/sessions/:sessionId',\r\n\r\n  //\r\n  // Feedback\r\n  //\r\n  FEEDBACK_CAMPAIGNS: '/feedbacks/campaigns',\r\n  FEEDBACK_CAMPAIGN: '/feedbacks/campaigns/:feedbackCampaignId',\r\n  FEEDBACK_CAMPAIGN_EXPORT: '/feedbacks/campaigns/:feedbackCampaignId/export',\r\n  FEEDBACK_ANSWERS: '/feedbacks/campaigns/:feedbackCampaignId/answers',\r\n  FEEDBACK_ANSWER_TOKEN: '/feedbacks/answers/token/:feedbackAnswerToken',\r\n  FEEDBACK_RESUME_FOR_OBJECT: '/feedbacks/answers/:objectType/:objectId',\r\n  FEEDBACK_ANSWERS_USER: '/feedbacks/answers/users/:userId',\r\n\r\n  //\r\n  // Scheduled Actions\r\n  //\r\n  SCHEDULED_ACTIONS: '/scheduled-actions',\r\n  SCHEDULED_ACTION: '/scheduled-actions/:scheduledActionId',\r\n  SCHEDULED_ACTION_RUN: '/scheduled-actions/run/:scheduledActionId',\r\n\r\n  //\r\n  // Template\r\n  //\r\n  CUSTOMS_TEXTS: '/customs/texts-containers',\r\n  CUSTOMS_TEXTS_CONTAINER: '/customs/texts-containers/:containerId',\r\n  TEMPLATE_EMAIL_DATA: '/templates/preview/email/data',\r\n\r\n  //\r\n  // Audit\r\n  //\r\n  EVENTS_SEARCH: '/events/search',\r\n\r\n  EVENTS_SESSION: '/events/sessions/:sessionId',\r\n\r\n  AUDIT_LOGS_SEARCH: '/audit/logs/search',\r\n\r\n  //\r\n  //\r\n  //\r\n  FIREBASE_AUTH: '/firebase/auth',\r\n\r\n  //\r\n  //\r\n  //\r\n  PRO_NOTIFICATION_IDENTITIES: '/pro-notifications/identities',\r\n  PRO_NOTIFICATIONS: '/pro-notifications',\r\n  PRO_NOTIFICATION: '/pro-notifications/:proNotificationSettingId',\r\n\r\n  //\r\n  // Media\r\n  //\r\n  MEDIA: '/restaurants-groups/:rGroupId/media',\r\n  MEDIA_DETAIL: '/restaurants-groups/:rGroupId/media/:mediaId',\r\n  MEDIA_OPEN: '/restaurants-groups/:rGroupId/media/:mediaId/open',\r\n\r\n  //\r\n  //\r\n  //\r\n  API_ASYNC_SERVICE_DATA: '/service-async/:asyncServiceId',\r\n\r\n  //\r\n  // Payouts\r\n  //\r\n  PAYOUT: '/payouts/:payoutId',\r\n  PAYOUTS_LIST: '/payout/:rGroupId/list',\r\n  PAYOUTS_ERROR_LIST: '/payout/:rGroupId/list-errors',\r\n}\r\n\r\nexport default ApiEndpoints\r\n","import isNil from 'lodash/isNil'\r\n\r\nconst AuthErrors = {\r\n  POST: (requestOptions, json, response) => {\r\n    if (json.error) {\r\n      // refresh_token has expired\r\n      if (\r\n        !isNil(requestOptions.attemptRefresh) &&\r\n        json.error === 'invalid_grant' &&\r\n        !isNil(response) &&\r\n        response.status === 400\r\n      ) {\r\n        return 'global.login.error_refresh_token'\r\n      }\r\n\r\n      switch (json.error) {\r\n        case 'invalid_grant':\r\n          return 'global.login.global_error'\r\n\r\n        default:\r\n      }\r\n    }\r\n\r\n    return 'global.login.global_error'\r\n  },\r\n}\r\n\r\nexport default AuthErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport AuthErrors from '../errors/AuthErrors'\r\n\r\n/**\r\n *\r\n */\r\nconst AuthApi = {\r\n  /**\r\n   * OAuh2 token request with password grant type.\r\n   * @param  {string} username      the username (email)\r\n   * @param  {string} password      the password\r\n   * @param  {string} client_id     the oauth2 client public id\r\n   * @param  {string} client_secret the oauth2 client secret\r\n   */\r\n  postAuthPassword: (username, password, client_id, client_secret) => {\r\n    return {\r\n      type: 'POST',\r\n      isForm: true,\r\n      body: {\r\n        grant_type: 'password',\r\n        client_id,\r\n        client_secret,\r\n        username,\r\n        password,\r\n      },\r\n      headers: {\r\n        authorization: null, // force override global authorization\r\n      },\r\n      endpoint: ApiEndpoints.OAUTH_TOKEN,\r\n      errorHandler: AuthErrors.POST,\r\n    }\r\n  },\r\n\r\n  postRefreshToken: (refresh_token, client_id, client_secret) => {\r\n    return {\r\n      type: 'POST',\r\n      isForm: true,\r\n      body: {\r\n        grant_type: 'refresh_token',\r\n        client_id,\r\n        client_secret,\r\n        refresh_token,\r\n      },\r\n      headers: {\r\n        authorization: null, // force override global authorization\r\n      },\r\n      endpoint: ApiEndpoints.OAUTH_TOKEN,\r\n      errorHandler: AuthErrors.POST,\r\n    }\r\n  },\r\n}\r\n\r\nexport default AuthApi\r\n","const UserErrors = {\r\n  FORGOT_PASSWORD: {\r\n    default: 'global.forgot_password.unknown_email',\r\n  },\r\n  EDIT: {\r\n    101: 'Vous ne pouvez pas supprimer un email lié à ce compte convive',\r\n    default: \"Une erreur est survenue lors de la mise à jour de l'utilisateur.\",\r\n  },\r\n\r\n  POST_USER: {\r\n    100: 'global.post_user.email_already_used',\r\n    101: 'global.post_user.incomplete_profile',\r\n    103: 'global.post_user.cant_create_bank_account',\r\n    104: 'global.post_user.fid_already_used',\r\n    105: 'global.post_user.unknown_sponsorship',\r\n    106: 'global.post_user.cant_create_bank_wallet',\r\n    107: 'global.post_user.phone_already_used',\r\n    108: 'global.post_user.invalid_badge_id',\r\n    151: 'global.post_user.invalid_registration_code',\r\n    1026: 'global.post_user.user_light_set_password',\r\n    default: 'global.post_user.generic_error',\r\n  },\r\n}\r\n\r\nexport default UserErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport UserErrors from '../errors/UserErrors'\r\n\r\n// const loadCompagnies = (rGroupId, props, options, json, uids) => {\r\n//   // remove duplicates\r\n//   uids = uniqBy(uids, function (id) {\r\n//     return id;\r\n//   })\r\n\r\n//   // get difference between our uids list and the already loaded restaurants (props.restaurantIds)\r\n//   // to keep only the ids of the restaurants to load\r\n//   uids = differenceWith(uids, props.restaurantIds, isEqual)\r\n\r\n//   // there is no restaurant to load, we set default data and call success\r\n//   if (isEmpty(rids)) {\r\n//     json.restaurants = []\r\n//     json.restaurantIds = []\r\n//     options.success(json)\r\n//     return null\r\n//   }\r\n\r\n//   // we load the restaurants\r\n//   const getRestaurants = RestaurantApi.getRestaurants(json, uids)\r\n//   return getRestaurants\r\n// }\r\n\r\nconst transformUserFormDataToBody = user => ({\r\n  ...user,\r\n  birthdate: user.birthdate ? user.birthdate.valueOf() : null,\r\n})\r\n\r\nconst UserApi = {\r\n  getUserMe: () => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ME,\r\n      type: 'GET',\r\n    }\r\n  },\r\n\r\n  getRecoverPassword: email => ({\r\n    type: 'GET',\r\n    query: {\r\n      email,\r\n    },\r\n    headers: {\r\n      authorization: null,\r\n    },\r\n    endpoint: ApiEndpoints.USER_FORGOT_PASSWORD,\r\n    errorHandler: UserErrors.FORGOT_PASSWORD,\r\n  }),\r\n\r\n  /**\r\n   *  Get users list depending on rGroupId\r\n   *  props = {\r\n   *    - userIds: A list that describe the restaurants that we already loaded. We don't want\r\n   *    to load theme again.\r\n   *  }\r\n   */\r\n  getUserList: (rGroupId, nextCursor, limit) => ({\r\n    type: 'GET',\r\n    params: {\r\n      rGroupId,\r\n    },\r\n    query: {\r\n      loadAccounts: true,\r\n      cursor: nextCursor,\r\n      limit,\r\n    },\r\n    endpoint: ApiEndpoints.RGROUP_USERS,\r\n    // then: (options, json) => {\r\n    // let uids = json.data.map((user) => (user.id))\r\n    // return loadCompagnies(rGroupId, props, options, json, uids)\r\n    // }\r\n  }),\r\n\r\n  /**\r\n   *  Get user's orders list depending on rGroupId / userId\r\n   */\r\n  getOrdersList: (rGroupId, userId, nextCursor, limit) => ({\r\n    type: 'GET',\r\n    params: {\r\n      rGroupId,\r\n    },\r\n    query: {\r\n      userId,\r\n      cursor: nextCursor,\r\n      limit,\r\n    },\r\n    endpoint: ApiEndpoints.HISTORY_USER_ORDERS,\r\n  }),\r\n\r\n  getUser: (rGroupId, userId, loadAccounts = true) => ({\r\n    endpoint: ApiEndpoints.RGROUP_USER,\r\n    type: 'GET',\r\n    query: {\r\n      loadAccounts: loadAccounts,\r\n    },\r\n    params: {\r\n      rGroupId,\r\n      userId,\r\n    },\r\n  }),\r\n\r\n  getUserWithUnknownRestaurantsGroup: (userId, loadAccounts = true) => ({\r\n    endpoint: ApiEndpoints.USER,\r\n    type: 'GET',\r\n    query: {\r\n      loadAccounts: loadAccounts,\r\n    },\r\n    params: {\r\n      userId,\r\n    },\r\n  }),\r\n\r\n  postUser: (rGroupId, user) => ({\r\n    type: 'POST',\r\n    endpoint: ApiEndpoints.USERS,\r\n    // params: {\r\n    // rGroupId,\r\n    // },\r\n    body: transformUserFormDataToBody(user),\r\n  }),\r\n\r\n  putUser: user => ({\r\n    type: 'PUT',\r\n    endpoint: ApiEndpoints.RGROUP_USER,\r\n    params: {\r\n      rGroupId: user.restaurantsGroupId,\r\n      userId: user.id,\r\n    },\r\n    body: transformUserFormDataToBody(user),\r\n    errorHandler: UserErrors.EDIT,\r\n  }),\r\n\r\n  putProfile: user => ({\r\n    type: 'PUT',\r\n    endpoint: ApiEndpoints.USER,\r\n    params: {\r\n      userId: user.id,\r\n    },\r\n    query: {\r\n      sendPhoneVerificationCode: false,\r\n    },\r\n    body: transformUserFormDataToBody(user),\r\n    errorHandler: UserErrors.EDIT,\r\n  }),\r\n}\r\n\r\nexport default UserApi\r\n","import AuthApi from '../api/calls/AuthApi'\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nimport { createApiCallAction } from '../api/utils'\r\nimport { createApiEnumAction } from '../api/utils'\r\nimport createAction from '../redux/createAction'\r\n\r\nexport const AuthUserAction = createApiEnumAction('AUTH::USER')\r\n\r\n/**\r\n *\r\n * @param  {string} username\r\n * @param  {string} password\r\n * @param  {string} props     additionnal props that can be used by the middlewares.\r\n *                    - redirectTo: will redirect to the given url after the login success\r\n *                    - clientId: to override client id used in environnment\r\n *                    - clientSecret: to override client secret used in environnment\r\n */\r\nexport const authenticateUser = (username, password, props) => {\r\n  const clientId = props.clientId\r\n  const clientSecret = props.clientSecret\r\n\r\n  return createApiCallAction(\r\n    AuthUserAction,\r\n    AuthApi.postAuthPassword(username, password, clientId, clientSecret),\r\n    {\r\n      username,\r\n      password,\r\n      props,\r\n      client_id: clientId,\r\n      client_secret: clientSecret,\r\n    }\r\n  )\r\n}\r\n\r\nexport const ForgotPasswordAction = createApiEnumAction('AUTH::FORGOT_PASSWORD')\r\n\r\nexport const forgotPassword = username =>\r\n  createApiCallAction(ForgotPasswordAction, UserApi.getRecoverPassword(username), {\r\n    username,\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const LOGOUT_ACTION = 'LOGOUT'\r\n\r\nexport const logout = props =>\r\n  createAction(LOGOUT_ACTION, {\r\n    ...props,\r\n  })\r\n\r\nexport const SAVE_RAW_ACCESS_TOKEN_ACTION = 'AUTH::SAVE_RAW_ACCESS_TOKEN'\r\nexport const saveRawAccessToken = props =>\r\n  createAction(SAVE_RAW_ACCESS_TOKEN_ACTION, {\r\n    data: props,\r\n  })\r\n\r\nexport const CLEAN_AUTH_DATA = 'AUTH::CLEAN'\r\nexport const cleanAuthData = () => createAction(CLEAN_AUTH_DATA, {})\r\n","// TODO: fix crash if import with {}. see ../actions\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport AuthApi from 'pmt-modules/api/calls/AuthApi'\r\nimport { createAction } from 'pmt-modules/redux'\r\n\r\nexport const RefreshTokenFlowAction = {\r\n  RETRY_API_CALL: 'REFRESH_TOKEN_PROMISE::RETRY_API_CALL',\r\n  DONE: 'REFRESH_TOKEN_PROMISE::DONE',\r\n}\r\n\r\n// export const setAccessToken = ({ access_token, expires_in }) => ({\r\n//   type: RefreshTokenFlowAction.SET,\r\n//   access_token,\r\n//   expires_in,\r\n// })\r\n\r\n/**\r\n * Action used to re-run an action.\r\n * Previously, we just runned the action directly, but we didn't have a redux log, so now we use\r\n * this action, that will be logged and handle by our middleware\r\n */\r\nexport const retryApiCallAction = actionToRetry =>\r\n  createAction(RefreshTokenFlowAction.RETRY_API_CALL, {\r\n    actionToRetry,\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const RefreshAction = createApiEnumAction('AUTH::REFRESH')\r\n\r\n/**\r\n *\r\n * @param  {string} refreshToken  the refreshToken to use\r\n * @param  {object} oauthClient   the oauthClient to use with\r\n *                                  - client_id\r\n *                                  - client_secret\r\n * @param  {[type]} props         props to use\r\n *                                - then: function called by the middlewares handling this action.\r\n *                                  it notify the `attemptRefresh` of the response.\r\n *                                  the `attemptRefresh` will:\r\n *                                    - success: re-run the api calls that failed after updating the\r\n *                                    access_token\r\n *                                    - failure: redirect to the login page\r\n *                                    for both it will remove the refresh promise\r\n *                                    the `then` function take an object with:\r\n *                                      - error: boolean\r\n *                                      - response: the refresh token api call response (contains\r\n *                                      the token data)\r\n *\r\n */\r\nexport const refreshAction = (refreshToken, oauthClient, props) => {\r\n  return createApiCallAction(\r\n    RefreshAction,\r\n    AuthApi.postRefreshToken(\r\n      refreshToken,\r\n      oauthClient.clientId,\r\n      oauthClient.clientSecret,\r\n      props\r\n    ),\r\n    {\r\n      refresh_token: refreshToken,\r\n      props,\r\n      client_id: oauthClient.clientId,\r\n      client_secret: oauthClient.clientSecret,\r\n    }\r\n  )\r\n}\r\n\r\nexport const refreshActionDone = () => ({\r\n  type: RefreshTokenFlowAction.DONE,\r\n})\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { getAuthCookie, getUserLightCookie, getIncognitoCookie } from './utils'\r\n\r\nconst getAuthData = state => state.entities.auth\r\n\r\nexport const getAuthError = createSelector([getAuthData], authData => {\r\n  const error = authData.get('error', null)\r\n  return isNil(error) ? null : error.toJS()\r\n})\r\n\r\nexport const isFetchingAuth = createSelector([getAuthData], authData =>\r\n  authData.get('isFetching', false)\r\n)\r\n\r\nexport const getRefreshSucceded = createSelector([getAuthData], authData =>\r\n  authData.get('refreshSucceded')\r\n)\r\n\r\nexport const isRefreshingOauthToken = createSelector(\r\n  [getAuthData, isFetchingAuth],\r\n  (authData, isFetchingAuth) => isFetchingAuth && authData.get('isRefreshing') === true\r\n)\r\n\r\n// TODO: should be on utils, those are not selectors:\r\n\r\nexport const getAuth = () => getAuthCookie()\r\n\r\nexport const haveAuthCredentials = () =>\r\n  getAuthCookie() !== null || getUserLightCookie() !== null || getIncognitoCookie() !== null\r\n\r\nexport const getRefreshToken = () => {\r\n  const authCookie = getAuthCookie()\r\n  return isNil(authCookie) ? null : authCookie.refresh_token\r\n}\r\n\r\nexport const getAccessToken = () => {\r\n  const authCookie = getAuthCookie()\r\n  return isNil(authCookie) ? null : authCookie.access_token\r\n}\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst AppConfigApi = {\r\n  get: () => ({\r\n    endpoint: ApiEndpoints.API_CONSUMER,\r\n    params: {\r\n      apiConsumerId: 'mine',\r\n    },\r\n    query: {\r\n      loadSettings: true,\r\n    },\r\n    headers: {\r\n      authorization: null, // force override global authorization\r\n    },\r\n    type: 'GET',\r\n  }),\r\n}\r\n\r\nexport default AppConfigApi\r\n","import { createApiEnumAction, createApiCallAction, createTestApiCallAction } from '../api/utils'\r\n\r\nimport AppConfigApi from '../api/calls/AppConfigApi'\r\n\r\nimport { getAppConfigFixture } from './fixtures'\r\n\r\nexport const GetAppConfigAction = createApiEnumAction('APP_CONFIG::GET')\r\n\r\nexport const fetchAppConfig = () => createApiCallAction(GetAppConfigAction, AppConfigApi.get())\r\n\r\nexport const fetchAppConfigFixture = apiConsumer =>\r\n  createTestApiCallAction(GetAppConfigAction, true, {\r\n    data: {\r\n      apiConsumer,\r\n    },\r\n    response: getAppConfigFixture(),\r\n  })\r\n","\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar compose = function compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  }, function (arg) {\n    return arg;\n  });\n};\n\nvar _default = compose;\nexports.default = _default;","import { createAction } from '../redux'\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const SET_API_GENERIC_INVALID = 'APP_SECURITY::SET_API_GENERIC_INVALID'\r\n\r\nexport const setApiGenericInvalid = error => createAction(SET_API_GENERIC_INVALID, { error })\r\n","export const API_INVALID_APP_TOKEN_ERROR_CODE = '10020'\r\nexport const API_INVALID_GEOLOCATION_ERROR_CODE = '10021'\r\nexport const API_INVALID_ON_SITE_SECURITY = '10023'\r\n\r\nexport const APP_TOKEN_QUERY_PARAM = 'at'\r\n","import { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport {\r\n  APP_TOKEN_QUERY_PARAM,\r\n  API_INVALID_GEOLOCATION_ERROR_CODE,\r\n  API_INVALID_APP_TOKEN_ERROR_CODE,\r\n  API_INVALID_ON_SITE_SECURITY,\r\n} from './constants'\r\n\r\nexport const isAppSecurityError = error =>\r\n  error &&\r\n  (error.code === API_INVALID_GEOLOCATION_ERROR_CODE ||\r\n    error.code === API_INVALID_APP_TOKEN_ERROR_CODE ||\r\n    error.code === API_INVALID_ON_SITE_SECURITY || \r\n    error.errorCode === \"MAINTENANCE_MODE\" || \r\n    error.errorCode === \"TOO_MANY_REQUESTS\")\r\n\r\nexport const getAppTokenCodeOnUrl = () => getQueryParam(APP_TOKEN_QUERY_PARAM)\r\n","import { createMiddleware } from '../redux'\r\n\r\nimport { isAppSecurityError } from './utils'\r\nimport { SET_API_GENERIC_INVALID, setApiGenericInvalid } from './actions'\r\n\r\nconst catchApiGenericError = action =>\r\n  // avoid infinite loop\r\n  action.type !== SET_API_GENERIC_INVALID && action.error && isAppSecurityError(action.error)\r\n\r\nconst apiGenericMiddleware = createMiddleware(catchApiGenericError, ({ dispatch, action }) => {\r\n  dispatch(setApiGenericInvalid(action.error))\r\n})\r\n\r\nexport const appSecurityMiddlewares = [apiGenericMiddleware]\r\n","// The ApiConsumer can define multiplee layers of security for an app to be handled by the API\r\n// - appToken\r\n// - geolocation\r\n//\r\n// This module handles the generic errors the API can return because of those security checks.\r\n//\r\n\r\nimport Immutable from 'immutable'\r\nimport { SET_API_GENERIC_INVALID } from './actions'\r\nimport { createReducer } from '../redux'\r\n\r\nexport * from './constants'\r\nexport * from './utils'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT_STATE = Immutable.fromJS({\r\n  error: null,\r\n})\r\n\r\nconst handleSetGenericInvalid = (state, action) =>\r\n  state.set('error', Immutable.fromJS(action.error))\r\n\r\nexport const appSecurityReducer = createReducer(DEFAULT_STATE, {\r\n  [SET_API_GENERIC_INVALID]: handleSetGenericInvalid,\r\n})\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet Error = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n    <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/>\r\n  </SvgIcon>\r\n);\r\nError = pure(Error);\r\nError.displayName = 'Error';\r\nError.muiName = 'SvgIcon';\r\n\r\nexport default Error;\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNull from 'lodash/isNull'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { isAppSecurityError } from 'pmt-modules/appSecurity'\r\nimport { shouldUseAppConfig } from 'pmt-modules/environment'\r\n\r\nimport { fetchAppConfig } from '../actions'\r\nimport {\r\n  getAppConfig,\r\n  isFetchingAppConfig,\r\n  getAppConfigError,\r\n  getFrontSettings,\r\n  getOrderSettings,\r\n  getUserSettings,\r\n  getSecuritySettings,\r\n  getAppConfigPreset,\r\n} from '../selectors'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { LoadingBlock } from 'pmt-ui/LoadingBlock'\r\nimport IconError from 'pmt-ui/svg-icons/alert/error'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that fetch the app config and pass it to the children.\r\n *\r\n * Requirements:\r\n * -\r\n *\r\n * see `withAppConfig`\r\n *\r\n */\r\n\r\nconst styles = theme => ({\r\n  wrapper: {\r\n    position: 'relative',\r\n    height: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    [theme.breakpoints.up('sm')]: {\r\n      padding: theme.spacing(2),\r\n    },\r\n  },\r\n  loadingBlock: {\r\n    background: theme.pmt.colors.white,\r\n    padding: theme.spacing(4),\r\n    minHeight: 400,\r\n  },\r\n  circularProgress: {\r\n    color: theme.pmt.loading.color,\r\n  },\r\n  errorLayout: {\r\n    background: theme.pmt.colors.grey91,\r\n    height: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  errorIcon: {\r\n    fontSize: 128,\r\n    margin: `${theme.spacing(6)}px auto`,\r\n  },\r\n  errorTitle: {\r\n    whiteSpace: 'pre-line',\r\n    color: theme.pmt.colors.white,\r\n    textAlign: 'center',\r\n  },\r\n})\r\n\r\nconst Loading = ({ classes }) => (\r\n  <div className={classes.wrapper}>\r\n    <LoadingBlock\r\n      show\r\n      classes={{\r\n        loadingBlock: classes.loadingBlock,\r\n        circularProgress: classes.circularProgress,\r\n      }}\r\n    />\r\n  </div>\r\n)\r\n\r\nclass AppConfigContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n    this.loadAppConfig(this.props)\r\n  }\r\n\r\n  loadAppConfig(props) {\r\n    if (shouldUseAppConfig()) {\r\n      // avoid loading when we already have an error to avoid infinite loop\r\n      if (isNull(props.appConfig) && isNull(props.error) && !props.isFetchingAppConfig) {\r\n        props.fetchAppConfig()\r\n      }\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    this.loadAppConfig(this.props)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      AppConfigWrappedComponent,\r\n      isFetchingAppConfig,\r\n      isFetchingI18nPhrases,\r\n      appConfig,\r\n      classes,\r\n      error,\r\n      children,\r\n      ...other\r\n    } = this.props\r\n\r\n    if (isFetchingI18nPhrases) {\r\n      return <Loading classes={classes} />\r\n    }\r\n\r\n    if (!shouldUseAppConfig()) {\r\n      if (isFunction(children)) {\r\n        return children()\r\n      }\r\n      return children\r\n    }\r\n\r\n    // while we are fetching the appConfig, we return a loader\r\n    // so the user doesn't think it isn't loading anything\r\n    // we don't want to display the loading if the appConfig is null because of an appSecurity error\r\n    // we want to display the children, that will display the error\r\n    if (isFetchingAppConfig || (isNil(appConfig) && !isAppSecurityError(error))) {\r\n      // couldn't retrieve the app config and it is not an app security error.\r\n      // mostly because of an invalid api consumer\r\n      if (error && !isAppSecurityError(error)) {\r\n        Logger.error('API consumer', 'Invalid API consumer', this.props)\r\n        return (\r\n          <div className={classes.errorLayout}>\r\n            <IconError className={classes.errorIcon} />\r\n            <Typography variant=\"body2\" className={classes.errorTitle}>\r\n              {error.localizedMessage || error.message}\r\n            </Typography>\r\n          </div>\r\n        )\r\n      }\r\n      return <Loading classes={classes} />\r\n    }\r\n    if (isNil(AppConfigWrappedComponent)) {\r\n      return !isFunction(children)\r\n        ? React.cloneElement(children, {\r\n            isFetchingAppConfig,\r\n            appConfig,\r\n            ...other,\r\n          })\r\n        : children({\r\n            isFetchingAppConfig,\r\n            appConfig,\r\n            ...other,\r\n          })\r\n    }\r\n\r\n    return (\r\n      <AppConfigWrappedComponent\r\n        AppConfigWrappedComponent={null}\r\n        appConfig={appConfig}\r\n        isFetchingAppConfig={isFetchingAppConfig}\r\n        {...other}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nAppConfigContainer.propTypes = {\r\n  fetchAppConfig: PropTypes.func.isRequired,\r\n  isFetchingAppConfig: PropTypes.bool,\r\n  appConfig: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    appConfig: getAppConfig(state),\r\n    appConfigPreset: getAppConfigPreset(state),\r\n    frontAppConfig: getFrontSettings(state),\r\n    orderAppConfig: getOrderSettings(state),\r\n    userAppConfig: getUserSettings(state),\r\n    securityAppConfig: getSecuritySettings(state),\r\n    isFetchingAppConfig: isFetchingAppConfig(state),\r\n    error: getAppConfigError(state),\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  connect(mapStateToProps, {\r\n    fetchAppConfig,\r\n  }),\r\n  withStyles(styles)\r\n)(AppConfigContainer)\r\n","import React from 'react'\r\n\r\nimport AppConfigContainer from './AppConfigContainer'\r\n\r\n/**\r\n * Add the AppConfigContainer as HOC for the given component\r\n */\r\nconst withAppConfig = AppConfigWrappedComponent => props => (\r\n  <AppConfigContainer\r\n    AppConfigWrappedComponent={AppConfigWrappedComponent}\r\n    {...props}\r\n  />\r\n)\r\n\r\nexport default withAppConfig\r\n","import { EventManager } from 'pmt-modules/event'\r\n\r\nEventManager.registerEvents({\r\n  //\r\n  // Dispatch the app config for the current api consumer\r\n  //\r\n  // Data:\r\n  // - appConfig: the app config for the current api consumer with default values set on it\r\n  //\r\n  // Note: we could send the appConfig without the default (the one given by the API)\r\n  // (see appConfig/middlewares#getAppConfigSuccess)\r\n  //\r\n  ON_GET_APP_CONFIG_SUCCESS: 'APP_CONFIG::GET_APP_CONFIG::SUCCESS',\r\n})\r\n","import invariant from 'invariant'\r\nimport cloneDeep from 'lodash/cloneDeep'\r\nimport forEach from 'lodash/forEach'\r\nimport isString from 'lodash/isString'\r\nimport isNumber from 'lodash/isNumber'\r\nimport isNil from 'lodash/isNil'\r\nimport { uintColorToHexadecimal, lighten, darken } from './colorManipulator'\r\n\r\n//\r\n// Returns an mui color\r\n// An mui color contains all the colors for the defined contrasts (font weight).\r\n// TODO: for now, we set the same color for every constrat..\r\n//\r\nexport const createMuiColor = (color, palette) => ({\r\n  main: color,\r\n  light: lighten(color, palette.tonalOffset),\r\n  dark: darken(color, palette.tonalOffset),\r\n  contrastText: palette.getContrastText(color),\r\n})\r\n\r\n/**\r\n * [createMuiTextColor description]\r\n * @param  {[type]} currentConfig [description]\r\n * @param  {[type]} newColor      [description]\r\n * @return {[type]}               [description]\r\n */\r\nexport const createMuiTextColor = (currentConfig, newConfig) => ({\r\n  ...currentConfig,\r\n  primary: !isNil(newConfig.primary)\r\n    ? isNumber(newConfig.primary) ? uintColorToHexadecimal(newConfig.primary) : newConfig.primary\r\n    : currentConfig.primary,\r\n  secondary: !isNil(newConfig.secondary)\r\n    ? isNumber(newConfig.secondary)\r\n      ? uintColorToHexadecimal(newConfig.secondary)\r\n      : newConfig.secondary\r\n    : currentConfig.secondary,\r\n})\r\n\r\n/**\r\n * Each key of the mui `palette` theme can be handled diffently\r\n * @param  {string} key   key of the `palette` object\r\n * @param  {string|object} color color as:\r\n *                        - an hexadecimal value\r\n *                        - an rgba string value\r\n */\r\nexport const createMuiValueForPalette = (key, currentConfig, newConfig, palette) => {\r\n  switch (key) {\r\n    case 'text':\r\n      return createMuiTextColor(currentConfig, newConfig)\r\n\r\n    case 'primary':\r\n      return createMuiColor(newConfig, palette)\r\n\r\n    case 'secondary':\r\n      return createMuiColor(newConfig, palette)\r\n\r\n    default:\r\n      invariant(false, 'mui palette key not handled')\r\n  }\r\n}\r\n\r\n/**\r\n * Example:\r\n *\r\n * ```\r\n *   const newPalette = createMuiPalette(currentTheme.palette, {\r\n *     primary: uintColorToHexadecimal(action.response.colors.actionBackgroundColor),\r\n *     secondary: uintColorToHexadecimal(action.response.colors.actionBackgroundColor),\r\n *     text: uintColorToHexadecimal(action.response.colors.fontColor),\r\n *   })\r\n * ```\r\n *\r\n * @param  {[type]} defaultPalette default palette of the theme\r\n * @param  {[type]} props          object that will override the palette:\r\n *                                    - key: key to override on the palette\r\n *                                    - value: the color set.\r\n *                                      - number, we parse it as hex and follow the same as a string\r\n *                                      - string, we use `createMuiColor` to create the different\r\n *                                       contrasts, otherwise we use the\r\n *                                      value\r\n * @return {[type]}                [description]\r\n */\r\nexport const createMuiPalette = (defaultPalette, props) => {\r\n  const palette = cloneDeep(defaultPalette)\r\n\r\n  forEach(props, (paletteValue, paletteKey) => {\r\n    let value = null\r\n\r\n    if (isNumber(paletteValue)) {\r\n      value = uintColorToHexadecimal(paletteValue)\r\n    } else if (isString(paletteValue)) {\r\n      invariant(paletteValue[0] === '#', 'invalid color')\r\n      value = paletteValue\r\n    } else {\r\n      value = paletteValue\r\n    }\r\n\r\n    palette[paletteKey] = createMuiValueForPalette(\r\n      paletteKey,\r\n      defaultPalette[paletteKey],\r\n      value,\r\n      defaultPalette\r\n    )\r\n  })\r\n\r\n  return palette\r\n}\r\n","import { createMuiPalette } from './palette'\r\n\r\n/**\r\n *\r\n * ```\r\n * const currentTheme = getCurrentTheme(getState())\r\n * const newTheme = createMuiThemeWithPmtRestaurantColors(currentTheme, action.response.colors)\r\n *\r\n * next(changeCurrentTheme(newTheme))\r\n * ```\r\n *\r\n * @param  {object} currentTheme current mui theme\r\n * @param  {object} colors       restaurant colors settings\r\n */\r\nexport const createMuiThemeWithPmtRestaurantColors = (currentTheme, colors) => {\r\n  const newPalette = createMuiPalette(currentTheme.palette, {\r\n    primary: colors.actionBackgroundColor,\r\n    secondary: colors.actionBackgroundColor,\r\n    text: {\r\n      primary: colors.fontColor,\r\n    }\r\n  })\r\n\r\n  const newTheme = {\r\n    ...currentTheme,\r\n    palette: newPalette,\r\n    pmt: {\r\n      ...currentTheme.pmt,\r\n      loading: {\r\n        ...currentTheme.pmt.loading,\r\n        color: colors.actionBackgroundColor,\r\n      }\r\n    }\r\n  }\r\n\r\n  return newTheme\r\n}\r\n\r\n/**\r\n *\r\n * ```\r\n * const currentTheme = getCurrentTheme(getState())\r\n * const newTheme = createMuiThemeWithPmtRGroupColors(currentTheme, action.response.theme)\r\n *\r\n * next(changeCurrentTheme(newTheme))\r\n * ```\r\n *\r\n * @param  {object} currentTheme current mui theme\r\n * @param  {object} theme        rGroup theme configuration\r\n */\r\nexport const createMuiThemeWithPmtRGroupColors = (currentTheme, theme) => {\r\n  let newPalette = null\r\n  if (!theme) {\r\n    newPalette = createMuiPalette(currentTheme.palette)\r\n  } else {\r\n    newPalette = createMuiPalette(currentTheme.palette, {\r\n      primary: theme.mainBackgroundColor,\r\n      secondary: theme.mainBackgroundColor,\r\n    })\r\n  }\r\n\r\n  const newTheme = {\r\n    ...currentTheme,\r\n    palette: newPalette,\r\n    pmt: {\r\n      ...currentTheme.pmt,\r\n      loading: {\r\n        ...currentTheme.pmt.loading,\r\n        color: theme.mainBackgroundColor,\r\n      }\r\n    }\r\n  }\r\n\r\n  return newTheme\r\n}\r\n","import forEach from 'lodash/forEach'\r\n\r\nimport { createFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\nimport { getForLocale } from 'pmt-utils/locale'\r\n\r\nexport const formatTexts = (texts, props) => {\r\n  let textsForCurrentLocale = {}\r\n\r\n  forEach(texts, ({ type, locales }) => {\r\n    const textForLocale = getForLocale(locales, props.locale)?.text || ''\r\n    textsForCurrentLocale[type] = textForLocale\r\n  })\r\n\r\n  return textsForCurrentLocale\r\n}\r\n\r\nexport const formatCustomTexts = createSubObjectFormatter('texts', createFormatter(formatTexts))\r\n","import { createSelector } from 'reselect'\r\n\r\nimport { getCurrentLanguageWithoutRegionCode } from 'pmt-modules/i18n'\r\nimport { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nimport { formatCustomTexts } from './format'\r\n\r\nconst customTextsSelectors = createSimpleSelector(state => state.entities.customTexts)\r\n\r\nexport const isFetchingCustomTexts = customTextsSelectors.isFetching\r\nexport const getCustomTextsData = createSelector(\r\n  [customTextsSelectors.getData, getCurrentLanguageWithoutRegionCode],\r\n  (customTexts, locale) => formatCustomTexts(customTexts, { locale })\r\n)\r\n\r\nexport const getCustomTextsError = customTextsSelectors.getError\r\n","import isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nimport createMiddleware from 'pmt-modules/redux/createMiddleware'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport { getCurrentTheme, changeCurrentTheme } from 'pmt-modules/theme'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { createMuiThemeWithPmtRGroupColors } from 'pmt-utils/theme/theme'\r\n\r\nimport { GetAppConfigAction } from './actions'\r\nimport { mergeAppConfigWithDefault } from './utils'\r\nimport { setTexts } from '../i18n'\r\nimport { getAppTexts } from './selectors'\r\n// noinspection ES6PreferShortImport (otherwise circular dependency)\r\nimport { getCustomTextsData } from '../customTexts/selectors'\r\n\r\nconst getAppConfigSuccess = createMiddleware(\r\n  GetAppConfigAction.SUCCESS,\r\n  ({ action, getState, dispatch, next }) => {\r\n    const appConfig = mergeAppConfigWithDefault(action.response.settings)\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_GET_APP_CONFIG_SUCCESS, {\r\n      appConfig,\r\n      // Note: we could send the appConfig without the default (the one given by the API)\r\n    })\r\n\r\n    // register kioskInteractor module regarding what has been set in app config\r\n    if (process.env.FEATURE_KIOSK) {\r\n      if (!isNil(appConfig.front.kiosk)) {\r\n        import('pmt-modules/kioskInteractor/config')\r\n          .then(({ registerKioskInteractor }) => {\r\n            registerKioskInteractor(appConfig.front.kiosk)\r\n          })\r\n      }\r\n    }\r\n\r\n    if (action.response.settings && action.response.settings.front) {\r\n      const frontSettings = action.response.settings.front\r\n      if (frontSettings && !isNil(frontSettings.theme)) {\r\n        const currentTheme = getCurrentTheme(getState())\r\n        const newTheme = createMuiThemeWithPmtRGroupColors(currentTheme, frontSettings.theme)\r\n\r\n        // if apiConsumer setting has extra custom css, we spread it in theme.pmt.appConfig\r\n        // this will then be used inside components\r\n        // (e.g. PartView title stickyness on custom integration with fixed header)\r\n        if (!isNil(frontSettings.theme.customCss)) {\r\n          invariant(!isNil(newTheme.pmt.appConfig), 'theme.pmt.appConfig should be defined')\r\n\r\n          newTheme.pmt.appConfig = {\r\n            ...newTheme.pmt.appConfig,\r\n            ...frontSettings.theme.customCss,\r\n          }\r\n        }\r\n\r\n        dispatch(changeCurrentTheme(newTheme))\r\n      } else {\r\n        Logger.warn(\r\n          'ApiConsumer settings theme',\r\n          `no theme found for api consumer ${action.response.name} ${action.response.id}`\r\n        )\r\n      }\r\n    }\r\n\r\n    // finalize action in order to wait it has fully ended (i.e: data is in reducer)\r\n    // so we can use the selectors after that\r\n    next(action)\r\n\r\n    // we set the texts after the action has been processed\r\n    // so we can access them from anywhere (especially in \"tr\" i18n function)\r\n    setTexts(getAppTexts(getState()), getCustomTextsData(getState()))\r\n  }\r\n)\r\n\r\nexport const appConfigMiddlewares = [getAppConfigSuccess]\r\n","//\r\n// This module store global configuration and data for the order plugin,\r\n// that don't requires their own module / reducer\r\n//\r\nimport Immutable from 'immutable'\r\n\r\nimport { GetAppConfigAction } from './actions'\r\n\r\nexport * from './components'\r\nexport * from './actions'\r\nexport * from './events'\r\nexport * from './constants'\r\nexport * from './selectors'\r\nexport * from './config'\r\nexport * from './format'\r\nexport * from './middlewares'\r\n\r\n//\r\n// The appConfig is set as default by the front.\r\n// It is given to our `Application` that call `setDefaultAppConfig`\r\n//\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  data: null,\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n})\r\n\r\nexport const appConfigReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case GetAppConfigAction.REQUEST:\r\n      return state.merge({\r\n        preset: null,\r\n        data: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetAppConfigAction.SUCCESS:\r\n      // appConfig is get by fetching apiConsumer settings\r\n      return state.merge({\r\n        preset: action.response.preset,\r\n        // set to empty object if null in order to know if fetch has successed\r\n        data: action.response.settings || {},\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetAppConfigAction.FAILURE:\r\n      return state.merge({\r\n        preset: null,\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import createMiddleware from 'pmt-modules/redux/createMiddleware'\r\n\r\nimport { RefreshTokenFlowAction } from './actions'\r\n\r\nconst retryApiCallMiddleware = createMiddleware(\r\n  RefreshTokenFlowAction.RETRY_API_CALL,\r\n  ({ action, dispatch }) => {\r\n    dispatch(action.actionToRetry)\r\n  }\r\n)\r\n\r\nexport const refreshTokenMiddlewares = [retryApiCallMiddleware]\r\n","import get from 'lodash/get'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\n\r\nimport { isWebCustomer } from 'pmt-modules/environment'\r\nimport { GetAppConfigAction } from 'pmt-modules/appConfig'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { getRoute, redirectTo, replaceWith } from 'pmt-modules/routing'\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { cleanAuthData } from './actions'\r\nimport { removeAccessToken } from './utils'\r\n\r\nimport { AuthUserAction, LOGOUT_ACTION, SAVE_RAW_ACCESS_TOKEN_ACTION } from './actions'\r\nimport { RefreshAction } from './refreshToken/actions'\r\nimport { refreshTokenMiddlewares } from './refreshToken/middlewares'\r\nimport {\r\n  setClientId,\r\n  saveAccessToken,\r\n  setRestaurantsGroupId,\r\n  removeUserLight,\r\n  removeIncognitoCookie,\r\n} from './utils'\r\n\r\nconst notifyTokenChanged = token => {\r\n  saveAccessToken(token)\r\n}\r\n\r\n/**\r\n * Intercepts LOGIN action and redirects to dashboard screen if the login succeeded\r\n * Otherwise just sends action to next middleware\r\n *\r\n * @returns {Function}\r\n */\r\nconst authMiddleware = createMiddleware(\r\n  AuthUserAction.SUCCESS,\r\n  ({ getState, dispatch, next, action }) => {\r\n    // first, we calculate the expiration date before saving it to localStorage\r\n    // we subtract 1 minute to take into consideration API response time\r\n    action.response.expiresAt = moment()\r\n      .add(action.response.expires_in, 'ms')\r\n      .subtract(1, 'm')\r\n      .valueOf()\r\n\r\n    // notify the token has changed\r\n    notifyTokenChanged(action.response)\r\n\r\n    // forget your other \"light\" authentications, you are now really authenticated !\r\n    removeUserLight()\r\n    removeIncognitoCookie()\r\n\r\n    Logger.setUserContext(Logger.UserContext.USER, action.data)\r\n\r\n    EventManager.dispatch(EventManager.Events.ON_LOGIN_SUCCESS, {\r\n      user: action.data.username,\r\n    })\r\n\r\n    const props = action.data.props || {}\r\n\r\n    // get the page where to redirect\r\n    // we handle a `redirectTo` parameter to go back on the page that asked the user to logged in\r\n    const redirectToParam = props.redirectTo || getQueryParam('redirectTo')\r\n    if (!isEmpty(redirectToParam)) {\r\n      dispatch(replaceWith(decodeURIComponent(redirectToParam)))\r\n    }\r\n  }\r\n)\r\n\r\n//\r\n// update the token\r\n// middleware that notify `attemptRefresh` that the refresh action succeeded\r\n//\r\nconst refreshMiddlewareSuccess = createMiddleware(\r\n  RefreshAction.SUCCESS,\r\n  ({ getState, dispatch, next, action }) => {\r\n    // first, we calculate the expiration date before saving it to localStorage\r\n    // we subtract 1 minute to take into consideration API response time\r\n    action.response.expiresAt = moment()\r\n      .add(action.response.expires_in, 'ms')\r\n      .subtract(1, 'm')\r\n      .valueOf()\r\n\r\n    notifyTokenChanged(action.response)\r\n\r\n    // we send the response because `attemptRefresh` will re-run the api call, and need to update\r\n    // the access token.\r\n    if (!isNil(action.data.props.then)) {\r\n      action.data.props.then(getState(), true, action.response)\r\n    }\r\n  }\r\n)\r\n\r\n//\r\n// middleware that notify `attemptRefresh` that the refresh action failed.\r\n// It will redirect to the login page\r\n//\r\nconst refreshMiddlewareFailure = createMiddleware(\r\n  RefreshAction.FAILURE,\r\n  ({ getState, dispatch, next, action }) => {\r\n    // refresh token request has failed, clean everything and redirect to login\r\n    if (\r\n      !get(action, 'error.response.ok', false) &&\r\n      get(action, 'error.response.status', 400) === 400\r\n    ) {\r\n      // clean auth store\r\n      dispatch(cleanAuthData())\r\n      // refresh has failed and store is cleaned, we force redirect to login\r\n      if (isWebCustomer()) {\r\n        return dispatch(\r\n          redirectTo(getRoute('LOGIN'), null, { redirectTo: window.location.toString() })\r\n        )\r\n      } else {\r\n        return dispatch(redirectTo(getRoute('LOGIN')))\r\n      }\r\n    } else if (!isNil(get(action, 'data.props.then', null))) {\r\n      action.data.props.then(getState(), false)\r\n    }\r\n  }\r\n)\r\n\r\nconst logoutMiddleware = createMiddleware(LOGOUT_ACTION, () => {\r\n  removeAccessToken()\r\n  removeUserLight()\r\n  removeIncognitoCookie()\r\n})\r\n\r\nconst saveRawAccessTokenMiddleware = createMiddleware(\r\n  SAVE_RAW_ACCESS_TOKEN_ACTION,\r\n  ({ action, next }) => {\r\n    notifyTokenChanged(action.data)\r\n\r\n    return next(action)\r\n  }\r\n)\r\n\r\nconst getAppConfigSuccessMiddleware = createMiddleware(GetAppConfigAction.SUCCESS, ({ action }) => {\r\n  const settings = action.response.settings\r\n\r\n  if (\r\n    settings &&\r\n    settings.authentication &&\r\n    settings.authentication.oauth2 &&\r\n    settings.authentication.oauth2.clientId\r\n  ) {\r\n    setClientId(settings.authentication.oauth2.clientId)\r\n  }\r\n\r\n  const restaurantsGroupId = action.response.restaurantsGroupId\r\n  setRestaurantsGroupId(restaurantsGroupId)\r\n})\r\n\r\nexport const authMiddlewares = [\r\n  getAppConfigSuccessMiddleware,\r\n  authMiddleware,\r\n  logoutMiddleware,\r\n  refreshMiddlewareSuccess,\r\n  refreshMiddlewareFailure,\r\n  ...refreshTokenMiddlewares,\r\n  saveRawAccessTokenMiddleware,\r\n]\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport { removeAccessToken } from './utils'\r\n\r\nimport {\r\n  AuthUserAction,\r\n  CLEAN_AUTH_DATA,\r\n  LOGOUT_ACTION,\r\n  SAVE_RAW_ACCESS_TOKEN_ACTION,\r\n} from './actions'\r\n\r\nimport { RefreshAction, RefreshTokenFlowAction } from './refreshToken/actions'\r\n\r\nexport * from './utils'\r\nexport * from './constants'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\n/**\r\n * Only actions results are store in state\r\n * Auth data is stored in current oauth clientId cookie\r\n */\r\nconst getDefaultState = () =>\r\n  Immutable.fromJS({\r\n    isFetching: false,\r\n    error: null,\r\n\r\n    // for Refresh.\r\n    refreshSucceded: false,\r\n  })\r\n\r\nexport const authReducer = (state = getDefaultState(), action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case AuthUserAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        error: null,\r\n        isRefresh: false,\r\n      })\r\n\r\n    case AuthUserAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        refreshSucceded: true,\r\n        error: null,\r\n      })\r\n\r\n    case AuthUserAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    //\r\n    // refresh\r\n    //\r\n\r\n    case RefreshAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        refreshSucceded: null,\r\n        error: null,\r\n\r\n        // isRefreshing is set to true while we take the new token, and while we re-run the pending\r\n        // actions\r\n        // so we set it to false only in case of failure, since after the RefreshAction.SUCCESS\r\n        // will be followed by the re-run of the pending actions.\r\n        isRefreshing: true,\r\n      })\r\n\r\n    case RefreshAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        error: action.error,\r\n        refreshSucceded: false,\r\n        isRefreshing: false,\r\n      })\r\n\r\n    case RefreshAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        refreshSucceded: true,\r\n        error: null,\r\n      })\r\n\r\n    case RefreshTokenFlowAction.DONE:\r\n      return state.merge({\r\n        isRefreshing: false,\r\n      })\r\n\r\n    case LOGOUT_ACTION:\r\n      return state.merge({\r\n        isFetching: false,\r\n        refreshSucceded: false,\r\n        error: null,\r\n      })\r\n\r\n    /**\r\n     * Custom action to save raw access token passed as url param\r\n     */\r\n    case SAVE_RAW_ACCESS_TOKEN_ACTION:\r\n      return state.merge({\r\n        isFetching: false,\r\n        refreshSucceded: false,\r\n        error: null,\r\n      })\r\n\r\n    /**\r\n     * Clean auth store\r\n     * remove auth data from storage and return default state\r\n     */\r\n    case CLEAN_AUTH_DATA:\r\n      removeAccessToken()\r\n      return getDefaultState()\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { UnauthorizedAction } from '../actions'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { redirectTo, getRoute, getConfigForRoute } from 'pmt-modules/routing'\r\nimport { getUserLightCookie } from 'pmt-modules/auth/utils'\r\nimport { getAppConfig } from 'pmt-modules/appConfig/selectors'\r\nimport { AuthMode } from 'pmt-modules/auth'\r\n\r\n/**\r\n * Handle 401\r\n */\r\nexport const unauthorizedMiddleware = createMiddleware(\r\n  UnauthorizedAction,\r\n  ({ next, dispatch, getState }) => {\r\n    // we redirect to the current page after the login is complete\r\n    const currentUrl = window.location.toString()\r\n\r\n    // if we are not already on login page\r\n    if (window.location.pathname !== '/login') {\r\n      const state = getState()\r\n      const authenticationMode = getAppConfig(state).authentication.mode\r\n      if (authenticationMode === AuthMode.NORMAL) {\r\n        if (getUserLightCookie()) {\r\n          // user is light, but should be normal => force Registering\r\n\r\n          // if their is a specific page for Registering, use it\r\n          if (getConfigForRoute('REGISTER')) {\r\n            next(redirectTo(getRoute('REGISTER'), null, { redirectTo: currentUrl }))\r\n          } else {\r\n            // use the register form in the login-or-register page\r\n            next(redirectTo(getRoute('LOGIN'), null, { redirectTo: currentUrl }))\r\n          }\r\n        } else {\r\n          next(redirectTo(getRoute('LOGIN'), null, { redirectTo: currentUrl }))\r\n        }\r\n      } else if (authenticationMode === AuthMode.LIGHT) {\r\n        // receive a 401 for example when in test mode and not logged in to acces a testMode restaurant\r\n        dispatch(redirectTo(getRoute('LOGIN'), null, { redirectTo: currentUrl }))\r\n      }\r\n    }\r\n  }\r\n)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getAuthProData = state => state.entities.authPro\r\n\r\nexport const getAuthProError = createSelector([getAuthProData], authProData => {\r\n  const error = authProData.get('error')\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n  return error.toJS()\r\n})\r\n\r\nexport const isFetchingAuthPro = createSelector(\r\n  [getAuthProData],\r\n  authProData => {\r\n    return authProData.get('isFetching') || false\r\n  }\r\n)\r\n\r\nexport const haveAuthProCredentials = createSelector(\r\n  [getAuthProData],\r\n  authProData => {\r\n    return authProData.get('auth') !== null\r\n  }\r\n)\r\n\r\nexport const isLoggedIn = createSelector([getAuthProData], authProData => {\r\n  const auth = authProData.get('auth')\r\n\r\n  return auth !== null\r\n})\r\n\r\nexport const getBasicToken = createSelector([getAuthProData], authProData => {\r\n  const authProState = authProData.get('auth')\r\n\r\n  if (isNil(authProState)) {\r\n    return null\r\n  }\r\n\r\n  return authProState\r\n})\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getAuthRestaurantData = state => state.entities.authRestaurant\r\n\r\nexport const getAuthRestaurantError = createSelector(\r\n  [getAuthRestaurantData],\r\n  authRestaurantData => {\r\n    const error = authRestaurantData.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n    return error.toJS()\r\n  }\r\n)\r\n\r\nexport const isFetchingAuthRestaurant = createSelector(\r\n  [getAuthRestaurantData],\r\n  authRestaurantData => {\r\n    return authRestaurantData.get('isFetching') || false\r\n  }\r\n)\r\n\r\nexport const haveAuthRestaurantCredentials = createSelector(\r\n  [getAuthRestaurantData],\r\n  authRestaurantData => {\r\n    return authRestaurantData.get('auth') !== null\r\n  }\r\n)\r\n\r\nexport const isLoggedIn = createSelector([getAuthRestaurantData], authRestaurantData => {\r\n  const auth = authRestaurantData.get('auth')\r\n\r\n  return auth !== null\r\n})\r\n\r\nexport const getBasicToken = createSelector([getAuthRestaurantData], authRestaurantData => {\r\n  if (!authRestaurantData) {\r\n    return null\r\n  }\r\n\r\n  const authRestaurantState = authRestaurantData.get('auth')\r\n\r\n  if (isNil(authRestaurantState)) {\r\n    return null\r\n  }\r\n\r\n  return authRestaurantState\r\n})\r\n\r\nexport const getApiConsumer = createSelector([getAuthRestaurantData], authRestaurantData => {\r\n  if (isNil(authRestaurantData)) {\r\n    return null\r\n  }\r\n\r\n  const apiConsumer = authRestaurantData.get('apiConsumer')\r\n\r\n  if (isNil(apiConsumer)) {\r\n    return null\r\n  }\r\n\r\n  return apiConsumer\r\n})\r\n\r\nexport const getRestaurantId = createSelector([getAuthRestaurantData], authRestaurantData => {\r\n  if (isNil(authRestaurantData)) {\r\n    return null\r\n  }\r\n\r\n  const restaurantId = authRestaurantData.get('restaurantId')\r\n\r\n  if (isNil(restaurantId)) {\r\n    return null\r\n  }\r\n\r\n  return restaurantId\r\n})\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\nimport { API_CALL, REQUEST, TYPES } from 'pmt-modules/api/constants'\r\n\r\nimport {\r\n  RefreshAction,\r\n  refreshAction,\r\n  retryApiCallAction,\r\n  refreshActionDone,\r\n} from './actions'\r\n\r\n// refreshing action status\r\nlet _isRefreshingToken = false\r\n\r\n// stacked actions list to unstack after refreshing action\r\nlet _actions = []\r\n\r\nexport const clearAttemptRefresh = () => {\r\n  _isRefreshingToken = false\r\n  _actions = []\r\n}\r\n\r\n// if given action is refresh call action\r\nconst defaultIsRefreshCall = action =>\r\n  action[API_CALL][TYPES][0] === RefreshAction.REQUEST\r\n\r\nconst requestNewAccessToken = ({\r\n  dispatch,\r\n  next,\r\n  refreshAction,\r\n  refreshToken,\r\n  oauthClient,\r\n}) => {\r\n  // we are now refreshing, prevent any other refresh call\r\n  _isRefreshingToken = true\r\n\r\n  dispatch(\r\n    refreshAction(refreshToken, oauthClient, {\r\n      //\r\n      // We trick here to pass a callback to be called when the refresh token call has finished\r\n      //\r\n      then: (state, success, response) => {\r\n        // Refresh was successful\r\n        // call postRefreshToken\r\n        if (success) {\r\n          postRefreshToken({\r\n            error: false,\r\n            response,\r\n            actions: _actions,\r\n            dispatch,\r\n          })\r\n        } else {\r\n          postRefreshToken({\r\n            error: true,\r\n            response: null,\r\n            actions: _actions,\r\n            dispatch,\r\n          })\r\n        }\r\n      },\r\n    })\r\n  )\r\n}\r\n\r\n/**\r\n * When the refresh attempt is done, we fire all the actions that have been queued until\r\n * its completion. If, the refresh promise was unsuccessful we logout the user.\r\n */\r\nconst postRefreshToken = ({ response, error, actions, dispatch }) => {\r\n  if (!error) {\r\n    // no error, run all pending actions\r\n    actions.forEach(action => {\r\n      // We need to update the access token on the request\r\n      if (!isEmpty(action[API_CALL][REQUEST].headers.authorization)) {\r\n        action[API_CALL][REQUEST].headers.authorization = `Bearer ${\r\n          response.access_token\r\n        }`\r\n        // update the request with response for requestConfigurationMiddleware to use\r\n        // the most recent response and get the correct authData.expiresAt value\r\n        action[API_CALL][REQUEST].authData = response\r\n      }\r\n      dispatch(retryApiCallAction(action))\r\n    })\r\n  } else {\r\n    // TODO: dispatch error for every actions\r\n    // + do same for attempt refresh\r\n    actions.forEach(action => {\r\n      dispatch(error)\r\n    })\r\n  }\r\n\r\n  clearAttemptRefresh()\r\n  dispatch(refreshActionDone())\r\n}\r\n\r\nexport const queueActionForRefreshToken = ({\r\n  action,\r\n  dispatch,\r\n  next,\r\n  oauthClient,\r\n  refreshToken,\r\n}) => {\r\n  // current action is not a refresh call action, we stack it\r\n  if (!defaultIsRefreshCall(action)) {\r\n    _actions.push(action)\r\n  }\r\n\r\n  // we are not arleady refreshing, do it\r\n  if (!_isRefreshingToken) {\r\n    requestNewAccessToken({\r\n      dispatch,\r\n      next,\r\n      oauthClient,\r\n      refreshAction,\r\n      refreshToken,\r\n    })\r\n  }\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { API_CALL, REQUEST, TYPES } from 'pmt-modules/api/constants'\r\nimport { getOauthClient } from 'pmt-modules/appConfig/selectors'\r\nimport { isWebCustomer, isEmbeddedFront } from 'pmt-modules/environment'\r\nimport { redirectTo, redirectToExternal, getRoute } from 'pmt-modules/routing'\r\n\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport { CALLBACK_EVENTS, getQueryParam, getCallbackUri, removeUrlParameter } from 'pmt-utils/url'\r\n\r\nimport {\r\n  RefreshAction,\r\n  retryApiCallAction,\r\n  refreshAction as defaultRefreshActionCreator,\r\n  refreshActionDone,\r\n} from './actions'\r\nimport { getRefreshToken } from '../selectors'\r\nimport { cleanAuthData } from '../actions'\r\n\r\n//\r\n// Inspired by https://github.com/esbenp/redux-refresh-token\r\n//\r\n// see api.js\r\n// Called when a request fail.\r\n// if we have a 401, we try to refresh the token:\r\n// - if fail, the `unauthorized` action is called (see on api.js).\r\n// - if success, we update the token data and re-run the api call.\r\n//\r\n// Note that we handle 401 AFTER the call failed, we should also try to refresh the token before\r\n// it expires.\r\n//\r\n\r\nlet _refreshPromise = null\r\nlet _actions = []\r\n\r\nexport const clearAttemptRefresh = () => {\r\n  _refreshPromise = null\r\n  _actions = []\r\n}\r\n\r\nconst defaultIsRefreshCall = action => action[API_CALL][TYPES][0] === RefreshAction.REQUEST\r\n\r\nconst requestNewAccessToken = ({\r\n  dispatch,\r\n  next,\r\n  refreshActionCreator,\r\n  refreshToken,\r\n  oauthClient,\r\n  callback,\r\n}) => {\r\n  return new Promise((resolve, reject) => {\r\n    dispatch(\r\n      refreshActionCreator(refreshToken, oauthClient, {\r\n        //\r\n        // We trick here to pass a callback to be called when the refresh token call has finished\r\n        //\r\n        then: (state, success, response) => {\r\n          // Refresh was successful\r\n          let refreshPromise = _refreshPromise\r\n\r\n          // Refresh was successful\r\n          // call postRefreshToken\r\n          if (success) {\r\n            resolve({\r\n              refreshPromise,\r\n              error: false,\r\n              response,\r\n              actions: _actions,\r\n              dispatch,\r\n            })\r\n          } else {\r\n            resolve({\r\n              refreshPromise,\r\n              error: true,\r\n              response: null,\r\n              actions: _actions,\r\n              dispatch,\r\n            })\r\n          }\r\n        },\r\n      })\r\n    )\r\n  })\r\n}\r\n\r\nconst postRefreshToken = requestNewAccessTokenResponse => {\r\n  // When the refresh attempt is done, we fire all the actions that have been queued until\r\n  // its completion. If, the refresh promise was unsuccessful we logout the user.\r\n\r\n  const { refreshPromise, response, error, actions, dispatch } = requestNewAccessTokenResponse\r\n\r\n  if (!error) {\r\n    // no error, run all pending actions\r\n    actions.forEach(action => {\r\n      // We need to update the access token on the request\r\n      if (!isEmpty(action[API_CALL][REQUEST].headers.authorization)) {\r\n        action[API_CALL][REQUEST].headers.authorization = `Bearer ${response.access_token}`\r\n      }\r\n      dispatch(retryApiCallAction(action))\r\n    })\r\n  } else {\r\n    // error, dispatch the error that occurred when refreshing the token\r\n    if (!isNull(refreshPromise)) {\r\n      dispatch(refreshPromise.failureAction(error))\r\n    }\r\n  }\r\n\r\n  clearAttemptRefresh()\r\n  dispatch(refreshActionDone())\r\n}\r\n\r\nconst attemptRefresh = settings => {\r\n  const {\r\n    action,\r\n    failureAction, // action to use when the refresh token api call failed\r\n    isRefreshCall = defaultIsRefreshCall,\r\n    next,\r\n    refreshActionCreator = defaultRefreshActionCreator,\r\n    getState,\r\n    dispatch,\r\n    token,\r\n  } = settings\r\n\r\n  //\r\n  // Take the ApiError of the failed request\r\n  //\r\n  return apiError => {\r\n    const response = apiError.response\r\n    // keep both writings for retro compatibility\r\n    let accessToken = null\r\n    let callbackUri = null\r\n    if (isEmbeddedFront()) {\r\n      accessToken = getQueryParam('accessToken') || getQueryParam('access_token')\r\n      callbackUri = getQueryParam('callbackUri') || getQueryParam('callback_uri')\r\n    }\r\n\r\n    if (!response) {\r\n      return dispatch(failureAction(apiError))\r\n    }\r\n\r\n    // The API call returned unauthorized user (access token is expired)\r\n\r\n    // specific 401 for test mode handling, do not want to refresh a token, but redirect to login page\r\n    // 401 = we are not testing user OR we are not logged in, redirect to login page\r\n    if (\r\n      !response.ok &&\r\n      response.status === 401 &&\r\n      apiError.errorCode === 'TEST_MODE_UNAUTHORIZED'\r\n    ) {\r\n      dispatch(\r\n        redirectTo(getRoute('LOGIN'), null, {\r\n          redirectTo: window.location.toString(),\r\n          forTestMode: true,\r\n        })\r\n      )\r\n    } else if (\r\n      // TODO: && error contains \"The access token provided has expired.\" For now the API only gives\r\n      // message: \"Auth failed\". We should modify the API first.\r\n      !response.ok &&\r\n      response.status === 401 &&\r\n      // The refresh endpoint might return 401, so we skip the check here\r\n      // otherwise we get stuck in an infinite loop\r\n      !isRefreshCall(action) &&\r\n      // We should not run the refresh flow when no token was given to begin with\r\n      // (for instance Forgot Password, Login etc.)\r\n      typeof token === 'string' &&\r\n      token.length > 0 &&\r\n      // if callbackUri is not null, we don't want to attempt refresh on our own\r\n      callbackUri === null\r\n    ) {\r\n      const refreshToken = getRefreshToken(getState())\r\n      const oauthClient = getOauthClient(getState())\r\n\r\n      if (!refreshToken) {\r\n        // no refresh token..\r\n        dispatch(failureAction(apiError))\r\n      } else {\r\n        // We check if there is already dispatched a call to refresh the token,\r\n        // if so we can simply queue the call until the refresh request completes\r\n        _actions.push(action)\r\n\r\n        // no refresh token action ongoing, we create it\r\n        if (isNull(_refreshPromise)) {\r\n          _refreshPromise = requestNewAccessToken({\r\n            dispatch,\r\n            next,\r\n            refreshActionCreator,\r\n            refreshToken,\r\n            oauthClient,\r\n          }).then(postRefreshToken)\r\n\r\n          _refreshPromise.id = generateUUID()\r\n          _refreshPromise.failureAction = failureAction\r\n        }\r\n\r\n        return _refreshPromise\r\n      }\r\n      // we cannot refresh token on our own, the user has to login or let the callback uri handle the refresh\r\n    } else if (!response.ok && (response.status === 401 || response.status === 403)) {\r\n      // on web customer, when a callback has been given, we let the author made the refresh\r\n      if (isWebCustomer() && callbackUri) {\r\n        redirectToExternal(getCallbackUri(callbackUri, CALLBACK_EVENTS.INVALID_ACCESS_TOKEN))\r\n        return\r\n      }\r\n\r\n      // otherwise we remove access token provided from url and redirect user to login page\r\n      if (accessToken !== null || callbackUri !== null) {\r\n        const location = document.location.pathname + document.location.search\r\n        let redirectToParam = removeUrlParameter(location, 'accessToken')\r\n        redirectToParam = removeUrlParameter(location, 'access_token')\r\n\r\n        dispatch(cleanAuthData())\r\n        if (isWebCustomer()) {\r\n          dispatch(\r\n            redirectTo(getRoute('LOGIN'), null, {\r\n              redirectTo: redirectToParam || window.location.toString(),\r\n            })\r\n          )\r\n        } else {\r\n          dispatch(redirectTo(getRoute('LOGIN'), null, { redirectTo: redirectToParam }))\r\n        }\r\n      } else {\r\n        dispatch(failureAction(apiError))\r\n      }\r\n    }\r\n\r\n    // refreshMiddlewareFailure\r\n  }\r\n}\r\n\r\nexport default attemptRefresh\r\n","import isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { hasTokenExpired, willTokenExpireSoon } from 'pmt-modules/auth/utils'\r\n\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { fromMs } from 'pmt-utils/date'\r\nimport { isRefreshingOauthToken, getAuth } from 'pmt-modules/auth/selectors'\r\nimport { RefreshAction, refreshAction } from 'pmt-modules/auth/refreshToken/actions'\r\nimport { queueActionForRefreshToken } from 'pmt-modules/auth/refreshToken/preAttemptRefresh'\r\nimport { getOauthClient } from 'pmt-modules/appConfig/selectors'\r\nimport attemptRefresh from 'pmt-modules/auth/refreshToken/attemptRefresh'\r\nimport { hasAuthEnabled } from 'pmt-modules/environment'\r\nimport { API_CALL, TYPES } from '../constants'\r\n\r\nexport { getAuthorization as getOauthBearerToken } from 'pmt-modules/auth/utils'\r\n\r\nexport const handleAccessToken = ({ request, action, dispatch, next, getState }) => {\r\n  // check if access token has expired or is going to expire soon\r\n  // handleExpiredToken will throw an exception when token as expired that we catch here\r\n  // in order to stop propagation but will continue otherwise\r\n  if (\r\n    hasAuthEnabled() &&\r\n    (request.headers.authorization !== null || action[API_CALL][TYPES][0] === RefreshAction.REQUEST)\r\n  ) {\r\n    const authData = request.authData || getAuth()\r\n\r\n    const shouldStopPropagation = handleExpiredToken({\r\n      request,\r\n      action,\r\n      getState,\r\n      dispatch,\r\n      next,\r\n      authData,\r\n    })\r\n    if (shouldStopPropagation) {\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n\r\n    //\r\n    // add oauth refresh token middleware\r\n    //\r\n    request.attemptRefresh = attemptRefresh\r\n    request.attemptRefreshOptions = {\r\n      // This is the current access token. If the user is not authenticated yet\r\n      // this can be null or undefined\r\n      token: !isNil(authData) ? authData.refresh_token : null,\r\n    }\r\n  } else {\r\n    request.attemptRefresh = null\r\n  }\r\n}\r\n\r\n/**\r\n * check if access token has expired or is going to expire soon\r\n * refresh it if needed and then process to\r\n *\r\n * @returns {bool} wether it should stop propagation or not\r\n */\r\nconst handleExpiredToken = ({ request, action, getState, dispatch, next, authData }) => {\r\n  const oauthClient = getOauthClient(getState())\r\n\r\n  if (!isNull(authData)) {\r\n    const refreshToken = authData.refresh_token\r\n    const expiration = fromMs(authData.expiresAt)\r\n\r\n    // if current action is not a refresh action,\r\n    // nor a getAppConfig action (meaning we're fetching oauth clientId/clientSecret)\r\n    if (action[API_CALL][TYPES][0] !== RefreshAction.REQUEST) {\r\n      if (hasTokenExpired(expiration)) {\r\n        // if token has already expired or is going to expire within 2 minutes\r\n        // we stack pending actions and call refresh token\r\n        // stacked actions will be unstacked after successful resfresh\r\n        queueActionForRefreshToken({\r\n          action,\r\n          dispatch,\r\n          next,\r\n          oauthClient,\r\n          refreshToken,\r\n        })\r\n\r\n        // stop middleware propgation for it not to next any other action\r\n        return true\r\n      } else if (willTokenExpireSoon(expiration)) {\r\n        // token is going to expire soon, we still have time to dispatch a refresh token action\r\n        // in the background in order to optimize answers time\r\n        // thus, we dispatch a refreshAction without any callback needed\r\n        if (!isRefreshingOauthToken(getState())) {\r\n          dispatch(\r\n            refreshAction(refreshToken, oauthClient, {\r\n              then: null,\r\n            })\r\n          )\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return false\r\n}\r\n","import merge from 'lodash/merge'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\n\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { getFrontSessionId, FRONT_SESSION_ID_HEADER } from 'pmt-modules/frontSession'\r\nimport { getApiUrl, getApiConsumer } from 'pmt-modules/environment'\r\n\r\nimport { getAppConfig } from 'pmt-modules/appConfig/selectors'\r\nimport { createIncognitoBasic, createUserLightBasic } from 'pmt-modules/api/utils'\r\nimport { AuthMode } from 'pmt-modules/auth'\r\nimport { getUserLightCookie, getIncognitoCookie } from 'pmt-modules/auth/utils'\r\nimport { isActionApiCall } from '../utils'\r\nimport { API_CALL, REQUEST } from '../constants'\r\n\r\n//could be dynamically imported if we want to reduce the bundle size, but it's not that big\r\nimport { getBasicToken } from 'pmt-modules/authPro/selectors'\r\n//could be dynamically imported if we want to reduce the bundle size, but it's not that big\r\nimport { getBasicToken as getRestaurantBasicToken } from 'pmt-modules/authRestaurant/selectors'\r\nimport { getOauthBearerToken, handleAccessToken } from './oauthUtils'\r\n\r\nconst getFinalApiUrl = (requestUrl = null) => {\r\n  if (!isEmpty(requestUrl)) {\r\n    return requestUrl\r\n  }\r\n\r\n  return getApiUrl()\r\n}\r\n\r\nconst getAuthorization = (state) => {\r\n  if (process.env.FEATURE_BO) {\r\n    return getBasicToken(state)\r\n  } else if (process.env.FEATURE_KIOSK) {\r\n    return getRestaurantBasicToken(state)\r\n  } else {\r\n    const authenticationSettings = getAppConfig(state)?.authentication\r\n    if (authenticationSettings && !isNil(authenticationSettings.mode)) {\r\n      return getAuthorizationFromModeAndCookies(authenticationSettings)\r\n    } else {\r\n      // default behaviour\r\n      return getOauthToken()\r\n    }\r\n  }\r\n}\r\n\r\nconst getOauthToken = () => {\r\n  const accessToken = getOauthBearerToken()\r\n  if (accessToken) {\r\n    return accessToken\r\n  }\r\n  return null\r\n}\r\n\r\nconst getAuthorizationFromModeAndCookies = (authenticationSettings) => {\r\n  if (authenticationSettings.mode === AuthMode.NORMAL) {\r\n    if (getOauthToken() != null) {\r\n      return getOauthToken()\r\n    } else if (authenticationSettings.allowIncognito && getIncognitoCookie()) {\r\n      return createIncognitoBasic(getIncognitoCookie())\r\n    }\r\n  } else if (authenticationSettings.mode === AuthMode.LIGHT) {\r\n    if (getOauthToken() != null) {\r\n      return getOauthToken()\r\n    } else if (getUserLightCookie() != null) {\r\n      return createUserLightBasic(getUserLightCookie().email)\r\n    } else if (authenticationSettings.allowIncognito && getIncognitoCookie()) {\r\n      return createIncognitoBasic(getIncognitoCookie())\r\n    }\r\n  } else if (authenticationSettings.mode === AuthMode.INCOGNITO_ONLY) {\r\n    // allow authenticated TEST user even on incognito_only apiConsumer\r\n    // so a user can use the login page to authenticate as TEST user, and access test restaurants\r\n    if (getOauthToken() != null) {\r\n      return getOauthToken()\r\n    } else if (getIncognitoCookie() != null) {\r\n      return createIncognitoBasic(getIncognitoCookie())\r\n    }\r\n  }\r\n  return null\r\n}\r\n\r\n/**\r\n * middleware to update the  api calls data\r\n */\r\nexport const requestConfigurationMiddleware = createMiddleware(\r\n  isActionApiCall,\r\n  ({ getState, dispatch, next, action }) => {\r\n    const apiCall = action[API_CALL]\r\n\r\n    const state = getState()\r\n    const request = apiCall[REQUEST]\r\n\r\n    //\r\n    // update headers\r\n    // Note: nil headers will be removed by the ApiManager.\r\n    //\r\n\r\n    const headers = {\r\n      'api-consumer': getApiConsumer(),\r\n      [FRONT_SESSION_ID_HEADER]: getFrontSessionId(),\r\n    }\r\n\r\n    const authorization = getAuthorization(state)\r\n    if (\r\n      authorization !== null &&\r\n      // verify we don't override config, handle both writing\r\n      isUndefined(headers.authorization) &&\r\n      isUndefined(headers.Authorization)\r\n    ) {\r\n      headers.authorization = authorization\r\n    }\r\n\r\n    // add param `withoutAuth` to force authorization to be null\r\n    if (request.withoutAuth === true) {\r\n      // handle both writing\r\n      headers.authorization = null\r\n      headers.Authorization = null\r\n    }\r\n\r\n    // merge our default headers, priority given to the request's headers.\r\n    request.headers = merge(headers, request.headers)\r\n\r\n    //\r\n    // set url\r\n    //\r\n    request.url = getFinalApiUrl(request.url)\r\n\r\n    if (!process.env.FEATURE_BO && !process.env.FEATURE_KIOSK) {\r\n      handleAccessToken({ request, action, dispatch, next, getState })\r\n    }\r\n\r\n    //\r\n    // set data\r\n    //\r\n\r\n    action[API_CALL][REQUEST] = request\r\n\r\n    return next(action)\r\n  }\r\n)\r\n","import { createMiddleware } from '../redux'\r\n\r\nimport { CHOOSE_LOCALE } from './actions'\r\n\r\nimport { saveLocaleToStorage } from './storage'\r\n\r\nexport const chooseLocaleMiddleware = createMiddleware(CHOOSE_LOCALE, ({ action }) => {\r\n  const { locale } = action\r\n\r\n  // save chosen language\r\n  saveLocaleToStorage(locale)\r\n\r\n  // retrieve messages\r\n  // dispatch(retrieveMessages(locale))\r\n\r\n  // for now reload the entire page since it is too difficult to update the whole app.\r\n  // We would have to:\r\n  // - reload top view to use the retrieved messages\r\n  // - make sure there is no local state that depends of the old/new locale\r\n  window.location.reload()\r\n})\r\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t(e.reduxLogger=e.reduxLogger||{})}(this,function(e){\"use strict\";function t(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function r(e,t){Object.defineProperty(this,\"kind\",{value:e,enumerable:!0}),t&&t.length&&Object.defineProperty(this,\"path\",{value:t,enumerable:!0})}function n(e,t,r){n.super_.call(this,\"E\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0}),Object.defineProperty(this,\"rhs\",{value:r,enumerable:!0})}function o(e,t){o.super_.call(this,\"N\",e),Object.defineProperty(this,\"rhs\",{value:t,enumerable:!0})}function i(e,t){i.super_.call(this,\"D\",e),Object.defineProperty(this,\"lhs\",{value:t,enumerable:!0})}function a(e,t,r){a.super_.call(this,\"A\",e),Object.defineProperty(this,\"index\",{value:t,enumerable:!0}),Object.defineProperty(this,\"item\",{value:r,enumerable:!0})}function f(e,t,r){var n=e.slice((r||t)+1||e.length);return e.length=t<0?e.length+t:t,e.push.apply(e,n),e}function u(e){var t=\"undefined\"==typeof e?\"undefined\":N(e);return\"object\"!==t?t:e===Math?\"math\":null===e?\"null\":Array.isArray(e)?\"array\":\"[object Date]\"===Object.prototype.toString.call(e)?\"date\":\"function\"==typeof e.toString&&/^\\/.*\\//.test(e.toString())?\"regexp\":\"object\"}function l(e,t,r,c,s,d,p){s=s||[],p=p||[];var g=s.slice(0);if(\"undefined\"!=typeof d){if(c){if(\"function\"==typeof c&&c(g,d))return;if(\"object\"===(\"undefined\"==typeof c?\"undefined\":N(c))){if(c.prefilter&&c.prefilter(g,d))return;if(c.normalize){var h=c.normalize(g,d,e,t);h&&(e=h[0],t=h[1])}}}g.push(d)}\"regexp\"===u(e)&&\"regexp\"===u(t)&&(e=e.toString(),t=t.toString());var y=\"undefined\"==typeof e?\"undefined\":N(e),v=\"undefined\"==typeof t?\"undefined\":N(t),b=\"undefined\"!==y||p&&p[p.length-1].lhs&&p[p.length-1].lhs.hasOwnProperty(d),m=\"undefined\"!==v||p&&p[p.length-1].rhs&&p[p.length-1].rhs.hasOwnProperty(d);if(!b&&m)r(new o(g,t));else if(!m&&b)r(new i(g,e));else if(u(e)!==u(t))r(new n(g,e,t));else if(\"date\"===u(e)&&e-t!==0)r(new n(g,e,t));else if(\"object\"===y&&null!==e&&null!==t)if(p.filter(function(t){return t.lhs===e}).length)e!==t&&r(new n(g,e,t));else{if(p.push({lhs:e,rhs:t}),Array.isArray(e)){var w;e.length;for(w=0;w<e.length;w++)w>=t.length?r(new a(g,w,new i(void 0,e[w]))):l(e[w],t[w],r,c,g,w,p);for(;w<t.length;)r(new a(g,w,new o(void 0,t[w++])))}else{var x=Object.keys(e),S=Object.keys(t);x.forEach(function(n,o){var i=S.indexOf(n);i>=0?(l(e[n],t[n],r,c,g,n,p),S=f(S,i)):l(e[n],void 0,r,c,g,n,p)}),S.forEach(function(e){l(void 0,t[e],r,c,g,e,p)})}p.length=p.length-1}else e!==t&&(\"number\"===y&&isNaN(e)&&isNaN(t)||r(new n(g,e,t)))}function c(e,t,r,n){return n=n||[],l(e,t,function(e){e&&n.push(e)},r),n.length?n:void 0}function s(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n<i;n++)o=o[r.path[n]];switch(r.kind){case\"A\":s(o[r.path[n]],r.index,r.item);break;case\"D\":delete o[r.path[n]];break;case\"E\":case\"N\":o[r.path[n]]=r.rhs}}else switch(r.kind){case\"A\":s(e[t],r.index,r.item);break;case\"D\":e=f(e,t);break;case\"E\":case\"N\":e[t]=r.rhs}return e}function d(e,t,r){if(e&&t&&r&&r.kind){for(var n=e,o=-1,i=r.path?r.path.length-1:0;++o<i;)\"undefined\"==typeof n[r.path[o]]&&(n[r.path[o]]=\"number\"==typeof r.path[o]?[]:{}),n=n[r.path[o]];switch(r.kind){case\"A\":s(r.path?n[r.path[o]]:n,r.index,r.item);break;case\"D\":delete n[r.path[o]];break;case\"E\":case\"N\":n[r.path[o]]=r.rhs}}}function p(e,t,r){if(r.path&&r.path.length){var n,o=e[t],i=r.path.length-1;for(n=0;n<i;n++)o=o[r.path[n]];switch(r.kind){case\"A\":p(o[r.path[n]],r.index,r.item);break;case\"D\":o[r.path[n]]=r.lhs;break;case\"E\":o[r.path[n]]=r.lhs;break;case\"N\":delete o[r.path[n]]}}else switch(r.kind){case\"A\":p(e[t],r.index,r.item);break;case\"D\":e[t]=r.lhs;break;case\"E\":e[t]=r.lhs;break;case\"N\":e=f(e,t)}return e}function g(e,t,r){if(e&&t&&r&&r.kind){var n,o,i=e;for(o=r.path.length-1,n=0;n<o;n++)\"undefined\"==typeof i[r.path[n]]&&(i[r.path[n]]={}),i=i[r.path[n]];switch(r.kind){case\"A\":p(i[r.path[n]],r.index,r.item);break;case\"D\":i[r.path[n]]=r.lhs;break;case\"E\":i[r.path[n]]=r.lhs;break;case\"N\":delete i[r.path[n]]}}}function h(e,t,r){if(e&&t){var n=function(n){r&&!r(e,t,n)||d(e,t,n)};l(e,t,n)}}function y(e){return\"color: \"+F[e].color+\"; font-weight: bold\"}function v(e){var t=e.kind,r=e.path,n=e.lhs,o=e.rhs,i=e.index,a=e.item;switch(t){case\"E\":return[r.join(\".\"),n,\"→\",o];case\"N\":return[r.join(\".\"),o];case\"D\":return[r.join(\".\")];case\"A\":return[r.join(\".\")+\"[\"+i+\"]\",a];default:return[]}}function b(e,t,r,n){var o=c(e,t);try{n?r.groupCollapsed(\"diff\"):r.group(\"diff\")}catch(e){r.log(\"diff\")}o?o.forEach(function(e){var t=e.kind,n=v(e);r.log.apply(r,[\"%c \"+F[t].text,y(t)].concat(P(n)))}):r.log(\"—— no diff ——\");try{r.groupEnd()}catch(e){r.log(\"—— diff end —— \")}}function m(e,t,r,n){switch(\"undefined\"==typeof e?\"undefined\":N(e)){case\"object\":return\"function\"==typeof e[n]?e[n].apply(e,P(r)):e[n];case\"function\":return e(t);default:return e}}function w(e){var t=e.timestamp,r=e.duration;return function(e,n,o){var i=[\"action\"];return i.push(\"%c\"+String(e.type)),t&&i.push(\"%c@ \"+n),r&&i.push(\"%c(in \"+o.toFixed(2)+\" ms)\"),i.join(\" \")}}function x(e,t){var r=t.logger,n=t.actionTransformer,o=t.titleFormatter,i=void 0===o?w(t):o,a=t.collapsed,f=t.colors,u=t.level,l=t.diff,c=\"undefined\"==typeof t.titleFormatter;e.forEach(function(o,s){var d=o.started,p=o.startedTime,g=o.action,h=o.prevState,y=o.error,v=o.took,w=o.nextState,x=e[s+1];x&&(w=x.prevState,v=x.started-d);var S=n(g),k=\"function\"==typeof a?a(function(){return w},g,o):a,j=D(p),E=f.title?\"color: \"+f.title(S)+\";\":\"\",A=[\"color: gray; font-weight: lighter;\"];A.push(E),t.timestamp&&A.push(\"color: gray; font-weight: lighter;\"),t.duration&&A.push(\"color: gray; font-weight: lighter;\");var O=i(S,j,v);try{k?f.title&&c?r.groupCollapsed.apply(r,[\"%c \"+O].concat(A)):r.groupCollapsed(O):f.title&&c?r.group.apply(r,[\"%c \"+O].concat(A)):r.group(O)}catch(e){r.log(O)}var N=m(u,S,[h],\"prevState\"),P=m(u,S,[S],\"action\"),C=m(u,S,[y,h],\"error\"),F=m(u,S,[w],\"nextState\");if(N)if(f.prevState){var L=\"color: \"+f.prevState(h)+\"; font-weight: bold\";r[N](\"%c prev state\",L,h)}else r[N](\"prev state\",h);if(P)if(f.action){var T=\"color: \"+f.action(S)+\"; font-weight: bold\";r[P](\"%c action    \",T,S)}else r[P](\"action    \",S);if(y&&C)if(f.error){var M=\"color: \"+f.error(y,h)+\"; font-weight: bold;\";r[C](\"%c error     \",M,y)}else r[C](\"error     \",y);if(F)if(f.nextState){var _=\"color: \"+f.nextState(w)+\"; font-weight: bold\";r[F](\"%c next state\",_,w)}else r[F](\"next state\",w);l&&b(h,w,r,k);try{r.groupEnd()}catch(e){r.log(\"—— log end ——\")}})}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({},L,e),r=t.logger,n=t.stateTransformer,o=t.errorTransformer,i=t.predicate,a=t.logErrors,f=t.diffPredicate;if(\"undefined\"==typeof r)return function(){return function(e){return function(t){return e(t)}}};if(e.getState&&e.dispatch)return console.error(\"[redux-logger] redux-logger not installed. Make sure to pass logger instance as middleware:\\n// Logger with default options\\nimport { logger } from 'redux-logger'\\nconst store = createStore(\\n  reducer,\\n  applyMiddleware(logger)\\n)\\n// Or you can create your own logger with custom options http://bit.ly/redux-logger-options\\nimport createLogger from 'redux-logger'\\nconst logger = createLogger({\\n  // ...options\\n});\\nconst store = createStore(\\n  reducer,\\n  applyMiddleware(logger)\\n)\\n\"),function(){return function(e){return function(t){return e(t)}}};var u=[];return function(e){var r=e.getState;return function(e){return function(l){if(\"function\"==typeof i&&!i(r,l))return e(l);var c={};u.push(c),c.started=O.now(),c.startedTime=new Date,c.prevState=n(r()),c.action=l;var s=void 0;if(a)try{s=e(l)}catch(e){c.error=o(e)}else s=e(l);c.took=O.now()-c.started,c.nextState=n(r());var d=t.diff&&\"function\"==typeof f?f(r,l):t.diff;if(x(u,Object.assign({},t,{diff:d})),u.length=0,c.error)throw c.error;return s}}}}var k,j,E=function(e,t){return new Array(t+1).join(e)},A=function(e,t){return E(\"0\",t-e.toString().length)+e},D=function(e){return A(e.getHours(),2)+\":\"+A(e.getMinutes(),2)+\":\"+A(e.getSeconds(),2)+\".\"+A(e.getMilliseconds(),3)},O=\"undefined\"!=typeof performance&&null!==performance&&\"function\"==typeof performance.now?performance:Date,N=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},P=function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return Array.from(e)},C=[];k=\"object\"===(\"undefined\"==typeof global?\"undefined\":N(global))&&global?global:\"undefined\"!=typeof window?window:{},j=k.DeepDiff,j&&C.push(function(){\"undefined\"!=typeof j&&k.DeepDiff===c&&(k.DeepDiff=j,j=void 0)}),t(n,r),t(o,r),t(i,r),t(a,r),Object.defineProperties(c,{diff:{value:c,enumerable:!0},observableDiff:{value:l,enumerable:!0},applyDiff:{value:h,enumerable:!0},applyChange:{value:d,enumerable:!0},revertChange:{value:g,enumerable:!0},isConflict:{value:function(){return\"undefined\"!=typeof j},enumerable:!0},noConflict:{value:function(){return C&&(C.forEach(function(e){e()}),C=null),c},enumerable:!0}});var F={E:{color:\"#2196F3\",text:\"CHANGED:\"},N:{color:\"#4CAF50\",text:\"ADDED:\"},D:{color:\"#F44336\",text:\"DELETED:\"},A:{color:\"#2196F3\",text:\"ARRAY:\"}},L={level:\"log\",logger:console,logErrors:!0,collapsed:void 0,predicate:void 0,duration:!1,timestamp:!0,stateTransformer:function(e){return e},actionTransformer:function(e){return e},errorTransformer:function(e){return e},colors:{title:function(){return\"inherit\"},prevState:function(){return\"#9E9E9E\"},action:function(){return\"#03A9F4\"},nextState:function(){return\"#4CAF50\"},error:function(){return\"#F20404\"}},diff:!1,diffPredicate:void 0,transformer:void 0},T=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.dispatch,r=e.getState;return\"function\"==typeof t||\"function\"==typeof r?S()({dispatch:t,getState:r}):void console.error(\"\\n[redux-logger v3] BREAKING CHANGE\\n[redux-logger v3] Since 3.0.0 redux-logger exports by default logger with default settings.\\n[redux-logger v3] Change\\n[redux-logger v3] import createLogger from 'redux-logger'\\n[redux-logger v3] to\\n[redux-logger v3] import { createLogger } from 'redux-logger'\\n\")};e.defaults=L,e.createLogger=S,e.logger=T,e.default=T,Object.defineProperty(e,\"__esModule\",{value:!0})});\n","import isFunction from 'lodash/isFunction'\r\nimport invariant from 'invariant'\r\n\r\nimport thunk from 'redux-thunk'\r\nimport { routerMiddleware } from 'connected-react-router'\r\nimport { getHistory } from 'pmt-modules/routing'\r\nimport crashReporter from '../middleware/crashReporter'\r\nimport {\r\n  apiMiddleware,\r\n  unauthorizedMiddleware,\r\n  requestConfigurationMiddleware,\r\n} from '../../api/middlewares'\r\n\r\nimport { chooseLocaleMiddleware } from '../../i18n/middlewares'\r\n\r\nimport { isDev } from '../../environment'\r\n\r\n//could be dynamically imported if we want to reduce the bundle size\r\nimport { default as apiTestMiddleware } from 'pmt-modules/api/middlewares/apiTest'\r\n//could be dynamically imported if we want to reduce the bundle size\r\nimport { createLogger } from 'redux-logger'\r\n\r\nconst generateMiddlewares = (appOptions, appMiddlewares) => {\r\n  let middlewares = [\r\n    thunk,\r\n    requestConfigurationMiddleware,\r\n    apiMiddleware,\r\n    process.env.__DEV__ ? apiTestMiddleware : null,\r\n    unauthorizedMiddleware,\r\n    chooseLocaleMiddleware,\r\n    crashReporter,\r\n    process.env.__DEV__\r\n      ? createLogger(\r\n          // have to be before the apiMiddleware // only on dev // must be before reduxLogger and after thunk and api\r\n          { collapsed: true }\r\n        )\r\n      : null,\r\n    ...appMiddlewares, // work.. // FIXME: the router middleware has to be in the end, the actions made on middleware will not // only on dev, but requires to be at this specific place\r\n    //\r\n    //\r\n    // connected-react-router need this middleware to handle functions such as `push(location)`,\r\n    // `replace(loacation)`\r\n    // It handle actions creators that correspond with the history methods of the same name.\r\n    // see https://github.com/supasate/connected-react-router\r\n    //\r\n    // For reference they are defined as follows:\r\n    // push - Pushes a new location to history, becoming the current location.\r\n    // replace - Replaces the current location in history.\r\n    // go - Moves backwards or forwards a relative number of locations in history.\r\n    // goForward - Moves forward one location. Equivalent to go(1)\r\n    // goBack - Moves backwards one location. Equivalent to go(-1)\r\n    //\r\n    // Both push and replace take in a location descriptor, which can be an object describing the URL\r\n    // or a plain string URL.\r\n    //\r\n    routerMiddleware(getHistory()),\r\n  ].filter(elem => elem !== null)\r\n\r\n  if (isDev()) {\r\n    middlewares.forEach((middleware, index) => {\r\n      invariant(\r\n        isFunction(middleware),\r\n        `middleware is not a function at index ${index}\\n${middleware}`\r\n      )\r\n    })\r\n  }\r\n\r\n  return middlewares // remove null elements\r\n}\r\n\r\nexport default generateMiddlewares\r\n","import { applyMiddleware } from 'redux'\r\n\r\nimport createStoreCustom from './createStoreCustom'\r\nimport generateMiddlewares from './generateMiddlewares'\r\n\r\nconst configureStore = appOptions =>\r\n  createStoreCustom(appOptions)(\r\n    appOptions.rootReducer,\r\n    appOptions.preloadedState || {},\r\n    applyMiddleware(\r\n      ...generateMiddlewares(appOptions, [\r\n        ...(appOptions.prodMiddlewares || []),\r\n        ...(appOptions.middlewares || []),\r\n      ])\r\n    )\r\n  )\r\n\r\nexport default configureStore\r\n","\"use strict\";\n\nvar compose = require('redux').compose;\n\nexports.__esModule = true;\nexports.composeWithDevTools = (\n  typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?\n    window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ :\n    function() {\n      if (arguments.length === 0) return undefined;\n      if (typeof arguments[0] === 'object') return compose;\n      return compose.apply(null, arguments);\n    }\n);\n\nexports.devToolsEnhancer = (\n  typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ?\n    window.__REDUX_DEVTOOLS_EXTENSION__ :\n    function() { return function(noop) { return noop; } }\n);\n","import configureStoreProd from './configureStore.prod.js'\r\nimport configureStoreDev from './configureStore.dev.js'\r\n\r\nlet store = null\r\n\r\nconst configureStore = appOptions => {\r\n  if (store) {\r\n    return store\r\n  }\r\n\r\n  if (process.env.NODE_ENV === 'production') {\r\n    store = configureStoreProd(appOptions)\r\n  } else {\r\n    store = configureStoreDev(appOptions)\r\n  }\r\n\r\n  // Enable HMR for reducers only, not the store instance\r\n  if (import.meta.hot) {\r\n    import.meta.hot.accept(['./configureStore.prod.js', './configureStore.dev.js'], () => {\r\n      // Reducers will be updated without recreating the store\r\n    })\r\n  }\r\n\r\n  return store\r\n}\r\n\r\nexport default configureStore\r\n","import Logger from 'pmt-utils/logger'\r\nimport { getFromSession, saveToSession } from 'pmt-modules/storage'\r\n\r\n/**\r\n * sessionStorage key used to prevent infinite reload loops when recovering from a\r\n * chunk load error. Set before reloading; cleared on the next successful page load.\r\n */\r\nexport const CHUNK_ERROR_RELOAD_KEY = 'chunkErrorReloaded'\r\n\r\n/**\r\n * Detects whether an error is a chunk load failure, which typically occurs after a new\r\n * deployment when the browser tries to load a hashed JS chunk that no longer exists on\r\n * the server (e.g. index_8f2b9a1c.js replaced by index_91db3a6b.js).\r\n *\r\n * @param {*} error\r\n * @returns {boolean}\r\n */\r\nexport const isChunkLoadError = error => {\r\n  if (!error || typeof error !== 'object') return false\r\n  const message = error?.message || ''\r\n  return (\r\n    message.includes('Loading chunk') ||\r\n    message.includes('ChunkLoadError') ||\r\n    message.includes('Failed to fetch dynamically imported module') ||\r\n    message.includes('Importing a module script failed') ||\r\n    error.name === 'ChunkLoadError'\r\n  )\r\n}\r\n\r\n/**\r\n * Attempts to recover from a chunk load error by reloading the page once.\r\n *\r\n * Uses a sessionStorage flag to prevent an infinite reload loop when the error\r\n * persists after the first reload (e.g. a genuine network failure).\r\n *\r\n * @param {*} error - The error to check\r\n * @param {string} [context] - Optional label appended to the log message for traceability\r\n * @returns {boolean} true if a reload was triggered, false otherwise\r\n */\r\nexport const handleChunkError = (error, context = '') => {\r\n  if (!isChunkLoadError(error)) return false\r\n\r\n  const hasReloaded = getFromSession(CHUNK_ERROR_RELOAD_KEY)\r\n  if (!hasReloaded) {\r\n    const label = context ? ` [${context}]` : ''\r\n    Logger.warn(`Chunk load error detected${label}. Reloading...`, error)\r\n    saveToSession(CHUNK_ERROR_RELOAD_KEY, true)\r\n    window.location.reload()\r\n    return true\r\n  }\r\n\r\n  return false\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n  window.location.hostname === 'localhost' ||\r\n    // [::1] is the IPv6 localhost address.\r\n    window.location.hostname === '[::1]' ||\r\n    // 127.0.0.1/8 is considered localhost for IPv4.\r\n    window.location.hostname.match(\r\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n    )\r\n)\r\n\r\nexport default function register() {\r\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n    // The URL constructor is available in all browsers that support SW.\r\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location)\r\n    if (publicUrl.origin !== window.location.origin) {\r\n      // Our service worker won't work if PUBLIC_URL is on a different origin\r\n      // from what our page is served on. This might happen if a CDN is used to\r\n      // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n      return\r\n    }\r\n\r\n    window.addEventListener('load', () => {\r\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\r\n\r\n      if (!isLocalhost) {\r\n        // Is not local host. Just register service worker\r\n        registerValidSW(swUrl)\r\n      } else {\r\n        // This is running on localhost. Lets check if a service worker still exists or not.\r\n        checkValidServiceWorker(swUrl)\r\n      }\r\n    })\r\n  }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n  navigator.serviceWorker\r\n    .register(swUrl)\r\n    .then(registration => {\r\n      registration.onupdatefound = () => {\r\n        const installingWorker = registration.installing\r\n        installingWorker.onstatechange = () => {\r\n          if (installingWorker.state === 'installed') {\r\n            if (navigator.serviceWorker.controller) {\r\n              // At this point, the old content will have been purged and\r\n              // the fresh content will have been added to the cache.\r\n              // It's the perfect time to display a \"New content is\r\n              // available; please refresh.\" message in your web app.\r\n              console.log('New content is available; please refresh.')\r\n            } else {\r\n              // At this point, everything has been precached.\r\n              // It's the perfect time to display a\r\n              // \"Content is cached for offline use.\" message.\r\n              console.log('Content is cached for offline use.')\r\n            }\r\n          }\r\n        }\r\n      }\r\n    })\r\n    .catch(error => {\r\n      console.error('Error during service worker registration:', error)\r\n    })\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl) {\r\n  // Check if the service worker can be found. If it can't reload the page.\r\n  fetch(swUrl)\r\n    .then(response => {\r\n      // Ensure service worker exists, and that we really are getting a JS file.\r\n      if (\r\n        response.status === 404 ||\r\n        response.headers.get('content-type').indexOf('javascript') === -1\r\n      ) {\r\n        // No service worker found. Probably a different app. Reload the page.\r\n        navigator.serviceWorker.ready.then(registration => {\r\n          registration.unregister().then(() => {\r\n            window.location.reload()\r\n          })\r\n        })\r\n      } else {\r\n        // Service worker found. Proceed as normal.\r\n        registerValidSW(swUrl)\r\n      }\r\n    })\r\n    .catch(() => {\r\n      console.log(\r\n        'No internet connection found. App is running in offline mode.'\r\n      )\r\n    })\r\n}\r\n\r\nexport function unregisterServiceWorker() {\r\n  if ('serviceWorker' in navigator) {\r\n    navigator.serviceWorker.ready.then(registration => {\r\n      registration.unregister()\r\n    })\r\n  }\r\n}\r\n","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React, { PureComponent } from 'react'; // eslint-disable-line import/no-unresolved\n// eslint-disable-line import/no-unresolved\n\n\nexport var PersistGate = function (_PureComponent) {\n  _inherits(PersistGate, _PureComponent);\n\n  function PersistGate() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, PersistGate);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = PersistGate.__proto__ || Object.getPrototypeOf(PersistGate)).call.apply(_ref, [this].concat(args))), _this), _this.state = {\n      bootstrapped: false\n    }, _this.handlePersistorState = function () {\n      var persistor = _this.props.persistor;\n\n      var _persistor$getState = persistor.getState(),\n          bootstrapped = _persistor$getState.bootstrapped;\n\n      if (bootstrapped) {\n        if (_this.props.onBeforeLift) {\n          Promise.resolve(_this.props.onBeforeLift()).then(function () {\n            return _this.setState({ bootstrapped: true });\n          }).catch(function () {\n            return _this.setState({ bootstrapped: true });\n          });\n        } else {\n          _this.setState({ bootstrapped: true });\n        }\n        _this._unsubscribe && _this._unsubscribe();\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(PersistGate, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      this._unsubscribe = this.props.persistor.subscribe(this.handlePersistorState);\n      this.handlePersistorState();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this._unsubscribe && this._unsubscribe();\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof this.props.children === 'function' && this.props.loading) console.error('redux-persist: PersistGate expects either a function child or loading prop, but not both. The loading prop will be ignored.');\n      }\n      if (typeof this.props.children === 'function') {\n        return this.props.children(this.state.bootstrapped);\n      }\n\n      return this.state.bootstrapped ? this.props.children : this.props.loading;\n    }\n  }]);\n\n  return PersistGate;\n}(PureComponent);\nPersistGate.defaultProps = {\n  loading: null\n};","import React from 'react'\r\n\r\nimport isString from 'lodash/isString'\r\nimport clsx from 'clsx'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { isProd } from 'pmt-modules/environment'\r\n\r\nimport Typography from 'pmt-ui/Typography'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Divider from 'pmt-ui/Divider'\r\n\r\nconst styles = theme => {\r\n  // sometimes the app crash and the theme.spacing not longer exists (mostly because it crashed\r\n  // before we creates the theme)\r\n  const spacing = theme.spacing ? theme.spacing : unit => 8 * unit\r\n  return {\r\n    root: {\r\n      background: '#fafafa',\r\n      height: '100%',\r\n      padding: spacing(3),\r\n      overflow: 'scroll',\r\n    },\r\n    title: {\r\n      paddingBottom: spacing(3),\r\n    },\r\n    infoBlock: {\r\n      maxWidth: 400,\r\n      margin: '0 auto',\r\n      textAlign: 'center',\r\n    },\r\n    pre: {\r\n      wordWrap: 'break-word',\r\n      whiteSpace: 'pre-wrap',\r\n    },\r\n    sentryId: {\r\n      backgroundColor: '#e74c3c',\r\n      fontWeight: 800,\r\n      color: 'white',\r\n      fontSize: 16,\r\n      padding: spacing(1),\r\n      margin: 10,\r\n    },\r\n    detailBlock: {\r\n      marginTop: spacing(3),\r\n    },\r\n    detailTitle: {\r\n      paddingTop: spacing(2),\r\n      paddingBottom: spacing(3),\r\n      cursor: 'pointer',\r\n    },\r\n    hidden: {\r\n      display: 'none',\r\n    },\r\n  }\r\n}\r\n\r\nclass ErrorOccurredView extends React.Component {\r\n  state = {\r\n    displayDetail: !isProd(),\r\n  }\r\n\r\n  displayData(data) {\r\n    if (!isString(data)) {\r\n      try {\r\n        return JSON.stringify(data, null, 4)\r\n      } catch (e) {}\r\n    }\r\n\r\n    return String(data)\r\n  }\r\n\r\n  render() {\r\n    const { error, info, sentryId, classes } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <Typography variant=\"h4\" className={classes.title}>\r\n          Une erreur est survenue\r\n        </Typography>\r\n\r\n        <div className={classes.infoBlock}>\r\n          {sentryId && (\r\n            <div>\r\n              <Typography variant=\"body2\">\r\n                Nos équipes on été prévenues du problèmes.\r\n                <br />\r\n                Veuillez trouver ci-dessous l'identifiant attaché à l'erreur :<br />\r\n              </Typography>\r\n\r\n              <div className={classes.sentryId}>{sentryId}</div>\r\n            </div>\r\n          )}\r\n        </div>\r\n\r\n        <div className={classes.detailBlock}>\r\n          <Divider />\r\n\r\n          <div\r\n            className={classes.detailTitle}\r\n            onClick={() => this.setState({ displayDetail: !this.state.displayDetail })}\r\n          >\r\n            <Typography variant=\"body2\">Détail</Typography>\r\n          </div>\r\n\r\n          <div\r\n            className={clsx({\r\n              [classes.hidden]: !this.state.displayDetail,\r\n            })}\r\n          >\r\n            <Grid spacing={2} container>\r\n              <Grid item xs={12} sm={6}>\r\n                <Typography variant=\"body2\" component=\"pre\" className={classes.pre}>\r\n                  {this.displayData(error.message)}\r\n                  {this.displayData(error.stack)}\r\n                </Typography>\r\n              </Grid>\r\n\r\n              {/* INFO */}\r\n\r\n              <Grid item xs={12} sm={6}>\r\n                <Typography variant=\"body2\" component=\"pre\" className={classes.pre}>\r\n                  {this.displayData(info.componentStack)}\r\n                </Typography>\r\n              </Grid>\r\n            </Grid>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ErrorOccurredView)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\nimport Logger from 'pmt-utils/logger'\r\nimport { CHUNK_ERROR_RELOAD_KEY, isChunkLoadError, handleChunkError } from 'pmt-utils/errorHandlers'\r\nimport { removeFromSession } from 'pmt-modules/storage'\r\n\r\nimport ErrorOccurredView from './components/ErrorOccurredView'\r\n\r\n/**\r\n * catch JavaScript errors anywhere in their child component tree, log those errors, and display a\r\n * fallback UI instead of the component tree that crashed. Error boundaries catch errors during\r\n * rendering, in lifecycle methods, and in constructors of the whole tree below them.\r\n *\r\n *\r\n * See https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html\r\n *\r\n */\r\nclass ErrorBoundary extends React.Component {\r\n  state = {\r\n    hasError: false,\r\n    error: null,\r\n    info: null,\r\n  }\r\n\r\n  componentDidCatch(error, info) {\r\n    // When a chunk load error is detected (e.g. after a new deployment invalidated old\r\n    // hashed chunks), automatically reload the page once to fetch the latest assets.\r\n    // The sessionStorage flag prevents an infinite reload loop if the error persists.\r\n    if (isChunkLoadError(error)) {\r\n      if (handleChunkError(error, 'ErrorBoundary')) {\r\n        return // reload triggered — skip setState to avoid a flash of the error UI\r\n      }\r\n      // Second failure after reload: clear the flag and fall through to show the error UI\r\n      removeFromSession(CHUNK_ERROR_RELOAD_KEY)\r\n    }\r\n\r\n    // Display fallback UI\r\n    this.setState({\r\n      hasError: true,\r\n      error,\r\n      info,\r\n    })\r\n\r\n    console.error(error)\r\n\r\n    // You can also log the error to an error reporting service\r\n    Logger.componentDidCatch(error, info)\r\n  }\r\n\r\n  render() {\r\n    if (this.state.hasError) {\r\n      // You can render any custom fallback UI\r\n      const errorView = this.props.errorView\r\n      if (errorView) {\r\n        return isFunction(errorView) ? errorView() : errorView\r\n      }\r\n\r\n      return (\r\n        <ErrorOccurredView\r\n          error={this.state.error}\r\n          info={this.state.info}\r\n          sentryId={Logger.lastEventId()}\r\n        />\r\n      )\r\n    }\r\n\r\n    return this.props.children\r\n  }\r\n}\r\n\r\nErrorBoundary.defaultProps = {\r\n  errorView: null,\r\n}\r\n\r\nErrorBoundary.propTypes = {\r\n  /**\r\n   * View to display when there is an error.\r\n   * By default we display the ErrorOccurredView that details the error.\r\n   */\r\n  errorView: PropTypes.node,\r\n}\r\n\r\nexport default ErrorBoundary\r\n","import React from 'react'\r\n\r\nconst Layout = ({ children }) => <div className=\"u-sizeFullHeight u-relative\">{children}</div>\r\n\r\nexport default Layout\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport PropTypes from 'prop-types'\r\nimport { withTheme } from 'pmt-ui/styles'\r\n\r\nfunction ThemeDefault(props) {\r\n  const {\r\n    theme: { id, ...theme },\r\n  } = props\r\n\r\n  return (\r\n    <pre>\r\n      {tr('registration.form.register.accept_cgu', {\r\n        context: `testContext`,\r\n        desc: 'test',\r\n        fr: \"J'accepte les CGU\",\r\n      })}\r\n      {JSON.stringify(theme, null, 2)}\r\n    </pre>\r\n  )\r\n}\r\n\r\nThemeDefault.propTypes = {\r\n  theme: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default withTheme(ThemeDefault)\r\n","\r\nexport const CardBasicActionType = {\r\n  /**\r\n   * Display an edit button\r\n   */\r\n  EDIT: 'edit',\r\n}\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet EditorModeEdit = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\"/>\r\n  </SvgIcon>\r\n)\r\nEditorModeEdit = pure(EditorModeEdit)\r\nEditorModeEdit.displayName = 'EditorModeEdit'\r\nEditorModeEdit.muiName = 'SvgIcon'\r\n\r\nexport default EditorModeEdit\r\n","import React from 'react'\r\nimport invariant from 'invariant'\r\n\r\nimport isArray from 'lodash/isArray'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { CardBasicActionType } from '../constants'\r\n\r\nimport IconButton from 'pmt-ui/IconButton'\r\nimport EditorModeEditIcon from 'pmt-ui/svg-icons/editor/mode-edit'\r\n\r\n\r\nconst getCardBasicActionType = (action) => {\r\n  switch (action.type) {\r\n    case CardBasicActionType.EDIT:\r\n      return (\r\n        <IconButton\r\n          aria-label=\"edit\"\r\n          onClick={action.onClick}\r\n          {...action.props}\r\n        >\r\n          <EditorModeEditIcon\r\n          />\r\n        </IconButton>\r\n      )\r\n\r\n    default:\r\n      invariant(false, `invalid CardBasicActionType ${action.type}`)\r\n  }\r\n}\r\n\r\nconst Actions = ({ actions }) => {\r\n  if (actions === null || isEmpty(actions)) {\r\n    return null\r\n  }\r\n\r\n  actions = !isArray(actions) ? [ actions ] : actions\r\n\r\n  return (\r\n    <div>\r\n      {actions.map((action, index) => (\r\n        <div\r\n          key={index}\r\n        >\r\n          {action.component ? action.component : (\r\n            getCardBasicActionType(action)\r\n          )}\r\n        </div>\r\n      ))}\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default Actions\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Card from '@material-ui/core/Card'\r\nimport CardHeader from '@material-ui/core/CardHeader'\r\nimport CardContent from '@material-ui/core/CardContent'\r\n\r\nimport Actions from './components/Actions'\r\n\r\nimport { CardBasicActionType } from './constants'\r\n\r\nconst styles = theme => ({\r\n  title: {\r\n    textAlign: 'left',\r\n  },\r\n  content: {\r\n    padding: `${theme.spacing(2)}px !important`,\r\n  },\r\n})\r\n\r\n/**\r\n * class CardBasic - Render the basic card\r\n * @params color {string} - define color of card\r\n * @params header {object} - contains header properties : {\r\n *   @property avatar {Component} - icon component\r\n *   @property title {string} - title value\r\n * }\r\n * @params content {DOM} - content value\r\n * @params className {string} - the external class given to the BasicCard component\r\n */\r\n\r\nclass CardBasic extends React.Component {\r\n  render() {\r\n    const { color, header, content, actions, className, classes } = this.props\r\n\r\n    return (\r\n      <Card className={className}>\r\n        <CardHeader\r\n          style={{\r\n            borderBottom: `4px solid ${color}`,\r\n          }}\r\n          avatar={header.avatar}\r\n          title={\r\n            <Typography variant=\"h5\" className={`${classes.title}`}>\r\n              {header.title}\r\n            </Typography>\r\n          }\r\n        />\r\n        <CardContent className={classes.content}>{content}</CardContent>\r\n\r\n        <Actions actions={actions} />\r\n      </Card>\r\n    )\r\n  }\r\n}\r\n\r\nCardBasic.ActionType = CardBasicActionType\r\n\r\nCardBasic.defaultProps = {\r\n  actions: null,\r\n}\r\n\r\nCardBasic.propTypes = {\r\n  /**\r\n   * Header bottom border color\r\n   */\r\n  color: PropTypes.any.isRequired,\r\n\r\n  /**\r\n   * - avatar -> icon (TODO: rename?)\r\n   * - title\r\n   */\r\n  header: PropTypes.object.isRequired,\r\n\r\n  /**\r\n   * Define the action(s) to put on the header.\r\n   * Can be directly an object, in case of single action, or an array\r\n   *\r\n   * Either:\r\n   * - type (cf CardBasic.ActionType)\r\n   * - onClick\r\n   * - props: props to pass to the component\r\n   *\r\n   * OR\r\n   * - component\r\n   *\r\n   */\r\n  actions: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\r\n\r\n  className: PropTypes.string,\r\n\r\n  content: PropTypes.any.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(CardBasic)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Card from '@material-ui/core/Card'\r\nimport CardContent from '@material-ui/core/CardContent'\r\nimport CardHeader from '@material-ui/core/CardHeader'\r\n\r\nconst styles = theme => ({\r\n  content: {\r\n    padding: `${theme.spacing(2)}px !important`,\r\n  },\r\n})\r\n\r\n/**\r\n * class CardPostIt - Render the basic card\r\n * @params color {string} - define color of card\r\n * @params header {object} - contains header properties : {\r\n *   @property avatar {Component} - icon component\r\n *   @property title {string} - title value\r\n * }\r\n * @params content {DOM} - content value\r\n * @params cardClass {string} - the external class given to the BasicCard component\r\n */\r\n\r\nclass CardPostIt extends React.Component {\r\n  render() {\r\n    const { color, header, content, className, classes } = this.props\r\n\r\n    return (\r\n      <Card\r\n        style={{\r\n          color: color.font,\r\n          background: color.background,\r\n          borderLeft: `4px solid ${color.border}`,\r\n        }}\r\n        className={className}\r\n      >\r\n        <CardHeader\r\n          style={{\r\n            borderBottom: `1px solid ${color.border}`,\r\n          }}\r\n          avatar={header.avatar}\r\n          title={\r\n            <Typography\r\n              variant=\"h6\"\r\n              style={{\r\n                textAlign: 'left',\r\n                color: color.font,\r\n              }}\r\n            >\r\n              {header.title}\r\n            </Typography>\r\n          }\r\n        />\r\n        <CardContent className={classes.content}>{content}</CardContent>\r\n      </Card>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(CardPostIt)\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Card from '@material-ui/core/Card'\r\nimport CardContent from '@material-ui/core/CardContent'\r\n\r\nconst styles = theme => ({\r\n  '@keyframes cardSlideIn': {\r\n    '0%': { opacity: 0, transform: 'translateY(12px)' },\r\n    '100%': { opacity: 1, transform: 'translateY(0)' },\r\n  },\r\n  root: {\r\n    animation: '$cardSlideIn 0.4s ease-out both',\r\n    overflow: 'visible',\r\n  },\r\n  content: {\r\n    padding: theme.pmt.modern.spacing.card,\r\n    '&:last-child': {\r\n      paddingBottom: theme.pmt.modern.spacing.card,\r\n    },\r\n  },\r\n})\r\n\r\n/**\r\n * CardSection - A semantically wrapped card section for content grouping.\r\n * Renders as <section> for accessibility, with ARIA label support.\r\n * Animates in with a subtle slide-up on mount.\r\n *\r\n * @param {React.ReactNode} children - Card content\r\n * @param {object} classes - JSS classes (injected by withStyles)\r\n * @param {string} className - Additional className\r\n * @param {string} ariaLabel - Accessible label for the section\r\n * @param {number} animationDelay - Animation delay in seconds (stagger cards)\r\n */\r\nconst CardSection = ({\r\n  children,\r\n  classes,\r\n  className,\r\n  ariaLabel,\r\n  animationDelay = 0,\r\n}) => (\r\n  <section aria-label={ariaLabel}>\r\n    <Card\r\n      className={classNames(classes.root, className)}\r\n      style={animationDelay ? { animationDelay: `${animationDelay}s` } : undefined}\r\n    >\r\n      <CardContent className={classes.content}>\r\n        {children}\r\n      </CardContent>\r\n    </Card>\r\n  </section>\r\n)\r\n\r\nexport default withStyles(styles)(CardSection)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet SocialPerson = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/>\r\n  </SvgIcon>\r\n);\r\nSocialPerson = pure(SocialPerson);\r\nSocialPerson.displayName = 'SocialPerson';\r\nSocialPerson.muiName = 'SvgIcon';\r\n\r\nexport default SocialPerson;\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\n\r\nimport { withStyles } from '../../styles'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nconst styles = theme => ({\r\n  st0: {\r\n    fill: '#96C522',\r\n  },\r\n  st1: {\r\n    fill: '#CACACA',\r\n  },\r\n  st2: {\r\n    fill: '#C9C9C9',\r\n    fillRule: 'evenodd',\r\n    clipRule: 'evenodd',\r\n  },\r\n  st3: {\r\n    fill: '#95C422',\r\n    fillRule: 'evenodd',\r\n    clipRule: 'evenodd',\r\n  },\r\n  st4: {\r\n    fill: '#CACACA',\r\n    fillRule: 'evenodd',\r\n    clipRule: 'evenodd',\r\n  }\r\n})\r\n\r\nlet LogoGrey = (props) => {\r\n  const { classes, ...otherProps } = props\r\n  return (\r\n    <SvgIcon {...otherProps}>\r\n      <g>\r\n        <path className={classes.st0} d=\"M62.2,21.6c1.1-0.4,2-0.8,2.8-1.4c0.8-0.5,1.5-1.2,2.1-1.9c0.5-0.8,0.8-1.6,0.8-2.6c0-0.7-0.2-1.3-0.5-1.9\r\n          c-0.3-0.6-0.7-1-1.2-1.5c-0.5-0.4-1.1-0.8-1.8-1.1c-0.7-0.3-1.3-0.6-2-0.8c-0.7-0.2-1.4-0.4-2.1-0.5c-0.7-0.1-1.3-0.3-1.8-0.3\r\n          c-0.6-0.1-1.3-0.2-2-0.2c-0.7-0.1-1.4-0.1-2-0.1c-1.1,0-2.1,0.1-3.2,0.2C50.1,9.6,49,9.8,48,10.1c-1.1,0.3-2.1,0.6-3.1,1\r\n          c-1,0.4-1.9,0.9-2.7,1.5c-0.1,0-0.2,0.1-0.3,0.2c-0.2,0.1-0.3,0.3-0.5,0.4c-0.2,0.2-0.3,0.3-0.5,0.5c-0.1,0.2-0.2,0.3-0.2,0.5\r\n          c0,0.2,0.2,0.4,0.7,0.4c0.2,0,0.3,0,0.6-0.1c0.2,0,0.5-0.1,0.9-0.3c0.4-0.1,0.9-0.3,1.5-0.5c0.6-0.2,1.5-0.5,2.5-0.9\r\n          c1.3-0.3,2.5-0.6,3.8-0.8c1.3-0.2,2.6-0.3,3.9-0.3c0.6,0,1.3,0,2.1,0.1c0.8,0.1,1.6,0.1,2.4,0.3c0.8,0.1,1.6,0.3,2.4,0.5\r\n          c0.8,0.2,1.5,0.5,2.1,0.8c0.6,0.3,1.1,0.7,1.5,1.1c0.4,0.4,0.6,0.9,0.6,1.4c0,0.7-0.2,1.3-0.7,1.8c-0.5,0.5-1.1,1-1.8,1.4\r\n          c-0.7,0.4-1.5,0.8-2.5,1.1c-0.9,0.3-1.8,0.6-2.7,0.8c-0.9,0.2-1.7,0.4-2.5,0.5c-0.8,0.1-1.4,0.2-1.8,0.3c0-0.3,0.1-0.6,0.2-1\r\n          c0.1-0.4,0.2-0.9,0.2-1.3c0.1-0.5,0.1-0.9,0.1-1.4c0-0.5,0-0.9-0.1-1.3c-0.1-0.4-0.3-0.7-0.5-0.9c-0.2-0.2-0.6-0.4-1-0.4\r\n          c-0.2,0-0.4,0.1-0.5,0.4c-0.1,0.3-0.2,0.7-0.3,1.1c-0.1,0.4-0.1,0.9-0.2,1.5c-0.1,0.5-0.1,1-0.1,1.5c0,0.5-0.1,1-0.1,1.4\r\n          c0,0.4-0.1,0.7-0.1,0.8c-0.8,0.1-1.6,0.2-2.4,0.3c-0.8,0.1-1.6,0.2-2.3,0.2c-0.3,0-0.7,0.1-1.3,0.2c-0.6,0.1-1.2,0.1-1.9,0.2\r\n          c-0.6,0.1-1.2,0.2-1.7,0.4c-0.5,0.1-0.7,0.3-0.7,0.5c0,0.2,0.1,0.3,0.4,0.4c0.3,0.1,0.6,0.1,0.9,0.2c0.4,0,0.8,0,1.2,0\r\n          c0.4,0,0.8,0,1.2-0.1c0.4,0,0.7-0.1,0.9-0.1c0.3,0,0.4,0,0.4,0c0.8-0.1,1.7-0.2,2.5-0.2c0.9-0.1,1.7-0.2,2.6-0.3\r\n          c0,1.5,0,4.4,0.1,5.5c0.1,1,0.2,1.9,0.5,2.6c0.1,0.3,0.2,0.5,0.4,0.5c0.3,0,0.5-0.3,0.7-0.8c0.2-0.5,0.3-1.2,0.5-1.9\r\n          c0.1-0.8,0.2-3.2,0.3-4c0.1-0.8,0.1-1.6,0.1-2.2c0.6-0.1,1.4-0.2,2.4-0.3c1-0.2,2-0.4,3-0.6C60.1,22.3,61.1,22,62.2,21.6z\"/>\r\n        <path className={classes.st0} d=\"M73.2,23.8c-0.2-0.1-0.5-0.2-0.8-0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.4,0.6c0,0.2,0,0.4,0,0.6\r\n          c0,0.1,0,0.2-0.1,0.4c-0.1,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.2,0.8-0.3,1.2c-0.1,0.4-0.2,0.8-0.3,1.1c-0.1,0.3-0.2,0.6-0.3,0.8\r\n          c-0.1,0.2-0.2,0.3-0.3,0.2c-0.1,0-0.2-0.3-0.2-0.7c0-0.5,0-1,0.1-1.7c0.1-0.7,0.1-1.3,0.2-2.1c0.1-0.7,0.1-1.4,0.1-2.1\r\n          c0-0.2-0.1-0.4-0.3-0.5c-0.3-0.1-0.5-0.2-0.8-0.1c-0.3,0-0.6,0.1-0.8,0.3c-0.3,0.2-0.4,0.4-0.4,0.8c0,0.6,0,1.1,0,1.8\r\n          c0,0.3,0,0.5,0,0.8c0,0,0,0,0,0c0,0.2-0.1,0.5-0.3,1c-0.1,0.4-0.3,0.8-0.5,1.3c-0.2,0.4-0.3,0.8-0.5,1.1c-0.2,0.3-0.3,0.5-0.4,0.5\r\n          c-0.2,0-0.3-0.2-0.3-0.5c-0.1-0.4-0.1-0.8,0-1.3c0-0.5,0.1-1,0.1-1.6c0.1-0.5,0.1-1,0.2-1.4c0-0.3,0-0.5-0.2-0.7\r\n          c-0.1-0.2-0.3-0.3-0.5-0.4c-0.2-0.1-0.5-0.1-0.7-0.1c-0.2,0-0.4,0.1-0.6,0.3c-0.1-0.2-0.3-0.5-0.5-0.7c-0.2-0.2-0.5-0.3-0.7-0.4\r\n          c-0.7-0.1-1.4,0-1.9,0.3c-0.5,0.4-0.9,0.9-1.2,1.5c-0.3,0.6-0.5,1.4-0.6,2.2c-0.1,0.8-0.1,1.6,0,2.3c0.1,0.7,0.4,1.4,0.7,2\r\n          c0.3,0.6,0.8,0.9,1.4,1.1c0.3,0.1,0.7,0.1,1.1-0.1c0.4-0.2,0.8-0.5,1.1-0.9c0.3-0.4,0.5-0.8,0.7-1.3c0.3,0.5,0.7,0.9,1.3,1.1\r\n          c0.4,0.1,0.7,0.1,1-0.1c0.3-0.2,0.6-0.4,0.8-0.8c0.3-0.3,0.5-0.7,0.7-1.1c0,0,0,0,0,0c0,0.2,0,0.5,0.1,0.6c0.1,0.3,0.2,0.6,0.4,0.8\r\n          c0.2,0.2,0.4,0.4,0.7,0.5c0.3,0.1,0.5,0.2,0.8,0.1c0.3,0,0.5-0.1,0.7-0.3c0.4-0.4,0.6-0.8,0.8-1.4c0,0.7-0.1,1.4-0.1,2.1\r\n          c0,0.7-0.1,1.3-0.1,1.9c0,0.6-0.1,1.1-0.1,1.6c0,0.5-0.1,0.9-0.1,1.1c0,0.3,0.1,0.5,0.3,0.6c0.2,0,0.5,0,0.8-0.2\r\n          c0.3-0.2,0.6-0.4,0.9-0.7c0.3-0.3,0.4-0.7,0.4-1.1c0-0.2,0-0.5,0-1c0-0.5,0-1.1,0-1.7c0-0.7,0-1.4,0-2.2c0-0.8,0-1.5,0.1-2.3\r\n          c0-0.8,0.1-1.5,0.1-2.1c0-0.7,0.1-1.2,0.2-1.6C73.5,24.1,73.4,23.9,73.2,23.8z M63.3,28.2c-0.1,0.6-0.2,1.2-0.4,1.7\r\n          c-0.2,0.5-0.4,0.9-0.6,1.2c-0.2,0.3-0.5,0.5-0.7,0.4c-0.3,0-0.5-0.2-0.6-0.6c-0.1-0.4-0.2-0.8-0.2-1.3c0-0.5,0-1.1,0.1-1.6\r\n          c0.1-0.6,0.2-1.1,0.3-1.6c0.2-0.5,0.4-0.9,0.6-1.2c0.2-0.3,0.5-0.4,0.9-0.3c0.2,0,0.4,0.2,0.5,0.5c0.1,0.3,0.2,0.7,0.2,1\r\n          C63.4,27,63.4,27.6,63.3,28.2z\"/>\r\n      </g>\r\n      <g>\r\n        <path className={classes.st1} d=\"M101.9,11.3c-0.5,0-1.1,0.2-1.7,0.6c-0.6,0.4-1.2,0.9-1.7,1.5c-0.6,0.6-1.1,1.3-1.7,2.1\r\n          c-0.6,0.8-1.1,1.5-1.5,2.3c-0.5,0.8-0.9,1.5-1.3,2.2c-0.4,0.7-0.7,1.2-0.9,1.7c-0.5,0.9-1,1.9-1.6,3c-0.6,1.1-1.1,2-1.6,2.9\r\n          c-0.5,0.9-1.1,1.6-1.5,2.2c-0.5,0.6-0.9,0.9-1.3,0.9c-0.4,0-0.7-0.2-1.1-0.5c-0.3-0.3-0.7-0.7-1-1.1c-0.3-0.4-0.6-0.9-0.9-1.4\r\n          c-0.3-0.5-0.5-0.9-0.7-1.3v0c-0.7-1.3-1.4-2.6-2-3.7c-0.6-1.1-1.2-2.2-1.7-3.1c-0.6-0.9-1.2-1.8-1.8-2.5c-0.6-0.7-1.3-1.4-2.2-1.9\r\n          c0,0-0.1,0-0.2-0.1c-0.1,0-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.2,0c-0.1,0-0.1,0.1-0.1,0.1c0,0.1,0.2,0.4,0.5,0.9\r\n          c0.3,0.4,0.7,0.9,1.1,1.5c0.4,0.6,0.9,1.2,1.3,1.8c0.4,0.6,0.7,1.3,0.9,1.8c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.1,0,0.3,0,0.4\r\n          c-0.1,0.7-0.1,1.4-0.3,2.1c-0.1,0.7-0.2,1.5-0.4,2.2c-0.1,0.7-0.3,1.4-0.5,2.1c-0.2,0.7-0.4,1.3-0.6,1.9c-0.1,0.3-0.2,0.7-0.3,1\r\n          c-0.1,0.3-0.2,0.7-0.2,1.1c0,0.1,0.1,0.3,0.2,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.4,0.1c0.2,0,0.3,0,0.4,0\r\n          c0.7,0,1.2-0.3,1.5-0.9c0.5-0.8,0.8-1.7,0.9-2.6c0.1-0.9,0.2-1.8,0.2-2.8c0-0.3,0-0.7,0-1.1c0-0.4,0-1,0.1-1.8\r\n          c0.5,1.1,1,2.1,1.7,3.2c0.6,1.1,1.3,2.1,2,3.1c0.2,0.3,0.4,0.6,0.7,0.9c0.2,0.3,0.5,0.6,0.8,0.8c0.3,0.2,0.6,0.4,0.9,0.6\r\n          c0.3,0.2,0.7,0.2,1.1,0.2c0.7,0,1.4-0.3,2.1-0.9c0.7-0.6,1.4-1.3,2-2.2c0.6-0.9,1.3-1.9,1.9-3c0.6-1.1,1.2-2.2,1.7-3.3\r\n          c0.6-1.1,1.1-2.1,1.5-3c0.5-0.9,0.9-1.7,1.3-2.2c0,1-0.1,2-0.2,3.1c-0.1,1.1-0.2,2.1-0.2,3.1c0,0.4,0,0.9,0,1.5\r\n          c0,0.6,0.1,1.3,0.1,1.9c0.1,0.7,0.1,1.4,0.2,2c0.1,0.7,0.2,1.3,0.4,1.8c0.1,0.5,0.3,1,0.5,1.3c0.2,0.3,0.4,0.5,0.7,0.5\r\n          c0.2,0,0.4-0.1,0.6-0.2c0.2-0.1,0.3-0.3,0.5-0.5c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.3,0.1-0.5,0.1-0.8c0-0.5-0.1-1-0.2-1.5\r\n          c-0.1-0.6-0.2-1.1-0.3-1.6c-0.2-0.6-0.3-1.4-0.4-2.3c-0.1-0.9-0.2-1.9-0.3-2.9c-0.1-1.1-0.2-2.1-0.2-3.3c-0.1-1.1-0.1-2.3-0.2-3.4\r\n          c0.7-0.9,1.2-1.6,1.5-2.1c0.3-0.5,0.6-1,0.9-1.5c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.2,0.2-0.5,0.2-0.7c0-0.1,0-0.2-0.1-0.3\r\n          C102.1,11.4,102,11.3,101.9,11.3z\"/>\r\n        <path className={classes.st1} d=\"M108.1,23.8c-0.2-0.1-0.5-0.2-0.8-0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.2,0.1-0.4,0.3-0.4,0.6c0,0.2,0,0.4,0,0.6\r\n          c0,0.1,0,0.2-0.1,0.4c-0.1,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.2,0.8-0.3,1.2c-0.1,0.4-0.2,0.8-0.3,1.1c-0.1,0.3-0.2,0.6-0.3,0.8\r\n          c-0.1,0.2-0.2,0.3-0.3,0.2c-0.1,0-0.2-0.3-0.2-0.7c0-0.5,0-1,0.1-1.7c0.1-0.7,0.1-1.3,0.2-2.1c0.1-0.7,0.1-1.4,0.2-2.1\r\n          c0-0.2-0.1-0.4-0.3-0.5c-0.3-0.1-0.5-0.2-0.8-0.1c-0.3,0-0.6,0.1-0.8,0.3c-0.3,0.2-0.4,0.4-0.4,0.8c0,0.6,0,1.1,0,1.8\r\n          c0,0.6,0,1.2,0,1.8c0,0.6,0,1.1,0,1.6c0,0.5,0.1,0.9,0.1,1.2c0.1,0.3,0.2,0.6,0.4,0.8c0.2,0.2,0.4,0.4,0.7,0.5\r\n          c0.3,0.1,0.5,0.2,0.8,0.1c0.3,0,0.5-0.1,0.7-0.3c0.4-0.4,0.6-0.8,0.8-1.4c0,0.7-0.1,1.4-0.1,2.1c0,0.7-0.1,1.3-0.1,1.9\r\n          c0,0.6-0.1,1.1-0.1,1.6c0,0.5-0.1,0.9-0.1,1.1c0,0.3,0.1,0.5,0.3,0.6c0.3,0,0.5,0,0.8-0.2c0.3-0.2,0.6-0.4,0.9-0.7\r\n          c0.3-0.3,0.4-0.7,0.4-1.1c0-0.2,0-0.5,0-1c0-0.5,0-1.1,0-1.7c0-0.7,0-1.4,0-2.2c0-0.8,0-1.5,0.1-2.3c0-0.8,0.1-1.5,0.1-2.1\r\n          c0-0.7,0.1-1.2,0.1-1.6C108.4,24.1,108.3,23.9,108.1,23.8z\"/>\r\n      </g>\r\n      <g>\r\n        <path className={classes.st0} d=\"M116.6,24.9c0-0.5,0-1.2,0-2c0-0.8,0-1.7-0.1-2.5c0-0.9-0.1-1.8-0.1-2.6c-0.1-0.9-0.1-1.6-0.2-2.2l6.7-0.2\r\n          c0.4,0,0.9,0,1.5,0c0.6,0,1.1,0,1.7-0.1c0.5,0,1-0.1,1.4-0.3c0.4-0.1,0.6-0.3,0.6-0.6c0-0.3-0.1-0.6-0.3-0.8\r\n          c-0.2-0.2-0.5-0.4-0.8-0.6c-0.3-0.2-0.6-0.3-0.9-0.3c-0.3-0.1-0.6-0.1-0.9-0.1c-1.5-0.1-2.9-0.1-4.4,0c-1.4,0.1-2.9,0.2-4.3,0.4\r\n          c-1.4,0.2-2.9,0.3-4.3,0.5c-1.4,0.2-2.8,0.4-4.2,0.5c-0.4,0.1-0.8,0.1-1.3,0.1c-0.5,0-1,0-1.5,0.1c-0.5,0.1-0.9,0.2-1.2,0.3\r\n          c-0.3,0.2-0.5,0.4-0.5,0.7c0,0.2,0.1,0.3,0.4,0.5c0.3,0.2,0.6,0.3,1.1,0.3c1.7,0,3.3,0,4.9-0.1c1.6-0.1,3.2-0.2,4.8-0.2\r\n          c-0.1,0.3-0.2,0.6-0.2,1c-0.1,0.4-0.1,0.9-0.2,1.6c-0.1,0.7-0.1,1.5-0.1,2.5c0,1-0.1,2.3-0.1,3.9c0,0.5,0,1-0.1,1.7\r\n          c-0.1,0.7-0.1,1.3-0.1,2c0,0.7,0,1.3,0,1.9c0,0.6,0.2,1.1,0.3,1.4c0.1,0.1,0.1,0.2,0.3,0.3c0.1,0.1,0.2,0.2,0.4,0.4\r\n          c0.1,0.1,0.3,0.2,0.4,0.3c0.2,0.1,0.3,0.1,0.4,0.1c0.2,0,0.3-0.2,0.4-0.5c0.1-0.3,0.2-0.8,0.3-1.3c0.1-0.5,0.1-1.1,0.2-1.7\r\n          c0-0.6,0.1-1.2,0.1-1.8c0-0.6,0-1.1,0-1.5C116.6,25.4,116.6,25.1,116.6,24.9z\"/>\r\n        <path className={classes.st0} d=\"M134.5,24.2c-0.4-0.4-0.8-0.6-1.4-0.6c-0.3,0-0.6,0.1-0.9,0.2c-0.2,0.1-0.5,0.3-0.6,0.5c0.1-0.7,0.1-1.4,0.2-2\r\n          c0.1-0.7,0.1-1.2,0.2-1.8c0-0.5,0.1-1,0.1-1.3c0-0.4,0.1-0.6,0.1-0.7c0.1-0.3,0-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.8-0.3\r\n          c-0.3,0-0.6,0.1-0.8,0.3c-0.3,0.2-0.4,0.5-0.4,1c0,0.2,0,0.6,0,1.2c0,0.6-0.1,1.3-0.1,2.1c0,0.8-0.1,1.7-0.2,2.6\r\n          c0,0.7-0.1,1.3-0.1,1.9c0,0.2-0.1,0.5-0.2,0.8c-0.1,0.4-0.3,0.8-0.5,1.3c-0.2,0.4-0.3,0.8-0.5,1.1c-0.2,0.3-0.3,0.5-0.4,0.5\r\n          c-0.2,0-0.3-0.2-0.3-0.5c-0.1-0.4-0.1-0.8,0-1.3c0-0.5,0.1-1,0.1-1.6c0.1-0.5,0.1-1,0.2-1.4c0-0.3,0-0.5-0.2-0.7\r\n          c-0.1-0.2-0.3-0.3-0.5-0.4c-0.2-0.1-0.5-0.1-0.7-0.1c-0.2,0-0.4,0.1-0.6,0.3c-0.1-0.2-0.3-0.5-0.5-0.7c-0.2-0.2-0.5-0.3-0.7-0.4\r\n          c-0.7-0.1-1.4,0-1.9,0.3c-0.5,0.4-0.9,0.9-1.2,1.5c-0.3,0.6-0.5,1.4-0.6,2.2c-0.1,0.8-0.1,1.6,0,2.3c0.1,0.7,0.4,1.4,0.7,2\r\n          c0.3,0.6,0.8,0.9,1.4,1.1c0.3,0.1,0.7,0.1,1.1-0.1c0.4-0.2,0.8-0.5,1.1-0.9c0.3-0.4,0.5-0.8,0.7-1.3c0.3,0.5,0.7,0.9,1.3,1.1\r\n          c0.4,0.1,0.7,0.1,1-0.1c0.3-0.2,0.6-0.4,0.8-0.8c0.1-0.1,0.2-0.3,0.3-0.5c0,0.6-0.1,1.2-0.1,1.6c0,0.3,0.1,0.5,0.3,0.6\r\n          c0.2,0.1,0.5,0.2,0.7,0.2c0.3,0,0.5-0.1,0.8-0.2c0.2-0.2,0.4-0.4,0.4-0.6v-0.9c0.3,0.4,0.7,0.5,1.3,0.5c0.6,0,1.1-0.2,1.6-0.6\r\n          c0.4-0.4,0.8-0.9,1-1.4c0.2-0.6,0.4-1.2,0.4-1.9c0.1-0.7,0-1.3-0.2-1.9C135.1,25.1,134.9,24.6,134.5,24.2z M125.3,28.2\r\n          c-0.1,0.6-0.2,1.2-0.4,1.7c-0.2,0.5-0.4,0.9-0.6,1.2c-0.2,0.3-0.5,0.5-0.7,0.4c-0.3,0-0.5-0.2-0.6-0.6c-0.1-0.4-0.2-0.8-0.2-1.3\r\n          c0-0.5,0-1.1,0.1-1.6c0.1-0.6,0.2-1.1,0.3-1.6c0.2-0.5,0.4-0.9,0.6-1.2c0.3-0.3,0.5-0.4,0.9-0.3c0.2,0,0.4,0.2,0.5,0.5\r\n          c0.1,0.3,0.2,0.7,0.2,1C125.4,27,125.4,27.6,125.3,28.2z M133.4,26.3c0,0.4,0,0.8-0.1,1.3c-0.1,0.5-0.1,0.9-0.3,1.3\r\n          c-0.1,0.4-0.2,0.7-0.4,0.9c-0.2,0.2-0.3,0.3-0.5,0.3c-0.3,0-0.5-0.2-0.6-0.5c-0.1-0.3-0.2-0.6-0.3-1c0-0.1,0-0.3,0-0.4\r\n          c0-0.1,0-0.3,0-0.4c0-0.3,0.1-0.7,0.2-1.1c0.1-0.4,0.2-0.7,0.4-1.1c0.1-0.3,0.3-0.6,0.5-0.7c0.2-0.2,0.4-0.2,0.6-0.2\r\n          c0.1,0,0.2,0.2,0.3,0.5C133.4,25.6,133.5,25.9,133.4,26.3z\"/>\r\n        <path className={classes.st0} d=\"M148.9,26.1c-0.1-0.1-0.2-0.2-0.3-0.2c-0.1,0-0.2,0-0.4,0.1c-0.1,0.1-0.2,0.2-0.3,0.4c0,0.1-0.1,0.4-0.3,0.7\r\n          c-0.1,0.3-0.3,0.7-0.5,1c-0.2,0.4-0.4,0.8-0.7,1.2c-0.3,0.4-0.5,0.8-0.8,1.1c-0.3,0.3-0.6,0.5-0.9,0.7c-0.3,0.2-0.6,0.2-0.8,0.1\r\n          c-0.2-0.1-0.4-0.2-0.5-0.4c-0.1-0.2-0.2-0.5-0.2-0.8c-0.1-0.3-0.1-0.7-0.1-1.1c0-0.4,0-0.8,0.1-1.2c0.2,0,0.5-0.1,0.8-0.1\r\n          c0.3,0,0.6-0.1,0.9-0.2c0.3-0.1,0.5-0.2,0.8-0.3c0.2-0.1,0.4-0.3,0.6-0.5c0.2-0.3,0.3-0.6,0.3-1.1c0-0.5-0.1-0.9-0.3-1.4\r\n          c-0.2-0.4-0.5-0.8-0.9-1.2c-0.4-0.3-0.8-0.5-1.3-0.5c-0.5,0-1,0.3-1.4,0.8c-0.4,0.5-0.8,1.1-1,1.9c-0.2,0.4-0.3,0.9-0.4,1.4v0\r\n          c-0.1,0.2-0.2,0.5-0.4,1c-0.2,0.5-0.4,1.1-0.6,1.6c-0.2,0.6-0.4,1.1-0.6,1.5c-0.2,0.4-0.4,0.7-0.5,0.7c-0.2,0-0.3-0.3-0.4-0.8\r\n          c-0.1-0.5-0.1-1.2-0.1-2c0-0.8,0-1.7,0.1-2.7c0.1-1,0.1-1.9,0.2-2.8c0.1-0.9,0.2-1.7,0.3-2.4c0.1-0.7,0.2-1.2,0.2-1.4\r\n          c0.1-0.3,0-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.9,0.3c-0.3,0.2-0.4,0.5-0.4,1c0,0.4,0,1.1-0.1,1.9\r\n          c-0.1,0.9-0.2,1.8-0.2,2.8c-0.1,1-0.1,2.1-0.2,3.2c0,1.1,0,2.1,0.1,2.9c0.1,0.9,0.3,1.6,0.6,2.2c0.3,0.6,0.7,0.9,1.2,0.9\r\n          c0.6,0,1.1-0.3,1.5-0.8c0.4-0.5,0.8-1.1,1.1-1.8c0-0.1,0.1-0.2,0.1-0.3c0.1,0.7,0.4,1.2,0.8,1.7c0.4,0.5,1,0.8,1.7,0.8\r\n          c0.6,0,1.1-0.1,1.6-0.4c0.5-0.3,0.9-0.6,1.3-1c0.4-0.4,0.7-0.8,1-1.3c0.3-0.5,0.5-0.9,0.7-1.4c0.2-0.4,0.3-0.8,0.4-1.2\r\n          c0.1-0.3,0.2-0.6,0.2-0.7C149,26.4,149,26.2,148.9,26.1z M144,24.5c0.2-0.5,0.3-0.7,0.5-0.8c0.1,0,0.2,0,0.2,0.2\r\n          c0.1,0.2,0.1,0.4,0.2,0.6c0,0.2,0,0.5,0,0.7c0,0.2-0.1,0.4-0.2,0.5c-0.1,0.2-0.3,0.3-0.5,0.3c-0.2,0.1-0.4,0.1-0.7,0.1\r\n          C143.7,25.5,143.8,24.9,144,24.5z\"/>\r\n        </g>\r\n      <rect x=\"14.2\" y=\"22.1\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.1665 40.3682)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.4\" y=\"22.1\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -3.991 40.5907)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.4\" y=\"22.3\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.2134 40.7662)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.4\" y=\"22.5\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.4359 40.9417)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.4\" y=\"22.3\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.2134 40.7662)\" width=\"18.7\" height=\"1.5\"/>\r\n      <rect x=\"14.2\" y=\"22.1\" transform=\"matrix(0.2326 -0.9726 0.9726 0.2326 -4.1665 40.3682)\" width=\"18.7\" height=\"1.5\"/>\r\n      <path className={classes.st2} d=\"M32.5,28.1c-0.1,0.7,2.1,1.3,2,2.2c-0.1,0.4-4.4,2.2-6,2.7C20,35.3,7.1,31.4,2.5,26.8c0.7-0.8,2-0.9,2.8-1.6\r\n        c-2.3-0.5-3.5,0.5-4.7,1.5c-0.3,1.8-0.5,3.4,0.7,4.1C1.5,30,1.1,28.5,1.8,28c-0.2,3.3,7.7,8.8,8.7,11.2c4.5,0.5,9.8,0.7,14.3,1.2\r\n        c2.8-2.2,10-6,10.6-9.1c0.1,0.9,0.4,1.6,0,2.8C37.8,32.3,36.5,27.8,32.5,28.1z M10.2,37c0.6-0.3,2.8-0.1,3.4,0.4\r\n        C13.2,38.3,10.5,37.6,10.2,37z\"/>\r\n      <path className={classes.st3} d=\"M33.1,15.1l-7.8-1.8c-0.7-0.2-1.4,0.3-1.6,1.1l-3.9,16.9c-0.1,0.5,0,1,0.3,1.3c3.8,0.3,7.5,0,10.6-1.1\r\n        c0,0,0,0,0,0L34,16.7C34.2,16,33.8,15.2,33.1,15.1z M22.1,32.1l-1.5-0.4L25,13.6l1.5,0.4L22.1,32.1z\"/>\r\n      <path className={classes.st4} d=\"M31.5,2C28.8,1.4,29,5.1,31,5.3C32.6,5.4,33.9,2.5,31.5,2z\"/>\r\n      <path className={classes.st2} d=\"M27.6,7.3c-1.2-0.1-1.4,2.2,0,2.2C28.8,9.5,29.3,7.5,27.6,7.3z\"/>\r\n      <path className={classes.st1} d=\"M14.7,19.7c1.8,1.5,0.9,7.3-0.2,11.8c0.9,0.3,1.8,0.5,2.5,0.7c1.1-8.9,3.1-20.2,3.9-28.4\r\n        C17.6,6.8,14.6,13.5,14.7,19.7z\"/>\r\n      <path className={classes.st1} d=\"M10.8,19.3c0.3-1.3,2.1-1.6,2.4-3.3c0.7-3.7-0.9-8.4-1.3-12.1c-0.3,1.8-0.1,4.7,0,7c0,1,0.5,2.2-0.3,2.8\r\n        c-0.9-0.4-0.5-1.8-0.5-2.7c-0.1-1.5-0.3-3.4-0.4-4.9c0-0.8,0.3-1.8-0.4-2.3c-0.1,1.5,0.1,3.2,0.1,4.8c0.1,1.8,0.3,3.8-0.4,5.2\r\n        c-1-1-0.4-3.1-0.5-4.9C9.4,7.6,9.3,5.5,9.2,4C8.5,4.4,8.8,5.5,8.8,6.3c0,2.2,0.2,5.5-0.3,7.4c-1-0.3-0.7-1.8-0.7-2.8\r\n        c0-2.3,0-4.6-0.3-6.8C7.5,7.7,5.8,13.8,7.4,17c0.5,1,1.6,1.2,2.1,2.1c0.1,3.3,0,7-0.1,10.5c0.8,0.3,1.7,0.6,2.7,1\r\n        c-0.5-2.7-0.7-5.7-1-8.7C11,21.1,10.7,20.1,10.8,19.3z\"/>\r\n    </SvgIcon>\r\n  )\r\n}\r\n\r\nLogoGrey = pure(LogoGrey)\r\nLogoGrey.displayName = 'LogoGrey'\r\nLogoGrey.pmtName = 'SvgIcon'\r\n\r\nexport default withStyles(styles)(LogoGrey)\r\n\r\n","import React from 'react'\r\nimport moment from 'moment'\r\n\r\nimport DateField from 'pmt-ui/DateField'\r\n\r\nconst getComponents = () => [\r\n  {\r\n    name: 'DateField INLINE',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n        <DateField\r\n          mode={DateField.Mode.INLINE}\r\n          label=\"Date de naissance\"\r\n          value={formData.birthdate}\r\n          onChange={birthdate => onChange({ ...formData, birthdate })}\r\n          validation={formErrors.birthdate}\r\n          options={{\r\n            defaultDate: moment().subtract(30, 'year').startOf('day'),\r\n            minDate: moment().subtract(100, 'year').startOf('day'),\r\n            maxDate: moment().subtract(12, 'year').startOf('day'),\r\n          }}\r\n        />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <DateField\r\n        mode={DateField.Mode.INLINE}\r\n        label=\"Date de naissance\"\r\n        value={moment()}\r\n        onChange={() => {}}\r\n        options={{\r\n          defaultDate: moment()\r\n            .subtract(30, 'year')\r\n            .startOf('day'),\r\n          minDate: moment()\r\n            .subtract(100, 'year')\r\n            .startOf('day'),\r\n          maxDate: moment()\r\n            .subtract(12, 'year')\r\n            .startOf('day'),\r\n        }}\r\n      />\r\n    ),\r\n  },\r\n  {\r\n    name: 'DateField CALENDAR',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n        <DateField\r\n          mode={DateField.Mode.CALENDAR}\r\n          value={formData.birthdate}\r\n          onChange={birthdate => onChange({ ...formData, birthdate })}\r\n          validation={formErrors.birthdate}\r\n          options={{\r\n            defaultDate: moment().subtract(30, 'year').startOf('day'),\r\n            minDate: moment().subtract(100, 'year').startOf('day'),\r\n            maxDate: moment().subtract(12, 'year').startOf('day'),\r\n          }}\r\n        />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <DateField\r\n        label=\"Calendar\"\r\n        mode={DateField.Mode.CALENDAR}\r\n        value={moment()}\r\n        onChange={() => {}}\r\n        options={{\r\n          defaultDate: moment()\r\n            .subtract(30, 'year')\r\n            .startOf('day'),\r\n          minDate: moment()\r\n            .subtract(100, 'year')\r\n            .startOf('day'),\r\n          maxDate: moment()\r\n            .subtract(12, 'year')\r\n            .startOf('day'),\r\n        }}\r\n      />\r\n    ),\r\n  },\r\n  {\r\n    name: 'Calendar CALENDAR inline',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n          <DateField\r\n            mode={DateField.Mode.CALENDAR}\r\n            label=\"Date de naissance\"\r\n            value={formData.dateRangeTest}\r\n            onChange={dateRangeTest => onChange({ ...formData, dateRangeTest })}\r\n            options={{\r\n              inline: true,\r\n              mode: 'range',\r\n            }}\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <DateField\r\n        mode={DateField.Mode.CALENDAR}\r\n        label=\"Date de naissance\"\r\n        value={moment()}\r\n        onChange={() => {}}\r\n        options={{\r\n          inline: true,\r\n          mode: 'range',\r\n        }}\r\n      />\r\n    ),\r\n  },\r\n]\r\n\r\nexport default {\r\n  title: 'Calendar',\r\n  getComponents: getComponents,\r\n}\r\n","const Allergen = {\r\n  BALSAM_OF_PERU: 'BALSAM_OF_PERU',\r\n  BUCKWHEAT: 'BUCKWHEAT',\r\n  CELERY: 'CELERY',\r\n  CHEESE: 'CHEESE',\r\n  CORN: 'CORN',\r\n  CRUSTACEAN: 'CRUSTACEAN',\r\n  EGG: 'EGG',\r\n  FISH: 'FISH',\r\n  FRUIT: 'FRUIT',\r\n  GARLIC: 'GARLIC',\r\n  LACTOSE: 'LACTOSE',\r\n  LUPINE: 'LUPINE',\r\n  MUSTARD: 'MUSTARD',\r\n  PEANUT: 'PEANUT',\r\n  POULTRY_MEAT: 'POULTRY_MEAT',\r\n  RED_MEAT: 'RED_MEAT',\r\n  RICE: 'RICE',\r\n  SESAME: 'SESAME',\r\n  SHELLFISH: 'SHELLFISH',\r\n  SOYA: 'SOYA',\r\n  SULPHITES: 'SULPHITES',\r\n  TARTRAZINE: 'TARTRAZINE',\r\n\r\n  // Gluten-related\r\n  GLUTEN: 'GLUTEN', // Generic\r\n  GLUTEN_OATS: 'GLUTEN_OATS',\r\n  GLUTEN_WHEAT: 'GLUTEN_WHEAT',\r\n  GLUTEN_KAMUT: 'GLUTEN_KAMUT',\r\n  GLUTEN_SPELT: 'GLUTEN_SPELT',\r\n  GLUTEN_GREEN_SPELT: 'GLUTEN_GREEN_SPELT',\r\n  GLUTEN_EINKORN: 'GLUTEN_EINKORN',\r\n  GLUTEN_RYE: 'GLUTEN_RYE',\r\n  GLUTEN_BARLEY: 'GLUTEN_BARLEY',\r\n  GLUTEN_EMMER: 'GLUTEN_EMMER',\r\n  GLUTEN_TRITICALE: 'GLUTEN_TRITICALE',\r\n\r\n  // Nuts-related\r\n  NUTS: 'NUTS', // Generic\r\n  NUTS_ALMONDS: 'NUTS_ALMONDS',\r\n  NUTS_HAZELNUTS: 'NUTS_HAZELNUTS',\r\n  NUTS_WALNUTS: 'NUTS_WALNUTS',\r\n  NUTS_CASHEW: 'NUTS_CASHEW',\r\n  NUTS_PECANS: 'NUTS_PECANS',\r\n  NUTS_BRAZIL: 'NUTS_BRAZIL',\r\n  NUTS_PISTACHES: 'NUTS_PISTACHES',\r\n  NUTS_MACADAMIA_OR_QUEENSLAND: 'NUTS_MACADAMIA_OR_QUEENSLAND',\r\n}\r\n\r\nexport default Allergen\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { countryCodes, getCountryNameForCode } from 'pmt-utils/country'\r\n\r\nimport ListChooser from 'pmt-ui/ListChooser'\r\n\r\nclass CountryChooser extends React.Component {\r\n  render() {\r\n    const { label, value = 'FR', onChange, error, helperText, ...otherProps } = this.props\r\n\r\n    const options = countryCodes.map(country => ({\r\n      label: country.name,\r\n      value: country.code,\r\n    }))\r\n\r\n    return (\r\n      <ListChooser\r\n        label={label}\r\n        title=\"Choisissez un pays\"\r\n        value={value}\r\n        valueFormatter={value => getCountryNameForCode(value) || ''}\r\n        options={options}\r\n        onChange={this.props.onChange}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nCountryChooser.propTypes = {\r\n  label: PropTypes.string.isRequired,\r\n\r\n  onChange: PropTypes.func.isRequired,\r\n\r\n  value: PropTypes.string,\r\n}\r\n\r\nexport default CountryChooser\r\n","const Diet = {\r\n  /**\r\n   * Default value, the user does not have specific diet preferences.\r\n   */\r\n  NONE: 'NONE',\r\n\r\n  /**\r\n   * Kosher foods are those that conform to the regulations of kashrut (Jewish dietary law).\r\n   * Food that may be consumed according to halakha (Jewish law) is termed kosher in english.\r\n   *\r\n   * The Torah permits only animal species which both chew the cud and have cloven hooves.\r\n   * Four animals are specifically identified as being forbidden for this reason; the hare,\r\n   * hyrax, camel, and pig – although the camel has two toes, and the hare and hyrax are hindgut\r\n   * fermenters rather than ruminants.\r\n   *\r\n   * The Torah lists winged creatures which may not be consumed, mainly birds of prey, fish-eating\r\n   * water-birds, and bats. The Torah permits any fish residing in \"the waters\" (seas and rivers)\r\n   * that has both fins and scales\r\n   *\r\n   * @link https://www.wikiwand.com/en/Kosher_foods\r\n   */\r\n  KOSHER: 'KOSHER',\r\n\r\n  /**\r\n   * is any object or action which is permissible to use or engage in, according to Islamic law.\r\n   * The term covers and designates food and drink as well as matters of daily life.\r\n   * It is one of five Ahkam—fard (compulsory), mustahabb (recommended), halal (allowed),\r\n   * makruh (disliked), haram (forbidden)—that define the morality of human action in Islam.\r\n   * The Dubai Chamber of Commerce estimated the global industry value of halal food consumer\r\n   * purchases to be US$1.1 trillion in 2013, accounting for 16.6 percent of the global food and\r\n   * beverage market, with an annual growth of 6.9 percent.\r\n   *\r\n   * @link https://www.wikiwand.com/en/Halal\r\n   */\r\n  HALAL: 'HALAL',\r\n\r\n  /**\r\n   * The practice of abstaining from the consumption of meat (red meat, poultry, seafood, and the\r\n   * flesh of any other animal), and may also include abstention from by-products of animal\r\n   * slaughter.\r\n   */\r\n  VEGETARIAN: 'VEGETARIAN',\r\n\r\n  /**\r\n   * Veganism is both the practice of abstaining from the use of animal products, particularly in\r\n   * diet, and an associated philosophy that rejects the commodity status of animals.\r\n   *\r\n   * Note: You can spot those guys if they tell you \"Hi, i'm vegan !\"\r\n   *\r\n   * Note: In this case, you can ask Hand to bring the flamethrower in order to deal with this\r\n   * infidel.\r\n   * Long life to the Meat King !\r\n   *\r\n   * (no dairy produce / eggs)\r\n   */\r\n  VEGAN: 'VEGAN',\r\n}\r\n\r\nexport default Diet\r\n","const Gender = {\r\n  NONE: 0,\r\n  MALE: 1,\r\n  FEMALE: 2,\r\n}\r\n\r\n\r\nexport default Gender\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Celery = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 16.5 2 C 15.671875 2 15 2.671875 15 3.5 C 15 3.738281 15.058594 3.957031 15.15625 4.15625 C 14.957031 4.058594 14.738281 4 14.5 4 C 13.671875 4 13 4.671875 13 5.5 C 13 5.960938 13.234375 6.351563 13.5625 6.625 C 12.648438 7.449219 11.175781 8.40625 9.59375 9.4375 C 9.285156 9.640625 4.824219 12.753906 3.96875 13.5625 C 3.863281 13.648438 3.769531 13.730469 3.6875 13.8125 C 1.816406 15.683594 1.816406 18.722656 3.6875 20.59375 C 5.558594 22.464844 8.699219 22.5625 10.46875 20.59375 C 13.203125 17.558594 15.898438 13.265625 17.25 11.34375 C 17.519531 11.742188 17.984375 12 18.5 12 C 19.191406 12 19.765625 11.511719 19.9375 10.875 C 20.109375 10.945313 20.300781 11 20.5 11 C 21.328125 11 22 10.328125 22 9.5 C 22 9.113281 21.863281 8.765625 21.625 8.5 C 21.863281 8.234375 22 7.886719 22 7.5 C 22 6.742188 21.445313 6.136719 20.71875 6.03125 C 20.898438 5.730469 21 5.375 21 5 C 21 3.894531 20.105469 3 19 3 C 18.625 3 18.269531 3.101563 17.96875 3.28125 C 17.863281 2.554688 17.257813 2 16.5 2 Z M 15 7.9375 C 14.636719 8.316406 9.933594 13.183594 7.75 15.1875 C 5.628906 17.136719 5.460938 15.1875 8.4375 12.65625 C 11.230469 10.28125 13.847656 8.933594 15 7.9375 Z M 15.875 9.65625 C 15.925781 9.691406 15.980469 9.722656 16.03125 9.75 C 14.886719 11.257813 13.03125 14.34375 11.25 16.625 C 8.292969 20.300781 7.3125 18.449219 8.25 17.40625 C 12.332031 12.867188 14.785156 10.597656 15.875 9.65625 Z \" />\r\n  </SvgIcon>\r\n)\r\nCelery = pure(Celery)\r\nCelery.displayName = 'Celery'\r\nCelery.muiName = 'SvgIcon'\r\n\r\nexport default Celery\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Cheese = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 8.546875 2.0019531 A 1.0001 1.0001 0 0 0 8.2792969 2.0507812 C 3.1839636 3.7477497 2.0253906 8.6191406 2.0253906 8.6191406 A 1.0001 1.0001 0 0 0 2 8.84375 L 2 19 A 1.0001 1.0001 0 0 0 3 20 L 21 20 A 1.0001 1.0001 0 0 0 22 19 L 22 9 A 1.0001 1.0001 0 0 0 21.435547 8.0996094 L 9.03125 2.0996094 A 1.0001 1.0001 0 0 0 8.546875 2.0019531 z M 8.6074219 4.1171875 L 16.636719 8 L 4.390625 8 C 4.9254567 6.8698858 6.1164914 5.0772748 8.6074219 4.1171875 z M 4 10 L 20 10 L 20 18 L 4 18 L 4 10 z M 14 11 A 2 2 0 0 0 12 13 A 2 2 0 0 0 14 15 A 2 2 0 0 0 16 13 A 2 2 0 0 0 14 11 z M 7.5 14 A 1.5 1.5 0 0 0 6 15.5 A 1.5 1.5 0 0 0 7.5 17 A 1.5 1.5 0 0 0 9 15.5 A 1.5 1.5 0 0 0 7.5 14 z\" />\r\n  </SvgIcon>\r\n)\r\nCheese = pure(Cheese)\r\nCheese.displayName = 'Cheese'\r\nCheese.muiName = 'SvgIcon'\r\n\r\nexport default Cheese\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Crab = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 5 2 C 3 2 2 3.789063 2 6 C 2 6.714844 2.101563 7.359375 2.3125 7.9375 C 2.125 8.242188 2.03125 8.613281 2.03125 9 C 2.03125 9.988281 2.746094 10.804688 3.6875 10.96875 L 6.4375 12.34375 C 6.328125 12.507813 6.234375 12.613281 6.125 12.78125 L 2.71875 12.03125 L 2.28125 13.96875 L 4.96875 14.5625 C 4.757813 14.898438 4.597656 15.160156 4.5 15.375 L 2.21875 16.03125 L 2.78125 17.96875 L 5.5625 17.1875 C 5.890625 17.433594 6.230469 17.660156 6.625 17.9375 L 4.28125 20.28125 L 5.71875 21.71875 L 8.3125 19.125 C 9.3125 19.816406 10.324219 20.507813 11 21 C 11.441406 21.320313 11.753906 21.46875 12.03125 21.46875 C 12.332031 21.46875 12.589844 21.300781 13 21 C 13.671875 20.507813 14.664063 19.792969 15.65625 19.09375 L 18.28125 21.71875 L 19.71875 20.28125 L 17.34375 17.90625 C 17.714844 17.644531 18.089844 17.378906 18.40625 17.15625 L 21.21875 17.96875 L 21.78125 16.03125 L 19.5625 15.40625 C 19.5 15.28125 19.453125 15.167969 19.34375 15 C 19.273438 14.890625 19.148438 14.691406 19.0625 14.5625 L 21.71875 13.96875 L 21.28125 12.03125 L 17.875 12.78125 C 17.761719 12.613281 17.671875 12.503906 17.5625 12.34375 L 20.28125 10.96875 C 21.253906 10.832031 22 10.007813 22 9 C 22 8.574219 21.851563 8.167969 21.625 7.84375 C 21.851563 7.289063 22 6.675781 22 6 C 22 3.789063 20.660156 2 19 2 L 19 6.375 L 15.71875 3.125 C 14.542969 4.300781 14.875 6.5 16.4375 8.0625 C 16.917969 8.542969 17.449219 8.886719 18 9.125 C 18.015625 9.363281 18.066406 9.574219 18.15625 9.78125 L 16.40625 10.65625 C 15.773438 9.886719 14.589844 9 12 9 C 9.382813 9 8.253906 9.945313 7.625 10.6875 L 5.84375 9.78125 C 5.933594 9.574219 5.984375 9.363281 6 9.125 C 6.550781 8.886719 7.113281 8.542969 7.59375 8.0625 C 9.15625 6.5 9.453125 4.300781 8.28125 3.125 L 5 6.40625 Z M 12 11 C 14.257813 11 14.773438 11.792969 15 12.125 L 15.40625 12.71875 C 15.953125 13.53125 16.730469 14.65625 17.28125 15.5 C 16.839844 15.8125 16.34375 16.191406 15.8125 16.5625 C 14.492188 17.492188 12.996094 18.527344 12 19.25 C 11.40625 18.820313 10.644531 18.304688 9.84375 17.75 C 8.769531 17.007813 7.578125 16.171875 6.71875 15.53125 C 7.230469 14.734375 8.355469 12.96875 8.9375 12.1875 C 9.246094 11.769531 9.824219 11 12 11 Z \" />\r\n  </SvgIcon>\r\n)\r\nCrab = pure(Crab)\r\nCrab.displayName = 'Crab'\r\nCrab.muiName = 'SvgIcon'\r\n\r\nexport default Crab\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Egg = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 9 2 C 6.898438 2 5.175781 3.484375 3.96875 5.40625 C 2.761719 7.328125 2 9.773438 2 12.1875 C 2 15.234375 3.339844 17.570313 5.21875 18.78125 C 6.5 20.628906 8.75 22 11.8125 22 C 14.226563 22 16.671875 21.238281 18.59375 20.03125 C 20.515625 18.824219 22 17.101563 22 15 C 22 12.898438 20.515625 11.175781 18.59375 9.96875 C 17.652344 9.375 16.566406 8.902344 15.4375 8.5625 C 14.941406 6.929688 14.175781 5.40625 13.15625 4.21875 C 12.058594 2.9375 10.636719 2 9 2 Z M 9 4 C 9.863281 4 10.804688 4.503906 11.65625 5.5 C 12.238281 6.179688 12.726563 7.078125 13.125 8.0625 C 12.691406 8.015625 12.25 8 11.8125 8 C 7.519531 8 4.808594 10.683594 4.15625 13.625 C 4.074219 13.179688 4 12.707031 4 12.1875 C 4 10.199219 4.664063 8.046875 5.65625 6.46875 C 6.648438 4.890625 7.898438 4 9 4 Z M 11.8125 10 C 13.800781 10 15.953125 10.664063 17.53125 11.65625 C 19.109375 12.648438 20 13.898438 20 15 C 20 16.101563 19.109375 17.351563 17.53125 18.34375 C 15.953125 19.335938 13.800781 20 11.8125 20 C 7.773438 20 6 17.371094 6 15 C 6 12.628906 7.773438 10 11.8125 10 Z \" />\r\n  </SvgIcon>\r\n)\r\nEgg = pure(Egg)\r\nEgg.displayName = 'Egg'\r\nEgg.muiName = 'SvgIcon'\r\n\r\nexport default Egg\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Fish = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 10 4 L 9.46875 8.03125 C 7.8125 8.796875 6.367188 9.855469 5.25 10.8125 C 4.539063 9.859375 3.386719 9.179688 2 9 L 2 17 C 3.464844 16.808594 4.679688 16.070313 5.375 15.03125 C 6.753906 16.023438 8.644531 17.082031 11 17.625 L 11 20 C 11 20 12.761719 19.625 14.21875 18 C 20.046875 17.878906 22 13 22 13 C 22 13 20.378906 8.164063 15.46875 7.1875 C 13.492188 4.769531 10 4 10 4 Z M 13.6875 9 C 17.3125 9 19.113281 11.601563 19.78125 12.90625 C 19.09375 13.992188 17.363281 16 14 16 C 10.46875 16 7.628906 14.269531 6 13 C 6 12.933594 5.972656 12.878906 5.96875 12.8125 C 7.175781 11.714844 8.867188 10.457031 10.6875 9.6875 L 12 9.25 C 12.5625 9.105469 13.125 9 13.6875 9 Z M 16.5 11 C 15.671875 11 15 11.671875 15 12.5 C 15 13.328125 15.671875 14 16.5 14 C 17.328125 14 18 13.328125 18 12.5 C 18 11.671875 17.328125 11 16.5 11 Z \" />\r\n  </SvgIcon>\r\n)\r\nFish = pure(Fish)\r\nFish.displayName = 'Fish'\r\nFish.muiName = 'SvgIcon'\r\n\r\nexport default Fish\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Lupine = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 23.132812 4.597656 C 23.84375 3.882812 24.132812 2.992188 23.941406 2.09375 C 23.773438 1.285156 23.296875 0.789062 23.242188 0.734375 C 22.949219 0.4375 22.195312 0 21.320312 0 C 20.601562 0 19.929688 0.292969 19.382812 0.84375 C 19.070312 1.160156 18.820312 1.660156 18.617188 2.398438 C 18.398438 2.097656 18.113281 1.851562 17.761719 1.667969 C 17.324219 1.4375 16.863281 1.355469 16.601562 1.355469 C 16.347656 1.355469 15.769531 1.457031 15.214844 1.835938 C 14.503906 2.320312 14.109375 3.085938 14.109375 3.988281 C 14.109375 4.210938 14.148438 4.539062 14.390625 5.066406 C 13.84375 4.699219 13.246094 4.59375 12.9375 4.59375 C 12.597656 4.59375 12.003906 4.75 11.503906 5.089844 C 10.765625 5.59375 10.359375 6.386719 10.359375 7.320312 C 10.359375 7.421875 10.367188 7.542969 10.398438 7.695312 C 9.976562 7.519531 9.566406 7.453125 9.3125 7.453125 C 8.546875 7.453125 6.445312 8.175781 6.445312 10.507812 C 6.445312 10.761719 6.492188 11.140625 6.777344 11.757812 C 6.667969 11.679688 6.550781 11.605469 6.429688 11.535156 C 5.683594 11.121094 4.996094 11.109375 4.921875 11.109375 C 4.097656 11.109375 1.828125 11.890625 1.828125 14.410156 C 1.828125 14.851562 1.957031 15.628906 3.0625 17.289062 C 3.449219 17.867188 3.832031 18.367188 4.039062 18.632812 L 0.273438 22.398438 C -0.0898438 22.765625 -0.0898438 23.359375 0.273438 23.726562 C 0.457031 23.910156 0.699219 24 0.9375 24 C 1.179688 24 1.417969 23.910156 1.601562 23.726562 L 5.304688 20.019531 C 5.582031 20.234375 6.042969 20.585938 6.570312 20.9375 C 8.230469 22.042969 9.007812 22.171875 9.449219 22.171875 C 9.96875 22.171875 10.386719 21.753906 10.386719 21.234375 C 10.386719 20.714844 9.96875 20.296875 9.449219 20.296875 C 9.429688 20.296875 8.980469 20.285156 7.625 19.382812 C 7.609375 19.375 7.597656 19.363281 7.582031 19.355469 C 9.125 18.992188 9.671875 18.589844 9.953125 18.3125 C 10.046875 18.21875 10.128906 18.128906 10.203125 18.039062 C 10.769531 18.363281 10.867188 19.039062 10.875 19.097656 C 10.886719 19.605469 11.300781 20.015625 11.8125 20.015625 C 12.332031 20.015625 12.75 19.597656 12.75 19.078125 C 12.75 18.722656 12.605469 18.117188 12.285156 17.5625 C 12.207031 17.429688 12.117188 17.300781 12.027344 17.183594 C 12.699219 17.503906 13.101562 17.554688 13.367188 17.554688 C 14.46875 17.554688 15.375 17.101562 15.914062 16.28125 C 16.289062 15.710938 16.421875 15.066406 16.421875 14.6875 C 16.421875 14.417969 16.332031 13.996094 16.144531 13.578125 C 16.347656 13.628906 16.507812 13.640625 16.632812 13.640625 C 17.613281 13.640625 18.421875 13.234375 18.910156 12.492188 C 19.242188 11.984375 19.359375 11.40625 19.359375 11.0625 C 19.359375 10.738281 19.234375 10.195312 18.90625 9.6875 C 19.503906 9.980469 19.863281 10.023438 20.101562 10.023438 C 21.050781 10.023438 21.828125 9.628906 22.300781 8.914062 C 22.621094 8.425781 22.734375 7.863281 22.734375 7.535156 C 22.734375 7.070312 22.46875 6.144531 21.710938 5.5625 C 21.738281 5.480469 21.757812 5.398438 21.777344 5.3125 C 22.410156 5.117188 22.847656 4.886719 23.132812 4.597656 Z M 21.441406 1.882812 C 21.660156 1.914062 21.847656 2.019531 21.921875 2.066406 C 21.976562 2.140625 22.082031 2.3125 22.113281 2.511719 C 22.144531 2.675781 22.140625 2.933594 21.804688 3.273438 C 21.792969 3.285156 21.703125 3.351562 21.441406 3.449219 C 21.332031 3.269531 21.214844 3.125 21.113281 3.023438 C 21.007812 2.917969 20.796875 2.757812 20.507812 2.617188 C 20.621094 2.285156 20.703125 2.175781 20.714844 2.164062 C 20.945312 1.933594 21.167969 1.847656 21.441406 1.882812 Z M 10.863281 13.296875 C 10.753906 13.320312 10.648438 13.339844 10.542969 13.355469 C 10.5625 13.257812 10.582031 13.15625 10.601562 13.050781 C 10.882812 11.644531 11.15625 11.339844 11.160156 11.339844 C 11.410156 11.085938 11.664062 10.964844 11.949219 10.964844 C 12 10.964844 12.050781 10.96875 12.101562 10.976562 C 12.390625 11.015625 12.628906 11.160156 12.699219 11.214844 C 12.742188 11.269531 12.90625 11.484375 12.957031 11.765625 C 12.996094 11.980469 12.996094 12.308594 12.5625 12.742188 C 12.5625 12.746094 12.261719 13.019531 10.863281 13.296875 Z M 15.242188 7.769531 C 15.519531 7.496094 15.742188 7.484375 15.90625 7.507812 C 16.109375 7.535156 16.28125 7.632812 16.347656 7.675781 C 16.398438 7.742188 16.496094 7.894531 16.527344 8.074219 C 16.550781 8.222656 16.546875 8.449219 16.238281 8.761719 C 16.070312 8.902344 15.488281 9.074219 14.796875 9.207031 C 14.933594 8.515625 15.105469 7.9375 15.242188 7.769531 Z M 18.824219 4.445312 C 19.066406 4.203125 19.261719 4.195312 19.402344 4.214844 C 19.582031 4.238281 19.734375 4.320312 19.796875 4.363281 C 19.824219 4.398438 19.863281 4.460938 19.898438 4.535156 C 19.890625 4.621094 19.898438 4.710938 19.917969 4.796875 C 19.925781 4.835938 19.9375 4.871094 19.949219 4.90625 C 19.925781 5.011719 19.859375 5.148438 19.695312 5.316406 C 19.539062 5.441406 19.035156 5.589844 18.425781 5.714844 C 18.546875 5.105469 18.699219 4.601562 18.824219 4.445312 Z M 16.234375 3.410156 C 16.375 3.300781 16.542969 3.25 16.617188 3.234375 C 16.730469 3.25 17.019531 3.316406 17.148438 3.59375 C 16.972656 3.914062 16.789062 4.402344 16.621094 5.1875 C 16.265625 4.660156 16.007812 4.183594 15.984375 3.980469 C 15.988281 3.644531 16.117188 3.5 16.234375 3.410156 Z M 12.519531 6.667969 C 12.683594 6.542969 12.875 6.488281 12.953125 6.472656 C 13.074219 6.488281 13.429688 6.5625 13.570312 6.90625 C 13.378906 7.253906 13.167969 7.800781 12.984375 8.71875 C 12.566406 8.105469 12.257812 7.542969 12.234375 7.316406 C 12.234375 7.019531 12.324219 6.816406 12.519531 6.667969 Z M 8.734375 9.589844 C 8.964844 9.414062 9.230469 9.347656 9.328125 9.332031 C 9.441406 9.339844 9.859375 9.40625 10.109375 9.761719 C 10.015625 9.839844 9.921875 9.921875 9.832031 10.011719 C 9.59375 10.25 9.265625 10.691406 8.957031 11.835938 C 8.335938 10.855469 8.320312 10.507812 8.320312 10.507812 C 8.320312 10.09375 8.453125 9.800781 8.734375 9.589844 Z M 4.214844 13.292969 C 4.503906 13.082031 4.824219 13 4.933594 12.984375 C 5.003906 12.992188 5.273438 13.03125 5.542969 13.191406 C 5.726562 13.296875 5.863281 13.433594 5.960938 13.601562 C 5.828125 13.703125 5.703125 13.8125 5.578125 13.9375 C 5.308594 14.207031 4.921875 14.730469 4.570312 16.164062 C 3.714844 14.867188 3.703125 14.429688 3.703125 14.410156 C 3.703125 13.90625 3.867188 13.550781 4.214844 13.292969 Z M 6.691406 17.628906 C 6.511719 17.667969 6.332031 17.699219 6.164062 17.726562 C 6.191406 17.558594 6.222656 17.378906 6.261719 17.195312 C 6.578125 15.601562 6.890625 15.273438 6.90625 15.261719 C 7.207031 14.957031 7.515625 14.8125 7.863281 14.8125 C 7.925781 14.8125 7.992188 14.816406 8.058594 14.828125 C 8.390625 14.875 8.65625 15.03125 8.757812 15.105469 C 8.765625 15.113281 8.769531 15.117188 8.777344 15.125 C 8.785156 15.132812 8.792969 15.140625 8.800781 15.144531 C 8.867188 15.230469 9.039062 15.472656 9.097656 15.789062 C 9.175781 16.203125 9.019531 16.59375 8.628906 16.984375 C 8.617188 17 8.289062 17.308594 6.691406 17.628906 Z M 14.335938 15.269531 C 14.214844 15.445312 13.980469 15.679688 13.367188 15.679688 C 13.363281 15.679688 12.996094 15.660156 11.9375 14.976562 C 13.175781 14.660156 13.644531 14.316406 13.890625 14.070312 C 13.949219 14.007812 14.007812 13.945312 14.0625 13.882812 C 14.4375 14.148438 14.53125 14.605469 14.542969 14.699219 C 14.539062 14.769531 14.5 15.03125 14.335938 15.269531 Z M 17.328125 11.484375 C 17.242188 11.605469 17.078125 11.765625 16.636719 11.765625 C 16.414062 11.746094 15.859375 11.4375 15.253906 11.027344 C 16.160156 10.847656 16.714844 10.640625 17.066406 10.453125 C 17.375 10.617188 17.464844 10.984375 17.480469 11.078125 C 17.472656 11.160156 17.429688 11.335938 17.328125 11.484375 Z M 20.71875 7.90625 C 20.671875 7.972656 20.546875 8.148438 20.109375 8.148438 C 19.910156 8.125 19.441406 7.875 18.921875 7.523438 C 19.699219 7.363281 20.1875 7.179688 20.511719 7.011719 C 20.761719 7.160156 20.839844 7.457031 20.855469 7.546875 C 20.847656 7.621094 20.808594 7.777344 20.71875 7.90625 Z M 20.71875 7.90625 \" />\r\n  </SvgIcon>\r\n)\r\nLupine = pure(Lupine)\r\nLupine.displayName = 'Lupine'\r\nLupine.muiName = 'SvgIcon'\r\n\r\nexport default Lupine\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Milk = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 10 2 C 9.476563 2 8.941406 2.183594 8.5625 2.5625 C 8.183594 2.941406 8 3.476563 8 4 L 8 5 C 8 5.398438 8.21875 5.757813 8.4375 6.09375 C 8.394531 6.15625 8.324219 6.183594 8.28125 6.25 C 7.898438 6.832031 7.515625 7.558594 7.1875 8.34375 C 6.53125 9.910156 6 11.605469 6 12.90625 L 6 19 C 6 20.644531 7.355469 22 9 22 L 15 22 C 16.644531 22 18 20.644531 18 19 L 18 12.90625 C 18 11.605469 17.46875 9.910156 16.8125 8.34375 C 16.484375 7.558594 16.101563 6.832031 15.71875 6.25 C 15.675781 6.183594 15.605469 6.15625 15.5625 6.09375 C 15.78125 5.757813 16 5.398438 16 5 L 16 4 C 16 3.476563 15.816406 2.941406 15.4375 2.5625 C 15.058594 2.183594 14.523438 2 14 2 Z M 10 4 L 14 4 L 14 5 L 10.03125 5 C 10.019531 5 10.011719 5 10 5 Z M 10.21875 7 L 13.78125 7 C 13.851563 7.074219 13.949219 7.199219 14.0625 7.375 C 14.335938 7.789063 14.640625 8.421875 14.9375 9.125 C 15.53125 10.535156 16 12.308594 16 12.90625 L 16 19 C 16 19.554688 15.554688 20 15 20 L 9 20 C 8.445313 20 8 19.554688 8 19 L 8 12.90625 C 8 12.308594 8.46875 10.535156 9.0625 9.125 C 9.359375 8.421875 9.664063 7.789063 9.9375 7.375 C 10.050781 7.199219 10.148438 7.074219 10.21875 7 Z \" />\r\n  </SvgIcon>\r\n)\r\nMilk = pure(Milk)\r\nMilk.displayName = 'Milk'\r\nMilk.muiName = 'SvgIcon'\r\n\r\nexport default Milk\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Mustard = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 10.851562 5.101562 L 11.507812 0.898438 L 12.492188 0.898438 L 13.148438 5.101562 Z M 10.851562 5.101562 \" />\r\n    <path\r\n      fill=\"none\"\r\n      d=\"M 12.238281 1.199219 L 12.800781 4.800781 L 11.203125 4.800781 L 11.765625 1.199219 L 12.238281 1.199219 M 12.75 0.601562 L 11.25 0.601562 L 10.5 5.398438 L 13.5 5.398438 Z M 12.75 0.601562 \"\r\n    />\r\n    <path\r\n      fill=\"none\"\r\n      d=\"M 9.300781 7.5 L 9.300781 6 C 9.300781 5.503906 9.703125 5.101562 10.199219 5.101562 L 13.800781 5.101562 C 14.296875 5.101562 14.699219 5.503906 14.699219 6 L 14.699219 7.5 Z M 9.300781 7.5 \"\r\n    />\r\n    <path d=\"M 13.800781 5.398438 C 14.128906 5.398438 14.398438 5.667969 14.398438 6 L 14.398438 7.199219 L 9.601562 7.199219 L 9.601562 6 C 9.601562 5.667969 9.871094 5.398438 10.199219 5.398438 L 13.800781 5.398438 M 13.800781 4.800781 L 10.199219 4.800781 C 9.535156 4.800781 9 5.335938 9 6 L 9 7.800781 L 15 7.800781 L 15 6 C 15 5.335938 14.464844 4.800781 13.800781 4.800781 Z M 13.800781 4.800781 \" />\r\n    <path\r\n      fill=\"none\"\r\n      d=\"M 8.398438 23.101562 C 7.902344 23.101562 7.5 22.695312 7.5 22.199219 L 7.5 8.398438 C 7.5 7.902344 7.902344 7.5 8.398438 7.5 L 15.601562 7.5 C 16.097656 7.5 16.5 7.902344 16.5 8.398438 L 16.5 22.199219 C 16.5 22.695312 16.097656 23.101562 15.601562 23.101562 Z M 8.398438 23.101562 \"\r\n    />\r\n    <path d=\"M 15.601562 7.800781 C 15.929688 7.800781 16.199219 8.070312 16.199219 8.398438 L 16.199219 22.199219 C 16.199219 22.53125 15.929688 22.800781 15.601562 22.800781 L 8.398438 22.800781 C 8.070312 22.800781 7.800781 22.53125 7.800781 22.199219 L 7.800781 8.398438 C 7.800781 8.070312 8.070312 7.800781 8.398438 7.800781 L 15.601562 7.800781 M 15.601562 7.199219 L 8.398438 7.199219 C 7.738281 7.199219 7.199219 7.738281 7.199219 8.398438 L 7.199219 22.199219 C 7.199219 22.863281 7.738281 23.398438 8.398438 23.398438 L 15.601562 23.398438 C 16.261719 23.398438 16.800781 22.863281 16.800781 22.199219 L 16.800781 8.398438 C 16.800781 7.738281 16.261719 7.199219 15.601562 7.199219 Z M 15.601562 7.199219 \" />\r\n  </SvgIcon>\r\n)\r\nMustard = pure(Mustard)\r\nMustard.displayName = 'Mustard'\r\nMustard.muiName = 'SvgIcon'\r\n\r\nexport default Mustard\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Nut = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M21.991,10.62c-0.122-2.068-1.515-3.813-2.441-4.758C20.239,5.169,21,4.154,21,2h-2c0,1.386-0.364,1.941-0.864,2.446 c-0.944-0.927-2.678-2.311-4.738-2.437c-1.507-0.085-2.884,0.481-4.105,1.703C9.111,3.894,9.01,4.137,9.003,4.39L9,4.387 C8.304,4.883,7.638,5.45,7.021,6.073C4.353,8.767,3,11.77,3,15c0,1.182,0.415,2.104,0.878,2.919 c-0.065,0.312-0.535,1.151-0.877,1.702l1.374,1.38c0.541-0.333,1.388-0.805,1.701-0.875C7.037,20.681,7.844,21,9,21 c3.129,0,6.174-1.405,8.808-4.063c0.268-0.271,1.098-1.14,1.578-1.956c0,0,0.002,0,0.002,0C19.454,14.993,19.52,15,19.586,15 c0.262,0,0.518-0.104,0.707-0.293C21.508,13.493,22.08,12.117,21.991,10.62z M16.386,15.529C14.137,17.8,11.583,19,9,19 c-0.756,0-1.234-0.2-1.998-0.649c-0.165-0.117-0.488-0.307-1.131-0.216c0.091-0.656-0.103-0.993-0.234-1.169 C5.243,16.277,5,15.702,5,15c0-2.685,1.158-5.214,3.441-7.52c0.387-0.39,0.801-0.744,1.224-1.078c0.555,1.194,1.553,2.86,3.315,4.62 c1.693,1.691,3.299,2.679,4.482,3.246C17.169,14.681,16.746,15.166,16.386,15.529z M19.267,12.86 c-0.889-0.316-2.798-1.18-4.873-3.252c-2.074-2.073-2.938-3.981-3.254-4.87c0.676-0.536,1.379-0.768,2.131-0.733 c2.151,0.126,4.036,2.483,4.054,2.505c0.049,0.063,0.105,0.12,0.168,0.17c0.024,0.019,2.375,1.927,2.501,4.059 C20.039,11.49,19.801,12.188,19.267,12.86z\" />\r\n  </SvgIcon>\r\n)\r\nNut = pure(Nut)\r\nNut.displayName = 'Nut'\r\nNut.muiName = 'SvgIcon'\r\n\r\nexport default Nut\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Peanut = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 13 3 C 11.558594 3 10.292969 3.757813 9.59375 4.90625 C 9.394531 5.234375 9.265625 5.601563 9.125 5.96875 C 8.578125 7.398438 7.398438 8.578125 5.96875 9.125 C 5.601563 9.265625 5.234375 9.394531 4.90625 9.59375 C 3.964844 10.164063 3.304688 11.109375 3.09375 12.21875 C 3.0625 12.347656 3.019531 12.484375 3.03125 12.625 C 3.042969 12.804688 3.195313 13 3.375 13 L 3.625 13 C 7.09375 13 8.46875 12.535156 9.75 11.90625 C 11.238281 11.175781 12.777344 9.019531 12.96875 6.71875 C 12.988281 6.878906 13 6.828125 13 7 C 13 9.121094 12.25 11.472656 10.28125 12.5625 C 9.679688 12.890625 8.171875 13.789063 4 14 L 3.5 14 C 3.378906 14 3.277344 14.054688 3.1875 14.125 C 3.078125 14.214844 3 14.339844 3 14.5 C 3 14.597656 3.058594 14.667969 3.09375 14.75 C 3.746094 16.195313 5.601563 17 7 17 C 12.519531 17 17 12.519531 17 7 C 17 4.789063 15.210938 3 13 3 Z M 16.9375 12.4375 C 16.273438 13.773438 15.320313 14.960938 14.15625 15.875 C 14.1875 15.890625 14.21875 15.890625 14.25 15.90625 C 15.53125 16.535156 16.90625 17 20.375 17 L 20.625 17 C 20.804688 17 20.957031 16.804688 20.96875 16.625 C 20.980469 16.484375 20.9375 16.347656 20.90625 16.21875 C 20.695313 15.109375 20.035156 14.164063 19.09375 13.59375 C 18.765625 13.394531 18.398438 13.265625 18.03125 13.125 C 17.628906 12.96875 17.277344 12.699219 16.9375 12.4375 Z M 13.4375 16.375 C 12.328125 17.097656 11.074219 17.609375 9.71875 17.84375 C 11.542969 19.785156 14.128906 21 17 21 C 18.398438 21 20.253906 20.195313 20.90625 18.75 C 20.941406 18.667969 21 18.597656 21 18.5 C 21 18.339844 20.921875 18.214844 20.8125 18.125 C 20.722656 18.054688 20.621094 18 20.5 18 L 20 18 C 15.828125 17.789063 14.320313 16.890625 13.71875 16.5625 C 13.621094 16.507813 13.527344 16.433594 13.4375 16.375 Z \" />\r\n  </SvgIcon>\r\n)\r\nPeanut = pure(Peanut)\r\nPeanut.displayName = 'Peanut'\r\nPeanut.muiName = 'SvgIcon'\r\n\r\nexport default Peanut\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Shellfish = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 9.3125 2.03125 C 7.824219 2.089844 5.96875 3.0625 6.59375 4.6875 L 9.09375 10.8125 L 5.3125 5.90625 C 3.8125 4.105469 1.101563 7.988281 3 9.1875 L 7.40625 12.8125 L 3.40625 11.1875 C 2.304688 10.789063 2.195313 11.511719 2.09375 11.8125 C 1.695313 13.113281 2.511719 14.414063 3.8125 14.8125 C 5.210938 15.210938 6.898438 15.988281 8.5 17.1875 C 10.101563 18.386719 10.304688 20.09375 11.90625 20.09375 L 12.09375 20.09375 C 13.59375 20.09375 13.898438 18.386719 15.5 17.1875 C 17.101563 15.988281 18.886719 15.3125 20.1875 14.8125 C 21.488281 14.3125 22.304688 13.011719 21.90625 11.8125 C 21.804688 11.511719 21.695313 10.789063 20.59375 11.1875 L 16.59375 12.8125 L 21 9.1875 C 22.898438 7.988281 20.210938 4.105469 18.8125 5.90625 L 15 10.8125 L 17.5 4.6875 C 18.398438 2.085938 13.101563 1.101563 13 3 L 12 8.6875 L 11 3 C 10.960938 2.289063 10.207031 1.996094 9.3125 2.03125 Z M 8 19 C 7.699219 19.199219 7.394531 19.898438 7.09375 20.5 C 6.695313 21.300781 7.199219 22 8 22 L 12 22 C 9.800781 22 9.300781 19 8 19 Z M 12 22 L 16 22 C 16.800781 22 17.304688 21.300781 16.90625 20.5 C 16.605469 19.898438 16.300781 19.199219 16 19 C 14.699219 19 14.199219 22 12 22 Z \" />\r\n  </SvgIcon>\r\n)\r\nShellfish = pure(Shellfish)\r\nShellfish.displayName = 'Shellfish'\r\nShellfish.muiName = 'SvgIcon'\r\n\r\nexport default Shellfish\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Sesame = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 17.9375 2 C 15.695313 1.960938 12.554688 2.382813 10.84375 4.09375 C 7.464844 7.472656 2.875 15.4375 2.875 15.4375 L 8.5625 21.125 C 8.5625 21.125 16.527344 16.53125 19.90625 13.15625 C 22.644531 10.417969 22.078125 3.984375 21.625 3.53125 C 21.175781 3.082031 20.636719 3.363281 20.1875 3.8125 C 20.632813 3.363281 20.917969 2.824219 20.46875 2.375 C 20.300781 2.207031 19.285156 2.023438 17.9375 2 Z M 17.65625 3.21875 C 18.015625 3.21875 18.28125 3.554688 18.28125 4.03125 C 18.28125 4.507813 17.65625 5.21875 17.65625 5.21875 C 17.65625 5.21875 17 4.597656 17 4.03125 C 17 3.464844 17.296875 3.21875 17.65625 3.21875 Z M 13.09375 4.34375 C 13.453125 4.34375 13.75 4.679688 13.75 5.15625 C 13.75 5.632813 13.09375 6.34375 13.09375 6.34375 C 13.09375 6.34375 12.46875 5.722656 12.46875 5.15625 C 12.46875 4.589844 12.734375 4.34375 13.09375 4.34375 Z M 15.375 4.5 C 15.914063 4.5 16.34375 5.003906 16.34375 5.71875 C 16.34375 6.433594 15.375 7.5 15.375 7.5 C 15.375 7.5 14.40625 6.570313 14.40625 5.71875 C 14.40625 4.867188 14.835938 4.5 15.375 4.5 Z M 19.96875 5.71875 C 20.445313 5.71875 20.78125 5.984375 20.78125 6.34375 C 20.78125 6.703125 20.535156 7 19.96875 7 C 19.402344 7 18.78125 6.34375 18.78125 6.34375 C 18.78125 6.34375 19.492188 5.71875 19.96875 5.71875 Z M 10.84375 6.625 C 11.203125 6.625 11.5 6.960938 11.5 7.4375 C 11.5 7.914063 10.84375 8.625 10.84375 8.625 C 10.84375 8.625 10.1875 8.003906 10.1875 7.4375 C 10.1875 6.871094 10.484375 6.625 10.84375 6.625 Z M 13.09375 6.75 C 13.632813 6.75 14.0625 7.253906 14.0625 7.96875 C 14.0625 8.683594 13.09375 9.75 13.09375 9.75 C 13.09375 9.75 12.125 8.820313 12.125 7.96875 C 12.125 7.117188 12.554688 6.75 13.09375 6.75 Z M 18.28125 7.65625 C 19 7.65625 19.5 8.085938 19.5 8.625 C 19.5 9.164063 19.132813 9.59375 18.28125 9.59375 C 17.429688 9.59375 16.5 8.625 16.5 8.625 C 16.5 8.625 17.566406 7.65625 18.28125 7.65625 Z M 8.5625 8.90625 C 8.921875 8.90625 9.21875 9.242188 9.21875 9.71875 C 9.21875 10.195313 8.5625 10.90625 8.5625 10.90625 C 8.5625 10.90625 7.90625 10.285156 7.90625 9.71875 C 7.90625 9.152344 8.203125 8.90625 8.5625 8.90625 Z M 10.84375 9.03125 C 11.382813 9.03125 11.8125 9.535156 11.8125 10.25 C 11.8125 10.964844 10.84375 12.03125 10.84375 12.03125 C 10.84375 12.03125 9.84375 11.101563 9.84375 10.25 C 9.84375 9.398438 10.304688 9.03125 10.84375 9.03125 Z M 16.03125 9.90625 C 16.746094 9.90625 17.21875 10.367188 17.21875 10.90625 C 17.21875 11.445313 16.882813 11.875 16.03125 11.875 C 15.179688 11.875 14.21875 10.90625 14.21875 10.90625 C 14.21875 10.90625 15.316406 9.90625 16.03125 9.90625 Z M 18.84375 10.25 C 19.320313 10.25 19.65625 10.546875 19.65625 10.90625 C 19.65625 11.265625 19.410156 11.53125 18.84375 11.53125 C 18.277344 11.53125 17.65625 10.90625 17.65625 10.90625 C 17.65625 10.90625 18.367188 10.25 18.84375 10.25 Z M 8.5625 11.3125 C 9.101563 11.3125 9.53125 11.816406 9.53125 12.53125 C 9.53125 13.246094 8.5625 14.3125 8.5625 14.3125 C 8.5625 14.3125 7.59375 13.382813 7.59375 12.53125 C 7.59375 11.679688 8.023438 11.3125 8.5625 11.3125 Z M 13.75 12.1875 C 14.46875 12.1875 14.96875 12.617188 14.96875 13.15625 C 14.96875 13.695313 14.601563 14.15625 13.75 14.15625 C 12.898438 14.15625 11.96875 13.15625 11.96875 13.15625 C 11.96875 13.15625 13.035156 12.1875 13.75 12.1875 Z M 16.5625 12.5 C 17.039063 12.5 17.375 12.796875 17.375 13.15625 C 17.375 13.515625 17.128906 13.8125 16.5625 13.8125 C 15.996094 13.8125 15.375 13.15625 15.375 13.15625 C 15.375 13.15625 16.085938 12.5 16.5625 12.5 Z M 6.28125 13.5625 C 6.820313 13.5625 7.28125 14.066406 7.28125 14.78125 C 7.28125 15.496094 6.28125 16.5625 6.28125 16.5625 C 6.28125 16.5625 5.3125 15.632813 5.3125 14.78125 C 5.3125 13.929688 5.742188 13.5625 6.28125 13.5625 Z M 11.46875 14.46875 C 12.1875 14.46875 12.6875 14.898438 12.6875 15.4375 C 12.6875 15.976563 12.320313 16.40625 11.46875 16.40625 C 10.617188 16.40625 9.6875 15.4375 9.6875 15.4375 C 9.6875 15.4375 10.753906 14.46875 11.46875 14.46875 Z M 14.28125 14.78125 C 14.757813 14.78125 15.09375 15.078125 15.09375 15.4375 C 15.09375 15.796875 14.847656 16.09375 14.28125 16.09375 C 13.714844 16.09375 13.09375 15.4375 13.09375 15.4375 C 13.09375 15.4375 13.804688 14.78125 14.28125 14.78125 Z M 2.3125 16 C 1.675781 16.636719 2.117188 17.652344 2.625 18.40625 C 3.054688 19.042969 2.980469 19.863281 2.4375 20.40625 L 2.3125 20.5625 L 3.4375 21.6875 L 3.5625 21.5625 C 4.105469 21.019531 4.957031 20.945313 5.59375 21.375 C 6.34375 21.882813 7.363281 22.324219 8 21.6875 Z M 9.21875 16.71875 C 9.9375 16.71875 10.4375 17.179688 10.4375 17.71875 C 10.4375 18.257813 10.070313 18.6875 9.21875 18.6875 C 8.367188 18.6875 7.4375 17.71875 7.4375 17.71875 C 7.4375 17.71875 8.503906 16.71875 9.21875 16.71875 Z \" />\r\n  </SvgIcon>\r\n)\r\nSesame = pure(Sesame)\r\nSesame.displayName = 'Sesame'\r\nSesame.muiName = 'SvgIcon'\r\n\r\nexport default Sesame\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Soy = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 20 2 C 19.210938 3.917969 17.332031 4.667969 16 6 C 14.296875 7.703125 14 10 14 10 C 11.019531 10 8.292969 12.75 8 14.96875 C 7.371094 15.078125 5.394531 15.332031 4 17 C 2.925781 18.285156 2 20.0625 2 20.96875 C 3.3125 22.28125 8.71875 22.40625 11 20.96875 C 11.835938 20.441406 12 20 12 20 C 16 20 19 16.324219 19 13 C 19 13 20.367188 12.601563 21.460938 10.4375 C 22.519531 8.335938 21.8125 3.8125 20 2 Z M 8.007813 19.902344 C 6.78125 20.386719 5.582031 20.140625 5.324219 19.347656 C 5.066406 18.558594 5.847656 17.523438 7.070313 17.039063 C 8.296875 16.554688 9.496094 16.804688 9.753906 17.59375 C 10.011719 18.382813 9.230469 19.417969 8.007813 19.902344 Z M 14.570313 16.429688 C 13.464844 17.257813 12.003906 17.175781 11.304688 16.242188 C 10.605469 15.308594 10.9375 13.882813 12.039063 13.054688 C 13.144531 12.226563 14.609375 12.3125 15.304688 13.246094 C 16.003906 14.175781 15.675781 15.605469 14.570313 16.429688 Z M 19.882813 9.152344 C 19.359375 10.359375 18.335938 11.03125 17.59375 10.65625 C 16.851563 10.28125 16.675781 8.996094 17.195313 7.789063 C 17.71875 6.582031 18.742188 5.90625 19.484375 6.285156 C 20.222656 6.660156 20.402344 7.945313 19.882813 9.152344 Z \" />\r\n  </SvgIcon>\r\n)\r\nSoy = pure(Soy)\r\nSoy.displayName = 'Soy'\r\nSoy.muiName = 'SvgIcon'\r\n\r\nexport default Soy\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Sulphites = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 22.570312 19.167969 L 15.613281 7.9375 L 15.613281 6.261719 C 15.613281 6.066406 15.453125 5.90625 15.257812 5.90625 C 15.0625 5.90625 14.902344 6.066406 14.902344 6.261719 L 14.902344 7.683594 L 9.097656 7.683594 L 9.097656 3.296875 L 14.902344 3.296875 L 14.902344 4.835938 C 14.902344 5.035156 15.0625 5.191406 15.257812 5.191406 C 15.453125 5.191406 15.613281 5.035156 15.613281 4.835938 L 15.613281 3.222656 C 16.289062 3.019531 16.785156 2.390625 16.785156 1.648438 C 16.785156 0.738281 16.042969 0 15.136719 0 L 8.863281 0 C 7.957031 0 7.214844 0.738281 7.214844 1.648438 C 7.214844 2.390625 7.710938 3.019531 8.386719 3.222656 L 8.386719 7.9375 L 3.566406 15.714844 C 3.464844 15.882812 3.515625 16.101562 3.683594 16.207031 C 3.847656 16.308594 4.070312 16.257812 4.171875 16.089844 L 6.105469 12.972656 C 7.75 13.121094 10.089844 14.074219 12.355469 15.003906 C 14.882812 16.039062 17.3125 17.03125 19 17.03125 C 19.480469 17.03125 19.898438 16.949219 20.246094 16.765625 L 21.964844 19.542969 C 22.441406 20.308594 22.464844 21.238281 22.023438 22.027344 C 21.585938 22.816406 20.785156 23.289062 19.878906 23.289062 L 4.121094 23.289062 C 3.214844 23.289062 2.414062 22.816406 1.976562 22.027344 C 1.535156 21.238281 1.558594 20.308594 2.035156 19.542969 L 3.25 17.582031 C 3.351562 17.414062 3.300781 17.191406 3.132812 17.089844 C 2.96875 16.984375 2.746094 17.039062 2.644531 17.203125 L 1.429688 19.167969 C 0.8125 20.15625 0.785156 21.355469 1.351562 22.375 C 1.917969 23.390625 2.953125 24 4.121094 24 L 19.878906 24 C 21.046875 24 22.082031 23.390625 22.648438 22.375 C 23.214844 21.355469 23.1875 20.15625 22.570312 19.167969 Z M 7.929688 1.648438 C 7.929688 1.132812 8.347656 0.710938 8.863281 0.710938 L 15.136719 0.710938 C 15.652344 0.710938 16.070312 1.132812 16.070312 1.648438 C 16.070312 2.164062 15.652344 2.582031 15.136719 2.582031 L 8.863281 2.582031 C 8.347656 2.582031 7.929688 2.164062 7.929688 1.648438 Z M 12.625 14.34375 C 10.460938 13.457031 8.234375 12.546875 6.519531 12.304688 L 8.941406 8.394531 L 15.058594 8.394531 L 19.871094 16.15625 C 18.585938 16.78125 15.429688 15.492188 12.625 14.34375 Z M 12.625 14.34375 \" />\r\n    <path d=\"M 8.871094 17.390625 C 9.210938 17.390625 9.390625 17.484375 9.535156 17.558594 C 9.621094 17.601562 9.699219 17.640625 9.78125 17.640625 C 10.035156 17.640625 10.144531 17.324219 10.144531 17.164062 C 10.144531 16.730469 9.34375 16.613281 8.871094 16.613281 C 8.089844 16.613281 7.25 16.964844 7.25 17.953125 C 7.25 18.835938 7.914062 19.132812 8.5 19.390625 C 8.960938 19.597656 9.363281 19.773438 9.363281 20.195312 C 9.363281 20.601562 8.992188 20.746094 8.648438 20.746094 C 8.246094 20.746094 8.027344 20.5625 7.851562 20.414062 C 7.738281 20.320312 7.644531 20.238281 7.53125 20.238281 C 7.308594 20.238281 7.132812 20.53125 7.132812 20.722656 C 7.132812 21.117188 7.792969 21.5625 8.675781 21.5625 C 9.65625 21.5625 10.265625 21.007812 10.265625 20.109375 C 10.265625 19.085938 9.511719 18.769531 8.910156 18.511719 C 8.503906 18.339844 8.152344 18.191406 8.152344 17.875 C 8.152344 17.566406 8.414062 17.390625 8.871094 17.390625 Z M 8.871094 17.390625 \" />\r\n    <path d=\"M 13.882812 20.011719 L 13.882812 18.175781 C 13.882812 17.1875 13.324219 16.644531 12.3125 16.644531 C 11.304688 16.644531 10.75 17.1875 10.75 18.175781 L 10.75 20.011719 C 10.75 21 11.304688 21.542969 12.3125 21.542969 C 13.324219 21.542969 13.882812 21 13.882812 20.011719 Z M 11.652344 18.175781 C 11.652344 17.691406 11.875 17.441406 12.3125 17.441406 C 12.75 17.441406 12.980469 17.695312 12.980469 18.175781 L 12.980469 20.011719 C 12.980469 20.492188 12.75 20.746094 12.3125 20.746094 C 11.875 20.746094 11.652344 20.5 11.652344 20.011719 Z M 11.652344 18.175781 \" />\r\n    <path d=\"M 15.277344 20.421875 C 14.820312 20.753906 14.347656 21.101562 14.347656 21.5625 L 14.347656 22.089844 C 14.347656 22.242188 14.546875 22.335938 14.683594 22.335938 L 16.621094 22.335938 C 16.753906 22.335938 16.867188 22.179688 16.867188 21.996094 C 16.867188 21.820312 16.753906 21.667969 16.621094 21.667969 L 15.132812 21.667969 L 15.132812 21.5625 C 15.132812 21.34375 15.417969 21.140625 15.753906 20.910156 C 16.246094 20.570312 16.859375 20.144531 16.859375 19.4375 C 16.859375 18.703125 16.21875 18.308594 15.613281 18.308594 C 14.839844 18.308594 14.417969 18.835938 14.417969 19.335938 C 14.417969 19.605469 14.53125 19.738281 14.765625 19.738281 C 15.019531 19.738281 15.160156 19.59375 15.160156 19.453125 C 15.160156 19.164062 15.328125 19 15.621094 19 C 15.953125 19 16.101562 19.230469 16.101562 19.460938 C 16.101562 19.820312 15.703125 20.113281 15.277344 20.421875 Z M 15.277344 20.421875 \" />\r\n    <path d=\"M 15.796875 14.328125 C 15.929688 14.417969 16.109375 14.40625 16.226562 14.304688 C 16.335938 14.210938 16.378906 14.054688 16.332031 13.921875 C 16.285156 13.777344 16.148438 13.675781 15.996094 13.675781 C 15.847656 13.675781 15.714844 13.769531 15.664062 13.90625 C 15.601562 14.058594 15.660156 14.238281 15.796875 14.328125 Z M 15.796875 14.328125 \" />\r\n    <path d=\"M 5.375 22.320312 C 5.511719 22.378906 5.675781 22.339844 5.773438 22.234375 C 5.875 22.121094 5.894531 21.957031 5.828125 21.824219 C 5.761719 21.699219 5.625 21.625 5.488281 21.636719 C 5.328125 21.648438 5.195312 21.765625 5.164062 21.921875 C 5.128906 22.085938 5.21875 22.257812 5.375 22.320312 Z M 5.375 22.320312 \" />\r\n    <path d=\"M 19.027344 18.535156 C 19.199219 18.804688 19.621094 18.703125 19.675781 18.398438 C 19.730469 18.078125 19.347656 17.859375 19.097656 18.0625 C 18.957031 18.175781 18.925781 18.386719 19.027344 18.535156 Z M 19.027344 18.535156 \" />\r\n    <path d=\"M 7.515625 14.980469 C 7.453125 14.839844 7.3125 14.75 7.160156 14.761719 C 7.003906 14.773438 6.871094 14.886719 6.835938 15.039062 C 6.765625 15.359375 7.140625 15.597656 7.398438 15.402344 C 7.527344 15.304688 7.574219 15.128906 7.515625 14.980469 Z M 7.515625 14.980469 \" />\r\n    <path d=\"M 10.054688 11.203125 C 9.933594 10.925781 9.53125 10.914062 9.402344 11.1875 C 9.335938 11.324219 9.367188 11.492188 9.476562 11.597656 C 9.589844 11.703125 9.757812 11.726562 9.890625 11.652344 C 10.050781 11.570312 10.121094 11.371094 10.054688 11.203125 Z M 10.054688 11.203125 \" />\r\n    <path d=\"M 11.394531 9.617188 C 11.269531 9.535156 11.097656 9.542969 10.976562 9.632812 C 10.863281 9.722656 10.816406 9.878906 10.855469 10.015625 C 10.898438 10.15625 11.023438 10.257812 11.167969 10.269531 C 11.324219 10.285156 11.472656 10.1875 11.53125 10.042969 C 11.589844 9.890625 11.53125 9.710938 11.394531 9.617188 Z M 11.394531 9.617188 \" />\r\n  </SvgIcon>\r\n)\r\nSulphites = pure(Sulphites)\r\nSulphites.displayName = 'Sulphites'\r\nSulphites.muiName = 'SvgIcon'\r\n\r\nexport default Sulphites\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Wheat = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 11.441406 5.878906 C 11.554688 6.007812 11.722656 6.082031 11.894531 6.082031 C 12.070312 6.082031 12.238281 6.007812 12.351562 5.878906 C 12.859375 5.304688 13.609375 4.25 13.609375 3.039062 C 13.609375 1.832031 12.859375 0.777344 12.351562 0.203125 C 12.238281 0.0742188 12.070312 0 11.898438 0 C 11.722656 0 11.554688 0.0742188 11.441406 0.199219 C 10.933594 0.777344 10.183594 1.832031 10.183594 3.039062 C 10.183594 4.246094 10.933594 5.304688 11.441406 5.878906 Z M 11.441406 5.878906 \" />\r\n    <path d=\"M 11.898438 9.835938 C 11.992188 9.839844 14.226562 9.925781 15.542969 8.664062 C 16.433594 7.808594 16.679688 6.554688 16.746094 5.800781 C 16.761719 5.636719 16.699219 5.46875 16.574219 5.351562 C 16.449219 5.234375 16.277344 5.171875 16.101562 5.1875 C 15.320312 5.25 14.007812 5.488281 13.117188 6.339844 C 12.132812 7.285156 11.933594 8.71875 11.898438 9.421875 C 11.863281 8.71875 11.664062 7.285156 10.679688 6.339844 C 9.789062 5.488281 8.476562 5.25 7.695312 5.1875 C 7.519531 5.171875 7.347656 5.234375 7.222656 5.351562 C 7.101562 5.472656 7.039062 5.636719 7.054688 5.804688 C 7.117188 6.554688 7.367188 7.808594 8.257812 8.664062 C 9.574219 9.925781 11.804688 9.839844 11.898438 9.835938 Z M 11.898438 9.835938 \" />\r\n    <path d=\"M 13.117188 10.867188 C 12.132812 11.8125 11.9375 13.246094 11.898438 13.949219 C 11.863281 13.246094 11.667969 11.8125 10.683594 10.867188 C 9.789062 10.015625 8.480469 9.777344 7.695312 9.714844 C 7.519531 9.703125 7.347656 9.761719 7.226562 9.878906 C 7.101562 10 7.039062 10.164062 7.054688 10.332031 C 7.121094 11.082031 7.367188 12.339844 8.257812 13.191406 C 9.574219 14.453125 11.804688 14.367188 11.898438 14.363281 C 11.992188 14.367188 14.226562 14.453125 15.542969 13.191406 C 16.433594 12.335938 16.679688 11.082031 16.746094 10.328125 C 16.757812 10.164062 16.695312 9.996094 16.574219 9.878906 C 16.449219 9.761719 16.277344 9.699219 16.101562 9.714844 C 15.320312 9.777344 14.007812 10.015625 13.117188 10.867188 Z M 13.117188 10.867188 \" />\r\n    <path d=\"M 13.117188 15.398438 C 12.132812 16.339844 11.9375 17.773438 11.898438 18.476562 C 11.863281 17.773438 11.667969 16.339844 10.683594 15.398438 C 9.789062 14.542969 8.480469 14.304688 7.695312 14.242188 C 7.523438 14.230469 7.351562 14.289062 7.226562 14.410156 C 7.101562 14.527344 7.039062 14.691406 7.054688 14.859375 C 7.121094 15.609375 7.367188 16.867188 8.257812 17.71875 C 9.15625 18.582031 10.488281 18.816406 11.265625 18.875 L 11.265625 22.136719 C 11.265625 22.507812 11.535156 22.808594 11.921875 22.808594 C 12.308594 22.808594 12.574219 22.507812 12.574219 22.136719 L 12.574219 18.871094 C 13.359375 18.808594 14.65625 18.566406 15.542969 17.71875 C 16.433594 16.867188 16.679688 15.609375 16.746094 14.859375 C 16.757812 14.691406 16.695312 14.527344 16.574219 14.410156 C 16.449219 14.289062 16.277344 14.230469 16.101562 14.242188 C 15.320312 14.304688 14.007812 14.542969 13.117188 15.398438 Z M 13.117188 15.398438 \" />\r\n  </SvgIcon>\r\n)\r\nWheat = pure(Wheat)\r\nWheat.displayName = 'Wheat'\r\nWheat.muiName = 'SvgIcon'\r\n\r\nexport default Wheat\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Tartrazine = props => (\r\n  <SvgIcon {...props}>\r\n    <text x=\"12\" y=\"12\" fontSize=\"10\" textAnchor=\"middle\" dominantBaseline=\"middle\">\r\n      E102\r\n    </text>\r\n  </SvgIcon>\r\n)\r\nTartrazine = pure(Tartrazine)\r\nTartrazine.displayName = 'Tartrazine'\r\nTartrazine.muiName = 'SvgIcon'\r\n\r\nexport default Tartrazine\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/rice/\r\nlet Rice = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M22,11H19.7C19.4,9.9 18.9,8.8 18.2,8L21.6,2.6L19.9,1.5L16.7,6.6C16.3,6.3 16,6.1 15.5,5.9L16.4,2.3L14.5,1.8L13.7,5.2C13.1,5.1 12.6,5 12,5C8.3,5 5.2,7.6 4.3,11H2C2,15.1 4.5,18.6 8,20.2V22H16V20.2C19.5,18.6 22,15.1 22,11M12,7C14.6,7 16.8,8.7 17.6,11H6.4C7.2,8.7 9.4,7 12,7Z\" />\r\n  </SvgIcon>\r\n)\r\nRice = pure(Rice)\r\nRice.displayName = 'Rice'\r\nRice.muiName = 'SvgIcon'\r\n\r\nexport default Rice\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/food-steak/\r\nlet RedMeat = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M11.9 2C8 2 4.9 5.4 5 9.3C5.1 11.9 6.6 14.1 8.7 15.2C10.1 15.9 11 17.3 11 18.8V19C11 20.7 12.3 22 14 22C18 22 19 17 19 9C19 9 19 2 11.9 2M14 20C13.4 20 13 19.6 13 19V18.8C13 16.6 11.7 14.5 9.7 13.4C8.1 12.6 7.1 11 7 9.2C7 7.9 7.5 6.5 8.4 5.5C9.3 4.5 10.6 4 11.8 4C16.7 4 17 8.2 17 9C17 18.9 15.3 20 14 20M15.8 7.6L8.3 10.3C8.1 10 8 9.6 8 9.1C8 8.4 8.2 7.8 8.5 7.1L13.7 5.2C14.9 5.8 15.5 6.7 15.8 7.6M12.9 15.1L15.7 14.1C15.6 15.6 15.3 16.7 15.1 17.4L13.8 17.9C13.8 16.9 13.5 16 12.9 15.1M16 9.2C16 10.4 16 11.5 15.9 12.4L11.9 13.9C11.4 13.4 10.8 12.9 10.1 12.6C9.7 12.4 9.3 12.1 9 11.8L16 9.2Z\" />\r\n  </SvgIcon>\r\n)\r\nRedMeat = pure(RedMeat)\r\nRedMeat.displayName = 'Red Meat'\r\nRedMeat.muiName = 'SvgIcon'\r\n\r\nexport default RedMeat\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/food-drumstick-outline/\r\nlet PoultryMeat = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M15.71 4C16.54 4 17.33 4.22 18 4.66C19.14 5.4 19.84 6.53 20 7.84C20.11 9.13 19.66 10.4 18.75 11.31C18.05 12 17.16 12.44 16.18 12.54C14.27 12.74 12.59 13.5 11.34 14.77C11.13 14.97 10.9 15 10.77 15C10.65 15 10.42 14.97 10.21 14.77L9.22 13.78C9.04 13.6 9 13.39 9 13.25C9 13 9.11 12.78 9.32 12.57C10.53 11.35 11.27 9.73 11.45 7.87C11.58 6.54 12.29 5.4 13.45 4.65C14.11 4.22 14.89 4 15.71 4M15.71 2C14.54 2 13.37 2.32 12.36 2.97C10.6 4.1 9.63 5.86 9.46 7.68C9.33 9 8.83 10.23 7.91 11.15L7.88 11.18C6.72 12.34 6.72 14.11 7.81 15.19L8.8 16.18C9.35 16.73 10.06 17 10.77 17S12.2 16.73 12.75 16.18C13.72 15.21 15 14.68 16.39 14.53C17.76 14.38 19.1 13.78 20.16 12.73C22.93 9.96 22.57 5.26 19.09 3C18.08 2.33 16.9 2 15.71 2M6.26 19.86C6.53 20.42 6.44 21.1 5.97 21.56C5.39 22.15 4.44 22.15 3.85 21.56C3.58 21.29 3.44 20.94 3.42 20.58C3.06 20.56 2.71 20.42 2.44 20.15C1.85 19.56 1.85 18.61 2.44 18.03C2.9 17.57 3.59 17.47 4.14 17.74L6.62 15.31C6.76 15.5 6.92 15.72 7.1 15.9L8.09 16.89C8.3 17.09 8.5 17.26 8.76 17.41L6.26 19.86Z\" />\r\n  </SvgIcon>\r\n)\r\nPoultryMeat = pure(PoultryMeat)\r\nPoultryMeat.displayName = 'Poultry Meat'\r\nPoultryMeat.muiName = 'SvgIcon'\r\n\r\nexport default PoultryMeat\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/fruit-grapes-outline/\r\nlet Fruit = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19 12C19 10.61 18.05 9.47 16.78 9.12C16.92 8.78 17 8.4 17 8C17 6.34 15.66 5 14 5C13.57 5 13.17 5.1 12.81 5.26C13 4.19 13.39 2.59 14.4 2.2L13.6 1C11.9 1.77 11.4 4.09 11.26 5.29C10.87 5.11 10.45 5 10 5C8.34 5 7 6.34 7 8C7 8.4 7.08 8.77 7.22 9.12C5.94 9.46 5 10.62 5 12C5 13.39 5.95 14.54 7.23 14.88C7.09 15.22 7 15.6 7 16C7 17.39 7.94 18.54 9.22 18.88C9.08 19.23 9 19.61 9 20C9 21.66 10.34 23 12 23S15 21.66 15 20C15 19.61 14.92 19.23 14.78 18.88C16.06 18.54 17 17.39 17 16C17 15.6 16.92 15.23 16.77 14.88C18.05 14.54 19 13.39 19 12M16.31 9.88V9.9H16.3L16.31 9.88M14 6.5C14.83 6.5 15.5 7.17 15.5 8S14.83 9.5 14 9.5 12.5 8.83 12.5 8 13.17 6.5 14 6.5M13.5 12C13.5 12.83 12.83 13.5 12 13.5S10.5 12.83 10.5 12 11.17 10.5 12 10.5 13.5 11.17 13.5 12M10 6.5C10.83 6.5 11.5 7.17 11.5 8S10.83 9.5 10 9.5 8.5 8.83 8.5 8 9.17 6.5 10 6.5M6.5 12C6.5 11.17 7.17 10.5 8 10.5S9.5 11.17 9.5 12 8.83 13.5 8 13.5 6.5 12.83 6.5 12M8.5 16C8.5 15.17 9.17 14.5 10 14.5S11.5 15.17 11.5 16 10.83 17.5 10 17.5 8.5 16.83 8.5 16M12 21.5C11.17 21.5 10.5 20.83 10.5 20S11.17 18.5 12 18.5 13.5 19.17 13.5 20 12.83 21.5 12 21.5M14 17.5C13.17 17.5 12.5 16.83 12.5 16S13.17 14.5 14 14.5 15.5 15.17 15.5 16 14.83 17.5 14 17.5M16 13.5C15.17 13.5 14.5 12.83 14.5 12S15.17 10.5 16 10.5 17.5 11.17 17.5 12 16.83 13.5 16 13.5Z\" />\r\n  </SvgIcon>\r\n)\r\nFruit = pure(Fruit)\r\nFruit.displayName = 'Fruit'\r\nFruit.muiName = 'SvgIcon'\r\n\r\nexport default Fruit\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/corn/\r\nlet Corn = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M11,12H8.82C9.62,12.5 10.35,13.07 11,13.68V12M7,11C7.27,5.88 9.37,2 12,2C14.66,2 16.77,5.94 17,11.12C18.5,10.43 20.17,10 22,10C16.25,12.57 18.25,22 12,22C6,22 7.93,12.57 2,10C3.82,10 5.5,10.4 7,11M11,11V9H8.24L8.03,11H11M11,8V6H9.05C8.8,6.6 8.6,7.27 8.43,8H11M11,5V3.3C10.45,3.63 9.95,4.22 9.5,5H11M12,3V5H13V6H12V8H14V9H12V11H15V12H12V14H14V15H12.23C13.42,16.45 14.15,18 14.32,19.23C15.31,17.56 15.96,14.84 16,11.76C15.94,7 14.13,3 12,3Z\" />\r\n  </SvgIcon>\r\n)\r\nCorn = pure(Corn)\r\nCorn.displayName = 'Corn'\r\nCorn.muiName = 'SvgIcon'\r\n\r\nexport default Corn\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://www.svgrepo.com/svg/205327/garlic (resized to 24x24)\r\nlet Garlic = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 10.648438 1.605469 C 10.425781 1.566406 10.21875 1.710938 10.179688 1.925781 C 9.628906 4.910156 8.488281 6.890625 7.378906 8.804688 C 6.054688 11.101562 4.800781 13.269531 4.800781 16.800781 C 4.800781 18.921875 5.730469 20.925781 7.347656 22.296875 C 7.425781 22.359375 7.515625 22.390625 7.609375 22.390625 C 7.722656 22.390625 7.835938 22.34375 7.914062 22.25 C 8.054688 22.082031 8.035156 21.828125 7.867188 21.6875 C 6.425781 20.464844 5.601562 18.6875 5.601562 16.800781 C 5.601562 13.484375 6.800781 11.40625 8.074219 9.203125 C 9.214844 7.230469 10.390625 5.191406 10.96875 2.074219 C 11.007812 1.855469 10.863281 1.648438 10.648438 1.605469 Z M 10.648438 1.605469 \" />\r\n    <path d=\"M 17.261719 17.203125 C 17.042969 17.171875 16.839844 17.320312 16.804688 17.539062 C 16.714844 18.117188 16.453125 18.601562 16.449219 18.609375 C 16.34375 18.800781 16.414062 19.042969 16.609375 19.152344 C 16.667969 19.183594 16.734375 19.199219 16.800781 19.199219 C 16.941406 19.199219 17.078125 19.125 17.148438 18.992188 C 17.164062 18.96875 17.484375 18.382812 17.59375 17.660156 C 17.628906 17.441406 17.480469 17.238281 17.261719 17.203125 Z M 17.261719 17.203125 \" />\r\n    <path d=\"M 16.734375 12.976562 C 16.609375 12.792969 16.363281 12.746094 16.179688 12.867188 C 15.996094 12.988281 15.945312 13.238281 16.066406 13.421875 C 16.785156 14.5 16.800781 15.589844 16.800781 15.601562 C 16.800781 15.820312 16.980469 16 17.199219 16 C 17.421875 16 17.601562 15.820312 17.601562 15.601562 C 17.601562 15.546875 17.589844 14.265625 16.734375 12.976562 Z M 16.734375 12.976562 \" />\r\n    <path d=\"M 19.960938 8.628906 C 17.988281 6.414062 15.953125 4.125 15.191406 0.320312 C 15.148438 0.105469 14.9375 -0.0351562 14.722656 0.0078125 C 14.503906 0.0507812 14.363281 0.261719 14.40625 0.480469 C 15.210938 4.492188 17.417969 6.972656 19.363281 9.160156 C 21.421875 11.476562 23.199219 13.472656 23.199219 16.800781 C 23.199219 20.328125 20.328125 23.199219 16.800781 23.199219 C 16.378906 23.199219 15.164062 23.136719 14.578125 22.84375 C 14.480469 22.792969 14.363281 22.785156 14.261719 22.824219 C 13.59375 23.074219 12.832031 23.199219 12 23.199219 C 11.160156 23.199219 10.398438 23.074219 9.742188 22.824219 C 9.65625 22.792969 9.5625 22.792969 9.472656 22.820312 C 8.351562 23.195312 7.210938 23.199219 7.199219 23.199219 C 3.671875 23.199219 0.800781 20.328125 0.800781 16.800781 C 0.800781 13.472656 2.578125 11.476562 4.636719 9.160156 C 6.441406 7.132812 8.484375 4.835938 9.410156 1.277344 C 9.476562 1.019531 9.53125 0.800781 10 0.800781 L 12.839844 0.800781 C 13.292969 4.648438 14.691406 7.0625 15.925781 9.203125 C 17.199219 11.40625 18.398438 13.484375 18.398438 16.800781 C 18.398438 18.691406 17.570312 20.472656 16.125 21.695312 C 15.957031 21.835938 15.933594 22.089844 16.078125 22.257812 C 16.21875 22.425781 16.46875 22.449219 16.640625 22.304688 C 18.265625 20.933594 19.199219 18.925781 19.199219 16.800781 C 19.199219 13.269531 17.945312 11.101562 16.621094 8.804688 C 15.324219 6.5625 13.984375 4.246094 13.597656 0.359375 C 13.578125 0.15625 13.40625 0 13.199219 0 L 10 0 C 8.914062 0 8.703125 0.8125 8.628906 1.097656 C 7.757812 4.445312 5.867188 6.574219 4.039062 8.628906 C 1.960938 10.964844 0 13.167969 0 16.800781 C 0 20.769531 3.230469 24 7.199219 24 C 7.25 24 8.390625 23.996094 9.59375 23.621094 C 10.308594 23.875 11.117188 24 12 24 C 12.863281 24 13.664062 23.875 14.382812 23.628906 C 15.28125 23.996094 16.734375 24 16.800781 24 C 20.769531 24 24 20.769531 24 16.800781 C 24 13.167969 22.039062 10.964844 19.960938 8.628906 Z M 19.960938 8.628906 \" />\r\n    <path d=\"M 5.320312 10.640625 L 5.917969 9.839844 C 6.050781 9.664062 6.015625 9.414062 5.839844 9.28125 C 5.664062 9.148438 5.410156 9.183594 5.28125 9.359375 L 4.679688 10.160156 C 4.546875 10.335938 4.582031 10.585938 4.761719 10.71875 C 4.832031 10.773438 4.914062 10.800781 5 10.800781 C 5.121094 10.800781 5.242188 10.746094 5.320312 10.640625 Z M 5.320312 10.640625 \" />\r\n    <path d=\"M 8.46875 10.179688 C 7.648438 11.410156 7.238281 12.621094 7.21875 12.671875 C 7.152344 12.882812 7.261719 13.109375 7.472656 13.179688 C 7.515625 13.195312 7.558594 13.199219 7.601562 13.199219 C 7.765625 13.199219 7.921875 13.09375 7.980469 12.925781 C 7.984375 12.914062 8.375 11.757812 9.132812 10.621094 C 9.253906 10.4375 9.207031 10.191406 9.023438 10.066406 C 8.835938 9.945312 8.589844 9.996094 8.46875 10.179688 Z M 8.46875 10.179688 \" />\r\n    <path d=\"M 20.054688 20.199219 C 19.816406 20.609375 19.402344 20.851562 19.398438 20.855469 C 19.210938 20.964844 19.144531 21.207031 19.253906 21.398438 C 19.328125 21.527344 19.460938 21.601562 19.601562 21.601562 C 19.667969 21.601562 19.738281 21.582031 19.800781 21.546875 C 19.824219 21.53125 20.394531 21.199219 20.746094 20.601562 C 20.855469 20.410156 20.792969 20.167969 20.601562 20.054688 C 20.410156 19.941406 20.167969 20.007812 20.054688 20.199219 Z M 20.054688 20.199219 \" />\r\n    <path d=\"M 2.304688 15.222656 C 2.09375 15.148438 1.867188 15.265625 1.796875 15.472656 C 1.359375 16.785156 1.78125 18.074219 1.796875 18.125 C 1.855469 18.292969 2.011719 18.402344 2.175781 18.402344 C 2.21875 18.402344 2.261719 18.394531 2.304688 18.378906 C 2.511719 18.308594 2.628906 18.082031 2.558594 17.875 C 2.554688 17.863281 2.203125 16.789062 2.558594 15.726562 C 2.628906 15.515625 2.511719 15.289062 2.304688 15.222656 Z M 2.304688 15.222656 \" />\r\n    <path d=\"M 21.621094 15.328125 C 21.675781 15.496094 21.832031 15.601562 22 15.601562 C 22.042969 15.601562 22.085938 15.59375 22.125 15.578125 C 22.335938 15.507812 22.449219 15.285156 22.378906 15.074219 C 22.363281 15.023438 21.953125 13.808594 21.132812 12.578125 C 21.011719 12.394531 20.761719 12.34375 20.578125 12.46875 C 20.394531 12.589844 20.34375 12.839844 20.46875 13.023438 C 21.226562 14.160156 21.617188 15.316406 21.621094 15.328125 Z M 21.621094 15.328125 \" />\r\n    <path d=\"M 11.792969 7.265625 L 11.996094 6.066406 C 12.03125 5.847656 11.882812 5.640625 11.664062 5.605469 C 11.445312 5.570312 11.242188 5.714844 11.207031 5.933594 L 11.003906 7.132812 C 10.96875 7.351562 11.117188 7.558594 11.335938 7.59375 C 11.355469 7.597656 11.378906 7.601562 11.402344 7.601562 C 11.59375 7.601562 11.761719 7.460938 11.792969 7.265625 Z M 11.792969 7.265625 \" />\r\n    <path d=\"M 11.199219 21.199219 C 11.230469 21.199219 11.265625 21.195312 11.296875 21.1875 C 11.511719 21.136719 11.640625 20.917969 11.589844 20.703125 C 11.585938 20.6875 11.199219 19.132812 11.199219 17.601562 C 11.199219 17.378906 11.019531 17.199219 10.800781 17.199219 C 10.578125 17.199219 10.398438 17.378906 10.398438 17.601562 C 10.398438 19.230469 10.792969 20.828125 10.8125 20.898438 C 10.855469 21.078125 11.019531 21.199219 11.199219 21.199219 Z M 11.199219 21.199219 \" />\r\n    <path d=\"M 10.804688 8.742188 C 10.40625 11.539062 10.398438 13.976562 10.398438 14 C 10.398438 14.222656 10.578125 14.398438 10.800781 14.398438 C 11.019531 14.398438 11.199219 14.222656 11.199219 14 C 11.199219 13.976562 11.203125 11.59375 11.59375 8.855469 C 11.628906 8.636719 11.476562 8.4375 11.257812 8.40625 C 11.035156 8.375 10.835938 8.523438 10.804688 8.742188 Z M 10.804688 8.742188 \" />\r\n  </SvgIcon>\r\n)\r\nGarlic = pure(Garlic)\r\nGarlic.displayName = 'Garlic'\r\nGarlic.muiName = 'SvgIcon'\r\n\r\nexport default Garlic\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://pictogrammers.com/library/mdi/icon/sprout-outline/\r\nlet Balsam = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M23,4.1V2.3L21.2,2.1C21.1,2.1 20.5,2 19.5,2C15.4,2 12.4,3.2 10.7,5.3C9.4,4.5 7.6,4 5.5,4C4.5,4 3.8,4.1 3.8,4.1L1.9,4.4L2,6.1C2.1,9.1 3.6,14.8 8.8,14.8C8.9,14.8 8.9,14.8 9,14.8V18.2C5.2,18.7 2,20 2,20V22H22V20C22,20 18.8,18.7 15,18.2V15C21.3,14.9 23,7.8 23,4.1M12,18C11.7,18 11.3,18 11,18V12.4C11,12.4 10.8,9 8,9C8,9 9.5,9.8 9.9,12.7C9.5,12.8 9.1,12.8 8.8,12.8C4.2,12.8 4,6.1 4,6.1C4,6.1 4.6,6 5.5,6C7.4,6 10.5,6.4 11.4,9.1C11.9,4.6 17,4 19.5,4C20.4,4 21,4.1 21,4.1C21,4.1 21,13.1 14.7,13.1C14.5,13.1 14.2,13.1 14,13.1C14,11.1 16,8.1 16,8.1C13,9.1 13,13 13,13V18C12.7,18 12.3,18 12,18Z\" />\r\n  </SvgIcon>\r\n)\r\nBalsam = pure(Balsam)\r\nBalsam.displayName = 'Balsam'\r\nBalsam.muiName = 'SvgIcon'\r\n\r\nexport default Balsam\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\n//https://www.svgrepo.com/svg/481611/buckwheat (resized to 24x24)\r\nlet Buckwheat = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M 8.851562 11.089844 C 9.203125 11.054688 9.597656 11.007812 10.035156 10.945312 C 11.511719 10.734375 13.367188 10.34375 14.800781 9.691406 C 15.761719 9.257812 16.507812 8.707031 16.875 8.117188 C 17.46875 7.1875 17.769531 6.144531 17.769531 5.210938 C 17.769531 4.507812 17.601562 3.867188 17.285156 3.355469 C 16.964844 2.839844 16.5 2.433594 15.8125 2.167969 C 15.441406 2.027344 15.003906 1.933594 14.492188 1.902344 C 14.207031 2.164062 13.855469 2.53125 13.476562 2.988281 C 12.90625 3.667969 12.269531 4.527344 11.640625 5.496094 C 10.5625 7.15625 9.515625 9.140625 8.851562 11.089844 Z M 8.851562 11.089844 \" />\r\n    <path d=\"M 12.238281 1.953125 C 12.492188 1.652344 12.730469 1.390625 12.960938 1.148438 C 12.851562 1.078125 12.738281 1.015625 12.617188 0.964844 C 12.296875 0.828125 11.9375 0.757812 11.5625 0.757812 C 10.824219 0.757812 10.003906 1.03125 9.296875 1.535156 C 8.589844 2.042969 8 2.773438 7.679688 3.65625 C 7.4375 4.3125 7.332031 5.164062 7.332031 6.058594 C 7.332031 7.238281 7.511719 8.484375 7.714844 9.515625 C 8.910156 6.535156 10.75 3.738281 12.238281 1.953125 Z M 12.238281 1.953125 \" />\r\n    <path d=\"M 16.703125 14.066406 C 16.25 14.105469 15.859375 14.199219 15.523438 14.324219 C 15.0625 14.5 14.707031 14.742188 14.421875 15.035156 C 13.855469 15.613281 13.566406 16.425781 13.5625 17.367188 C 13.5625 18.304688 13.867188 19.34375 14.460938 20.277344 C 14.804688 20.828125 15.480469 21.347656 16.355469 21.765625 C 17.226562 22.183594 18.28125 22.507812 19.3125 22.742188 C 20.464844 23 21.59375 23.15625 22.4375 23.242188 C 21.371094 20.199219 19.382812 17.089844 17.859375 15.28125 C 17.414062 14.746094 17.003906 14.328125 16.703125 14.066406 Z M 16.703125 14.066406 \" />\r\n    <path d=\"M 23.652344 15.8125 C 23.332031 14.933594 22.742188 14.203125 22.035156 13.695312 C 21.328125 13.1875 20.507812 12.914062 19.773438 12.914062 C 19.394531 12.914062 19.039062 12.984375 18.714844 13.121094 C 18.566406 13.1875 18.429688 13.265625 18.292969 13.359375 C 18.546875 13.617188 18.8125 13.910156 19.09375 14.246094 C 19.710938 14.980469 20.382812 15.890625 21.046875 16.914062 C 21.984375 18.359375 22.902344 20.035156 23.601562 21.769531 C 23.8125 20.726562 24 19.433594 24 18.214844 C 24 17.320312 23.894531 16.472656 23.652344 15.8125 Z M 23.652344 15.8125 \" />\r\n    <path d=\"M 9.195312 15.230469 L 9.246094 15.402344 C 8.890625 15.507812 8.242188 15.808594 7.484375 16.257812 C 6.722656 16.707031 5.835938 17.304688 4.917969 18.011719 C 3.480469 19.113281 1.976562 20.488281 0.753906 21.953125 C 0.9375 21.996094 1.128906 22.039062 1.335938 22.085938 C 2.574219 22.351562 4.207031 22.617188 5.707031 22.617188 C 6.425781 22.617188 7.113281 22.554688 7.707031 22.417969 C 8.300781 22.28125 8.792969 22.066406 9.144531 21.785156 C 9.792969 21.28125 10.308594 20.664062 10.65625 20.019531 C 11.007812 19.375 11.1875 18.699219 11.1875 18.078125 C 11.1875 17.441406 11.007812 16.859375 10.613281 16.335938 C 10.304688 15.925781 9.847656 15.542969 9.195312 15.230469 Z M 9.195312 15.230469 \" />\r\n    <path d=\"M 6.667969 14.871094 C 7.140625 14.589844 7.570312 14.363281 7.960938 14.183594 C 7.742188 13.808594 7.445312 13.519531 7.082031 13.304688 C 6.617188 13.03125 6.03125 12.882812 5.402344 12.882812 C 4.1875 12.878906 2.84375 13.441406 1.964844 14.515625 C 1.546875 15.019531 1.179688 15.726562 0.894531 16.507812 C 0.605469 17.292969 0.386719 18.148438 0.230469 18.957031 C 0.132812 19.460938 0.0585938 19.9375 0 20.375 C 2.097656 18.019531 4.699219 16.035156 6.667969 14.871094 Z M 6.667969 14.871094 \" />\r\n  </SvgIcon>\r\n)\r\nBuckwheat = pure(Buckwheat)\r\nBuckwheat.displayName = 'Buckwheat'\r\nBuckwheat.muiName = 'SvgIcon'\r\n\r\nexport default Buckwheat\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport map from 'lodash/map'\r\n\r\nimport Diet from './Diet'\r\nimport Allergen from './Allergen'\r\nimport Gender from './Gender'\r\n\r\nimport Celery from 'pmt-ui/svg-icons/food/celery'\r\nimport Cheese from 'pmt-ui/svg-icons/food/cheese'\r\nimport Crab from 'pmt-ui/svg-icons/food/crab'\r\nimport Egg from 'pmt-ui/svg-icons/food/egg'\r\nimport Fish from 'pmt-ui/svg-icons/food/fish'\r\nimport Lupine from 'pmt-ui/svg-icons/food/lupine'\r\nimport Milk from 'pmt-ui/svg-icons/food/milk'\r\nimport Mustard from 'pmt-ui/svg-icons/food/mustard'\r\nimport Nut from 'pmt-ui/svg-icons/food/nut'\r\nimport Peanut from 'pmt-ui/svg-icons/food/peanuts'\r\nimport Shellfish from 'pmt-ui/svg-icons/food/shellfish'\r\nimport Sesame from 'pmt-ui/svg-icons/food/sesame'\r\nimport Soy from 'pmt-ui/svg-icons/food/soy'\r\nimport Sulphites from 'pmt-ui/svg-icons/food/sulphites'\r\nimport Wheat from 'pmt-ui/svg-icons/food/wheat'\r\nimport Tartrazine from 'pmt-ui/svg-icons/food/tartrazine'\r\nimport Rice from 'pmt-ui/svg-icons/food/rice'\r\nimport RedMeat from 'pmt-ui/svg-icons/food/red_meat'\r\nimport PoultryMeat from 'pmt-ui/svg-icons/food/poultry_meat'\r\nimport Fruit from 'pmt-ui/svg-icons/food/fruit'\r\nimport Corn from 'pmt-ui/svg-icons/food/corn'\r\nimport Garlic from 'pmt-ui/svg-icons/food/garlic'\r\nimport Balsam from 'pmt-ui/svg-icons/food/balsam'\r\nimport Buckwheat from 'pmt-ui/svg-icons/food/buckwheat'\r\n\r\nexport { default as Allergen } from './Allergen'\r\nexport { default as Diet } from './Diet'\r\nexport { default as Gender } from './Gender'\r\n\r\nexport const DEFAULT_BIRTHDATE = -2208988800000\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getGenderLabel = gender => {\r\n  switch (gender) {\r\n    case 0:\r\n      return tr('global.gender.NONE')\r\n    case 1:\r\n      return tr('global.gender.MALE')\r\n    case 2:\r\n      return tr('global.gender.FEMALE')\r\n\r\n    default:\r\n      return gender\r\n  }\r\n}\r\n\r\nexport const getGenderOptions = () =>\r\n  map(Gender, gender => ({\r\n    value: gender,\r\n    label: getGenderLabel(gender),\r\n  }))\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getDietLabel = diet => {\r\n  switch (diet) {\r\n    case Diet.NONE:\r\n      return tr('global.diet.NONE')\r\n    case Diet.KOSHER:\r\n      return tr('global.diet.KOSHER')\r\n    case Diet.HALAL:\r\n      return tr('global.diet.HALAL')\r\n    case Diet.VEGETARIAN:\r\n      return tr('global.diet.VEGETARIAN')\r\n    case Diet.VEGAN:\r\n      return tr('global.diet.VEGAN')\r\n    default:\r\n      return diet\r\n  }\r\n}\r\n\r\nexport const getDietsOptions = () =>\r\n  map(Diet, diet => ({\r\n    value: diet,\r\n    label: getDietLabel(diet),\r\n  }))\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getAllergenLabel = allergen => {\r\n  switch (allergen) {\r\n    case Allergen.BALSAM_OF_PERU:\r\n      return tr('global.allergen.BALSAM_OF_PERU')\r\n    case Allergen.BUCKWHEAT:\r\n      return tr('global.allergen.BUCKWHEAT')\r\n    case Allergen.CELERY:\r\n      return tr('global.allergen.CELERY')\r\n    case Allergen.CHEESE:\r\n      return tr('global.allergen.CHEESE')\r\n    case Allergen.CORN:\r\n      return tr('global.allergen.CORN')\r\n    case Allergen.CRUSTACEAN:\r\n      return tr('global.allergen.CRUSTACEAN')\r\n    case Allergen.EGG:\r\n      return tr('global.allergen.EGG')\r\n    case Allergen.FISH:\r\n      return tr('global.allergen.FISH')\r\n    case Allergen.FRUIT:\r\n      return tr('global.allergen.FRUIT')\r\n    case Allergen.GARLIC:\r\n      return tr('global.allergen.GARLIC')\r\n    case Allergen.LACTOSE:\r\n      return tr('global.allergen.LACTOSE')\r\n    case Allergen.LUPINE:\r\n      return tr('global.allergen.LUPINE')\r\n    case Allergen.MUSTARD:\r\n      return tr('global.allergen.MUSTARD')\r\n    case Allergen.PEANUT:\r\n      return tr('global.allergen.PEANUT')\r\n    case Allergen.POULTRY_MEAT:\r\n      return tr('global.allergen.POULTRY_MEAT')\r\n    case Allergen.RED_MEAT:\r\n      return tr('global.allergen.RED_MEAT')\r\n    case Allergen.RICE:\r\n      return tr('global.allergen.RICE')\r\n    case Allergen.SESAME:\r\n      return tr('global.allergen.SESAME')\r\n    case Allergen.SHELLFISH:\r\n      return tr('global.allergen.SHELLFISH')\r\n    case Allergen.SOYA:\r\n      return tr('global.allergen.SOYA')\r\n    case Allergen.SULPHITES:\r\n      return tr('global.allergen.SULPHITES')\r\n    case Allergen.TARTRAZINE:\r\n      return tr('global.allergen.TARTRAZINE')\r\n\r\n    case Allergen.GLUTEN:\r\n      return tr('global.allergen.GLUTEN')\r\n    case Allergen.GLUTEN_OATS:\r\n      return tr('global.allergen.GLUTEN_OATS')\r\n    case Allergen.GLUTEN_WHEAT:\r\n      return tr('global.allergen.GLUTEN_WHEAT')\r\n    case Allergen.GLUTEN_KAMUT:\r\n      return tr('global.allergen.GLUTEN_KAMUT')\r\n    case Allergen.GLUTEN_SPELT:\r\n      return tr('global.allergen.GLUTEN_SPELT')\r\n    case Allergen.GLUTEN_GREEN_SPELT:\r\n      return tr('global.allergen.GLUTEN_GREEN_SPELT')\r\n    case Allergen.GLUTEN_EINKORN:\r\n      return tr('global.allergen.GLUTEN_EINKORN')\r\n    case Allergen.GLUTEN_RYE:\r\n      return tr('global.allergen.GLUTEN_RYE')\r\n    case Allergen.GLUTEN_BARLEY:\r\n      return tr('global.allergen.GLUTEN_BARLEY')\r\n    case Allergen.GLUTEN_EMMER:\r\n      return tr('global.allergen.GLUTEN_EMMER')\r\n    case Allergen.GLUTEN_TRITICALE:\r\n      return tr('global.allergen.GLUTEN_TRITICALE')\r\n\r\n    case Allergen.NUTS:\r\n      return tr('global.allergen.NUTS')\r\n    case Allergen.NUTS_ALMONDS:\r\n      return tr('global.allergen.NUTS_ALMONDS')\r\n    case Allergen.NUTS_HAZELNUTS:\r\n      return tr('global.allergen.NUTS_HAZELNUTS')\r\n    case Allergen.NUTS_WALNUTS:\r\n      return tr('global.allergen.NUTS_WALNUTS')\r\n    case Allergen.NUTS_CASHEW:\r\n      return tr('global.allergen.NUTS_CASHEW')\r\n    case Allergen.NUTS_PECANS:\r\n      return tr('global.allergen.NUTS_PECANS')\r\n    case Allergen.NUTS_BRAZIL:\r\n      return tr('global.allergen.NUTS_BRAZIL')\r\n    case Allergen.NUTS_PISTACHES:\r\n      return tr('global.allergen.NUTS_PISTACHES')\r\n    case Allergen.NUTS_MACADAMIA_OR_QUEENSLAND:\r\n      return tr('global.allergen.NUTS_MACADAMIA_OR_QUEENSLAND')\r\n\r\n    default:\r\n      return allergen\r\n  }\r\n}\r\n\r\nexport const getAllergenIcon = allergen => {\r\n  switch (allergen) {\r\n    case Allergen.BALSAM_OF_PERU:\r\n      return <Balsam />\r\n    case Allergen.BUCKWHEAT:\r\n      return <Buckwheat />\r\n    case Allergen.CELERY:\r\n      return <Celery />\r\n    case Allergen.CHEESE:\r\n      return <Cheese />\r\n    case Allergen.CORN:\r\n      return <Corn />\r\n    case Allergen.CRUSTACEAN:\r\n      return <Crab />\r\n    case Allergen.EGG:\r\n      return <Egg />\r\n    case Allergen.FISH:\r\n      return <Fish />\r\n    case Allergen.FRUIT:\r\n      return <Fruit />\r\n    case Allergen.GARLIC:\r\n      return <Garlic />\r\n    case Allergen.LACTOSE:\r\n      return <Milk />\r\n    case Allergen.LUPINE:\r\n      return <Lupine />\r\n    case Allergen.MUSTARD:\r\n      return <Mustard />\r\n    case Allergen.PEANUT:\r\n      return <Peanut />\r\n    case Allergen.POULTRY_MEAT:\r\n      return <PoultryMeat />\r\n    case Allergen.RED_MEAT:\r\n      return <RedMeat />\r\n    case Allergen.RICE:\r\n      return <Rice />\r\n    case Allergen.SESAME:\r\n      return <Sesame />\r\n    case Allergen.SHELLFISH:\r\n      return <Shellfish />\r\n    case Allergen.SOYA:\r\n      return <Soy />\r\n    case Allergen.SULPHITES:\r\n      return <Sulphites />\r\n    case Allergen.TARTRAZINE:\r\n      return <Tartrazine />\r\n\r\n    case Allergen.GLUTEN:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_OATS:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_WHEAT:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_KAMUT:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_SPELT:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_GREEN_SPELT:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_EINKORN:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_RYE:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_BARLEY:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_EMMER:\r\n      return <Wheat />\r\n    case Allergen.GLUTEN_TRITICALE:\r\n      return <Wheat />\r\n\r\n    case Allergen.NUTS:\r\n      return <Nut />\r\n    case Allergen.NUTS_ALMONDS:\r\n      return <Nut />\r\n    case Allergen.NUTS_HAZELNUTS:\r\n      return <Nut />\r\n    case Allergen.NUTS_WALNUTS:\r\n      return <Nut />\r\n    case Allergen.NUTS_CASHEW:\r\n      return <Nut />\r\n    case Allergen.NUTS_PECANS:\r\n      return <Nut />\r\n    case Allergen.NUTS_BRAZIL:\r\n      return <Nut />\r\n    case Allergen.NUTS_PISTACHES:\r\n      return <Nut />\r\n    case Allergen.NUTS_MACADAMIA_OR_QUEENSLAND:\r\n      return <Nut />\r\n\r\n    default:\r\n      return null\r\n  }\r\n}\r\n\r\nexport const getAllergensOptions = () =>\r\n  map(Allergen, allergen => ({\r\n    value: allergen,\r\n    label: getAllergenLabel(allergen),\r\n    icon: getAllergenIcon(allergen),\r\n  }))\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const DEFAULT_DIETARY_PREFERENCES = {\r\n  diet: Diet.NONE,\r\n  allergens: [],\r\n}\r\n","import React, { Fragment } from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport Autocomplete from '@material-ui/lab/Autocomplete'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Chip from '@material-ui/core/Chip'\r\n\r\nimport { findOnArray } from 'pmt-utils/array'\r\n\r\nimport { getAllergensOptions } from '../../constants'\r\n\r\nconst AllergenChooser = ({ value, onChange, limitTags = -1, ...otherProps }) => {\r\n  const allergensOptions = getAllergensOptions()\r\n\r\n  return (\r\n    <Autocomplete\r\n      fullWidth\r\n      multiple\r\n      limitTags={limitTags}\r\n      options={allergensOptions}\r\n      disableCloseOnSelect\r\n      getOptionLabel={({ label }) => label}\r\n      renderOption={(option, { selected }) => (\r\n        <Fragment>\r\n          <Checkbox size=\"small\" style={{ marginRight: 8 }} checked={selected} color=\"primary\" />\r\n          {option.label}\r\n        </Fragment>\r\n      )}\r\n      renderInput={params => (\r\n        <TextField {...params} variant=\"standard\" label={tr('global.allergen.chooser.label')} />\r\n      )}\r\n      renderTags={(tag, getTagProps) =>\r\n        tag.map((option, index) => (\r\n          <Chip {...getTagProps({ index })} icon={option.icon} label={option.label} />\r\n        ))\r\n      }\r\n      onChange={(e, newValues) => {\r\n        onChange(newValues.map(({ value }) => value))\r\n      }}\r\n      value={value.map(v => findOnArray(allergensOptions, option => option.value === v))}\r\n      {...otherProps}\r\n    />\r\n  )\r\n}\r\nexport default AllergenChooser\r\n","import React from 'react'\r\n\r\nimport Allergen from 'pmt-modules/user/constants/Allergen'\r\n\r\nimport CountryChooser from 'pmt-ui/CountryChooser'\r\nimport AllergenChooser from 'pmt-modules/user/components/AllergenChooser'\r\n\r\nconst getComponents = [\r\n  {\r\n    name: 'CountryChooser, single selection',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n          <CountryChooser\r\n            required\r\n            label='Pays de résidence'\r\n            className=\"u-sizeFullWidth\"\r\n            value={'FR'}\r\n            onChange={(country) => {}}\r\n            error={true}\r\n            helperText={'error'}\r\n          />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <CountryChooser\r\n        required\r\n        label=\"Pays de résidence\"\r\n        className=\"u-sizeFullWidth\"\r\n        value={'FR'}\r\n        onChange={country => {}}\r\n        error={true}\r\n        helperText={'error'}\r\n      />\r\n    ),\r\n  },\r\n  {\r\n    name: 'AllergenChooser, multiple selection',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n          <AllergenChooser\r\n            value={[\r\n              Allergen.PEANUT,\r\n              Allergen.EGG,\r\n            ]}\r\n            onChange={allergens => {}}\r\n          />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: <AllergenChooser value={[Allergen.PEANUT, Allergen.EGG]} onChange={allergens => {}} />,\r\n  },\r\n]\r\n\r\nexport default {\r\n  title: 'List Chooser',\r\n  components: getComponents,\r\n}\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet NavigationCheck = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\r\n  </SvgIcon>\r\n);\r\nNavigationCheck = pure(NavigationCheck);\r\nNavigationCheck.displayName = 'NavigationCheck';\r\nNavigationCheck.pmtName = 'SvgIcon';\r\n\r\nexport default NavigationCheck;","import React from 'react'\r\n\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Avatar from 'pmt-ui/Avatar'\r\nimport CheckIcon from 'pmt-ui/svg-icons/navigation/check'\r\nimport EditIcon from 'pmt-ui/svg-icons/editor/mode-edit'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    position: 'relative',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    flexGrow: 1,\r\n  },\r\n  separator: {\r\n    border: `0.5px solid ${theme.pmt.separator[400]}`,\r\n    width: '100%',\r\n  },\r\n  separatorRight: {\r\n    right: 0,\r\n    left: '50%',\r\n    marginLeft: 10,\r\n  },\r\n  separatorLeft: {\r\n    left: 0,\r\n    right: '50%',\r\n    marginRight: 10,\r\n  },\r\n  title: {\r\n    lineHeight: '20px',\r\n  },\r\n  current: {},\r\n  avatar: {\r\n    marginRight: 10,\r\n  },\r\n  avatarCurrent: {\r\n    marginRight: 10,\r\n    color: '#fff',\r\n    backgroundColor: theme.palette.primary.main,\r\n  },\r\n  avatarCheck: {\r\n    backgroundColor: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\n/**\r\n * https://material.io/guidelines/components/steppers.html#steppers-types-of-steps\r\n */\r\nconst StepIcon = ({ step, index }) => {\r\n  if (step.done) {\r\n    if (step.editable) {\r\n      //\r\n      // Editable steps allow users to return later to edit a step. These are ideal for workflows\r\n      // that involve editing steps within a session.\r\n      //\r\n      return <EditIcon />\r\n    }\r\n\r\n    //\r\n    // Non-editable steps cannot be edited once completed.\r\n    // Non-editable steps should be used when:\r\n    // Users cannot edit a step later\r\n    // Step editing poses a distraction risk to form completion\r\n    //\r\n    return <CheckIcon />\r\n  }\r\n\r\n  if (step.icon) {\r\n    return step.icon\r\n  }\r\n\r\n  return <span>{index}</span>\r\n}\r\n\r\nconst StepAvatar = ({ step, isCurrent, classes, index }) => (\r\n  <Avatar\r\n    className={clsx(classes.avatar, {\r\n      [classes.avatarCurrent]: isCurrent,\r\n      [classes.avatarCheck]: step.done || false,\r\n    })}\r\n  >\r\n    <StepIcon step={step} index={index} />\r\n  </Avatar>\r\n)\r\n\r\nconst Step = ({ step, isCurrent, classes, index, isLast, onClick }) => (\r\n  <div\r\n    className={clsx(classes.root, {\r\n      [classes.current]: isCurrent,\r\n    })}\r\n    onClick={onClick}\r\n  >\r\n    {index !== 0 && <div className={clsx(classes.separator, classes.separatorLeft)} />}\r\n\r\n    <StepAvatar isCurrent={isCurrent} classes={classes} step={step} index={index} />\r\n\r\n    <div className={classes.title}>{step.title}</div>\r\n\r\n    {!isLast && <div className={clsx(classes.separator, classes.separatorRight)} />}\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(Step)\r\n","import React from 'react'\r\n\r\nconst StepContent = ({ show, children }) => (\r\n  !show ? null : (\r\n    <div>\r\n      {children}\r\n    </div>\r\n  )\r\n)\r\n\r\nexport default StepContent\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Step from './components/Step'\r\nimport StepContent from './components/StepContent'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n\r\n  },\r\n  header: {\r\n    position: 'relative',\r\n    justifyContent: 'space-between',\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n  },\r\n})\r\n\r\n/**\r\n * See https://material.io/guidelines/components/steppers.html\r\n */\r\nconst Stepper = ({ current, steps, classes, onClick }) => (\r\n  <div\r\n    className={classes.root}\r\n  >\r\n    <div\r\n      className={classes.header}\r\n    >\r\n      {steps.map((step, index) => (\r\n        <Step\r\n          key={step.key}\r\n          index={index}\r\n          step={step}\r\n          isCurrent={current === step.key}\r\n          isLast={index === steps.length - 1}\r\n          test={index}\r\n          test2={steps.length - 1}\r\n          onClick={() => onClick && onClick(step.key)}\r\n        />\r\n      ))}\r\n    </div>\r\n    <div\r\n      className={classes.contentArea}\r\n    >\r\n      {steps.map((step, index) => (\r\n        <StepContent\r\n          key={step.key}\r\n          show={current === step.key}\r\n        >\r\n          {step.content}\r\n        </StepContent>\r\n      ))}\r\n    </div>\r\n  </div>\r\n)\r\n\r\nStepper.defaultProps = {\r\n  onClick: null,\r\n}\r\n\r\nStepper.propTypes = {\r\n  onClick: PropTypes.func,\r\n\r\n  /**\r\n   * key of the current step\r\n   */\r\n  current: PropTypes.any.isRequired,\r\n\r\n  /**\r\n  * Define the different steps\r\n  *\r\n  * ```\r\n  * [\r\n  *   {\r\n  *     key: Step.USER,\r\n  *     title: 'Title',\r\n  *     icon: // element, optionnal,\r\n  *     children: // react component\r\n  *     done: // boolean, display the step has done\r\n  *   },\r\n  * ]\r\n  * ```\r\n  */\r\n  steps: PropTypes.array.isRequired,\r\n}\r\n\r\nexport default withStyles(styles)(Stepper)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet AccountCardDetails = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M2,3H22C23.05,3 24,3.95 24,5V19C24,20.05 23.05,21 22,21H2C0.95,21 0,20.05 0,19V5C0,3.95 0.95,3 2,3M14,6V7H22V6H14M14,8V9H21.5L22,9V8H14M14,10V11H21V10H14M8,13.91C6,13.91 2,15 2,17V18H14V17C14,15 10,13.91 8,13.91M8,6A3,3 0 0,0 5,9A3,3 0 0,0 8,12A3,3 0 0,0 11,9A3,3 0 0,0 8,6Z\"/>\r\n  </SvgIcon>\r\n);\r\nAccountCardDetails = pure(AccountCardDetails);\r\nAccountCardDetails.displayName = 'AccountCardDetails';\r\nAccountCardDetails.muiName = 'SvgIcon';\r\n\r\nexport default AccountCardDetails;\r\n","import React from 'react'\r\n\r\nimport Stepper from 'pmt-ui/Stepper'\r\nimport AccountCardDetails from 'pmt-ui/svg-icons/communication/account-card-details'\r\n\r\nconst Step = {\r\n  USER: 'STEP::USER',\r\n  USER_ACCOUNT: 'STEP::USER_ACCOUNT',\r\n  TEST: 'STEP::TEST',\r\n  TEST2: 'STEP::TEST2',\r\n}\r\n\r\nconst getComponents = [\r\n  {\r\n    name: 'DateField INLINE',\r\n    definition: (\r\n      <pre>\r\n        {`\r\n          <Stepper\r\n            current={Step.USER}\r\n            steps={[\r\n              {\r\n                key: Step.USER,\r\n                title: 'User',\r\n                icon: (\r\n                  <AccountCardDetails\r\n                    color={'inherit'}\r\n                  />\r\n                ),\r\n                content: (\r\n                  <div>CONTENT</div>\r\n                )\r\n              },\r\n              {\r\n                key: Step.USER_ACCOUNT,\r\n                title: 'User account',\r\n                done: true,\r\n                content: (\r\n                  <div>\r\n                    User account form\r\n                  </div>\r\n                ),\r\n              },\r\n              {\r\n                key: Step.TEST,\r\n                title: 'test',\r\n                done: false,\r\n                content: (\r\n                  <div>\r\n                    test\r\n                  </div>\r\n                ),\r\n              },\r\n              {\r\n                key: Step.TEST2,\r\n                title: 'test 2',\r\n                done: true,\r\n                editable: true,\r\n                content: (\r\n                  <div>\r\n                    test 2\r\n                  </div>\r\n                ),\r\n              },\r\n            ]}\r\n          />\r\n        `}\r\n      </pre>\r\n    ),\r\n    render: (\r\n      <Stepper\r\n        current={Step.USER}\r\n        steps={[\r\n          {\r\n            key: Step.USER,\r\n            title: 'User',\r\n            icon: <AccountCardDetails color={'inherit'} />,\r\n            content: <div>CONTENT</div>,\r\n          },\r\n          {\r\n            key: Step.USER_ACCOUNT,\r\n            title: 'User account',\r\n            done: true,\r\n            content: <div>User account form</div>,\r\n          },\r\n          {\r\n            key: Step.TEST,\r\n            title: 'test',\r\n            done: false,\r\n            content: <div>test</div>,\r\n          },\r\n          {\r\n            key: Step.TEST2,\r\n            title: 'test 2',\r\n            done: true,\r\n            editable: true,\r\n            content: <div>test 2</div>,\r\n          },\r\n        ]}\r\n      />\r\n    ),\r\n  },\r\n]\r\n\r\nexport default {\r\n  title: 'Stepper',\r\n  components: getComponents,\r\n}\r\n","import React from 'react'\r\nimport map from 'lodash/map'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { FormGroup, FormControlLabel } from 'pmt-ui/Form'\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\n\r\nconst styles = theme => ({\r\n  resizer: {\r\n    maxWidth: '100%',\r\n    transition: 'width 0.4s cubic-bezier(0.680, -0.250, 0.265, 1.250)',\r\n  },\r\n})\r\n\r\nconst RENDER_TYPE = {\r\n  MOBILE: {\r\n    name: 'MOBILE',\r\n    label: 'Mobile',\r\n    resolution: 360,\r\n  },\r\n  TABLET: {\r\n    name: 'TABLET',\r\n    label: 'Tablette',\r\n    resolution: 1024,\r\n  },\r\n  DESKTOP: {\r\n    name: 'DESKTOP',\r\n    label: 'Ordinateur',\r\n    resolution: 1366,\r\n  },\r\n}\r\n\r\nclass Resizer extends React.Component {\r\n  state = {\r\n    renderType: RENDER_TYPE.DESKTOP,\r\n  }\r\n\r\n  handleChange(renderType) {\r\n    this.setState({\r\n      renderType,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { children, classes } = this.props\r\n\r\n    return (\r\n      <div\r\n        className={classes.resizer}\r\n        style={{ width: `${this.state.renderType.resolution}px` }}\r\n      >\r\n        <FormGroup row>\r\n          {map(RENDER_TYPE, renderType => {\r\n            return (\r\n              <FormControlLabel\r\n                control={\r\n                  <Checkbox\r\n                    color=\"primary\"\r\n                    checked={renderType.name === this.state.renderType.name}\r\n                    onChange={() => {\r\n                      this.handleChange(renderType)\r\n                    }}\r\n                  />\r\n                }\r\n                label={renderType.label}\r\n              />\r\n            )\r\n          })}\r\n        </FormGroup>\r\n        {children}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(Resizer)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport Resizer from './Resizer'\r\n\r\nconst styles = theme => ({\r\n  component: {\r\n    width: '100%',\r\n    marginBottom: theme.spacing(4),\r\n  },\r\n  title: {\r\n    textAlign: 'left',\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n})\r\n\r\nclass ComponentList extends React.Component {\r\n  generateComponent(componentList) {\r\n    const { classes } = this.props\r\n\r\n    return componentList.map((component, index) => (\r\n      <div key={index} className={classes.component}>\r\n        <Typography variant=\"subtitle1\" className={classes.title}>\r\n          {component.name}\r\n          <Typography variant=\"caption\">{component.definition}</Typography>\r\n        </Typography>\r\n        {component.resizer ? (\r\n          <Resizer selectedType={'DESKTOP'}>{component.render}</Resizer>\r\n        ) : (\r\n          <div>{component.render}</div>\r\n        )}\r\n      </div>\r\n    ))\r\n  }\r\n\r\n  render() {\r\n    const { list, classes } = this.props\r\n\r\n    return <div className={classes.componentList}>{this.generateComponent(list)}</div>\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ComponentList)\r\n","import React from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\n\r\nimport ComponentList from './ComponentList'\r\n\r\nconst styles = theme => ({\r\n  app: {\r\n    width: '100%',\r\n    padding: theme.spacing(4),\r\n  },\r\n  section: {\r\n    width: '100%',\r\n    marginBottom: theme.spacing(8),\r\n  },\r\n  title: {\r\n    textAlign: 'left',\r\n    paddingBottom: theme.spacing(1),\r\n    marginBottom: theme.spacing(4),\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey500}`,\r\n  },\r\n})\r\n\r\nclass SectionList extends React.Component {\r\n  generateSection(sectionList) {\r\n    const { classes } = this.props\r\n\r\n    return sectionList.map((section, index) => (\r\n      <div key={index} className={classes.section}>\r\n        <Typography variant=\"h6\" className={classes.title}>\r\n          {section.title}\r\n        </Typography>\r\n        <ComponentList\r\n          list={section.getComponents ? section.getComponents() : section.components}\r\n        />\r\n      </div>\r\n    ))\r\n  }\r\n\r\n  render() {\r\n    const { list, classes } = this.props\r\n\r\n    return <div className={classes.sectionList}>{this.generateSection(list)}</div>\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(SectionList)\r\n","import React from 'react'\r\nimport map from 'lodash/map'\r\n\r\nimport { withStyles, withTheme } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport { CardBasic, CardPostIt } from 'pmt-ui/Card'\r\nimport SocialPerson from 'pmt-ui/svg-icons/social/person'\r\nimport LogoGrey from 'pmt-ui/svg-icons/pmt/LogoGrey'\r\n\r\nimport calendarPart from './parts/calendar'\r\nimport listChooserPart from './parts/listChooser'\r\nimport stepperPart from './parts/stepper'\r\n\r\nimport { SectionList } from '../../components'\r\n\r\nconst styles = theme => ({\r\n  app: {\r\n    width: '100%',\r\n    maxWidth: '1430px',\r\n    margin: '0 auto',\r\n    padding: theme.spacing(4),\r\n  },\r\n  logoContainer: {\r\n    textAlign: 'center',\r\n    marginBottom: theme.spacing(5),\r\n  },\r\n  logo: {\r\n    width: '100%',\r\n    maxWidth: 400,\r\n    height: 125,\r\n  },\r\n  title: {\r\n    textAlign: 'left',\r\n  },\r\n  introduction: {\r\n    marginTop: theme.spacing(5),\r\n    marginBottom: theme.spacing(5),\r\n  },\r\n  color: {\r\n    width: '100%',\r\n    height: 80,\r\n    textAlign: 'center',\r\n    lineHeight: '80px',\r\n  },\r\n  red400Background: {\r\n    backgroundColor: theme.pmt.colors.red400,\r\n  },\r\n  orange300Background: {\r\n    backgroundColor: theme.pmt.colors.orange300,\r\n  },\r\n  lightGreen400Background: {\r\n    backgroundColor: theme.pmt.colors.lightGreen400,\r\n  },\r\n  blue700Background: {\r\n    backgroundColor: theme.pmt.colors.blue700,\r\n  },\r\n  grey500Background: {\r\n    backgroundColor: theme.pmt.colors.grey500,\r\n  },\r\n  brown400Background: {\r\n    backgroundColor: theme.pmt.colors.brown400,\r\n  },\r\n  pink400Background: {\r\n    backgroundColor: theme.pmt.colors.pink400,\r\n  },\r\n  yellow400Background: {\r\n    backgroundColor: theme.pmt.colors.yellow400,\r\n  },\r\n})\r\n\r\nclass StyleGuidePage extends React.Component {\r\n  render() {\r\n    const { classes, theme } = this.props\r\n\r\n    const colorComponents = map(theme.pmt.colors, (color, index) => {\r\n      return {\r\n        name: index,\r\n        definition: `theme.pmt.colors.${index}`,\r\n        render: <div className={`${classes.color} ${classes[`${index}Background`]}`}>{index}</div>,\r\n      }\r\n    })\r\n\r\n    return (\r\n      <div className={classes.app}>\r\n        <div className={classes.logoContainer}>\r\n          <LogoGrey viewBox={'0 0 150 43.5'} className={classes.logo} />\r\n        </div>\r\n        <Typography variant=\"h5\" className={classes.title}>\r\n          PayMyTable's styleguide\r\n        </Typography>\r\n        <Typography variant=\"body2\" className={classes.introduction}>\r\n          Welcome to PayMyTable's styleguide. You will find here everything you need, from component\r\n          structure to rendering properties.\r\n          <br />\r\n          Have some fun discovering this great toolbox.\r\n          <br />\r\n          <br />\r\n          The props showed in example are not an exhaustive list. Don't hesitate to check the\r\n          component code.\r\n        </Typography>\r\n        <SectionList\r\n          list={[\r\n            {\r\n              title: 'Colors',\r\n              components: colorComponents,\r\n            },\r\n            {\r\n              title: 'Cards',\r\n              components: [\r\n                {\r\n                  name: 'Basic card',\r\n                  definition: '<CardBasic color={theme.pmt.colors.grey500} />',\r\n                  render: (\r\n                    <CardBasic\r\n                      color={theme.pmt.colors.grey500}\r\n                      header={{\r\n                        avatar: <SocialPerson viewBox={'0 0 24 24'} />,\r\n                        title: 'Title example',\r\n                      }}\r\n                      content={<div>Content example</div>}\r\n                    />\r\n                  ),\r\n                  resizer: true,\r\n                },\r\n                {\r\n                  name: 'Basic green card',\r\n                  definition: '<CardBasic color={theme.pmt.colors.lightGreen400} />',\r\n                  render: (\r\n                    <CardBasic\r\n                      color={theme.pmt.colors.lightGreen400}\r\n                      header={{\r\n                        avatar: <SocialPerson viewBox={'0 0 24 24'} />,\r\n                        title: 'Title example',\r\n                      }}\r\n                      content={<div>Content example</div>}\r\n                    />\r\n                  ),\r\n                  resizer: true,\r\n                },\r\n                {\r\n                  name: 'Post it card',\r\n                  definition: '<CardPostIt />',\r\n                  render: (\r\n                    <CardPostIt\r\n                      color={{\r\n                        background: theme.pmt.colors.primary50,\r\n                        border: theme.palette.primary.main,\r\n                        font: theme.palette.primary.main,\r\n                      }}\r\n                      header={{\r\n                        avatar: <SocialPerson viewBox={'0 0 24 24'} />,\r\n                        title: 'Title example',\r\n                      }}\r\n                      content={<div>Content example</div>}\r\n                    />\r\n                  ),\r\n                  resizer: true,\r\n                },\r\n              ],\r\n            },\r\n            calendarPart,\r\n            listChooserPart,\r\n            stepperPart,\r\n          ]}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withTheme(withStyles(styles)(StyleGuidePage))\r\n","import React from 'react'\r\n\r\n//\r\n//\r\n//\r\n\r\nconst Test = () => <React.Fragment />\r\n\r\nexport default Test\r\n","import { getRoute } from 'pmt-modules/routing'\r\n\r\nimport DevThemePage from '../../../dev/pages/theme'\r\nimport StyleguidePage from '../../../dev/pages/styleguide'\r\nimport TestPage from '../../../dev/pages/test'\r\n\r\nexport default [\r\n  {\r\n    definition: getRoute('DEV_THEME'),\r\n    handler: DevThemePage,\r\n  },\r\n  {\r\n    definition: getRoute('DEV_STYLEGUIDE'),\r\n    handler: StyleguidePage,\r\n  },\r\n  {\r\n    definition: getRoute('DEV_TEST'),\r\n    handler: TestPage,\r\n  },\r\n]\r\n","import devRoutesModule from './devRoutes.js'\r\n\r\nconst devRoutes = process.env.NODE_ENV === 'production' ? [] : devRoutesModule.default\r\n\r\nexport default devRoutes\r\n","import React from 'react'\r\n\r\nimport { Route, Switch } from 'react-router-dom'\r\nimport map from 'lodash/map'\r\nimport isNil from 'lodash/isNil'\r\nimport invariant from 'invariant'\r\n\r\nimport Layout from 'pmt-ui/Layout'\r\n\r\nimport { getQueryFromUri } from 'pmt-utils/url'\r\n\r\nimport devRoutes from './devRoutes'\r\n\r\n//\r\n// Take the appOptions provide by the projet and create the routes\r\n//\r\n\r\n// Allows to handle refacto from react-router v3 to v4, where routeParams does not long exists.\r\nconst createRouteContent = route => ({ location, ...props }) => {\r\n  const locationFinal = { ...location, query: getQueryFromUri(location.search) }\r\n  return React.createElement(route.handler, {\r\n    ...props,\r\n    location: locationFinal,\r\n    route: route.definition,\r\n    routeParams: props.match.params,\r\n    params: props.match.params,\r\n  })\r\n}\r\n\r\nconst generateRoute = route => {\r\n  invariant(!isNil(route.definition), `definition does not exists for ${route.handler}`)\r\n  invariant(!isNil(route.handler), `handler does not exists for ${route.definition.name}`)\r\n\r\n  if (!route.definition.disable) {\r\n    return (\r\n      <Route\r\n        exact\r\n        name={route.definition.name}\r\n        path={route.definition.path}\r\n        component={createRouteContent(route)}\r\n        key={route.definition.name}\r\n      />\r\n    )\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nconst configureRoutes = ({ routes }) => {\r\n  // do not keep disabled routes\r\n  const routesToGenerate = routes.filter(route => !route.disabled)\r\n\r\n  return (\r\n    <Layout>\r\n      <Switch>\r\n        {/* Routes created on pmt-modules/dev/pages that are globals and usefull in development */}\r\n        {map(devRoutes, generateRoute)}\r\n\r\n        {map(routesToGenerate, generateRoute)}\r\n      </Switch>\r\n    </Layout>\r\n  )\r\n}\r\n\r\nexport default configureRoutes\r\n","import React, { Suspense, lazy, useMemo } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Provider } from 'react-redux'\r\nimport { PersistGate } from 'redux-persist/integration/react'\r\nimport { persistStore } from 'redux-persist'\r\n\r\n// Lazy load components to improve startup time\r\nconst ConnectedRouter = lazy(() =>\r\n  import('connected-react-router').then(m => ({ default: m.ConnectedRouter }))\r\n)\r\nconst Content = lazy(() => import('./Content'))\r\n\r\nimport { getRoutes, getHistory } from 'pmt-modules/routing'\r\nimport ErrorBoundary from 'pmt-ui/ErrorBoundary'\r\nimport configureRoutes from './utils/configureRoutes'\r\n\r\nconst App = ({ store }) => {\r\n  const persistor = persistStore(store)\r\n\r\n  return (\r\n    <ErrorBoundary>\r\n      <Provider store={store}>\r\n        <PersistGate loading={null} persistor={persistor}>\r\n          <Suspense fallback={<div>Loading...</div>}>\r\n            <Content>\r\n              <ConnectedRouter history={getHistory()}>\r\n                {configureRoutes({ routes: getRoutes() })}\r\n              </ConnectedRouter>\r\n            </Content>\r\n          </Suspense>\r\n        </PersistGate>\r\n      </Provider>\r\n    </ErrorBoundary>\r\n  )\r\n}\r\n\r\nApp.propTypes = {\r\n  store: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default App\r\n","//Note - Migration Vite - react-loadable is not maintained anymore\r\n// and incompatible with future React versions.\r\n// Thus we migrate to React.lazy + Suspense\r\nimport { lazy, Suspense, createElement } from 'react'\r\n\r\nexport const createLoadable = (loader, loading) => {\r\n  const LazyComponent = lazy(() => {\r\n    if (process.env.__DEV__) {\r\n      console.info(`[Loadable] loading`)\r\n    }\r\n\r\n    return loader().then(module => ({ default: module.default || module }))\r\n  })\r\n\r\n  return props => (\r\n    <Suspense fallback={loading ? createElement(loading, props) : null}>\r\n      <LazyComponent {...props} />\r\n    </Suspense>\r\n  )\r\n}\r\n","import React from 'react'\r\n\r\nimport { CircularProgress } from '../Progress'\r\nimport { withStyles, withTheme } from '../styles'\r\n\r\nconst styles = theme => ({\r\n  progress: {\r\n    color: theme.pmt.loading.color || theme.palette.primary.main,\r\n  },\r\n})\r\n\r\nconst LoadingPage = ({ classes, size = 50, message = '', show }) => {\r\n  if (!show) {\r\n    return null\r\n  }\r\n\r\n  return (\r\n    <div\r\n      style={{\r\n        height: '100%',\r\n        width: '100%',\r\n        position: 'absolute',\r\n        textAlign: 'center',\r\n        left: 0,\r\n        top: 0,\r\n        backgroundColor: 'rgba(0, 0, 0, 0.1)',\r\n        zIndex: 10,\r\n      }}\r\n    >\r\n      <div\r\n        style={{\r\n          position: 'relative',\r\n          height: '100%',\r\n          top: '50%',\r\n          marginTop: '-25px',\r\n        }}\r\n      >\r\n        <CircularProgress size={size} className={classes.progress} />\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default withTheme(withStyles(styles)(LoadingPage))\r\n","import React from 'react'\r\n\r\nimport Button from 'pmt-ui/Button'\r\nimport { withStyles, fade } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    minHeight: 48,\r\n    borderRadius: 12,\r\n    fontWeight: 700,\r\n    textTransform: 'none',\r\n    boxShadow: '0 2px 8px rgba(0, 0, 0, 0.10)',\r\n    transition: 'all 200ms cubic-bezier(0.4, 0, 0.2, 1)',\r\n\r\n    '&:hover:not(:disabled)': {\r\n      boxShadow: '0 4px 16px rgba(0, 0, 0, 0.15)',\r\n      transform: 'translateY(-1px)',\r\n    },\r\n    '&:active:not(:disabled)': {\r\n      transform: 'translateY(0)',\r\n    },\r\n    '&:disabled': {\r\n      backgroundColor: theme.pmt.colors.greyCD,\r\n      boxShadow: 'none',\r\n      cursor: 'not-allowed',\r\n      pointerEvents: 'none',\r\n    },\r\n  },\r\n  // keyboard focus ring, derived from the (possibly restaurant-overridden)\r\n  // primary color so it stays consistent/accessible whatever the theme\r\n  focusVisible: {\r\n    boxShadow: `0 0 0 3px ${fade(theme.palette.primary.main, 0.3)}`,\r\n  },\r\n  label: {\r\n    textTransform: 'initial',\r\n    lineHeight: 1,\r\n  },\r\n  sizeSmall: {\r\n    minHeight: 36,\r\n    fontSize: 14,\r\n    fontWeight: 700,\r\n    borderRadius: 12,\r\n  },\r\n  sizeLarge: {\r\n    minHeight: 52,\r\n    padding: 16,\r\n    fontSize: 18,\r\n    lineHeight: '20px',\r\n    fontWeight: 700,\r\n    borderRadius: 12,\r\n  },\r\n  outlined: {\r\n    borderWidth: 2,\r\n\r\n    '&:hover, &:focus': {\r\n      borderWidth: 2,\r\n    },\r\n  },\r\n})\r\n\r\n// ButtonCustom - used for main action for web customer\r\n// created to format style applied in one file\r\n// and not everywhere a primary button has to be set\r\nconst ButtonCustom = ({ children, classes, color, variant, ...otherProps }) => (\r\n  <Button variant={variant} color={color} classes={classes} {...otherProps}>\r\n    {children}\r\n  </Button>\r\n)\r\n\r\nButtonCustom.defaultProps = {\r\n  color: 'primary',\r\n  variant: 'contained',\r\n}\r\n\r\nexport default withStyles(styles)(ButtonCustom)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Button from 'pmt-ui/Button'\r\nimport { withStyles, withTheme } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    padding: 0,\r\n    textTransform: 'initial',\r\n    fontSize: 16,\r\n    minHeight: 0,\r\n    minWidth: 0,\r\n    lineHeight: '16px',\r\n    '&:hover': {\r\n      textDecoration: 'underline',\r\n      backgroundColor: 'transparent',\r\n    },\r\n    [theme.breakpoints.up('md')]: {\r\n      textDecoration: 'underline',\r\n    },\r\n  },\r\n  sizeLarge: {\r\n    fontSize: 18,\r\n    fontWeight: 700,\r\n  },\r\n  focusVisible: {\r\n    outline: `2px solid ${theme.palette.primary.main}`,\r\n    outlineOffset: 2,\r\n    borderRadius: theme.shape.borderRadius,\r\n    textDecoration: 'underline',\r\n  },\r\n})\r\n\r\n// ButtonLink - used for main action for order plugin\r\n// created to format style applied in one file\r\n// and not everywhere a primary button has to be set\r\nconst ButtonLink = ({ children, classes, color, label, icon, theme, ...otherProps }) => (\r\n  <Button\r\n    variant=\"text\"\r\n    color={color}\r\n    classes={classes}\r\n    disableRipple\r\n    disableFocusRipple\r\n    {...otherProps}\r\n  >\r\n    {icon &&\r\n      React.cloneElement(icon, {\r\n        style: {\r\n          marginRight: label || children ? theme.spacing(1) : 0,\r\n          width: 20,\r\n          height: 20,\r\n        },\r\n      })}\r\n    {children || label}\r\n  </Button>\r\n)\r\n\r\nButtonLink.defaultProps = {\r\n  color: 'primary',\r\n}\r\n\r\nButtonLink.propTypes = {\r\n  color: PropTypes.string,\r\n  // same as 'children'\r\n  label: PropTypes.string,\r\n  // same as 'label'\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default withStyles(styles)(withTheme(ButtonLink))\r\n","import { createSelector } from 'reselect'\r\n\r\nconst getState = state => state.entities.appSecurity\r\n\r\nexport const getAppSecurityError = createSelector([getState], state => {\r\n  const error = state.get('error', null)\r\n\r\n  if (!error) {\r\n    return null\r\n  }\r\n\r\n  return error.toJS()\r\n})\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { getAppSecurityError } from '../../selectors'\r\n\r\nclass AppSecurityContainer extends React.PureComponent {\r\n  render() {\r\n    const { appSecurityError, children } = this.props\r\n\r\n    return children({\r\n      appSecurityError,\r\n    })\r\n  }\r\n}\r\n\r\nAppSecurityContainer.propTypes = {}\r\n\r\nconst mapStateToProps = state => {\r\n  return {\r\n    appSecurityError: getAppSecurityError(state),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {})(AppSecurityContainer)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet NavigationArrowBack = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M19,11H7.83l4.88-4.88c0.39-0.39,0.39-1.03,0-1.42l0,0c-0.39-0.39-1.02-0.39-1.41,0l-6.59,6.59 c-0.39,0.39-0.39,1.02,0,1.41l6.59,6.59c0.39,0.39,1.02,0.39,1.41,0l0,0c0.39-0.39,0.39-1.02,0-1.41L7.83,13H19c0.55,0,1-0.45,1-1 v0C20,11.45,19.55,11,19,11z\" />\r\n  </SvgIcon>\r\n)\r\nNavigationArrowBack = pure(NavigationArrowBack)\r\nNavigationArrowBack.displayName = 'NavigationArrowBack'\r\nNavigationArrowBack.pmtName = 'SvgIcon'\r\n\r\nexport default NavigationArrowBack\r\n","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"12.9.0\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { createAction } from 'pmt-modules/redux'\r\nimport { getDatabase, ref, query, orderByChild, startAt, onValue } from 'firebase/database'\r\n\r\nimport FirebaseApi from 'pmt-modules/api/calls/FirebaseApi'\r\n\r\n/**\r\n *\r\n */\r\nexport const PMTFirebaseAuth = createApiEnumAction('FIREBASE::PMT::AUTH')\r\n\r\nexport const postPmtFirebaseAuth = () =>\r\n  createApiCallAction(PMTFirebaseAuth, FirebaseApi.auth(), {})\r\n\r\nexport const authUserOnFirebase = () => createAction('FIREBASE::PMT::AUTH_USER_ON_FIREBASE')\r\nauthUserOnFirebase.TYPE = 'FIREBASE::PMT::AUTH_USER_ON_FIREBASE'\r\n\r\nexport const FirebaseDataSubscription = createApiEnumAction('FIREBASE::DATA::SUBSCRIPTION')\r\n\r\nexport const subscribeToFirebaseData =\r\n  (path, queryParams = []) =>\r\n  (dispatch, getState) => {\r\n    const db = getDatabase()\r\n    const dbRef = ref(db, path)\r\n\r\n    let dbQuery = dbRef\r\n    if (queryParams && queryParams.length > 0) {\r\n      const constraints = []\r\n      queryParams.forEach(param => {\r\n        if (param.startsWith('orderByChild=')) {\r\n          const field = param.replace('orderByChild=', '')\r\n          constraints.push(orderByChild(field))\r\n        }\r\n        if (param.startsWith('startAt=')) {\r\n          const value = parseInt(param.replace('startAt=', ''))\r\n          constraints.push(startAt(value))\r\n        }\r\n      })\r\n      if (constraints.length > 0) {\r\n        dbQuery = query(dbRef, ...constraints)\r\n      }\r\n    }\r\n\r\n    const unsubscribe = onValue(\r\n      dbQuery,\r\n      snapshot => {\r\n        //console.log('Firebase data received:', path, snapshot.val())\r\n        dispatch({\r\n          type: FirebaseDataSubscription.SUCCESS,\r\n          payload: { path, data: snapshot.val() || {} },\r\n        })\r\n      },\r\n      error => {\r\n        //console.error('Firebase error:', path, error)\r\n        dispatch({\r\n          type: FirebaseDataSubscription.FAILURE,\r\n          payload: { path, error },\r\n        })\r\n      }\r\n    )\r\n\r\n    return unsubscribe\r\n  }\r\n","//\r\n// - https://firebase.google.com/\r\n// - https://github.com/prescottprue/react-redux-firebase/\r\n//\r\n//\r\n// We use firebase to:\r\n// - interact with cloud storage: https://firebase.google.com/products/storage/\r\n//\r\n//\r\n\r\n// https://firebase.google.com/docs/web/setup\r\nimport { initializeApp } from 'firebase/app'\r\n// You don't need to import firebase/app either since it's being imported above\r\n//import 'firebase/storage'\r\n//import 'firebase/database'\r\n//import 'firebase/auth'\r\n\r\nimport { combineReducers } from 'redux'\r\nimport { registerFirebaseConfig } from './config'\r\nimport { createSimpleReducer } from 'pmt-modules/redux'\r\nimport { PMTFirebaseAuth, FirebaseDataSubscription } from './actions'\r\n\r\nexport * from './config'\r\n\r\nlet _firebaseApp = null\r\n\r\nexport const initializeFirebase = appConfig => {\r\n  const config = appConfig.firebase\r\n\r\n  if (config) {\r\n    registerFirebaseConfig(config)\r\n\r\n    if (config.credentials) {\r\n      _firebaseApp = initializeApp(config.credentials)\r\n    }\r\n  }\r\n}\r\n\r\nexport const getFirebaseApp = () => _firebaseApp\r\n\r\nconst firebaseAuthReducer = createSimpleReducer(PMTFirebaseAuth)\r\n\r\nconst firebaseDataReducer = (state = {}, action) => {\r\n  switch (action.type) {\r\n    case FirebaseDataSubscription.SUCCESS:\r\n      const existingData = state[action.payload.path]?.data\r\n\r\n      // Avoid updating if data hasn't changed\r\n      if (JSON.stringify(existingData) === JSON.stringify(action.payload.data)) {\r\n        return state\r\n      }\r\n\r\n      return {\r\n        ...state,\r\n        [action.payload.path]: {\r\n          data: action.payload.data,\r\n          isFetching: false,\r\n          error: null,\r\n        },\r\n      }\r\n    case FirebaseDataSubscription.FAILURE:\r\n      return {\r\n        ...state,\r\n        [action.payload.path]: {\r\n          data: null,\r\n          isFetching: false,\r\n          error: action.payload.error,\r\n        },\r\n      }\r\n    case FirebaseDataSubscription.REQUEST:\r\n      return {\r\n        ...state,\r\n        [action.payload.path]: {\r\n          ...(state[action.payload.path] || {}),\r\n          isFetching: true,\r\n        },\r\n      }\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport const pmtFirebaseReducer = combineReducers({\r\n  auth: firebaseAuthReducer,\r\n  subscriptions: firebaseDataReducer,\r\n})\r\n","import React, { useState, useEffect } from 'react'\r\nimport { ConsentChoice, getConsent, setConsent } from '../index'\r\nimport { Box, Button, Slide, Typography } from '@material-ui/core'\r\nimport { ButtonLink } from 'app/components/Button'\r\nimport { indicateConsentForGA, initializeAnalytics } from '../../analytics'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { tr } from '../../i18n'\r\nimport { FormControlLabel } from 'pmt-ui/Form'\r\nimport Switch from 'pmt-ui/Switch'\r\nimport CloseIcon from '@material-ui/icons/Close'\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport { getAuth, signInAnonymously } from 'firebase/auth'\r\nimport { getDatabase, ref, push, serverTimestamp } from 'firebase/database'\r\nimport { getFirebaseApp } from 'pmt-modules/firebase'\r\nimport { getFrontSessionId } from '../../frontSession'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  stickyBanner: {\r\n    position: 'fixed',\r\n    bottom: 0,\r\n    left: 0,\r\n    width: '100%',\r\n    background: 'white',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between',\r\n    zIndex: theme.zIndex.stickyButton + 1, // above most content, including stickyButtons (\"Continue\" in mobile). We expect the user to validate the banner in order to be able to see the sticky button\r\n    padding: `${theme.spacing(1)}px ${theme.spacing(3)}px ${theme.spacing(1)}px ${theme.spacing(\r\n      2\r\n    )}px`,\r\n    flexDirection: 'row',\r\n    [theme.breakpoints.down('sm')]: {\r\n      flexDirection: 'column',\r\n      alignItems: 'flex-start',\r\n    },\r\n  },\r\n  currentState: {\r\n    fontSize: '0.7em',\r\n  },\r\n  cookiePolicyLink: {\r\n    verticalAlign: 'baseline',\r\n    fontSize: '0.9em',\r\n  },\r\n  closeBtn: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    right: 0,\r\n  },\r\n}))\r\n\r\nconst pushConsentToFirebase = (value, uid, plugin) => {\r\n  if (!uid) return\r\n\r\n  const dayDate = new Date()\r\n\r\n  // UTC format yyyy-MM-dd\r\n  const utcDateFormatted = dayDate.toISOString().slice(0, 10)\r\n\r\n  const dbPath = `cookie-consents/${utcDateFormatted}/${plugin}/${uid}/history`\r\n\r\n  const db = getDatabase()\r\n  push(ref(db, dbPath), {\r\n    value: value ? value : 'unknown',\r\n    createdAt: serverTimestamp(),\r\n    frontSessionId: getFrontSessionId(),\r\n  })\r\n}\r\n\r\nconst CookieConsentBanner = ({ analyticsConfig, appConfig, setOpen, open, plugin }) => {\r\n  const [currentConsent, setCurrentConsent] = useState(getConsent())\r\n  const [uid, setUid] = useState(null)\r\n\r\n  // --- Firebase Anonymous Auth ---\r\n  useEffect(() => {\r\n    // if firebase is not available (eg. env LOCAL), we don't send consent to firebase\r\n    const firebaseApp = getFirebaseApp()\r\n    if (!firebaseApp) {\r\n      return\r\n    }\r\n\r\n    const auth = getAuth(firebaseApp)\r\n\r\n    if (!auth.currentUser) {\r\n      signInAnonymously(auth)\r\n        .then(userCredential => {\r\n          setUid(userCredential.user.uid)\r\n          pushConsentToFirebase(getConsent(), userCredential.user.uid, plugin)\r\n        })\r\n        .catch(error => {\r\n          console.error('firebase: anonymous sign in error', error)\r\n        })\r\n    } else {\r\n      setUid(auth.currentUser.uid)\r\n    }\r\n  }, [plugin])\r\n\r\n  const selectionIsNecessaryCookiesOnly = currentConsent !== ConsentChoice.ACCEPTED\r\n\r\n  const saveSelection = () => {\r\n    // the \"selection\" contains only on/off for \"Performance analysis cookies\"\r\n    if (currentConsent === ConsentChoice.ACCEPTED) {\r\n      handleAccept()\r\n    } else {\r\n      handleDeny()\r\n    }\r\n  }\r\n\r\n  const handleAccept = () => {\r\n    setCurrentConsent(ConsentChoice.ACCEPTED) // needed in case the user clicked the buttons directly\r\n    setConsent(ConsentChoice.ACCEPTED)\r\n    pushConsentToFirebase(ConsentChoice.ACCEPTED, uid, plugin)\r\n    indicateConsentForGA(ConsentChoice.ACCEPTED)\r\n    setOpen(false)\r\n    initializeAnalytics({ analytics: analyticsConfig }, appConfig)\r\n  }\r\n\r\n  const handleDeny = () => {\r\n    setCurrentConsent(ConsentChoice.DENIED) // needed in case the user clicked the buttons directly\r\n    setConsent(ConsentChoice.DENIED)\r\n    indicateConsentForGA(ConsentChoice.DENIED)\r\n    pushConsentToFirebase(ConsentChoice.DENIED, uid, plugin)\r\n    setOpen(false)\r\n  }\r\n\r\n  const close = () => {\r\n    // close = no (new) choice made = we keep the current value\r\n    // if no current value, then we should behave as if the user refused the optional cookies\r\n    // Note: the \"Cookies\" link allows the user to revisit their cookie settings later\r\n    if (!currentConsent) {\r\n      handleDeny()\r\n    } else {\r\n      setOpen(false)\r\n    }\r\n  }\r\n\r\n  const classes = useStyles()\r\n\r\n  return (\r\n    <Slide direction=\"up\" in={open} mountOnEnter unmountOnExit>\r\n      <Box\r\n        className={classes.stickyBanner}\r\n        role=\"region\"\r\n        aria-live=\"polite\"\r\n        aria-label={tr('global.cookie_consent_banner.aria_label')}\r\n      >\r\n        {/* Text & link */}\r\n        <Box>\r\n          <IconButton\r\n            className={classes.closeBtn}\r\n            onClick={close}\r\n            size=\"small\"\r\n            aria-label={tr('global.cookie_consent_banner.close_btn.aria_label')}\r\n          >\r\n            <CloseIcon fontSize=\"small\" />\r\n          </IconButton>\r\n\r\n          <Typography variant=\"body2\">{tr('global.cookie_consent_banner.text.line1')}</Typography>\r\n          <Typography variant=\"body2\">{tr('global.cookie_consent_banner.text.line2')}</Typography>\r\n\r\n          <ButtonLink\r\n            className={classes.cookiePolicyLink}\r\n            component=\"a\"\r\n            href=\"https://storage.googleapis.com/paymytable-eu-public/legal_documents/cookie%20policy.pdf\"\r\n            label={tr('global.cookie_consent_banner.cookie_policy')}\r\n            target={'_blank'}\r\n            rel=\"noopener noreferrer\"\r\n          />\r\n        </Box>\r\n\r\n        {/* Switches */}\r\n        <Box>\r\n          <FormControlLabel\r\n            control={<Switch color=\"primary\" checked={true} disabled />}\r\n            label={tr('global.cookie_consent_banner.necessary_cookies.toggle_label')}\r\n          />\r\n\r\n          <FormControlLabel\r\n            control={\r\n              <Switch\r\n                color=\"primary\"\r\n                checked={currentConsent === ConsentChoice.ACCEPTED}\r\n                onChange={evt => {\r\n                  const newValue = evt.target.checked\r\n                    ? ConsentChoice.ACCEPTED\r\n                    : ConsentChoice.DENIED\r\n                  setCurrentConsent(newValue)\r\n                }}\r\n              />\r\n            }\r\n            label={tr('global.cookie_consent_banner.analytics_cookies.toggle_label')}\r\n          />\r\n        </Box>\r\n\r\n        {/* Buttons */}\r\n        <Box>\r\n          <Button\r\n            onClick={handleAccept}\r\n            color=\"primary\"\r\n            variant=\"contained\"\r\n            aria-label={tr('global.cookie_consent_banner.accept_btn.aria_label')}\r\n          >\r\n            {tr('global.cookie_consent_banner.accept_btn')}\r\n          </Button>\r\n\r\n          {selectionIsNecessaryCookiesOnly ? (\r\n            <Button\r\n              onClick={handleDeny}\r\n              color=\"secondary\"\r\n              aria-label={tr('global.cookie_consent_banner.deny_btn.aria_label')}\r\n            >\r\n              {tr('global.cookie_consent_banner.deny_btn')}\r\n            </Button>\r\n          ) : (\r\n            <Button\r\n              onClick={saveSelection}\r\n              color=\"secondary\"\r\n              aria-label={tr('global.cookie_consent_banner.save_selection_btn.aria_label')}\r\n            >\r\n              {tr('global.cookie_consent_banner.save_selection_btn')}\r\n            </Button>\r\n          )}\r\n        </Box>\r\n      </Box>\r\n    </Slide>\r\n  )\r\n}\r\n\r\nexport default CookieConsentBanner\r\n","export default {\r\n  // for key we use the `ENV` from our config\r\n  DEV: {\r\n    identifiers: [\r\n      // UA (old)\r\n      /*{\r\n        trackingId: 'UA-105853425-8',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_dev',\r\n        },\r\n      },\r\n       */\r\n      // GA4\r\n      {\r\n        tracingId: 'G-BVPC0W2VQX',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_dev',\r\n        },\r\n      },\r\n    ],\r\n    /*\r\n     options.nonce\tstring Optional Used for Content Security Policy (CSP) more\r\n     options.testMode\tboolean Default false\r\n     options.gaOptions\tobject Optional Reference\r\n     options.gtagOptions\tobject Optional\r\n     options.legacyDimensionMetric\tboolean Default true\r\n     */\r\n    options: {\r\n      gtagOptions: { debug_mode: true },\r\n    },\r\n  },\r\n  PREPROD: {\r\n    identifiers: [\r\n      // UA (old)\r\n      /*{\r\n        trackingId: 'UA-105853425-9',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_preprod',\r\n        },\r\n      },\r\n       */\r\n      // GA4\r\n      {\r\n        trackingId: 'G-C1BP72DLT3',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_preprod',\r\n        },\r\n      },\r\n    ],\r\n    options: {},\r\n  },\r\n  PROD: {\r\n    identifiers: [\r\n      // UA (old)\r\n      /*{\r\n        trackingId: 'UA-105853425-10',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_prod',\r\n        },\r\n      },\r\n       */\r\n      // GA4\r\n      {\r\n        trackingId: 'G-5RJXJ7RMZS',\r\n        gaOptions: {\r\n          cookieDomain: 'auto',\r\n          name: 'pmt_tracker_prod',\r\n        },\r\n      },\r\n    ],\r\n    options: {},\r\n  },\r\n}\r\n","//\r\n// Note: this file should never be import directly. Use a getter via getters.js\r\n//\r\n\r\nimport find from 'lodash/find'\r\nimport merge from 'lodash/merge'\r\nimport isNil from 'lodash/isNil'\r\n\r\nconst Env = {\r\n  COMMON: {\r\n    VERSION: '0.0.1',\r\n\r\n    Logger: {\r\n      DISPLAY_REPORT_DIALOG: true,\r\n    },\r\n\r\n    SHOULD_USE_APP_CONFIG: true,\r\n\r\n    IS_WEB_CUSTOMER: true,\r\n\r\n    IS_LOCAL: false,\r\n    IS_DEV: false,\r\n    IS_PREPROD: false,\r\n    IS_PROD: false,\r\n    IS_KIOSK_TOPUP_LOCAL: false,\r\n    IS_KIOSK_TOPUP_DEV: false,\r\n    IS_KIOSK_TOPUP_PREPROD: false,\r\n    IS_KIOSK_TOPUP_PRODUCTION: false,\r\n  },\r\n\r\n  LOCAL: {\r\n    ENV: 'DEV',\r\n\r\n    HOSTNAME: 'http://localhost:8080',\r\n    BASE_URL: /app.qa[0-9]{1}.paymytable.com/,\r\n    API_URL: 'http://localhost:8080/rest',\r\n    API_CONSUMER: 'NTcwMDQ5NjYwMTkwNzIwMDpEc1pydVZkd1RLcGo=',\r\n    // API_CONSUMER: 'NTczNjQyMDQwNDYyNTQwODpBT3dPRnFzS3JqMXE',\r\n\r\n    IS_DEV: true,\r\n    IS_QA: true,\r\n  },\r\n\r\n  PREPROD: {\r\n    ENV: 'PREPROD',\r\n\r\n    HOSTNAME: 'app.preprod.paymytable.com',\r\n    BASE_URL: /app.preprod.paymytable.com/,\r\n    API_URL: 'https://paymytable-eu-preprod.ew.r.appspot.com/rest',\r\n    // PayGreen:\r\n    API_CONSUMER: 'NDkyNTA3MjQwMzg1NzQwODpBTFIyRHJQRi1HWjI',\r\n    // default:\r\n    // API_CONSUMER: 'NTA5NzcxMDM5MDYwNzg3MjpTaFNJZHVRbS1zZ1Y=',\r\n    Logger: {\r\n      SENTRY_URL: 'https://a5b9ae39ca4c4ed581221426adeb9f37@sentry.io/207747',\r\n    },\r\n\r\n    IS_PREPROD: true,\r\n  },\r\n\r\n  PRODUCTION: {\r\n    ENV: 'PROD',\r\n\r\n    HOSTNAME: 'app.paymytable.com',\r\n    BASE_URL: /app.paymytable.com/,\r\n    API_URL: 'https://paymytable-eu.ew.r.appspot.com/rest',\r\n    // Burge Federation ApiConsumer - this needs to be fixed\r\n    API_CONSUMER: 'NTk1MzQ3MjU2NjM5NDg4MDpBUHVsa1dwLW9VdGF6Zw==',\r\n\r\n    IS_PROD: true,\r\n\r\n    Logger: {\r\n      SENTRY_URL: 'https://a5b9ae39ca4c4ed581221426adeb9f37@sentry.io/207747',\r\n    },\r\n  },\r\n}\r\n\r\nlet predicate = null\r\n\r\nconst hostname = window.location.hostname\r\n\r\nif (!isNil(window.globalEnvironmentSettings)) {\r\n  predicate = config => window.globalEnvironmentSettings.env === config.ENV\r\n} else {\r\n  predicate = config => (!isNil(config.BASE_URL) ? hostname.match(config.BASE_URL) : null)\r\n}\r\n\r\nlet currentEnv = find(Env, predicate) || Env.PREPROD\r\n\r\nif (process.env.__DEV__) {\r\n  currentEnv = Env.PREPROD\r\n}\r\n\r\nconsole.log('[CONFIGURATION] ', currentEnv.API_URL, currentEnv.HOSTNAME)\r\n\r\nexport default merge({}, Env.COMMON, currentEnv)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ActionInfoOutline = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zM11 9h2V7h-2v2z\"/>\r\n  </SvgIcon>\r\n);\r\nActionInfoOutline = pure(ActionInfoOutline);\r\nActionInfoOutline.displayName = 'ActionInfoOutline';\r\nActionInfoOutline.muiName = 'SvgIcon';\r\n\r\nexport default ActionInfoOutline;\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport Button from 'pmt-ui/Button'\r\nimport ActionInfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    position: 'absolute',\r\n    // magic\r\n    width: '100%',\r\n    height: '100%',\r\n    overflow: 'hidden',\r\n    [theme.breakpoints.down('sm')]: {\r\n      background: theme.pmt.colors.greyBackground,\r\n      padding: '0 10%',\r\n    },\r\n  },\r\n  blockContainer: {\r\n    height: '100%',\r\n    position: 'relative',\r\n  },\r\n  error: {\r\n    width: '100%',\r\n    position: 'relative',\r\n    top: '50%',\r\n    transform: 'translateY(-50%)',\r\n  },\r\n  iconInfo: {\r\n    width: 30,\r\n    height: 30,\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  red800: {\r\n    color: theme.pmt.colors.red800,\r\n  },\r\n  button: {\r\n    position: 'absolute',\r\n    left: '50%',\r\n    bottom: 24,\r\n    transform: 'translateX(-50%)',\r\n  },\r\n})\r\n\r\nclass ErrorLayout extends React.PureComponent {\r\n  render() {\r\n    const { error, buttonLabel, buttonAction, classes } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <div className={classNames(classes.error, 'u-textAlignCenter')}>\r\n          <ActionInfoOutline className={classNames(classes.iconInfo, classes.red800)} />\r\n          <Typography align=\"center\" className={classes.red800}>\r\n            {error}\r\n          </Typography>\r\n        </div>\r\n        {buttonAction && (\r\n          <Button\r\n            variant=\"raised\"\r\n            color=\"primary\"\r\n            className={classes.button}\r\n            onClick={buttonAction}\r\n          >\r\n            {buttonLabel}\r\n          </Button>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(ErrorLayout)\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport PropTypes from 'prop-types'\r\nimport React, { Fragment } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\nimport { ButtonLink } from 'app/components/Button'\r\nimport compose from 'recompose/compose'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\n\r\nimport AppSecurityContainer from 'pmt-modules/appSecurity/components/AppSecurityContainer'\r\nimport { isRefreshingOauthToken } from 'pmt-modules/auth'\r\nimport { goBack } from 'pmt-modules/routing'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { CALLBACK_EVENTS, getCallbackUri, getQueryParam } from 'pmt-utils/url'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ArrowBack from 'pmt-ui/svg-icons/navigation/arrow-back'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport CookieConsentBanner from 'pmt-modules/cookieConsent/components/CookieConsentBanner'\r\nimport analytics from 'app/config/analytics'\r\nimport environment from 'app/config/environment'\r\nimport { getConsent } from 'pmt-modules/cookieConsent'\r\n\r\nimport ErrorLayout from '../ErrorLayout'\r\nimport { getAppConfig } from 'pmt-modules/appConfig'\r\nimport Box from '@material-ui/core/Box'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    height: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  skipLink: {\r\n    position: 'absolute',\r\n    left: -9999,\r\n    top: 'auto',\r\n    width: 1,\r\n    height: 1,\r\n    overflow: 'hidden',\r\n    zIndex: theme.zIndex.modal + 1,\r\n    '&:focus': {\r\n      left: theme.spacing(1),\r\n      top: theme.spacing(1),\r\n      width: 'auto',\r\n      height: 'auto',\r\n      padding: `${theme.spacing(1)}px ${theme.spacing(2)}px`,\r\n      background: theme.pmt.colors.white,\r\n      borderRadius: theme.spacing(1),\r\n      boxShadow: '0 2px 8px rgba(0, 0, 0, 0.2)',\r\n    },\r\n  },\r\n  frame: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    minHeight: 0,\r\n  },\r\n  header: {\r\n    position: 'relative',\r\n    padding: theme.spacing(2),\r\n    paddingLeft: theme.spacing(5),\r\n    paddingRight: theme.spacing(5),\r\n    lineHeight: '20px',\r\n  },\r\n  arrowBack: {\r\n    position: 'absolute',\r\n    top: theme.spacing(2),\r\n    left: theme.spacing(2),\r\n    zIndex: 1,\r\n    // reset default <button> chrome, keep the same visual as the previous\r\n    // clickable <svg> while being a real, keyboard-operable button (a11y)\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: theme.spacing(1),\r\n    margin: -theme.spacing(1),\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    fontSize: 20,\r\n    cursor: 'pointer',\r\n    // make sure the keyboard focus indicator is always clearly visible,\r\n    // regardless of any global button/outline reset (a11y)\r\n    '&:focus-visible': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: 2,\r\n      borderRadius: '50%',\r\n    },\r\n    '&::-moz-focus-inner': {\r\n      border: 0,\r\n    },\r\n  },\r\n  content: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    overflow: 'hidden',\r\n    // remove the focus outline we only add for programmatic a11y focus\r\n    '&:focus': {\r\n      outline: 'none',\r\n    },\r\n  },\r\n  footer: {\r\n    width: '100%',\r\n    zIndex: theme.zIndex.stickyButton + 1, // to not be under the darkLayout, and to bring the cookie banner (contained in the footer) above the sticky buttons\r\n    padding: `${theme.spacing(0.5)}px ${theme.spacing(2)}px`,\r\n    whiteSpace: 'pre-line', // to display \\n as new lines\r\n    textAlign: 'center',\r\n    fontStyle: 'italic',\r\n    color: theme.pmt.colors.grey500,\r\n    fontSize: 12,\r\n    lineHeight: 1.3,\r\n    '& a': {\r\n      color: 'inherit',\r\n      fontStyle: 'inherit',\r\n      fontSize: 'inherit',\r\n      verticalAlign: 'baseline',\r\n      textDecoration: 'underline',\r\n    },\r\n    '& p, & div': {\r\n      margin: 0,\r\n    },\r\n  },\r\n})\r\n\r\nclass Page extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n    // Initialize state\r\n    this.state = {\r\n      open: getConsent() === null,\r\n    }\r\n    this.contentRef = React.createRef()\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.updateDocumentTitle()\r\n    // move focus to the main content on each new page (route change) so\r\n    // screen reader / keyboard users land somewhere meaningful instead of\r\n    // silently staying on the previous page's focus position (a11y)\r\n    if (this.contentRef.current) {\r\n      this.contentRef.current.focus()\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (prevProps.title !== this.props.title) {\r\n      this.updateDocumentTitle()\r\n    }\r\n  }\r\n\r\n  updateDocumentTitle = () => {\r\n    const { title } = this.props\r\n    document.title = !isEmpty(title) ? `${title} - PayMyTable` : 'PayMyTable'\r\n  }\r\n\r\n  setOpen = value => {\r\n    this.setState({ open: value })\r\n  }\r\n\r\n  handleBack = () => {\r\n    const currentLocation = window.location.href\r\n    const { goBack, goBackRoute, onBack } = this.props\r\n\r\n    if (onBack) {\r\n      onBack()\r\n    }\r\n\r\n    if (isNil(goBackRoute)) {\r\n      goBack()\r\n    } else {\r\n      goBackRoute()\r\n    }\r\n\r\n    /**\r\n     * wait until goBack has been made,\r\n     * then check if current location hasn't changed and redirect to callbackUri if defined\r\n     */\r\n    setTimeout(() => {\r\n      if (window.location.href === currentLocation) {\r\n        const callbackUri = getQueryParam('callback_uri')\r\n        if (!isEmpty(callbackUri)) {\r\n          window.location.href = getCallbackUri(callbackUri, CALLBACK_EVENTS.NO_PREVIOUS_PAGE)\r\n        } else {\r\n          Logger.error('[SETUP]', 'callback uri is not defined', { callbackUri })\r\n        }\r\n      }\r\n    }, 500)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      classes,\r\n      isRefreshingOauthToken,\r\n      showHeader,\r\n      title,\r\n      disableBack = false,\r\n      appConfig,\r\n    } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <a href=\"#page-main-content\" className={classes.skipLink}>\r\n          {tr('global.a11y.skip_to_content', {\r\n            fr: 'Aller au contenu',\r\n            context: '',\r\n            desc: 'Skip link label to jump straight to the main content',\r\n          })}\r\n        </a>\r\n        <AppSecurityContainer>\r\n          {({ appSecurityError }) =>\r\n            appSecurityError ? (\r\n              <ErrorLayout error={appSecurityError.localizedMessage} />\r\n            ) : isRefreshingOauthToken ? (\r\n              <LoadingBlockWrapper show />\r\n            ) : (\r\n              <Fragment>\r\n                <div className={classes.frame}>\r\n                  {showHeader && (\r\n                    <div className={classes.header}>\r\n                      {!disableBack && (\r\n                        <button\r\n                          type=\"button\"\r\n                          className={classes.arrowBack}\r\n                          onClick={this.handleBack}\r\n                          aria-label={tr('global.a11y.go_back', {\r\n                            fr: 'Retour',\r\n                            context: '',\r\n                            desc: 'Accessible label for the back button',\r\n                          })}\r\n                        >\r\n                          <ArrowBack color=\"primary\" aria-hidden=\"true\" />\r\n                        </button>\r\n                      )}\r\n                      <TypographyCustom type=\"147\" align=\"center\" component=\"h1\">\r\n                        {title}\r\n                      </TypographyCustom>\r\n                    </div>\r\n                  )}\r\n                  <div\r\n                    id=\"page-main-content\"\r\n                    className={classes.content}\r\n                    ref={this.contentRef}\r\n                    tabIndex={-1}\r\n                  >\r\n                    {children}\r\n                  </div>\r\n                  <Box className={classNames('custom-css-WEB_CUSTOMER__FOOTER', classes.footer)}>\r\n                    {!isNil(trOptional('WEB_CUSTOMER__FOOTER')) && (\r\n                      <TypographyCustom\r\n                        type=\"144\"\r\n                        align=\"center\"\r\n                        html={trOptional('WEB_CUSTOMER__FOOTER')} // we allow html so they can put links\r\n                      />\r\n                    )}\r\n\r\n                    <TypographyCustom type=\"124\" align=\"center\" component=\"span\">\r\n                      {'Powered by PayMyTable — '}\r\n                      <ButtonLink\r\n                        component=\"a\"\r\n                        style={{\r\n                          color: 'inherit',\r\n                          fontStyle: 'inherit',\r\n                          fontSize: 'inherit',\r\n                          fontWeight: 'bold',\r\n                          textDecoration: 'underline',\r\n                        }}\r\n                        onClick={() => {\r\n                          this.setOpen(true)\r\n                        }}\r\n                        label={tr('web_customer.footer.cookie_banner_link')}\r\n                      />\r\n                    </TypographyCustom>\r\n\r\n                    <CookieConsentBanner\r\n                      analyticsConfig={analytics[environment.ENV]}\r\n                      appConfig={appConfig}\r\n                      open={this.state.open}\r\n                      setOpen={this.setOpen}\r\n                      plugin={'web-customer'}\r\n                    />\r\n                  </Box>\r\n                </div>\r\n              </Fragment>\r\n            )\r\n          }\r\n        </AppSecurityContainer>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nPage.defaultProps = {\r\n  showHeader: true,\r\n  title: '',\r\n  goBackRoute: null,\r\n  onBack: null,\r\n}\r\n\r\nPage.propTypes = {\r\n  onBack: PropTypes.func,\r\n\r\n  goBackRoute: PropTypes.func,\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => ({\r\n  appConfig: getAppConfig(state),\r\n  isRefreshingOauthToken: isRefreshingOauthToken(state),\r\n})\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  connect(mapStateToProps, {\r\n    goBack,\r\n  })\r\n)(Page)\r\n","import React from 'react'\r\n\r\nimport Button from 'pmt-ui/Button'\r\n\r\nconst Header = ({ appData }) => (\r\n  <div className=\"u-marginTop30\">\r\n    {/* TODO: add restaurantsGroup logo */}\r\n    <h3>{appData.restaurantsGroup.name}</h3>\r\n  </div>\r\n)\r\n\r\nconst Authorize = ({ appData, onAuthorize }) => (\r\n  <div className=\"u-marginTop10\">\r\n    <h3>{appData.restaurantsGroup.name} souhaite utiliser votre compte.</h3>\r\n\r\n    <div className=\"u-marginTop30 u-flexCenter u-justifyContentCenter\">\r\n      <Button\r\n        raised\r\n        className=\"u-marginRight20\"\r\n        onClick={() => onAuthorize(false)}\r\n        label={'Refuser'}\r\n      />\r\n      <Button raised onClick={() => onAuthorize(true)} primary>\r\n        Accepter\r\n      </Button>\r\n    </div>\r\n  </div>\r\n)\r\n\r\n/**\r\n * @mockup N/A\r\n */\r\nconst View = ({ appData, appDataIsFetching, appDataError, onAuthorize }) => {\r\n  if (appDataIsFetching || appData === null) {\r\n    return null\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <Header appData={appData} />\r\n\r\n      <Authorize appData={appData} onAuthorize={onAuthorize} />\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default View\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst RestaurantsGroupApi = {\r\n  getRestaurantsGroup: (restaurantsGroupId, options = {}) => {\r\n    const headers = {}\r\n\r\n    if (options.withAuthorization === false) {\r\n      headers.Authorization = null\r\n    }\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.RESTAURANTS_GROUP,\r\n      type: 'GET',\r\n      headers,\r\n      params: {\r\n        restaurantsGroupId,\r\n      },\r\n      query: {\r\n        loadChildren: options.loadChildren || false,\r\n        withArchived: options.withArchived || false,\r\n      },\r\n    }\r\n  },\r\n\r\n  postRestaurantsGroup: body => ({\r\n    endpoint: ApiEndpoints.RESTAURANTS_GROUPS,\r\n    type: 'POST',\r\n    body,\r\n  }),\r\n\r\n  searchUser: ({ body, params }) => {\r\n    return {\r\n      endpoint: ApiEndpoints.RESTAURANTS_GROUP_SEARCH_USERS,\r\n      type: 'POST',\r\n      params,\r\n      body: {\r\n        query: body.query,\r\n        companyId: body.companyId,\r\n      },\r\n    }\r\n  },\r\n\r\n  putGroupStoreList: (groupId, storesIds = []) => ({\r\n    endpoint: ApiEndpoints.RESTAURANTS_GROUP_RESTAURANTS,\r\n    type: 'PUT',\r\n    body: {\r\n      restaurantsGroupId: groupId,\r\n      restaurantsIds: storesIds,\r\n    },\r\n  }),\r\n\r\n  putGroupGroupList: (groupId, childrenIds = []) => ({\r\n    endpoint: ApiEndpoints.RESTAURANTS_GROUP_HIERARCHY,\r\n    type: 'PUT',\r\n    body: {\r\n      parentRestaurantsGroupId: groupId,\r\n      childrenIds,\r\n    },\r\n  }),\r\n\r\n  patchGroup: (groupId, body) => ({\r\n    endpoint: ApiEndpoints.RESTAURANTS_GROUP,\r\n    type: 'PATCH',\r\n    params: {\r\n      restaurantsGroupId: groupId,\r\n    },\r\n    body,\r\n  }),\r\n}\r\n\r\nexport default RestaurantsGroupApi\r\n","/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017-2022 Joachim Wester\n * MIT licensed\n */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function hasOwnProperty(obj, key) {\n    return _hasOwnProperty.call(obj, key);\n}\nexport function _objectKeys(obj) {\n    if (Array.isArray(obj)) {\n        var keys_1 = new Array(obj.length);\n        for (var k = 0; k < keys_1.length; k++) {\n            keys_1[k] = \"\" + k;\n        }\n        return keys_1;\n    }\n    if (Object.keys) {\n        return Object.keys(obj);\n    }\n    var keys = [];\n    for (var i in obj) {\n        if (hasOwnProperty(obj, i)) {\n            keys.push(i);\n        }\n    }\n    return keys;\n}\n;\n/**\n* Deeply clone the object.\n* https://jsperf.com/deep-copy-vs-json-stringify-json-parse/25 (recursiveDeepCopy)\n* @param  {any} obj value to clone\n* @return {any} cloned obj\n*/\nexport function _deepClone(obj) {\n    switch (typeof obj) {\n        case \"object\":\n            return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5\n        case \"undefined\":\n            return null; //this is how JSON.stringify behaves for array items\n        default:\n            return obj; //no need to clone primitives\n    }\n}\n//3x faster than cached /^\\d+$/.test(str)\nexport function isInteger(str) {\n    var i = 0;\n    var len = str.length;\n    var charCode;\n    while (i < len) {\n        charCode = str.charCodeAt(i);\n        if (charCode >= 48 && charCode <= 57) {\n            i++;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n/**\n* Escapes a json pointer path\n* @param path The raw pointer\n* @return the Escaped path\n*/\nexport function escapePathComponent(path) {\n    if (path.indexOf('/') === -1 && path.indexOf('~') === -1)\n        return path;\n    return path.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n/**\n * Unescapes a json pointer path\n * @param path The escaped pointer\n * @return The unescaped path\n */\nexport function unescapePathComponent(path) {\n    return path.replace(/~1/g, '/').replace(/~0/g, '~');\n}\nexport function _getPathRecursive(root, obj) {\n    var found;\n    for (var key in root) {\n        if (hasOwnProperty(root, key)) {\n            if (root[key] === obj) {\n                return escapePathComponent(key) + '/';\n            }\n            else if (typeof root[key] === 'object') {\n                found = _getPathRecursive(root[key], obj);\n                if (found != '') {\n                    return escapePathComponent(key) + '/' + found;\n                }\n            }\n        }\n    }\n    return '';\n}\nexport function getPath(root, obj) {\n    if (root === obj) {\n        return '/';\n    }\n    var path = _getPathRecursive(root, obj);\n    if (path === '') {\n        throw new Error(\"Object not found in root\");\n    }\n    return \"/\" + path;\n}\n/**\n* Recursively checks whether an object has any undefined values inside.\n*/\nexport function hasUndefined(obj) {\n    if (obj === undefined) {\n        return true;\n    }\n    if (obj) {\n        if (Array.isArray(obj)) {\n            for (var i_1 = 0, len = obj.length; i_1 < len; i_1++) {\n                if (hasUndefined(obj[i_1])) {\n                    return true;\n                }\n            }\n        }\n        else if (typeof obj === \"object\") {\n            var objKeys = _objectKeys(obj);\n            var objKeysLength = objKeys.length;\n            for (var i = 0; i < objKeysLength; i++) {\n                if (hasUndefined(obj[objKeys[i]])) {\n                    return true;\n                }\n            }\n        }\n    }\n    return false;\n}\nfunction patchErrorMessageFormatter(message, args) {\n    var messageParts = [message];\n    for (var key in args) {\n        var value = typeof args[key] === 'object' ? JSON.stringify(args[key], null, 2) : args[key]; // pretty print\n        if (typeof value !== 'undefined') {\n            messageParts.push(key + \": \" + value);\n        }\n    }\n    return messageParts.join('\\n');\n}\nvar PatchError = /** @class */ (function (_super) {\n    __extends(PatchError, _super);\n    function PatchError(message, name, index, operation, tree) {\n        var _newTarget = this.constructor;\n        var _this = _super.call(this, patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree })) || this;\n        _this.name = name;\n        _this.index = index;\n        _this.operation = operation;\n        _this.tree = tree;\n        Object.setPrototypeOf(_this, _newTarget.prototype); // restore prototype chain, see https://stackoverflow.com/a/48342359\n        _this.message = patchErrorMessageFormatter(message, { name: name, index: index, operation: operation, tree: tree });\n        return _this;\n    }\n    return PatchError;\n}(Error));\nexport { PatchError };\n","import { PatchError, _deepClone, isInteger, unescapePathComponent, hasUndefined } from './helpers.mjs';\nexport var JsonPatchError = PatchError;\nexport var deepClone = _deepClone;\n/* We use a Javascript hash to store each\n function. Each hash entry (property) uses\n the operation identifiers specified in rfc6902.\n In this way, we can map each patch operation\n to its dedicated function in efficient way.\n */\n/* The operations applicable to an object */\nvar objOps = {\n    add: function (obj, key, document) {\n        obj[key] = this.value;\n        return { newDocument: document };\n    },\n    remove: function (obj, key, document) {\n        var removed = obj[key];\n        delete obj[key];\n        return { newDocument: document, removed: removed };\n    },\n    replace: function (obj, key, document) {\n        var removed = obj[key];\n        obj[key] = this.value;\n        return { newDocument: document, removed: removed };\n    },\n    move: function (obj, key, document) {\n        /* in case move target overwrites an existing value,\n        return the removed value, this can be taxing performance-wise,\n        and is potentially unneeded */\n        var removed = getValueByPointer(document, this.path);\n        if (removed) {\n            removed = _deepClone(removed);\n        }\n        var originalValue = applyOperation(document, { op: \"remove\", path: this.from }).removed;\n        applyOperation(document, { op: \"add\", path: this.path, value: originalValue });\n        return { newDocument: document, removed: removed };\n    },\n    copy: function (obj, key, document) {\n        var valueToCopy = getValueByPointer(document, this.from);\n        // enforce copy by value so further operations don't affect source (see issue #177)\n        applyOperation(document, { op: \"add\", path: this.path, value: _deepClone(valueToCopy) });\n        return { newDocument: document };\n    },\n    test: function (obj, key, document) {\n        return { newDocument: document, test: _areEquals(obj[key], this.value) };\n    },\n    _get: function (obj, key, document) {\n        this.value = obj[key];\n        return { newDocument: document };\n    }\n};\n/* The operations applicable to an array. Many are the same as for the object */\nvar arrOps = {\n    add: function (arr, i, document) {\n        if (isInteger(i)) {\n            arr.splice(i, 0, this.value);\n        }\n        else { // array props\n            arr[i] = this.value;\n        }\n        // this may be needed when using '-' in an array\n        return { newDocument: document, index: i };\n    },\n    remove: function (arr, i, document) {\n        var removedList = arr.splice(i, 1);\n        return { newDocument: document, removed: removedList[0] };\n    },\n    replace: function (arr, i, document) {\n        var removed = arr[i];\n        arr[i] = this.value;\n        return { newDocument: document, removed: removed };\n    },\n    move: objOps.move,\n    copy: objOps.copy,\n    test: objOps.test,\n    _get: objOps._get\n};\n/**\n * Retrieves a value from a JSON document by a JSON pointer.\n * Returns the value.\n *\n * @param document The document to get the value from\n * @param pointer an escaped JSON pointer\n * @return The retrieved value\n */\nexport function getValueByPointer(document, pointer) {\n    if (pointer == '') {\n        return document;\n    }\n    var getOriginalDestination = { op: \"_get\", path: pointer };\n    applyOperation(document, getOriginalDestination);\n    return getOriginalDestination.value;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the {newDocument, result} of the operation.\n * It modifies the `document` and `operation` objects - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyOperation(document, jsonpatch._deepClone(operation))`.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return `{newDocument, result}` after the operation\n */\nexport function applyOperation(document, operation, validateOperation, mutateDocument, banPrototypeModifications, index) {\n    if (validateOperation === void 0) { validateOperation = false; }\n    if (mutateDocument === void 0) { mutateDocument = true; }\n    if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n    if (index === void 0) { index = 0; }\n    if (validateOperation) {\n        if (typeof validateOperation == 'function') {\n            validateOperation(operation, 0, document, operation.path);\n        }\n        else {\n            validator(operation, 0);\n        }\n    }\n    /* ROOT OPERATIONS */\n    if (operation.path === \"\") {\n        var returnValue = { newDocument: document };\n        if (operation.op === 'add') {\n            returnValue.newDocument = operation.value;\n            return returnValue;\n        }\n        else if (operation.op === 'replace') {\n            returnValue.newDocument = operation.value;\n            returnValue.removed = document; //document we removed\n            return returnValue;\n        }\n        else if (operation.op === 'move' || operation.op === 'copy') { // it's a move or copy to root\n            returnValue.newDocument = getValueByPointer(document, operation.from); // get the value by json-pointer in `from` field\n            if (operation.op === 'move') { // report removed item\n                returnValue.removed = document;\n            }\n            return returnValue;\n        }\n        else if (operation.op === 'test') {\n            returnValue.test = _areEquals(document, operation.value);\n            if (returnValue.test === false) {\n                throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n            }\n            returnValue.newDocument = document;\n            return returnValue;\n        }\n        else if (operation.op === 'remove') { // a remove on root\n            returnValue.removed = document;\n            returnValue.newDocument = null;\n            return returnValue;\n        }\n        else if (operation.op === '_get') {\n            operation.value = document;\n            return returnValue;\n        }\n        else { /* bad operation */\n            if (validateOperation) {\n                throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n            }\n            else {\n                return returnValue;\n            }\n        }\n    } /* END ROOT OPERATIONS */\n    else {\n        if (!mutateDocument) {\n            document = _deepClone(document);\n        }\n        var path = operation.path || \"\";\n        var keys = path.split('/');\n        var obj = document;\n        var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift\n        var len = keys.length;\n        var existingPathFragment = undefined;\n        var key = void 0;\n        var validateFunction = void 0;\n        if (typeof validateOperation == 'function') {\n            validateFunction = validateOperation;\n        }\n        else {\n            validateFunction = validator;\n        }\n        while (true) {\n            key = keys[t];\n            if (key && key.indexOf('~') != -1) {\n                key = unescapePathComponent(key);\n            }\n            if (banPrototypeModifications &&\n                (key == '__proto__' ||\n                    (key == 'prototype' && t > 0 && keys[t - 1] == 'constructor'))) {\n                throw new TypeError('JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README');\n            }\n            if (validateOperation) {\n                if (existingPathFragment === undefined) {\n                    if (obj[key] === undefined) {\n                        existingPathFragment = keys.slice(0, t).join('/');\n                    }\n                    else if (t == len - 1) {\n                        existingPathFragment = operation.path;\n                    }\n                    if (existingPathFragment !== undefined) {\n                        validateFunction(operation, 0, document, existingPathFragment);\n                    }\n                }\n            }\n            t++;\n            if (Array.isArray(obj)) {\n                if (key === '-') {\n                    key = obj.length;\n                }\n                else {\n                    if (validateOperation && !isInteger(key)) {\n                        throw new JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\", \"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\", index, operation, document);\n                    } // only parse key when it's an integer for `arr.prop` to work\n                    else if (isInteger(key)) {\n                        key = ~~key;\n                    }\n                }\n                if (t >= len) {\n                    if (validateOperation && operation.op === \"add\" && key > obj.length) {\n                        throw new JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\", \"OPERATION_VALUE_OUT_OF_BOUNDS\", index, operation, document);\n                    }\n                    var returnValue = arrOps[operation.op].call(operation, obj, key, document); // Apply patch\n                    if (returnValue.test === false) {\n                        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n                    }\n                    return returnValue;\n                }\n            }\n            else {\n                if (t >= len) {\n                    var returnValue = objOps[operation.op].call(operation, obj, key, document); // Apply patch\n                    if (returnValue.test === false) {\n                        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n                    }\n                    return returnValue;\n                }\n            }\n            obj = obj[key];\n            // If we have more keys in the path, but the next value isn't a non-null object,\n            // throw an OPERATION_PATH_UNRESOLVABLE error instead of iterating again.\n            if (validateOperation && t < len && (!obj || typeof obj !== \"object\")) {\n                throw new JsonPatchError('Cannot perform operation at the desired path', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n            }\n        }\n    }\n}\n/**\n * Apply a full JSON Patch array on a JSON document.\n * Returns the {newDocument, result} of the patch.\n * It modifies the `document` object and `patch` - it gets the values by reference.\n * If you would like to avoid touching your values, clone them:\n * `jsonpatch.applyPatch(document, jsonpatch._deepClone(patch))`.\n *\n * @param document The document to patch\n * @param patch The patch to apply\n * @param validateOperation `false` is without validation, `true` to use default jsonpatch's validation, or you can pass a `validateOperation` callback to be used for validation.\n * @param mutateDocument Whether to mutate the original document or clone it before applying\n * @param banPrototypeModifications Whether to ban modifications to `__proto__`, defaults to `true`.\n * @return An array of `{newDocument, result}` after the patch\n */\nexport function applyPatch(document, patch, validateOperation, mutateDocument, banPrototypeModifications) {\n    if (mutateDocument === void 0) { mutateDocument = true; }\n    if (banPrototypeModifications === void 0) { banPrototypeModifications = true; }\n    if (validateOperation) {\n        if (!Array.isArray(patch)) {\n            throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n        }\n    }\n    if (!mutateDocument) {\n        document = _deepClone(document);\n    }\n    var results = new Array(patch.length);\n    for (var i = 0, length_1 = patch.length; i < length_1; i++) {\n        // we don't need to pass mutateDocument argument because if it was true, we already deep cloned the object, we'll just pass `true`\n        results[i] = applyOperation(document, patch[i], validateOperation, true, banPrototypeModifications, i);\n        document = results[i].newDocument; // in case root was replaced\n    }\n    results.newDocument = document;\n    return results;\n}\n/**\n * Apply a single JSON Patch Operation on a JSON document.\n * Returns the updated document.\n * Suitable as a reducer.\n *\n * @param document The document to patch\n * @param operation The operation to apply\n * @return The updated document\n */\nexport function applyReducer(document, operation, index) {\n    var operationResult = applyOperation(document, operation);\n    if (operationResult.test === false) { // failed test\n        throw new JsonPatchError(\"Test operation failed\", 'TEST_OPERATION_FAILED', index, operation, document);\n    }\n    return operationResult.newDocument;\n}\n/**\n * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error.\n * @param {object} operation - operation object (patch)\n * @param {number} index - index of operation in the sequence\n * @param {object} [document] - object where the operation is supposed to be applied\n * @param {string} [existingPathFragment] - comes along with `document`\n */\nexport function validator(operation, index, document, existingPathFragment) {\n    if (typeof operation !== 'object' || operation === null || Array.isArray(operation)) {\n        throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, document);\n    }\n    else if (!objOps[operation.op]) {\n        throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, document);\n    }\n    else if (typeof operation.path !== 'string') {\n        throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, document);\n    }\n    else if (operation.path.indexOf('/') !== 0 && operation.path.length > 0) {\n        // paths that aren't empty string should start with \"/\"\n        throw new JsonPatchError('Operation `path` property must start with \"/\"', 'OPERATION_PATH_INVALID', index, operation, document);\n    }\n    else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') {\n        throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, document);\n    }\n    else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) {\n        throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, document);\n    }\n    else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) {\n        throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, document);\n    }\n    else if (document) {\n        if (operation.op == \"add\") {\n            var pathLen = operation.path.split(\"/\").length;\n            var existingPathLen = existingPathFragment.split(\"/\").length;\n            if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) {\n                throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, document);\n            }\n        }\n        else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') {\n            if (operation.path !== existingPathFragment) {\n                throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, document);\n            }\n        }\n        else if (operation.op === 'move' || operation.op === 'copy') {\n            var existingValue = { op: \"_get\", path: operation.from, value: undefined };\n            var error = validate([existingValue], document);\n            if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') {\n                throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, document);\n            }\n        }\n    }\n}\n/**\n * Validates a sequence of operations. If `document` parameter is provided, the sequence is additionally validated against the object document.\n * If error is encountered, returns a JsonPatchError object\n * @param sequence\n * @param document\n * @returns {JsonPatchError|undefined}\n */\nexport function validate(sequence, document, externalValidator) {\n    try {\n        if (!Array.isArray(sequence)) {\n            throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n        }\n        if (document) {\n            //clone document and sequence so that we can safely try applying operations\n            applyPatch(_deepClone(document), _deepClone(sequence), externalValidator || true);\n        }\n        else {\n            externalValidator = externalValidator || validator;\n            for (var i = 0; i < sequence.length; i++) {\n                externalValidator(sequence[i], i, document, undefined);\n            }\n        }\n    }\n    catch (e) {\n        if (e instanceof JsonPatchError) {\n            return e;\n        }\n        else {\n            throw e;\n        }\n    }\n}\n// based on https://github.com/epoberezkin/fast-deep-equal\n// MIT License\n// Copyright (c) 2017 Evgeny Poberezkin\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\nexport function _areEquals(a, b) {\n    if (a === b)\n        return true;\n    if (a && b && typeof a == 'object' && typeof b == 'object') {\n        var arrA = Array.isArray(a), arrB = Array.isArray(b), i, length, key;\n        if (arrA && arrB) {\n            length = a.length;\n            if (length != b.length)\n                return false;\n            for (i = length; i-- !== 0;)\n                if (!_areEquals(a[i], b[i]))\n                    return false;\n            return true;\n        }\n        if (arrA != arrB)\n            return false;\n        var keys = Object.keys(a);\n        length = keys.length;\n        if (length !== Object.keys(b).length)\n            return false;\n        for (i = length; i-- !== 0;)\n            if (!b.hasOwnProperty(keys[i]))\n                return false;\n        for (i = length; i-- !== 0;) {\n            key = keys[i];\n            if (!_areEquals(a[key], b[key]))\n                return false;\n        }\n        return true;\n    }\n    return a !== a && b !== b;\n}\n;\n","/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * (c) 2017-2021 Joachim Wester\n * MIT license\n */\nimport { _deepClone, _objectKeys, escapePathComponent, hasOwnProperty } from './helpers.mjs';\nimport { applyPatch } from './core.mjs';\nvar beforeDict = new WeakMap();\nvar Mirror = /** @class */ (function () {\n    function Mirror(obj) {\n        this.observers = new Map();\n        this.obj = obj;\n    }\n    return Mirror;\n}());\nvar ObserverInfo = /** @class */ (function () {\n    function ObserverInfo(callback, observer) {\n        this.callback = callback;\n        this.observer = observer;\n    }\n    return ObserverInfo;\n}());\nfunction getMirror(obj) {\n    return beforeDict.get(obj);\n}\nfunction getObserverFromMirror(mirror, callback) {\n    return mirror.observers.get(callback);\n}\nfunction removeObserverFromMirror(mirror, observer) {\n    mirror.observers.delete(observer.callback);\n}\n/**\n * Detach an observer from an object\n */\nexport function unobserve(root, observer) {\n    observer.unobserve();\n}\n/**\n * Observes changes made to an object, which can then be retrieved using generate\n */\nexport function observe(obj, callback) {\n    var patches = [];\n    var observer;\n    var mirror = getMirror(obj);\n    if (!mirror) {\n        mirror = new Mirror(obj);\n        beforeDict.set(obj, mirror);\n    }\n    else {\n        var observerInfo = getObserverFromMirror(mirror, callback);\n        observer = observerInfo && observerInfo.observer;\n    }\n    if (observer) {\n        return observer;\n    }\n    observer = {};\n    mirror.value = _deepClone(obj);\n    if (callback) {\n        observer.callback = callback;\n        observer.next = null;\n        var dirtyCheck = function () {\n            generate(observer);\n        };\n        var fastCheck = function () {\n            clearTimeout(observer.next);\n            observer.next = setTimeout(dirtyCheck);\n        };\n        if (typeof window !== 'undefined') { //not Node\n            window.addEventListener('mouseup', fastCheck);\n            window.addEventListener('keyup', fastCheck);\n            window.addEventListener('mousedown', fastCheck);\n            window.addEventListener('keydown', fastCheck);\n            window.addEventListener('change', fastCheck);\n        }\n    }\n    observer.patches = patches;\n    observer.object = obj;\n    observer.unobserve = function () {\n        generate(observer);\n        clearTimeout(observer.next);\n        removeObserverFromMirror(mirror, observer);\n        if (typeof window !== 'undefined') {\n            window.removeEventListener('mouseup', fastCheck);\n            window.removeEventListener('keyup', fastCheck);\n            window.removeEventListener('mousedown', fastCheck);\n            window.removeEventListener('keydown', fastCheck);\n            window.removeEventListener('change', fastCheck);\n        }\n    };\n    mirror.observers.set(callback, new ObserverInfo(callback, observer));\n    return observer;\n}\n/**\n * Generate an array of patches from an observer\n */\nexport function generate(observer, invertible) {\n    if (invertible === void 0) { invertible = false; }\n    var mirror = beforeDict.get(observer.object);\n    _generate(mirror.value, observer.object, observer.patches, \"\", invertible);\n    if (observer.patches.length) {\n        applyPatch(mirror.value, observer.patches);\n    }\n    var temp = observer.patches;\n    if (temp.length > 0) {\n        observer.patches = [];\n        if (observer.callback) {\n            observer.callback(temp);\n        }\n    }\n    return temp;\n}\n// Dirty check if obj is different from mirror, generate patches and update mirror\nfunction _generate(mirror, obj, patches, path, invertible) {\n    if (obj === mirror) {\n        return;\n    }\n    if (typeof obj.toJSON === \"function\") {\n        obj = obj.toJSON();\n    }\n    var newKeys = _objectKeys(obj);\n    var oldKeys = _objectKeys(mirror);\n    var changed = false;\n    var deleted = false;\n    //if ever \"move\" operation is implemented here, make sure this test runs OK: \"should not generate the same patch twice (move)\"\n    for (var t = oldKeys.length - 1; t >= 0; t--) {\n        var key = oldKeys[t];\n        var oldVal = mirror[key];\n        if (hasOwnProperty(obj, key) && !(obj[key] === undefined && oldVal !== undefined && Array.isArray(obj) === false)) {\n            var newVal = obj[key];\n            if (typeof oldVal == \"object\" && oldVal != null && typeof newVal == \"object\" && newVal != null && Array.isArray(oldVal) === Array.isArray(newVal)) {\n                _generate(oldVal, newVal, patches, path + \"/\" + escapePathComponent(key), invertible);\n            }\n            else {\n                if (oldVal !== newVal) {\n                    changed = true;\n                    if (invertible) {\n                        patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n                    }\n                    patches.push({ op: \"replace\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(newVal) });\n                }\n            }\n        }\n        else if (Array.isArray(mirror) === Array.isArray(obj)) {\n            if (invertible) {\n                patches.push({ op: \"test\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(oldVal) });\n            }\n            patches.push({ op: \"remove\", path: path + \"/\" + escapePathComponent(key) });\n            deleted = true; // property has been deleted\n        }\n        else {\n            if (invertible) {\n                patches.push({ op: \"test\", path: path, value: mirror });\n            }\n            patches.push({ op: \"replace\", path: path, value: obj });\n            changed = true;\n        }\n    }\n    if (!deleted && newKeys.length == oldKeys.length) {\n        return;\n    }\n    for (var t = 0; t < newKeys.length; t++) {\n        var key = newKeys[t];\n        if (!hasOwnProperty(mirror, key) && obj[key] !== undefined) {\n            patches.push({ op: \"add\", path: path + \"/\" + escapePathComponent(key), value: _deepClone(obj[key]) });\n        }\n    }\n}\n/**\n * Create an array of patches from the differences in two objects\n */\nexport function compare(tree1, tree2, invertible) {\n    if (invertible === void 0) { invertible = false; }\n    var patches = [];\n    _generate(tree1, tree2, patches, '', invertible);\n    return patches;\n}\n","export * from './module/core.mjs';\nexport * from './module/duplex.mjs';\nexport {\n    PatchError as JsonPatchError,\n    _deepClone as deepClone,\n    escapePathComponent,\n    unescapePathComponent\n} from './module/helpers.mjs';\n\n\n/**\n * Default export for backwards compat\n */\n\nimport * as core from './module/core.mjs';\nimport * as duplex from './module/duplex.mjs';\nimport {\n    PatchError as JsonPatchError,\n    _deepClone as deepClone,\n    escapePathComponent,\n    unescapePathComponent\n} from './module/helpers.mjs';\n\nexport default Object.assign({}, core, duplex, {\n    JsonPatchError,\n    deepClone,\n    escapePathComponent,\n    unescapePathComponent\n});","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport RestaurantsGroupApi from 'pmt-modules/api/calls/RestaurantsGroupApi'\r\nimport { compare } from 'fast-json-patch'\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const GetRestaurantsGroupAction = createApiEnumAction('RESTAURANTSGROUP::GET')\r\n\r\nconst DEFAULT_OPTIONS = {\r\n  // default false, to avoid missing it.\r\n  withAuthorization: false,\r\n}\r\n\r\nexport const PostRestaurantsGroupAction = createApiEnumAction('RESTAURANTSGROUP::POST')\r\nexport const postRestaurantsGroup = restaurantsGroup =>\r\n  createApiCallAction(\r\n    PostRestaurantsGroupAction,\r\n    RestaurantsGroupApi.postRestaurantsGroup(restaurantsGroup),\r\n    {\r\n      restaurantsGroup,\r\n    }\r\n  )\r\n\r\n/**\r\n *\r\n * @param {string|number} restaurantsGroupId can either be a string ('mine') or a number\r\n * @param {object} options\r\n */\r\nexport const fetchRestaurantsGroup = (restaurantsGroupId, options = DEFAULT_OPTIONS) =>\r\n  createApiCallAction(\r\n    GetRestaurantsGroupAction,\r\n    RestaurantsGroupApi.getRestaurantsGroup(restaurantsGroupId, options),\r\n    {\r\n      restaurantsGroupId,\r\n      options,\r\n    }\r\n  )\r\n\r\nexport const PutGroupStoreListAction = createApiEnumAction('GROUP::PUT::STORE_LIST')\r\n\r\nexport const putGroupStoreList = (groupId, storesIds) =>\r\n  createApiCallAction(\r\n    PutGroupStoreListAction,\r\n    RestaurantsGroupApi.putGroupStoreList(groupId, storesIds),\r\n    {\r\n      groupId,\r\n      storesIds,\r\n    }\r\n  )\r\n\r\nexport const PutGroupGroupListAction = createApiEnumAction('GROUP::PUT::GROUP_LIST')\r\n\r\nexport const putGroupChildrenGroupList = (parentGroupId, childrenIds) =>\r\n  createApiCallAction(\r\n    PutGroupGroupListAction,\r\n    RestaurantsGroupApi.putGroupGroupList(parentGroupId, childrenIds),\r\n    {\r\n      parentGroupId,\r\n      childrenIds,\r\n    }\r\n  )\r\n\r\nexport const PatchGroupAction = createApiEnumAction('GROUP::PATCH::GROUP')\r\n\r\nexport const patchGroup = (defaultData, formData) => {\r\n  if (process.env.FEATURE_BO) {\r\n    const body = compare(defaultData, formData)\r\n\r\n    return createApiCallAction(\r\n      PatchGroupAction,\r\n      RestaurantsGroupApi.patchGroup(defaultData.id, body),\r\n      {\r\n        restaurantsGroupId: defaultData.id,\r\n        defaultData,\r\n        formData,\r\n        body,\r\n      }\r\n    )\r\n  }\r\n}\r\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n  return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","import { tr } from 'pmt-modules/i18n'\r\nimport keys from 'lodash/keys'\r\nimport map from 'lodash/map'\r\n\r\n/**\r\n * Defines the different possible type to display the history (on the web customer)\r\n */\r\nexport const FrontCateringHistoryType = {\r\n  PAY_MY_TABLE: 'PAY_MY_TABLE',\r\n  THIRD_PARTY: 'THIRD_PARTY',\r\n}\r\n\r\nexport const GroupType = {\r\n  USER: 'USER',\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const AcquirerType = {\r\n  MANGOPAY: 'MANGOPAY',\r\n  PAYGREEN: 'PAYGREEN',\r\n  FAKE: 'FAKE',\r\n  NONE: null,\r\n}\r\n\r\nexport const getAcquirerLabel = acquirer => {\r\n  switch (acquirer) {\r\n    case AcquirerType.MANGOPAY:\r\n      return 'MangoPay'\r\n    case AcquirerType.PAYGREEN:\r\n      return 'PayGreen'\r\n    case AcquirerType.FAKE:\r\n      return 'FAKE'\r\n    default:\r\n      return tr('global.none')\r\n  }\r\n}\r\n\r\nexport const UserManagerType = {\r\n  NONE: null,\r\n  TCPOS: 'tcpos',\r\n}\r\n\r\nexport const getUserManagerTypeLabel = type => {\r\n  switch (type) {\r\n    case UserManagerType.TCPOS:\r\n      return 'TCPOS'\r\n    default:\r\n      return tr('global.none')\r\n  }\r\n}\r\n\r\nexport const getGroupType = type => GroupType[type]\r\n\r\nexport const getGroupTypeLabel = type => {\r\n  switch (type) {\r\n    case GroupType.USER:\r\n      return tr('global.groups.type.user')\r\n    case GroupType.OTHER:\r\n      return tr('global.groups.type.other')\r\n    default:\r\n      return ''\r\n  }\r\n}\r\n\r\nexport const getGroupTypesLabelAsArray = () =>\r\n  keys(GroupType).map(value => ({\r\n    label: getGroupTypeLabel(value),\r\n    value,\r\n  }))\r\n\r\n/**\r\n * Enum of locales that are handled by PMT. Only those locales can be defined as used locales on our\r\n * configurations (such as RestaurantsGroup locales).\r\n */\r\nexport const PMTLocale = {\r\n  // languages without country\r\n  // so we can handle them if the TCPOS configuration gives us PIM item with localizedNames without the country code\r\n\r\n  // cf. LocaleFlag.getCountryForLocale to configure the flag to use for those country-less locales\r\n  sq: 'sq',\r\n  ar: 'ar',\r\n  be: 'be',\r\n  bg: 'bg',\r\n  ca: 'ca',\r\n  zh: 'zh',\r\n  hr: 'hr',\r\n  cs: 'cs',\r\n  da: 'da',\r\n  nl: 'nl',\r\n  en: 'en',\r\n  et: 'et',\r\n  fi: 'fi',\r\n  fr: 'fr',\r\n  de: 'de',\r\n  el: 'el',\r\n  iw: 'iw',\r\n  hi: 'hi',\r\n  hu: 'hu',\r\n  is: 'is',\r\n  in: 'in',\r\n  ga: 'ga',\r\n  it: 'it',\r\n  ja: 'ja',\r\n  ko: 'ko',\r\n  lv: 'lv',\r\n  lt: 'lt',\r\n  mk: 'mk',\r\n  ms: 'ms',\r\n  mt: 'mt',\r\n  no: 'no',\r\n  pl: 'pl',\r\n  pt: 'pt',\r\n  ro: 'ro',\r\n  ru: 'ru',\r\n  sr: 'sr',\r\n  sk: 'sk',\r\n  sl: 'sl',\r\n  es: 'es',\r\n  sv: 'sv',\r\n  th: 'th',\r\n  tr: 'tr',\r\n  uk: 'uk',\r\n  vi: 'vi',\r\n\r\n  // languages with country code\r\n  sq_AL: 'sq-AL',\r\n  ar_DZ: 'ar-DZ',\r\n  ar_BH: 'ar-BH',\r\n  ar_EG: 'ar-EG',\r\n  ar_IQ: 'ar-IQ',\r\n  ar_JO: 'ar-JO',\r\n  ar_KW: 'ar-KW',\r\n  ar_LB: 'ar-LB',\r\n  ar_LY: 'ar-LY',\r\n  ar_MA: 'ar-MA',\r\n  ar_OM: 'ar-OM',\r\n  ar_QA: 'ar-QA',\r\n  ar_SA: 'ar-SA',\r\n  ar_SD: 'ar-SD',\r\n  ar_SY: 'ar-SY',\r\n  ar_TN: 'ar-TN',\r\n  ar_AE: 'ar-AE',\r\n  ar_YE: 'ar-YE',\r\n  be_BY: 'be-BY',\r\n  bg_BG: 'bg-BG',\r\n  ca_ES: 'ca-ES',\r\n  zh_CN: 'zh-CN',\r\n  zh_SG: 'zh-SG',\r\n  zh_HK: 'zh-HK',\r\n  zh_TW: 'zh-TW',\r\n  hr_HR: 'hr-HR',\r\n  cs_CZ: 'cs-CZ',\r\n  da_DK: 'da-DK',\r\n  nl_BE: 'nl-BE',\r\n  nl_NL: 'nl-NL',\r\n  en_AU: 'en-AU',\r\n  en_CA: 'en-CA',\r\n  en_IN: 'en-IN',\r\n  en_IE: 'en-IE',\r\n  en_MT: 'en-MT',\r\n  en_NZ: 'en-NZ',\r\n  en_PH: 'en-PH',\r\n  en_SG: 'en-SG',\r\n  en_ZA: 'en-ZA',\r\n  en_GB: 'en-GB',\r\n  en_US: 'en-US',\r\n  et_EE: 'et-EE',\r\n  fi_FI: 'fi-FI',\r\n  fr_FR: 'fr-FR',\r\n  fr_BE: 'fr-BE',\r\n  fr_CA: 'fr-CA',\r\n  fr_LU: 'fr-LU',\r\n  fr_CH: 'fr-CH',\r\n  de_AT: 'de-AT',\r\n  de_DE: 'de-DE',\r\n  de_LU: 'de-LU',\r\n  de_CH: 'de-CH',\r\n  el_CY: 'el-CY',\r\n  el_GR: 'el-GR',\r\n  iw_IL: 'iw-IL',\r\n  hi_IN: 'hi-IN',\r\n  hu_HU: 'hu-HU',\r\n  is_IS: 'is-IS',\r\n  in_ID: 'in-ID',\r\n  ga_IE: 'ga-IE',\r\n  it_IT: 'it-IT',\r\n  it_CH: 'it-CH',\r\n  ja_JP: 'ja-JP',\r\n  ko_KR: 'ko-KR',\r\n  lv_LV: 'lv-LV',\r\n  lt_LT: 'lt-LT',\r\n  mk_MK: 'mk-MK',\r\n  ms_MY: 'ms-MY',\r\n  mt_MT: 'mt-MT',\r\n  no_NO: 'no-NO',\r\n  pl_PL: 'pl-PL',\r\n  pt_BR: 'pt-BR',\r\n  pt_PT: 'pt-PT',\r\n  ro_RO: 'ro-RO',\r\n  ru_RU: 'ru-RU',\r\n  sr_BA: 'sr-BA',\r\n  sr_ME: 'sr-ME',\r\n  sr_RS: 'sr-RS',\r\n  sk_SK: 'sk-SK',\r\n  sl_SI: 'sl-SI',\r\n  es_AR: 'es-AR',\r\n  es_BO: 'es-BO',\r\n  es_CL: 'es-CL',\r\n  es_CO: 'es-CO',\r\n  es_CR: 'es-CR',\r\n  es_DO: 'es-DO',\r\n  es_EC: 'es-EC',\r\n  es_SV: 'es-SV',\r\n  es_GT: 'es-GT',\r\n  es_HN: 'es-HN',\r\n  es_MX: 'es-MX',\r\n  es_NI: 'es-NI',\r\n  es_PA: 'es-PA',\r\n  es_PY: 'es-PY',\r\n  es_PE: 'es-PE',\r\n  es_PR: 'es-PR',\r\n  es_ES: 'es-ES',\r\n  es_US: 'es-US',\r\n  es_UY: 'es-UY',\r\n  es_VE: 'es-VE',\r\n  sv_SE: 'sv-SE',\r\n  th_TH: 'th-TH',\r\n  tr_TR: 'tr-TR',\r\n  uk_UA: 'uk-UA',\r\n  vi_VN: 'vi-VN',\r\n}\r\n\r\nexport const getLocales = () => map(PMTLocale, value => value)\r\n\r\nexport const PaymentMethodDetail = {\r\n  //\r\n  // GENERIC/DEFAULT VALUES\r\n  //\r\n\r\n  /**\r\n   * Default value to be use.\r\n   * <p>\r\n   * In general means that the payment service is still unknown (eg we didn't receive the payment infos yet)\r\n   */\r\n  UNKNOWN: 'UNKNOWN',\r\n  /**\r\n   * For payment method not supported.\r\n   * <p>\r\n   * In general means that the payment service is not known by PMT\r\n   */\r\n  OTHER: 'OTHER',\r\n\r\n  //\r\n  // CARDS\r\n  //\r\n\r\n  /**\r\n   * Generic card (eg if PSP doesn't support card brand separation like Mangopay)\r\n   */\r\n  CARD: 'CARD',\r\n  VISA: 'VISA',\r\n  MASTERCARD: 'MASTERCARD',\r\n  /**\r\n   * MasterCard's Debit only cards\r\n   */\r\n  MAESTRO: 'MAESTRO',\r\n  /**\r\n   * American Express\r\n   */\r\n  AMEX: 'AMEX',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/Diners_Club_International\">Diners Club International</a>\r\n   * AND <a href=\"https://en.wikipedia.org/wiki/Discover_Card\">Discover Card</a>.\r\n   * <p>\r\n   * Note: Those are linked because Saferpay keep them linked.\r\n   */\r\n  DINERS: 'DINERS',\r\n  /**\r\n   * PostFinance Card\r\n   * <p>\r\n   * Note: To see in the future but can be linked with {@link PaymentMethodDetailEnum#POSTFINANCE}\r\n   */\r\n  POSTCARD: 'POSTCARD',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/JCB_Co.,_Ltd\">Japan Credit Bureau</a>.\r\n   */\r\n  JCB: 'JCB',\r\n  /**\r\n   * MyOne is a local Swiss payment card\r\n   */\r\n  MYONE: 'MYONE',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/UnionPay\">UnionPay</a>, China\r\n   */\r\n  UNIONPAY: 'UNIONPAY',\r\n\r\n  //\r\n  // ONLINE PAYMENT SERVICES\r\n  //\r\n\r\n  PAYPAL: 'PAYPAL',\r\n  /**\r\n   * <a href=\"https://www.twint.ch/en/\">TWINT</a>,Switzerland’s payment app (also a bit present in Germany and France)\r\n   */\r\n  TWINT: 'TWINT',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/Klarna\">Klarna</a> |\r\n   * <a href=\"https://docs.saferpay.com/home/integration-guide/payment-methods/klarna-payments\">Klarna Payments</a>\r\n   */\r\n  KLARNA: 'KLARNA',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/Alipay\">Alipay</a>\r\n   */\r\n  ALIPAY: 'ALIPAY',\r\n  /**\r\n   * <a href=\"https://fr.wikipedia.org/wiki/Bancontact\">Bancontact</a>, Belgium\r\n   */\r\n  BANCONTACT: 'BANCONTACT',\r\n  /**\r\n   * <a href=\"https://docs.connect.worldline-solutions.com/payment-product/ePrzelewy/overview\">ePrzelewy</a>, Poland\r\n   */\r\n  EPRZELEWY: 'EPRZELEWY',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/Giropay\">Giropay</a>, Germany\r\n   */\r\n  GIROPAY: 'GIROPAY',\r\n  /**\r\n   * <a href=\"https://en.wikipedia.org/wiki/IDEAL\">IDEAL</a>, Netherland\r\n   */\r\n  IDEAL: 'IDEAL',\r\n  /**\r\n   * PostFinance eFinance\r\n   * <p>\r\n   * Note: To see in the future but can be linked with {@link PaymentMethodDetailEnum#POSTCARD}\r\n   */\r\n  POSTFINANCE: 'POSTFINANCE',\r\n\r\n  //\r\n  // OTHER\r\n  //\r\n\r\n  TRD: 'TRD',\r\n  /**\r\n   * SEPA\r\n   */\r\n  DIRECTDEBIT: 'DIRECTDEBIT',\r\n  /**\r\n   * <a href=\"https://stripe.com/fr/legal/eps\">Electronic Payment Standard</a>, Austria\r\n   */\r\n  EPS: 'EPS',\r\n}\r\n\r\nexport const getPaymentMethodDetailLabel = paymentMethodDetail => {\r\n  switch (paymentMethodDetail) {\r\n    case PaymentMethodDetail.TRD:\r\n      return tr('global.payment.method.detail.TRD')\r\n    case PaymentMethodDetail.CARD:\r\n      return tr('global.payment.method.detail.CARD')\r\n    case PaymentMethodDetail.OTHER:\r\n      return tr('global.payment.method.detail.OTHER')\r\n    case PaymentMethodDetail.UNKNOWN:\r\n      return tr('global.payment.method.detail.UNKNOWN')\r\n    default:\r\n      return paymentMethodDetail\r\n  }\r\n}\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport flatten from 'lodash/flatten'\r\nimport uniq from 'lodash/uniq'\r\nimport forEach from 'lodash/forEach'\r\nimport sortBy from 'lodash/sortBy'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { createFormatter, createListFormatter, createDeepFormatter } from 'pmt-utils/format'\r\n\r\nimport { FrontCateringHistoryType, GroupType } from '../constants'\r\n\r\nexport const formatLevel = rGroup => {\r\n  rGroup.isFirstLevel = rGroup.level === 1\r\n  rGroup.hasChildren = !isEmpty(rGroup.childrenIds)\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const formatType = rGroup => {\r\n  rGroup.isTypeUser = rGroup.type === GroupType.USER\r\n  rGroup.isTypeOther = rGroup.type === GroupType.OTHER\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const formatFrontSettings = rGroup => {\r\n  rGroup.frontSettings = rGroup.frontSettings || {}\r\n\r\n  // catering\r\n  rGroup.frontSettings.catering = rGroup.frontSettings.catering || {}\r\n\r\n  // catering history type\r\n  rGroup.frontSettings.catering.historyType =\r\n    rGroup.frontSettings.catering.historyType || FrontCateringHistoryType.PAY_MY_TABLE\r\n  rGroup.frontSettings.catering.isHistoryTypePayMyTable =\r\n    FrontCateringHistoryType.PAY_MY_TABLE === rGroup.frontSettings.catering.historyType\r\n  rGroup.frontSettings.catering.isHistoryTypeThirdParty =\r\n    FrontCateringHistoryType.THIRD_PARTY === rGroup.frontSettings.catering.historyType\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const sortSubRestaurantsGroups = rGroup => {\r\n  if (!isNil(rGroup.children)) {\r\n    rGroup.children = sortBy(rGroup.children, [rGroup => rGroup.name.toLowerCase()], ['desc'])\r\n  }\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const formatForgottenPasswordLink = rGroup => {\r\n  rGroup.forgottenPasswordLink =\r\n    !isNil(rGroup.userSettings) &&\r\n    !isNil(rGroup.userSettings.managementSettings) &&\r\n    !isNil(rGroup.userSettings.managementSettings.passwordRecoveryUrl)\r\n      ? rGroup.userSettings.managementSettings.passwordRecoveryUrl\r\n      : null\r\n\r\n  return rGroup\r\n}\r\n\r\nconst formatChildrenRestaurants = rGroup => {\r\n  let list = []\r\n  forEach(rGroup.children || [], child => {\r\n    list.push(child.restaurantsIds)\r\n  })\r\n  list = uniq(flatten(list))\r\n\r\n  if (!rGroup.restaurantsIds) {\r\n    debugger\r\n  }\r\n  rGroup.ownedRestaurantsIds = rGroup.restaurantsIds.filter(id => list.indexOf(id) < 0)\r\n\r\n  rGroup.hasRestaurants = !isEmpty(rGroup.restaurantsIds)\r\n\r\n  return rGroup\r\n}\r\n\r\nexport const formatRestaurantsGroup = createFormatter(\r\n  formatLevel,\r\n  formatType,\r\n  sortSubRestaurantsGroups,\r\n  formatForgottenPasswordLink,\r\n  formatFrontSettings,\r\n  formatChildrenRestaurants\r\n)\r\n\r\nexport const formatRestaurantsGroupList = createListFormatter(formatRestaurantsGroup)\r\n\r\nexport const formatRestaurantsGroupWithChildren = createDeepFormatter(\r\n  formatRestaurantsGroup,\r\n  'children'\r\n)\r\n","import isNil from 'lodash/isNil'\r\nimport forEach from 'lodash/forEach'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nimport { formatRestaurantsGroupWithChildren } from './format'\r\n\r\nconst getState = state => state.entities.restaurantsGroup\r\n// handle restaurantsGroupId pass on props as a int, immutable data use keys as strings\r\nconst getRestaurantsGroupIdOnProps = (state, props) =>\r\n  props.restaurantsGroupId ? String(props.restaurantsGroupId) : props.restaurantsGroupId\r\n\r\nexport const getRestaurantsGroupListState = createSelector([getState], state => state.get('list'))\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getRestaurantsGroupsMap = createSelector(\r\n  [getRestaurantsGroupListState],\r\n  restaurantsGroups => {\r\n    let groups = (restaurantsGroups.toJS ? restaurantsGroups.toJS() : restaurantsGroups) || {}\r\n\r\n    const groupsMap = {}\r\n    forEach(groups, (restaurantsGroupData, restaurantsGroupId) => {\r\n      if (restaurantsGroupData.restaurantsGroup) {\r\n        groupsMap[restaurantsGroupId] = formatRestaurantsGroupWithChildren(\r\n          restaurantsGroupData.restaurantsGroup\r\n        )\r\n      }\r\n    })\r\n\r\n    return groupsMap\r\n  }\r\n)\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const makeIsFetchingRestaurantsGroup = () => {\r\n  return createSelector(\r\n    [getRestaurantsGroupIdOnProps, getRestaurantsGroupListState],\r\n    (restaurantsGroupId, restaurantsGroupListState) => {\r\n      const restaurantsGroupData = restaurantsGroupListState.get(restaurantsGroupId)\r\n      if (isNil(restaurantsGroupData)) {\r\n        return false\r\n      }\r\n\r\n      return restaurantsGroupData.get('isFetching')\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurantsGroup = () =>\r\n  createSelector(\r\n    [getRestaurantsGroupIdOnProps, getRestaurantsGroupListState],\r\n    (restaurantsGroupId, restaurantsGroupListState) => {\r\n      const restaurantsGroupData = restaurantsGroupListState.get(restaurantsGroupId)\r\n      if (isNil(restaurantsGroupData)) {\r\n        return null\r\n      }\r\n\r\n      const restaurantsGroup = restaurantsGroupData.get('restaurantsGroup')\r\n\r\n      if (isNil(restaurantsGroup)) {\r\n        return null\r\n      }\r\n      return formatRestaurantsGroupWithChildren(restaurantsGroup.toJS())\r\n    }\r\n  )\r\n\r\nexport const makeGetRawRestaurantsGroup = () =>\r\n  createSelector(\r\n    [getRestaurantsGroupIdOnProps, getRestaurantsGroupListState],\r\n    (restaurantsGroupId, restaurantsGroupListState) => {\r\n      const restaurantsGroupData = restaurantsGroupListState.get(restaurantsGroupId)\r\n      if (isNil(restaurantsGroupData)) {\r\n        return null\r\n      }\r\n\r\n      const restaurantsGroup = restaurantsGroupData.get('restaurantsGroup')\r\n\r\n      if (isNil(restaurantsGroup)) {\r\n        return null\r\n      }\r\n      return restaurantsGroup.toJS()\r\n    }\r\n  )\r\n\r\nexport const makeGetRestaurantsGroupError = () =>\r\n  createSelector(\r\n    [getRestaurantsGroupIdOnProps, getRestaurantsGroupListState],\r\n    (restaurantsGroupId, restaurantsGroupListState) => {\r\n      const restaurantsGroupData = restaurantsGroupListState.get(restaurantsGroupId)\r\n      if (isNil(restaurantsGroupData)) {\r\n        return null\r\n      }\r\n\r\n      const error = restaurantsGroupData.get('error')\r\n\r\n      return isNil(error) ? null : error.toJS()\r\n    }\r\n  )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const isFetchingPutGroupStoreList = createSelector([getState], restaurantsGroup => {\r\n  const restaurantsGroupPut = restaurantsGroup.get('putStoreList')\r\n  return restaurantsGroupPut.get('isFetching', false)\r\n})\r\n\r\nexport const getPutGroupStoreListData = createSelector([getState], restaurantsGroup => {\r\n  const restaurantsGroupPut = restaurantsGroup.get('putStoreList')\r\n  return restaurantsGroupPut.get('data', null)\r\n})\r\n\r\nexport const isFetchingPutGroupGroupList = createSelector([getState], restaurantsGroup => {\r\n  const restaurantsGroupPut = restaurantsGroup.get('putGroupList')\r\n  return restaurantsGroupPut.get('isFetching', false)\r\n})\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const getPutGroupGroupListData = createSelector([getState], restaurantsGroup => {\r\n  const restaurantsGroupPut = restaurantsGroup.get('putGroupList')\r\n  return restaurantsGroupPut.get('data', null)\r\n})\r\n\r\nconst postRestaurantsGroupSelectors = createSimpleSelector(\r\n  state => state.entities.postRestaurantsGroup\r\n)\r\n\r\nexport const isFetchingRestaurantsGroupPost = postRestaurantsGroupSelectors.isFetching\r\nexport const getRestaurantsGroupPost = postRestaurantsGroupSelectors.getData\r\nexport const getRestaurantsGroupPostError = postRestaurantsGroupSelectors.getError\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNull from 'lodash/isNull'\r\nimport isFunction from 'lodash/isFunction'\r\nimport { connect } from 'react-redux'\r\nimport { isBo } from 'pmt-modules/environment'\r\n\r\nimport { fetchRestaurantsGroup } from '../actions'\r\nimport {\r\n  makeGetRawRestaurantsGroup,\r\n  makeGetRestaurantsGroup,\r\n  makeGetRestaurantsGroupError,\r\n  makeIsFetchingRestaurantsGroup,\r\n} from '../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the restaurantsGroup and pass it to the children\r\n *\r\n * Requirements:\r\n * - restaurantsGroupId\r\n *\r\n * see `withRestaurantsGroup`\r\n *\r\n */\r\nclass RestaurantsGroupContainer extends React.Component {\r\n  // TODO: on api consumer list View, we load the same group multiple times.\r\n  // should we load on componentDidUpdate instead of constructor?\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const isFetching = this.props.isFetchingRestaurantsGroup\r\n    const forceReload = this.props.forceReload === true\r\n\r\n    // handle when we already loaded the restaurants group, but we loaded it without its children,\r\n    // and now we want it with its children\r\n    const loadChildren =\r\n      !isNull(this.props.restaurantsGroup) &&\r\n      this.props.restaurantsGroup.children === null &&\r\n      this.props.options.loadChildren === true\r\n\r\n    const notLoadedYet = isNull(this.props.restaurantsGroup)\r\n\r\n    if (\r\n      // do not try to fetch it if we already doing it\r\n      !isFetching &&\r\n      (forceReload || loadChildren || notLoadedYet)\r\n    ) {\r\n      this.loadRestaurantsGroup(this.props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    if (\r\n        (nextProps.restaurantsGroupId !== props.restaurantsGroupId &&\r\n      ((!props.restaurantsGroup || props.restaurantsGroup.id) && nextProps.restaurantsGroupId))\r\n        || (props.options.withArchived !== nextProps.options.withArchived)\r\n      // TODO: handle props.options.loadChildren !== nextProps.options.loadChildren\r\n    ) {\r\n      this.loadRestaurantsGroup(nextProps)\r\n    }\r\n  }\r\n\r\n  loadRestaurantsGroup(props) {\r\n    props.fetchRestaurantsGroup(props.restaurantsGroupId, {\r\n      withAuthorization: props.options.withAuthorization,\r\n      loadChildren: props.options.loadChildren,\r\n      withArchived: props.options.withArchived,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      RestaurantsGroupWrappedComponent,\r\n      isFetchingRestaurantsGroup,\r\n      rawRestaurantsGroup,\r\n      restaurantsGroup,\r\n      restaurantsGroupError,\r\n      restaurantsGroupId,\r\n      children,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    if (isFunction(children)) {\r\n      return children({\r\n        isFetchingRestaurantsGroup,\r\n        rawRestaurantsGroup,\r\n        restaurantsGroup,\r\n        restaurantsGroupError,\r\n      })\r\n    }\r\n\r\n    return (\r\n      <RestaurantsGroupWrappedComponent\r\n        isFetchingRestaurantsGroup={isFetchingRestaurantsGroup}\r\n        rawRestaurantsGroup={rawRestaurantsGroup}\r\n        restaurantsGroup={restaurantsGroup}\r\n        restaurantsGroupError={restaurantsGroupError}\r\n        restaurantsGroupId={restaurantsGroupId}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nRestaurantsGroupContainer.defaultProps = {\r\n  options: {\r\n    // default false, to avoid missing it. Default true for Bo because we always retrieve a\r\n    // RestaurantsGroup while we are logged in. On other fronts, we retrieve restaurants group for\r\n    // anonymous users too.\r\n    withAuthorization: isBo(),\r\n\r\n    loadChildren: false,\r\n  },\r\n}\r\n\r\nRestaurantsGroupContainer.propTypes = {\r\n  fetchRestaurantsGroup: PropTypes.func.isRequired,\r\n  isFetchingRestaurantsGroup: PropTypes.bool,\r\n  restaurantsGroup: PropTypes.object,\r\n\r\n  restaurantsGroupId: PropTypes.oneOfType([\r\n    PropTypes.string, // the id or 'mine'\r\n    PropTypes.number, // the id\r\n  ]),\r\n\r\n  /**\r\n   * Additional options, used for the component:\r\n   * - withAuthorization -> should be use the default Authorization or not ?\r\n   * Must be set to false when on a non logged in page.\r\n   */\r\n  options: PropTypes.object,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getRawRestaurantsGroup = makeGetRawRestaurantsGroup()\r\n  const getRestaurantsGroup = makeGetRestaurantsGroup()\r\n  const getRestaurantsGroupError = makeGetRestaurantsGroupError()\r\n  const isFetchingRestaurantsGroup = makeIsFetchingRestaurantsGroup()\r\n\r\n  const mapStateToProps = (state, props) => ({\r\n    restaurantsGroup: getRestaurantsGroup(state, props),\r\n    restaurantsGroupError: getRestaurantsGroupError(state, props),\r\n    rawRestaurantsGroup: getRawRestaurantsGroup(state, props),\r\n    isFetchingRestaurantsGroup: isFetchingRestaurantsGroup(state, props),\r\n  })\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchRestaurantsGroup,\r\n  }\r\n)(RestaurantsGroupContainer)\r\n","import React from 'react'\r\n\r\nimport RestaurantsGroupContainer from './RestaurantsGroupContainer'\r\n\r\n/**\r\n * Add the RestaurantsGroupContainer as HOC for the given component\r\n * Requirements\r\n * - restaurantsGroupId in props or routeParams\r\n */\r\nconst withRestaurantsGroupMine = (options = {}) => RestaurantsGroupWrappedComponent => {\r\n  return props => (\r\n    <RestaurantsGroupContainer\r\n      RestaurantsGroupWrappedComponent={RestaurantsGroupWrappedComponent}\r\n      restaurantsGroupId={'mine'}\r\n      {...props}\r\n      {...options}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withRestaurantsGroupMine\r\n","import { createApiCallAction, createApiEnumAction } from '../api/utils'\r\nimport createAction from '../redux/createAction'\r\n\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nexport const GetUserMeAction = createApiEnumAction('USER::ME::GET')\r\n\r\nexport const fetchUserMe = props =>\r\n  createApiCallAction(GetUserMeAction, UserApi.getUserMe(), {\r\n    props,\r\n  })\r\n\r\nexport const PutUserMeAction = createApiEnumAction('USER::ME::PUT')\r\n\r\n/**\r\n * Update user profile\r\n */\r\nexport const updateProfile = (user, props) =>\r\n  createApiCallAction(PutUserMeAction, UserApi.putProfile(user), {\r\n    user,\r\n    userId: user.id,\r\n    props,\r\n  })\r\n\r\nexport const UserMeActions = {\r\n  SET_USER: 'USER::ME::SET',\r\n}\r\n\r\nexport const setUserMe = user =>\r\n  createAction(UserMeActions.SET_USER, {\r\n    user,\r\n  })\r\n","import moment from 'moment'\r\n\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\n\r\nconst formatAmount = userAccount => {\r\n  userAccount.amountFormatted = formatPriceWithCurrency(userAccount.amount)\r\n  return userAccount\r\n}\r\n\r\nconst formatExpirationDateAsHour = userAccount => {\r\n  userAccount.tokenExpirationDateAsHour = moment(userAccount.tokenExpirationDate).format('HH:mm')\r\n  return userAccount\r\n}\r\n\r\nexport const formatUserAccount = createFormatter(formatAmount, formatExpirationDateAsHour)\r\n\r\nexport const formatUserAccounts = createListFormatter(formatUserAccount)\r\n\r\nexport const formatUserUserAccounts = user => {\r\n  user.userAccount = null // default\r\n\r\n  if (user.userAccounts && user.userAccounts.length > 0) {\r\n    user.userAccounts = formatUserAccounts(user.userAccounts)\r\n\r\n    if (user.userAccounts) {\r\n      user.userAccount = user.userAccounts[0]\r\n    }\r\n  } else {\r\n    // avoid crashes on map array, default value.\r\n    user.userAccounts = []\r\n  }\r\n  return user\r\n}\r\n","import { createFormatter } from 'pmt-utils/format'\r\n\r\nimport { getDietLabel, getAllergenLabel } from '../constants'\r\n\r\nconst formatDiet = dietaryPreferences => {\r\n  dietaryPreferences.dietLabel = getDietLabel(dietaryPreferences.diet) || null\r\n  return dietaryPreferences\r\n}\r\n\r\nconst formatAllergens = dietaryPreferences => {\r\n  dietaryPreferences.allergensLabels = (dietaryPreferences.allergens || []).map(getAllergenLabel)\r\n  return dietaryPreferences\r\n}\r\n\r\nexport const formatDietaryPreferences = createFormatter(formatDiet, formatAllergens)\r\n","import { createFormatter } from 'pmt-utils/format'\r\n\r\nconst formatAllowContact = (marketing) => {\r\n  marketing.allowContactLabel = marketing.allowContact === true ? 'oui' : 'non'\r\n  return marketing\r\n}\r\n\r\nexport const formatMarketing = createFormatter(\r\n  formatAllowContact,\r\n)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { isBo } from 'pmt-modules/environment'\r\nimport { createFormatter, createListFormatter, createSubObjectFormatter } from 'pmt-utils/format'\r\n\r\nimport { getCountryNameForCode } from 'pmt-utils/country'\r\n\r\nimport { formatDate } from 'pmt-utils/date'\r\n\r\nimport { formatPhoneNumber } from 'pmt-utils/phone'\r\nimport { formatPspUserUrl } from 'pmt-modules/psp/format'\r\n\r\nimport { formatUserUserAccounts } from '../../userAccount/format'\r\n\r\nimport { formatDietaryPreferences } from './dietaryPreferences'\r\n\r\nimport { formatMarketing } from './marketing'\r\n\r\nimport {\r\n  DEFAULT_BIRTHDATE,\r\n  DEFAULT_DIETARY_PREFERENCES,\r\n  getGenderLabel,\r\n  Gender,\r\n} from '../constants'\r\n\r\nexport const formatEmail = user => {\r\n  user.hasEmail = !isEmpty(user.email)\r\n  return user\r\n}\r\n\r\nexport const formatGender = user => {\r\n  user.genderLabel = getGenderLabel(user.gender || Gender.NONE)\r\n  return user\r\n}\r\n\r\nexport const formatBirthdate = user => {\r\n  user.isDefaultBirthdate = user.birthdate === DEFAULT_BIRTHDATE\r\n  user.birthdateFormatted = formatDate(user.birthdate, 'DD/MM/YYYY')\r\n\r\n  return user\r\n}\r\n\r\nconst formatUserDates = user => {\r\n  user.creationDateFormatted =\r\n    user.creationDate === 0 ? tr('global.not_available') : formatDate(user.creationDate)\r\n\r\n  user.lastActivityDateFormatted = formatDate(user.lastActivityDate)\r\n  return user\r\n}\r\n\r\nconst formatPhone = user => {\r\n  user.phoneFormatted =\r\n    user.phone === null ? tr('global.not_available') : formatPhoneNumber(user.phone)\r\n\r\n  return user\r\n}\r\n\r\nconst formatName = user => {\r\n  // api returns a fullName, but it is an odd and old value..\r\n  if (user.firstName && user.lastName) {\r\n    user.fullName = `${user.firstName} ${user.lastName}`\r\n  }\r\n  user.displayName = user.fullName || tr('user.anonymous')\r\n  return user\r\n}\r\n\r\nexport const formatLocales = user => {\r\n  user.nationalityLabel = getCountryNameForCode(user.nationality)\r\n  user.countryOfResidenceLabel =\r\n    user.countryOfResidence === null\r\n      ? tr('global.not_available')\r\n      : getCountryNameForCode(user.countryOfResidence)\r\n  user.countryLabel = getCountryNameForCode(user.country)\r\n\r\n  return user\r\n}\r\n\r\n/**\r\n * All users have the following as default dietary preferences, but not the older ones\r\n */\r\nconst createDietaryIfNull = user => {\r\n  if (!user.dietaryPreferences) {\r\n    user.dietaryPreferences = DEFAULT_DIETARY_PREFERENCES\r\n  }\r\n\r\n  return user\r\n}\r\n\r\nconst formatPsp = user => {\r\n  if (isBo()) {\r\n    // TODO: make pspUserId accessible on API for AuditPermissions\r\n    user.pspUserUrl = formatPspUserUrl(user.pspUserId)\r\n  }\r\n  return user\r\n}\r\n\r\nexport const formatUser = createFormatter(\r\n  formatEmail,\r\n  formatBirthdate,\r\n  formatGender,\r\n  formatPhone,\r\n  formatUserDates,\r\n  formatUserUserAccounts,\r\n  formatName,\r\n  formatLocales,\r\n  createDietaryIfNull,\r\n  formatPsp,\r\n  // sub objects\r\n  createSubObjectFormatter('dietaryPreferences', formatDietaryPreferences),\r\n  createSubObjectFormatter('marketing', formatMarketing),\r\n  user => {\r\n    user.isIncognito = user.userType === 'INCOGNITO'\r\n    return user\r\n  }\r\n)\r\n\r\nexport const formatUserList = createListFormatter(formatUser)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatUser } from 'pmt-modules/user/format'\r\nimport { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nconst getUserMeData = state => state.entities.userMe\r\n\r\nexport const isFetchingUserMe = createSelector([getUserMeData], userMeData => {\r\n  if (isNil(userMeData)) {\r\n    return false\r\n  }\r\n\r\n  return userMeData.get('isFetching')\r\n})\r\n\r\nexport const getUserMe = createSelector([getUserMeData], userMeData => {\r\n  if (isNil(userMeData)) {\r\n    return null\r\n  }\r\n  const userMe = userMeData.get('userMe')\r\n\r\n  if (isNil(userMe)) {\r\n    return null\r\n  }\r\n  return formatUser(userMe.toJS())\r\n})\r\n\r\nconst putUserMe = createSimpleSelector(state => state.entities.putUserMe)\r\n\r\nexport const isFetchingPutUserMe = putUserMe.isFetching\r\nexport const getDataputUserMe = putUserMe.getData\r\nexport const getErrorputUserMe = putUserMe.getError\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNull from 'lodash/isNull'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport { fetchUserMe } from '../../actions'\r\nimport { getUserMe, isFetchingUserMe } from '../../selectors'\r\n\r\nimport { getAuth, isFetchingAuth } from '../../../auth'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that fetch the current logged in user and pass it to the children.\r\n *\r\n * Requirements:\r\n * -\r\n *\r\n * see `withUserMe`\r\n *\r\n */\r\nclass UserMeContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (isNull(props.me)) {\r\n      this.loadUserMe(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    if (nextProps.userId !== props.userId || (props.isFetchingAuth && !nextProps.isFetchingAuth)) {\r\n      this.loadUserMe(nextProps)\r\n    }\r\n  }\r\n\r\n  loadUserMe(props) {\r\n    if (\r\n      !props.isFetchingMe &&\r\n      !props.isFetchingAuth &&\r\n      (props.auth != null || getQueryParam('access_token'))\r\n    ) {\r\n      props.fetchUserMe()\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      UserMeWrappedComponent,\r\n      children,\r\n      isFetchingMe,\r\n      isFetchingAuth,\r\n      me,\r\n      ...other\r\n    } = this.props\r\n\r\n    if (UserMeWrappedComponent) {\r\n      return (\r\n        <UserMeWrappedComponent\r\n          UserMeWrappedComponent={null}\r\n          userId={'me'}\r\n          isFetchingMe={isFetchingMe || isFetchingAuth}\r\n          user={me}\r\n          me={me}\r\n          {...other}\r\n        />\r\n      )\r\n    }\r\n\r\n    return children({\r\n      userId: 'me',\r\n      isFetchingMe: isFetchingMe || isFetchingAuth,\r\n      me,\r\n      user: me,\r\n    })\r\n  }\r\n}\r\n\r\nUserMeContainer.propTypes = {\r\n  fetchUserMe: PropTypes.func.isRequired,\r\n  isFetchingMe: PropTypes.bool,\r\n  isFetchingAuth: PropTypes.bool,\r\n  me: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    me: getUserMe(state, props),\r\n    isFetchingMe: isFetchingUserMe(state, props),\r\n    isFetchingAuth: isFetchingAuth(state),\r\n    auth: getAuth(state),\r\n  }\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    fetchUserMe,\r\n  }\r\n)(UserMeContainer)\r\n","import React from 'react'\r\n\r\nimport UserMeContainer from './index'\r\n\r\n/**\r\n * Add the UserMeContainer as HOC for the given component\r\n */\r\nconst withUserMe = (UserMeWrappedComponent) => {\r\n  return (props) => (\r\n    <UserMeContainer\r\n      UserMeWrappedComponent={UserMeWrappedComponent}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withUserMe\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { haveAuthCredentials } from '../../../auth'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that fetch the current logged in user and pass it to the children.\r\n *\r\n * Requirements:\r\n * -\r\n *\r\n * see `withUserMe`\r\n *\r\n */\r\nclass AuthStateContainer extends React.Component {\r\n  render() {\r\n    const { haveAuthCredentials, AuthWrappedComponent, ...otherProps } = this.props\r\n\r\n    if (AuthWrappedComponent) {\r\n      return <AuthWrappedComponent haveAuthCredentials={haveAuthCredentials} {...otherProps} />\r\n    }\r\n\r\n    return this.props.children({\r\n      haveAuthCredentials,\r\n    })\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    haveAuthCredentials: haveAuthCredentials(state),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {})(AuthStateContainer)\r\n","import React from 'react'\r\n\r\nimport AuthStateContainer from './index'\r\n\r\n/**\r\n * Add the AuthStateContainer as HOC for the given component\r\n */\r\nconst withAuthState = (AuthWrappedComponent) => {\r\n  return (props) => (\r\n    <AuthStateContainer\r\n      AuthWrappedComponent={AuthWrappedComponent}\r\n      {...props}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withAuthState\r\n","import Immutable from 'immutable'\r\n\r\nimport { createSimpleReducer } from 'pmt-modules/redux'\r\n\r\nimport { GetUserMeAction, PutUserMeAction, UserMeActions } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './components'\r\nexport * from './selectors'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  userMe: null,\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n})\r\n\r\nexport const meReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case GetUserMeAction.REQUEST:\r\n      return state.merge({\r\n        userMe: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case PutUserMeAction.SUCCESS:\r\n    case GetUserMeAction.SUCCESS:\r\n      return state.merge({\r\n        userMe: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case UserMeActions.SET_USER:\r\n      return state.merge({\r\n        userMe: action.user,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetUserMeAction.FAILURE:\r\n      return state.merge({\r\n        userMe: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport const putUserMeReducer = createSimpleReducer(PutUserMeAction)\r\n","// TODO: I18n\r\nconst AuthAppErrors = {\r\n  postAuthorize: {\r\n    // default: 'Erre',\r\n  },\r\n  getAuthorize: {\r\n    default: \"Impossible de récupérer l'app\",\r\n  },\r\n}\r\n\r\nexport default AuthAppErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport AuthAppErrors from '../errors/AuthAppErrors'\r\n\r\n/**\r\n *\r\n */\r\nconst AuthApi = {\r\n  getAuthorize: query => {\r\n    return {\r\n      type: 'GET',\r\n      withoutAuth: true,\r\n      headers: {\r\n        // remove Authorization to avoid bugs when the token is not valid anymore.\r\n        // we don't need to be authorize to get app info.\r\n        // Note: Must be a 'a' as first letter\r\n        authorization: '',\r\n      },\r\n      query,\r\n      endpoint: ApiEndpoints.OAUTH_AUTHORIZE_APP,\r\n      errorHandler: AuthAppErrors.getAuthorize,\r\n    }\r\n  },\r\n\r\n  /**\r\n   * OAuh2 app authorization request\r\n   *\r\n   * @param  {string} props. Required:\r\n   *                         - client_id\r\n   *                        Optionnal:\r\n   *                         - api-consumer\r\n   *                         - state\r\n   *                         - redirect_uri\r\n   */\r\n  postAuthorize: props => {\r\n    const { apiConsumer, ...bodyProps } = props\r\n\r\n    return {\r\n      type: 'POST',\r\n      body: bodyProps,\r\n      headers: {},\r\n      endpoint: ApiEndpoints.OAUTH_AUTHORIZE_APP,\r\n      errorHandler: AuthAppErrors.postAuthorize,\r\n    }\r\n  },\r\n}\r\n\r\nexport default AuthApi\r\n","import { createApiCallAction, createApiEnumAction } from '../../api/utils'\r\n\r\nimport AuthAppApi from '../../api/calls/AuthAppApi'\r\n\r\nexport const GetAppDataAction = createApiEnumAction(\r\n  'OAUTH::APP::AUTHORIZE::GET'\r\n)\r\n\r\n/**\r\n * @param  {object} props the GET /authorize props:\r\n *                        - client_id\r\n *                        - state\r\n *                        - redirect_uri\r\n */\r\nexport const fetchAuthorizeApp = props =>\r\n  createApiCallAction(GetAppDataAction, AuthAppApi.getAuthorize(props), {\r\n    props,\r\n  })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getAppDataState = state => state.entities.authApp.appData\r\n\r\nexport const getAppDataError = createSelector(\r\n  [getAppDataState],\r\n  authDataState => {\r\n    const error = authDataState.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n    return error.toJS()\r\n  }\r\n)\r\n\r\nexport const appDataIsFetching = createSelector(\r\n  [getAppDataState],\r\n  authDataState => {\r\n    return authDataState.get('isFetching')\r\n  }\r\n)\r\n\r\nexport const getAppData = createSelector([getAppDataState], authDataState => {\r\n  const data = authDataState.get('data')\r\n\r\n  if (isNil(data)) {\r\n    return null\r\n  }\r\n\r\n  return data.toJS()\r\n})\r\n","import { createApiCallAction, createApiEnumAction } from '../../api/utils'\r\n\r\nimport AuthAppApi from '../../api/calls/AuthAppApi'\r\n\r\nexport const PostAuthorizeAppAction = createApiEnumAction(\r\n  'OAUTH::APP::AUTHORIZE::POST'\r\n)\r\n\r\nexport const postAuthorizeApp = props =>\r\n  createApiCallAction(PostAuthorizeAppAction, AuthAppApi.postAuthorize(props), {\r\n    props,\r\n  })\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { createMiddleware } from '../../redux'\r\n\r\nimport { redirectToExternal, replaceWith, formatQueryParams, getRoute } from '../../routing'\r\n\r\nimport { GetAppDataAction } from './actions'\r\n\r\nimport { postAuthorizeApp } from '../authorizeApp/actions'\r\n\r\nconst getAppDataSuccessMiddleware = createMiddleware(\r\n  GetAppDataAction.SUCCESS,\r\n  ({ getState, dispatch, next, action }) => {\r\n    /* TODO : atm skip authorize part, later maybe a param in restaurants group settings ? */\r\n\r\n    const { redirect_uri, state, client_id, response_type } = action.data.props\r\n\r\n    return dispatch(\r\n      postAuthorizeApp({\r\n        isAuthorized: true,\r\n        redirect_uri,\r\n        state,\r\n        client_id,\r\n        response_type,\r\n      })\r\n    )\r\n  }\r\n)\r\n\r\nconst getAppDataErrorMiddleware = createMiddleware(\r\n  GetAppDataAction.FAILURE,\r\n  ({ getState, dispatch, next, action }) => {\r\n    //\r\n    // Can be:\r\n    //  `access_denied` | User chose not to grant your app permissions | Fail gracefully - let the user know you cannot continue, and be respectful of their choice to decline to use your app\r\n    // `unsupported_response_type` | Invalid `response_type` parameter in initial Authorization | Ensure that the `response_type` parameter is one of the allowed values\r\n    // `invalid_scope` | Invalid `scope` parameter in initial Authorization | Ensure that the `scope` parameter is a space-separated list of valid scopes\r\n    // `invalid_request` | There was an issue with the request sent to `/authorize`\r\n    // ...\r\n    const error = action.error.body.error\r\n    const state = action.data.props.state\r\n    const redirect_uri = action.data.props.redirect_uri\r\n\r\n    // `invalid_grant` | \"The access token provided has expired.\" / \"\"\r\n\r\n    // the current access_token is invalid, we can't retrieve the app data.\r\n    // redirect to the login page\r\n    if (error === 'invalid_grant') {\r\n      // we return a next action here, since we don't want other middlewares to handle the 401\r\n      return next(\r\n        replaceWith(\r\n          getRoute('LOGIN'),\r\n          {},\r\n          {\r\n            redirectTo: window.location.toString(),\r\n          }\r\n        )\r\n      )\r\n    } else {\r\n      if (isEmpty(redirect_uri)) {\r\n        // TODO: log, use another way to display the error?\r\n        alert('Error: no redirect_uri provided')\r\n      } else {\r\n        const uri = formatQueryParams(redirect_uri, { error, state })\r\n        dispatch(redirectToExternal(uri))\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nexport const getAppMiddlewares = [getAppDataSuccessMiddleware, getAppDataErrorMiddleware]\r\n","import Immutable from 'immutable'\r\n\r\nimport { GetAppDataAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\n/**\r\n * The data given by the API to display the 'authorize app' view.\r\n */\r\nconst DEFAULT_APP_DATA = Immutable.fromJS({\r\n  isFetching: false,\r\n  data: null,\r\n  error: null,\r\n})\r\n\r\nexport const appDataReducer = (state = DEFAULT_APP_DATA, action) => {\r\n  switch (action.type) {\r\n    case GetAppDataAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        data: null,\r\n      })\r\n\r\n    case GetAppDataAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: action.response,\r\n        error: null,\r\n      })\r\n\r\n    case GetAppDataAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { createMiddleware } from '../../redux'\r\n\r\nimport { redirectToExternal, formatQueryParams, replaceWith, getRoute } from '../../routing'\r\n\r\nimport { PostAuthorizeAppAction } from './actions'\r\n\r\nconst authorizedAppMiddleware = createMiddleware(\r\n  PostAuthorizeAppAction.SUCCESS,\r\n  ({ getState, dispatch, next, action }) => {\r\n    //\r\n    // The user authorized the app, so we redirect to the uri\r\n    // The uri contains the `redirect_uri` given by the client, and the query params containing\r\n    // oauth2 data such as\r\n    // - code: the auth code\r\n    // - state: the state given by the front. It allow him to validate the source of the\r\n    //  redirection\r\n    //\r\n\r\n    const uri = action.response.uri\r\n    dispatch(redirectToExternal(uri))\r\n  }\r\n)\r\n\r\nconst deniedAppMiddleware = createMiddleware(\r\n  PostAuthorizeAppAction.FAILURE,\r\n  ({ getState, dispatch, next, action }) => {\r\n    //\r\n    // Even if the user did not allowed the app, we have to call the API to get the\r\n    // right error to return.\r\n    // We can have a failure if:\r\n    // - the user did not authorize the app\r\n    // - the request failed for other reasons\r\n    // - the network was broken. TODO: handle network fails.\r\n    //\r\n\r\n    //\r\n    // Can be:\r\n    //  `access_denied` | User chose not to grant your app permissions | Fail gracefully - let the user know you cannot continue, and be respectful of their choice to decline to use your app\r\n    // `unsupported_response_type` | Invalid `response_type` parameter in initial Authorization | Ensure that the `response_type` parameter is one of the allowed values\r\n    // `invalid_scope` | Invalid `scope` parameter in initial Authorization | Ensure that the `scope` parameter is a space-separated list of valid scopes\r\n    // `invalid_request` | There was an issue with the request sent to `/authorize`\r\n    //\r\n    const error = action.error && action.error.body ? action.error.body.error : null\r\n    const state = action.data.props.state\r\n    const uri = formatQueryParams(action.data.props.redirect_uri, {\r\n      error,\r\n      state,\r\n    })\r\n\r\n    // Can be `invalid_grant` when the user access_token / refresh_token is invalid.\r\n    // we redirect to the login page\r\n    if (error === 'invalid_grant') {\r\n      // we return a next action here, since we don't want other middlewares to handle the 401\r\n      return next(\r\n        replaceWith(\r\n          getRoute('LOGIN'),\r\n          {},\r\n          {\r\n            redirectTo: window.location.toString(),\r\n          }\r\n        )\r\n      )\r\n    } else {\r\n      dispatch(redirectToExternal(uri))\r\n    }\r\n  }\r\n)\r\n\r\nexport const authorizeAppMiddlewares = [authorizedAppMiddleware, deniedAppMiddleware]\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getAuthorizeState = state => state.entities.authApp.authorize\r\n\r\nexport const getAuthorizeAppData = createSelector([getAuthorizeState], authorizeState => {\r\n  const data = authorizeState.get('data', null)\r\n  if (isNil(data)) {\r\n    return null\r\n  }\r\n  return data.toJS()\r\n})\r\n\r\nexport const fetchAuthorizeAppError = createSelector([getAuthorizeState], authorizeState => {\r\n  const error = authorizeState.get('error', null)\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n  return error.toJS()\r\n})\r\n\r\nexport const isFetchingAuthorizeApp = createSelector([getAuthorizeState], authorizeState =>\r\n  authorizeState.get('isFetching', false)\r\n)\r\n","import Immutable from 'immutable'\r\n\r\nimport { PostAuthorizeAppAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\n/**\r\n * the data given by the API once the user authorized (or not) the app.\r\n */\r\nconst DEFAULT_AUTHORIZE_DATA = Immutable.fromJS({\r\n  isFetching: false,\r\n  data: null,\r\n  error: null,\r\n})\r\n\r\nexport const authorizeAppReducer = (state = DEFAULT_AUTHORIZE_DATA, action) => {\r\n  switch (action.type) {\r\n    case PostAuthorizeAppAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        data: null,\r\n      })\r\n\r\n    case PostAuthorizeAppAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: action.response,\r\n        error: null,\r\n      })\r\n\r\n    case PostAuthorizeAppAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { createRedirectToAction, generatePathWithParams, getRoute } from '../routing'\r\n\r\nexport const redirectToLoginPageForAuthApp = () =>\r\n  createRedirectToAction(getRoute('LOGIN'), null, {\r\n    redirectTo: generatePathWithParams(getRoute('AUTHORIZE_APP')),\r\n  })\r\n","/*\r\n* This module handles OAuth2 Application login.\r\n*\r\n* Summary:\r\n* - The client (mobile app, etc) display our /authorize page\r\n* - we ask the user if it authorize the app to use its account\r\n* - if yes, we generate a `code` (authorization code)\r\n* - we redirect to the client's `redirect_uri` with the code as query param\r\n*\r\n* Grant types support by draft 20\r\n*\r\n* The Authorization Code grant type is used when the client wants to request access to protected\r\n* resources on behalf of another user (i.e. a 3rd party). This is the grant type most often\r\n* associated with OAuth.\r\n*\r\n* The authorization code grant should be very familiar if you’ve ever signed into a web app using\r\n* your Facebook or Google account.\r\n*\r\n* The authorization code grant type is used to obtain both access tokens and refresh tokens and\r\n* is optimized for confidential clients. Since this is a redirection-based flow, the client must\r\n* be capable of interacting with the resource owner’s user-agent (typically a web browser) and\r\n* capable of receiving incoming requests (via redirection) from the authorization server.\r\n*\r\n* The reddit documentation can help to understand:\r\n* https://github.com/reddit/reddit/wiki/OAuth2\r\n*\r\n* <pre>\r\n* +----------+\r\n* | Resource |\r\n* |   Owner  |\r\n* |          |\r\n* +----------+\r\n*      ^\r\n*      |\r\n*     (B)\r\n* +----|-----+          Client Identifier      +---------------+\r\n* |         -+----(A)-- & Redirection URI ---.|               |\r\n* |  User-   |                                 | Authorization |\r\n* |  Agent  -+----(B)-- User authenticates --.|     Server    |\r\n* |          |                                 |               |\r\n* |         -+----(C)-- Authorization Code ---<|               |\r\n* +-|----|---+                                 +---------------+\r\n*   |    |                                         ^      v\r\n*   (A)  (C)                                       |      |\r\n*   |    |                                         |      |\r\n*   ^    v                                         |      |\r\n* +---------+                                      |      |\r\n* |         |>---(D)-- Authorization Code ---------'      |\r\n* |  Client |          & Redirection URI                  |\r\n* |         |                                             |\r\n* |         |<---(E)----- Access Token -------------------'\r\n* +---------+       (w/ Optional Refresh Token)\r\n* </pre>\r\n*\r\n* Note: The lines illustrating steps (A), (B), and (C) are broken into two parts as they pass\r\n* through the user-agent.\r\n*\r\n* A - The client initiates the flow by directing the resource owner’s user-agent to the\r\n* authorization endpoint. The client includes its client identifier, requested scope, local\r\n* state, and a redirection URI to which the authorization server will send the user-agent back\r\n* once access is granted (or denied).\r\n*\r\n* B - The authorization server authenticates the resource owner (via the user-agent) and\r\n* establishes whether the resource owner grants or denies the client’s access request.\r\n*\r\n* C - Assuming the resource owner grants access, the authorization server redirects the\r\n* user-agent back to the client using the redirection URI provided earlier (in the request or\r\n* during client registration). The redirection URI includes an authorization code and any local\r\n* state provided by the client earlier.\r\n*\r\n* D  - The client requests an access token from the authorization server’s token endpoint by\r\n* including the authorization code received in the previous step. When making the request, the\r\n* client authenticates with the authorization server. The client includes the redirection URI\r\n* used to obtain the authorization code for verification.\r\n*\r\n* E - The authorization server authenticates the client, validates the authorization code, and\r\n* ensures that the redirection URI received matches the URI used to redirect the client in step\r\n* (C). If valid, the authorization server responds back with an access token and, optionally, a\r\n* refresh token.\r\n*\r\n* Flow:\r\n*\r\n* <p> ---- Part1:\r\n*\r\n* The client will redirect the user to the authorization server with the following parameters in\r\n* the query string:\r\n*\r\n* - response_type with the value 'code'\r\n*\r\n* - client_id with the client identifier\r\n*\r\n* - redirect_uri with the client redirect URI. This parameter is optional, but if not send the\r\n* user will be redirected to a pre-registered redirect URI.\r\n*\r\n* - scope a space delimited list of scopes\r\n*\r\n* - state with a CSRF token. This parameter is optional but highly recommended. You should store\r\n* the value of the CSRF token in the user’s session to be validated when they return.\r\n*\r\n* - All of these parameters will be validated by the authorization server. </p>\r\n*\r\n* <p> The user will then be asked to login to the authorization server and approve the client. If\r\n* the user approves the client they will be redirected from the authorization server to the\r\n* client’s redirect URI with the following parameters in the query string:\r\n*\r\n* - code with the authorization code\r\n*\r\n* - state with the state parameter sent in the original request. You should compare this value\r\n* with the value stored in the user’s session to ensure the authorization code obtained is in\r\n* response to requests made by this client rather than another client application. </p>\r\n*\r\n* <p> ---- Part2:\r\n*\r\n* The client will now send a POST request to the authorization server with the following\r\n* parameters:\r\n*\r\n* - grant_type with the value of authorization_code - client_id with the client identifier -\r\n* client_secret with the client secret - redirect_uri with the same redirect URI the user was\r\n* redirect back to - code with the authorization code from the query string\r\n*\r\n* The authorization server will respond with a JSON object containing the following properties:\r\n*\r\n* - token_type with the value Bearer - expires_in with an integer representing the TTL of the\r\n* access token - access_token a JWT signed with the authorization server’s private key -\r\n* refresh_token an encrypted payload that can be used to refresh the access token when it\r\n* expires. </p>\r\n*/\r\nimport { appDataReducer } from './getApp'\r\n\r\nimport { authorizeAppReducer } from './authorizeApp'\r\n\r\nimport { combineReducers } from 'redux'\r\n\r\nexport * from './actions'\r\nexport * from './authorizeApp'\r\nexport * from './getApp'\r\n\r\nexport const authAppReducer = combineReducers({\r\n  appData: appDataReducer,\r\n  authorize: authorizeAppReducer,\r\n})\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\n\r\nimport LoadingPage from 'pmt-ui/LoadingPage'\r\nimport Page from '../../components/Page'\r\nimport View from './View'\r\n\r\nimport { withRestaurantsGroupMine } from 'pmt-modules/restaurantsGroup/components'\r\n\r\nimport { withAuthState } from 'pmt-modules/userMe'\r\n\r\nimport {\r\n  redirectToLoginPageForAuthApp,\r\n  fetchAuthorizeApp,\r\n  appDataIsFetching,\r\n  getAppData,\r\n  getAppDataError,\r\n  postAuthorizeApp,\r\n} from 'pmt-modules/authApp'\r\n\r\n/**\r\n * @specs N/A\r\n * See modules/authApp for documentation\r\n */\r\nclass AuthAppPage extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // if the user is not logged in, we first logged in him\r\n    if (this.shouldRedirectToLogin(props)) {\r\n      props.redirectToLoginPageForAuthApp()\r\n    } else {\r\n      this.loadApp(props, true)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    this.loadApp(nextProps)\r\n  }\r\n\r\n  shouldRedirectToLogin(props) {\r\n    return !props.haveAuthCredentials\r\n  }\r\n\r\n  loadApp(nextProps, force = false) {\r\n    // we loader the user, we can load the app\r\n    if (nextProps.me !== this.props.me || force) {\r\n      // get the app info\r\n      const { client_id, state, redirect_uri, response_type = 'code' } = this.props.location.query\r\n      this.props.fetchAuthorizeApp({\r\n        client_id,\r\n        state,\r\n        redirect_uri,\r\n        response_type,\r\n      })\r\n    }\r\n  }\r\n\r\n  handleAuthorize = (isAuthorized = false) => {\r\n    const { client_id, state, redirect_uri, response_type = 'code' } = this.props.location.query\r\n\r\n    //\r\n    // Even if the user did not allowed the app, we have to call the API to get the\r\n    // right error to return.\r\n    //\r\n    this.props.postAuthorizeApp({\r\n      isAuthorized,\r\n      redirect_uri,\r\n      state,\r\n      client_id,\r\n      response_type,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { appData, appDataIsFetching, appDataError, isFetchingRestaurantsGroup } = this.props\r\n\r\n    if (isFetchingRestaurantsGroup || this.shouldRedirectToLogin(this.props)) {\r\n      return <LoadingPage show />\r\n    }\r\n\r\n    return (\r\n      <Page title={\"Autoriser l'application\"}>\r\n        <View\r\n          appData={appData}\r\n          appDataError={appDataError}\r\n          appDataIsFetching={appDataIsFetching}\r\n          onAuthorize={this.handleAuthorize}\r\n        />\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    appDataError: getAppDataError(state),\r\n    appDataIsFetching: appDataIsFetching(state),\r\n    appData: getAppData(state),\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  withRestaurantsGroupMine({\r\n    withAuthorization: false,\r\n  }),\r\n  withAuthState,\r\n  connect(mapStateToProps, {\r\n  redirectToLoginPageForAuthApp,\r\n  fetchAuthorizeApp,\r\n  postAuthorizeApp,\r\n}))(AuthAppPage)\r\n","import { getFromStorage, removeFromStorage, saveToStorage } from '../../storage'\r\n\r\nconst StorageItem = {\r\n  RESTAURANT_ID: 'STORAGE::RESTAURANT_ID',\r\n  API_CONSUMER: 'STORAGE::API_CONSUMER',\r\n  BASIC_TOKEN: 'STORAGE::BASIC_TOKEN',\r\n}\r\n\r\nexport const saveBasicToken = token => {\r\n  saveToStorage(StorageItem.BASIC_TOKEN, token)\r\n}\r\n\r\nexport const getDefaultBasicToken = () => getFromStorage(StorageItem.BASIC_TOKEN, null)\r\n\r\nexport const getAuthorization = () => getDefaultBasicToken()\r\n\r\nexport const removeBasicToken = () => removeFromStorage(StorageItem.BASIC_TOKEN)\r\n\r\nexport const getDefaultApiConsumer = () => getFromStorage(StorageItem.API_CONSUMER, null)\r\n\r\nexport const saveApiConsumer = apiConsumer => {\r\n  saveToStorage(StorageItem.API_CONSUMER, apiConsumer)\r\n}\r\n\r\nexport const removeRestaurantId = () => removeFromStorage(StorageItem.RESTAURANT_ID)\r\n\r\nexport const getDefaultRestaurantId = () => getFromStorage(StorageItem.RESTAURANT_ID, null)\r\n\r\nexport const saveRestaurantId = restaurantId => {\r\n  saveToStorage(StorageItem.RESTAURANT_ID, restaurantId)\r\n}\r\n\r\nexport const removeApiConsumer = () => removeFromStorage(StorageItem.API_CONSUMER)\r\n","import isArray from 'lodash/isArray'\r\n\r\n// this function only works for one level object\r\nexport const filterObject = (object, valueToExclude) => {\r\n  let filteredObject = {}\r\n\r\n  for (const key in object) {\r\n    if (object[key] !== valueToExclude) {\r\n      filteredObject[key] = object[key]\r\n    }\r\n  }\r\n\r\n  return filteredObject\r\n}\r\n\r\nexport const filterByKey = (object, keyToExcludeParam) => {\r\n  const result = {}\r\n\r\n  const keysToExclude = isArray(keyToExcludeParam) ? keyToExcludeParam : [keyToExcludeParam]\r\n\r\n  for (const key in object) {\r\n    if (object.hasOwnProperty(key) && keysToExclude.indexOf(key) === -1) {\r\n      result[key] = object[key]\r\n    }\r\n  }\r\n\r\n  return result\r\n}\r\n","const RestaurantErrors = {\r\n  GET: {\r\n    107: 'global.get_restaurant.error.107',\r\n    108: 'global.get_restaurant.error.108',\r\n    109: 'global.get_restaurant.error.109',\r\n    1004: 'global.get_restaurant.error.1004',\r\n    1005: 'global.get_restaurant.error.1005',\r\n    1006: 'global.get_restaurant.error.1006',\r\n\r\n    closed: 'global.get_restaurant.error.closed',\r\n  },\r\n  POST: {\r\n    default: 'global.post_restaurant.default',\r\n    310: 'global.post_restaurant.error.310',\r\n    311: 'global.post_restaurant.error.311',\r\n  },\r\n  PUT: {\r\n    default: 'global.put_restaurant.default',\r\n  },\r\n  GET_LIST: {\r\n    100: 'global.get_restaurant_list.error.100',\r\n  },\r\n}\r\n\r\nexport default RestaurantErrors\r\n","import isEmpty from 'lodash/isEmpty'\r\n\r\nimport { filterObject } from 'pmt-utils/object'\r\n\r\nimport RestaurantErrors from 'pmt-modules/api/errors/RestaurantErrors'\r\n\r\nimport ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nconst RestaurantApi = {\r\n  /**\r\n   * There is no endoint to authenticate restaurant\r\n   * so we just make a call with authorization and apiConsumer\r\n   */\r\n  authRestaurant: (restaurantId, authorization, apiConsumer) => {\r\n    return {\r\n      type: 'GET',\r\n      params: {\r\n        restaurantId,\r\n      },\r\n      headers: {\r\n        authorization,\r\n        'api-consumer': apiConsumer,\r\n      },\r\n      endpoint: ApiEndpoints.RESTAURANT,\r\n    }\r\n  },\r\n\r\n  getRestaurant: (restaurantId, loadOrderSettings = true) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n    },\r\n    query: {\r\n      loadOrderSettings,\r\n    },\r\n    headers: {},\r\n    endpoint: ApiEndpoints.RESTAURANT,\r\n    errorHandler: RestaurantErrors.GET,\r\n  }),\r\n\r\n  /**\r\n   * To be chained with a request (.after param, see HistoryApi)\r\n   *\r\n   * @param  {object} data             the previous api call json data. We add restaurantIds and restaurants on it\r\n   * @param  {Array} restaurantIds    the restaurantIds to retrieve\r\n   * @param  {Array}  [restaurants=[]] the restaurants already retrieved\r\n   */\r\n  getRestaurants: (data, restaurantIds, restaurants = []) => {\r\n    const restaurantRequest = RestaurantApi.getRestaurant(restaurantIds[0])\r\n\r\n    data.restaurantIds = restaurantIds.slice(1)\r\n    data.restaurants = restaurants\r\n\r\n    restaurantRequest.data = data\r\n\r\n    restaurantRequest.then = (previousOptions, json) => {\r\n      const data = previousOptions.data\r\n      const restaurants = data.restaurants\r\n      restaurants.push(json)\r\n\r\n      if (isEmpty(data.restaurantIds)) {\r\n        // set data to return\r\n        // restaurantIds is empty, we recreate it\r\n        data.restaurantIds = restaurants.map(restaurant => restaurant.id)\r\n        data.restaurants = restaurants\r\n        previousOptions.success(data)\r\n        return null\r\n      } else {\r\n        return RestaurantApi.getRestaurants(data, data.restaurantIds, restaurants)\r\n      }\r\n    }\r\n\r\n    return restaurantRequest\r\n  },\r\n\r\n  postRestaurant: data => {\r\n    return {\r\n      type: 'POST',\r\n      body: data,\r\n      endpoint: ApiEndpoints.RESTAURANTS,\r\n      errorHandler: RestaurantErrors.POST,\r\n    }\r\n  },\r\n\r\n  updateRestaurant: (restaurantId, data) => {\r\n    return {\r\n      type: 'PUT',\r\n      params: {\r\n        restaurantId,\r\n      },\r\n      body: data,\r\n      endpoint: ApiEndpoints.RESTAURANT_NEW_ARCHI,\r\n      errorHandler: RestaurantErrors.PUT,\r\n    }\r\n  },\r\n\r\n  getRestaurantList: props => {\r\n    const defaultOptions = {\r\n      loadOrderSettings: true,\r\n      orderByDistance: true,\r\n      limit: 10,\r\n    }\r\n\r\n    let filteredQuery = filterObject(props.query, null)\r\n\r\n    return {\r\n      type: 'GET',\r\n      query: {\r\n        ...defaultOptions,\r\n        ...filteredQuery,\r\n        returnRestaurantsGeoPtList: true,\r\n      },\r\n      endpoint: ApiEndpoints.RESTAURANT_LIST,\r\n      errorHandler: RestaurantErrors.GET_LIST,\r\n    }\r\n  },\r\n\r\n  /**\r\n   * options - it can contain orderByDistance / loadOrderSettings attributes. Default values if not set is true\r\n   */\r\n  getRestaurantListByGeoPt: (latitude, longitude, options) => {\r\n    const defaultOptions = {\r\n      orderByDistance: true,\r\n      loadOrderSettings: true,\r\n      limit: 10,\r\n    }\r\n\r\n    const props = {\r\n      query: {\r\n        latitude,\r\n        longitude,\r\n        ...defaultOptions,\r\n        ...options,\r\n      },\r\n      errorHandler: RestaurantErrors.GET_LIST,\r\n    }\r\n\r\n    return RestaurantApi.getRestaurantList(props)\r\n  },\r\n\r\n  getRestaurantsByIds: props => ({\r\n    type: 'POST',\r\n    endpoint: '/restaurants-groups/:restaurantsGroupId/restaurants/search',\r\n    params: props.params,\r\n    body: props.body,\r\n  }),\r\n\r\n  getCheckup: payload => ({\r\n    type: 'POST',\r\n    endpoint: ApiEndpoints.RESTAURANT_CHECKUP,\r\n    body: payload,\r\n  }),\r\n}\r\n\r\nexport default RestaurantApi\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport {\r\n  getDefaultBasicToken,\r\n  getDefaultApiConsumer,\r\n  getDefaultRestaurantId,\r\n} from './utils'\r\n\r\nimport { AuthRestaurantAction } from './actions'\r\n\r\nexport * from './utils'\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  auth: getDefaultBasicToken(),\r\n  apiConsumer: getDefaultApiConsumer(),\r\n  restaurantId: getDefaultRestaurantId(),\r\n  isFetching: false,\r\n  error: null,\r\n\r\n  // for Refresh.\r\n  refreshSucceded: false,\r\n})\r\n\r\nexport const authRestaurantReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case AuthRestaurantAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        auth: null,\r\n        error: null,\r\n      })\r\n\r\n    case AuthRestaurantAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        auth: action.data.authorization,\r\n        apiConsumer: action.data.apiConsumer,\r\n        restaurantId: action.data.restaurantId,\r\n        refreshSucceded: true,\r\n        error: null,\r\n      })\r\n\r\n    case AuthRestaurantAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        auth: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import { redirectTo } from '../routing'\r\n\r\nimport { createAction } from '../redux'\r\n\r\nimport {\r\n  createApiCallAction,\r\n  createApiEnumAction,\r\n  // createTestApiCallAction,\r\n} from '../api/utils'\r\n\r\nimport { getRoute, openExternalLink } from '../routing'\r\nimport RestaurantApi from '../api/calls/RestaurantApi'\r\n\r\n// NOTE: comment when do not using it for debug\r\n// import { getRestaurantFixture } from '../../api/fixtures/restaurant'\r\n\r\nexport const GetRestaurantAction = createApiEnumAction('RESTAURANT::GET')\r\n\r\nexport const redirectToRestaurant = (restaurantId, queryParams) => (dispatch, getState) => {\r\n  return dispatch(redirectTo(getRoute('STORE_LOCATOR_RESTAURANT'), { restaurantId }, queryParams))\r\n}\r\n\r\nexport const fetchRestaurant = restaurantId =>\r\n  createApiCallAction(GetRestaurantAction, RestaurantApi.getRestaurant(restaurantId), {\r\n    restaurantId,\r\n  })\r\n\r\nexport const RefreshRestaurantAction = createApiEnumAction('RESTAURANT::REFRESH')\r\n\r\nexport const refreshRestaurant = (restaurantId, options) =>\r\n  createApiCallAction(RefreshRestaurantAction, RestaurantApi.getRestaurant(restaurantId), {\r\n    restaurantId,\r\n    options,\r\n  })\r\n\r\nexport const GetRestaurantsAction = createApiEnumAction('RESTAURANT::GET::MULTIPLE')\r\n\r\nexport const fetchRestaurants = restaurantIds =>\r\n  createApiCallAction(GetRestaurantsAction, RestaurantApi.getRestaurants(restaurantIds), {\r\n    restaurantIds,\r\n  })\r\n\r\nexport const PostRestaurantAction = createApiEnumAction('RESTAURANT::POST')\r\n\r\nexport const postRestaurant = data =>\r\n  createApiCallAction(PostRestaurantAction, RestaurantApi.postRestaurant(data), {\r\n    ...data,\r\n  })\r\n\r\nexport const PutRestaurantAction = createApiEnumAction('RESTAURANT::PUT')\r\n\r\nexport const putRestaurant = (restaurantId, data, useFormData = true) =>\r\n  createApiCallAction(\r\n    PutRestaurantAction,\r\n    RestaurantApi.updateRestaurant(restaurantId, data, useFormData),\r\n    {\r\n      restaurantId,\r\n      ...data,\r\n    }\r\n  )\r\n\r\nexport const GetRestaurantListAction = {\r\n  ...createApiEnumAction('RESTAURANT_LIST::GET'),\r\n  RESET: 'RESTAURANT_LIST::RESET',\r\n}\r\n\r\nexport const fetchRestaurantList = ({ useIP = false, restaurantId = null, limit = 10 }) =>\r\n  createApiCallAction(\r\n    GetRestaurantListAction,\r\n    RestaurantApi.getRestaurantList({ query: { useIP, restaurantId, limit } }),\r\n    {}\r\n  )\r\n\r\nexport const resetRestaurantList = () => createAction(GetRestaurantListAction.RESET, {})\r\n\r\nexport const GetRestaurantListByGeoPtAction = createApiEnumAction('RESTAURANT_LIST_BY_GEO_PT::GET')\r\n\r\nexport const fetchRestaurantListByGeoPt = (latitude, longitude, options = { limit: 10 }) =>\r\n  createApiCallAction(\r\n    GetRestaurantListByGeoPtAction,\r\n    RestaurantApi.getRestaurantListByGeoPt(latitude, longitude, options),\r\n    {\r\n      latitude,\r\n      longitude,\r\n      options,\r\n    }\r\n  )\r\n\r\n// using fixtures test. Spain with restrict 4g does not handle our awesome API :(\r\n// export const fetchRestaurant = (restaurantId) => createTestApiCallAction(\r\n//   GetRestaurantAction,\r\n//   true,\r\n//   {\r\n//     response: getRestaurantFixture(),\r\n//     data: {\r\n//       restaurantId,\r\n//     }\r\n//   }\r\n// )\r\n\r\nexport const RestaurantAction = {\r\n  SET: 'RESTAURANT::SET',\r\n  OPEN_MENU_PDF: 'RESTAURANT::OPEN_MENU_PDF',\r\n  OPEN_WEBSITE: 'RESTAURANT::OPEN_WEBSITE',\r\n}\r\n\r\nexport const setRestaurant = restaurant => createAction(RestaurantAction.SET, { restaurant })\r\n\r\nexport const openRestaurantWebsite = restaurant =>\r\n  createAction(RestaurantAction.OPEN_WEBSITE, { restaurant }, () => {\r\n    openExternalLink(restaurant.webSitePub)\r\n  })\r\n\r\nexport const openRestaurantMenuPdf = restaurant =>\r\n  createAction(RestaurantAction.OPEN_MENU_PDF, { restaurant }, () => {\r\n    openExternalLink(restaurant.menuPdf)\r\n  })\r\n","/**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\nfunction baseFindKey(collection, predicate, eachFunc) {\n  var result;\n  eachFunc(collection, function(value, key, collection) {\n    if (predicate(value, key, collection)) {\n      result = key;\n      return false;\n    }\n  });\n  return result;\n}\n\nmodule.exports = baseFindKey;\n","var baseFindKey = require('./_baseFindKey'),\n    baseForOwn = require('./_baseForOwn'),\n    baseIteratee = require('./_baseIteratee');\n\n/**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n *  else `undefined`.\n * @example\n *\n * var users = {\n *   'barney':  { 'age': 36, 'active': true },\n *   'fred':    { 'age': 40, 'active': false },\n *   'pebbles': { 'age': 1,  'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\nfunction findKey(object, predicate) {\n  return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn);\n}\n\nmodule.exports = findKey;\n","/**\r\n * Define the different type of history data that can be retrieved.\r\n */\r\nexport const HistoryType = {\r\n  PAYMENT: 'HistoryType::PAYMENT',\r\n  ORDER: 'HistoryType::ORDER',\r\n  BOOKING: 'HistoryType::BOOKING',\r\n  TOP_UP: 'HistoryType::TOP_UP',\r\n\r\n  /**\r\n   * Special type of history where we have payment and top up on the same list.\r\n   * This list contains less informations than we can expect, and is used to display data we don't\r\n   * own but retrieve from a thirst party API (e.g CSI).\r\n   */\r\n  TRANSACTIONS: 'HistoryType::TRANSACTIONS',\r\n\r\n  // All the online payments (user check) of the user (order / payment / top up etc)\r\n  USER_TRANSACTIONS: 'USER_TRANSACTIONS',\r\n}\r\n","import moment from 'moment'\r\n\r\nimport { getMs } from 'pmt-utils/date'\r\n\r\n/**\r\n * The regex to validate an idempotency key.\r\n *\r\n * An idempotency key is a String with:\r\n * <ul>\r\n * <li>first a timestamp in milliseconds,\r\n * the timestamp has a length of 13, which run through 9999999999999ms = Saturday 20 November 2286 17:46:39.999\r\n * <li>then an underscore,\r\n * <li>then an alphanumeric 8 length string.\r\n *\r\n * Ex: 1528985071000_4d1y68y4\r\n *\r\n * With this rule, we can have up to 4^30 possibilities per milliseconds.\r\n */\r\nexport const generateIdempotencyKey = () => {\r\n  const idempotencyKey = `${getMs(moment())}_${Math.random()\r\n    .toString(32)\r\n    .slice(4)}`\r\n  const idempotencyRegex = new RegExp('^[0-9]{13}_[A-Za-z0-9]{8}$')\r\n\r\n  if (idempotencyRegex.test(idempotencyKey)) {\r\n    return idempotencyKey\r\n  } else {\r\n    return generateIdempotencyKey()\r\n  }\r\n}\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport keys from 'lodash/keys'\r\n\r\nimport { generateIdempotencyKey } from 'pmt-utils/idempotency'\r\n\r\nexport const TOP_UP_TYPE = {\r\n  NONE: 'NONE',\r\n  CASH: 'CASH',\r\n  CREDIT_CARD: 'CREDIT_CARD',\r\n  LUNCHEON_VOUCHER: 'LUNCHEON_VOUCHER',\r\n  // Deposit is made by an import\r\n  IMPORTED_INITIAL_BALANCE: 'IMPORTED_INITIAL_BALANCE',\r\n}\r\n\r\nexport const DEFAULT_TOP_UP = () => ({\r\n  amount: 0,\r\n  otherAmountClicked: false,\r\n  idempotencyKey: generateIdempotencyKey(),\r\n  type: TOP_UP_TYPE.CREDIT_CARD,\r\n})\r\n\r\nexport const TOP_UP_STATUS = {\r\n  CREATED: 0,\r\n  FAILED: 1,\r\n  SUCCEEDED: 2,\r\n  REFUNDED: 3,\r\n}\r\n\r\nexport const getTopUpTypeLabel = () => ({\r\n  [TOP_UP_TYPE.NONE]: tr('global.top_up.type.none'),\r\n  [TOP_UP_TYPE.CASH]: tr('global.top_up.type.cash'),\r\n  [TOP_UP_TYPE.CREDIT_CARD]: tr('global.top_up.type.credit_card'),\r\n  [TOP_UP_TYPE.LUNCHEON_VOUCHER]: tr('global.top_up.type.luncheon_voucher'),\r\n  [TOP_UP_TYPE.IMPORTED_INITIAL_BALANCE]: tr('global.top_up.type.initial_balance'),\r\n})\r\n\r\nexport const getTopUpTypeLabelAsArray = () =>\r\n  keys(TOP_UP_TYPE).map(value => ({\r\n    label: getTopUpTypeLabel()[value],\r\n    value,\r\n  }))\r\n","var SetCache = require('./_SetCache'),\n    arrayIncludes = require('./_arrayIncludes'),\n    arrayIncludesWith = require('./_arrayIncludesWith'),\n    arrayMap = require('./_arrayMap'),\n    baseUnary = require('./_baseUnary'),\n    cacheHas = require('./_cacheHas');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n  var index = -1,\n      includes = arrayIncludes,\n      isCommon = true,\n      length = array.length,\n      result = [],\n      valuesLength = values.length;\n\n  if (!length) {\n    return result;\n  }\n  if (iteratee) {\n    values = arrayMap(values, baseUnary(iteratee));\n  }\n  if (comparator) {\n    includes = arrayIncludesWith;\n    isCommon = false;\n  }\n  else if (values.length >= LARGE_ARRAY_SIZE) {\n    includes = cacheHas;\n    isCommon = false;\n    values = new SetCache(values);\n  }\n  outer:\n  while (++index < length) {\n    var value = array[index],\n        computed = iteratee == null ? value : iteratee(value);\n\n    value = (comparator || value !== 0) ? value : 0;\n    if (isCommon && computed === computed) {\n      var valuesIndex = valuesLength;\n      while (valuesIndex--) {\n        if (values[valuesIndex] === computed) {\n          continue outer;\n        }\n      }\n      result.push(value);\n    }\n    else if (!includes(values, computed, comparator)) {\n      result.push(value);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseDifference;\n","var baseDifference = require('./_baseDifference'),\n    baseFlatten = require('./_baseFlatten'),\n    baseRest = require('./_baseRest'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    last = require('./last');\n\n/**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\nvar differenceWith = baseRest(function(array, values) {\n  var comparator = last(values);\n  if (isArrayLikeObject(comparator)) {\n    comparator = undefined;\n  }\n  return isArrayLikeObject(array)\n    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n    : [];\n});\n\nmodule.exports = differenceWith;\n","import uniqBy from 'lodash/uniqBy'\r\nimport isEqual from 'lodash/isEqual'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport differenceWith from 'lodash/differenceWith'\r\nimport ApiEndpoints from '../config/ApiEndpoints'\r\nimport RestaurantApi from './RestaurantApi'\r\n\r\n// load a list of restaurants if needed\r\n//\r\nconst loadRestaurants = (props, options, json, rids) => {\r\n  // remove duplicates\r\n  rids = uniqBy(rids, function(id) {\r\n    return id\r\n  })\r\n\r\n  // get difference between our rids list and the already loaded restaurants (props.restaurantIds)\r\n  // to keep only the ids of the restaurants to load\r\n  rids = differenceWith(rids, props.restaurantIds, isEqual)\r\n\r\n  // there is no restaurant to load, we set default data and call success\r\n  if (isEmpty(rids)) {\r\n    json.restaurants = []\r\n    json.restaurantIds = []\r\n    options.success(json)\r\n    return null\r\n  }\r\n\r\n  // we load the restaurants\r\n  const getRestaurants = RestaurantApi.getRestaurants(json, rids)\r\n  return getRestaurants\r\n}\r\n\r\nconst HistoryApi = {\r\n  //\r\n  // for the followin, the `props` param will contain\r\n  // - restaurantIds: A list that describe the restaurants that we already loaded. We don't want\r\n  // to load theme again.\r\n  //\r\n\r\n  getOrders: (userId, props, cursor, limit) => {\r\n    return {\r\n      endpoint: ApiEndpoints.HISTORY_USER_ORDERS,\r\n      type: 'GET',\r\n      query: {\r\n        cursor,\r\n        limit,\r\n        userId,\r\n      },\r\n      then: (options, json) => {\r\n        let rids = json.data.map(order => order.restaurantId)\r\n        return loadRestaurants(props, options, json, rids)\r\n      },\r\n    }\r\n  },\r\n\r\n  getBookings: (userId, props, cursor, limit) => {\r\n    return {\r\n      endpoint: ApiEndpoints.HISTORY_USER_BOOKINGS,\r\n      type: 'GET',\r\n      query: {\r\n        cursor,\r\n        limit,\r\n        userId,\r\n      },\r\n      then: (options, json) => {\r\n        // TODO: to be tested booking.restaurantId exists?\r\n        let rids = json.data.map(booking => booking.restaurantId)\r\n        return loadRestaurants(props, options, json, rids)\r\n      },\r\n    }\r\n  },\r\n\r\n  getPayments: (userId, props, cursor, limit) => {\r\n    return {\r\n      endpoint: ApiEndpoints.HISTORY_USER_PAYMENTS,\r\n      type: 'GET',\r\n      query: {\r\n        cursor,\r\n        limit,\r\n        userId,\r\n      },\r\n      then: (options, json) => {\r\n        // TODO: to be tested payment.restaurantId exists?\r\n        let rids = json.data.map(payment => payment.restaurantId)\r\n        return loadRestaurants(props, options, json, rids)\r\n      },\r\n    }\r\n  },\r\n\r\n  getTopUps: (userId, props, cursor, limit, status) => {\r\n    return {\r\n      endpoint: ApiEndpoints.DEPOSITS,\r\n      type: 'GET',\r\n      query: {\r\n        cursor,\r\n        limit,\r\n        userId,\r\n        status,\r\n      },\r\n      // topup isn't link to a restaurant, no need of `then`\r\n    }\r\n  },\r\n\r\n  /**\r\n   * @param data:\r\n   * - userAccountId\r\n   * @param cursor: must be non-null, otherwise the service takes a fromTime / toTime.\r\n   */\r\n  getTransactions: (userId, data, cursor = '', limit = 10) => ({\r\n    endpoint: ApiEndpoints.USER_ACCOUNT_TRANSACTIONS,\r\n    type: 'GET',\r\n    params: {\r\n      userId,\r\n      userAccountId: data.userAccountId,\r\n    },\r\n    query: {\r\n      cursor,\r\n      limit,\r\n    },\r\n    // NOTE:\r\n    // transaction can be optionnaly linked to a restaurant, but this is not the case for now.\r\n    // Should we use a `then` or load from the view? Depends of the UI we would want.\r\n  }),\r\n\r\n  getPaymentsUserCheck: (userId, data, cursor, limit = 10) => ({\r\n    endpoint: ApiEndpoints.HISTORY_USER_PAYMENTS,\r\n    type: 'GET',\r\n    query: {\r\n      cursor,\r\n      userId,\r\n      limit,\r\n    },\r\n  }),\r\n}\r\n\r\nexport default HistoryApi\r\n","import invariant from 'invariant'\r\nimport isNil from 'lodash/isNil'\r\nimport findKey from 'lodash/findKey'\r\n\r\nimport { HistoryType } from './constants'\r\nimport { TOP_UP_STATUS } from '../topUp/constants'\r\n\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nimport HistoryApi from '../api/calls/HistoryApi'\r\n\r\nexport const GetHistoryAction = createApiEnumAction('USER::HISTORY::GET')\r\n\r\nconst getHistoryApiForType = (userId, historyType, data, cursor, limit) => {\r\n  switch (historyType) {\r\n    case HistoryType.ORDER:\r\n      return HistoryApi.getOrders(userId, data, cursor, limit)\r\n    case HistoryType.BOOKING:\r\n      return HistoryApi.getBookings(userId, data, cursor, limit)\r\n    case HistoryType.PAYMENT:\r\n      return HistoryApi.getPayments(userId, data, cursor, limit)\r\n    case HistoryType.TOP_UP:\r\n      return HistoryApi.getTopUps(\r\n        userId,\r\n        data,\r\n        cursor,\r\n        limit,\r\n        findKey(TOP_UP_STATUS, o => o === TOP_UP_STATUS.SUCCEEDED)\r\n      )\r\n    case HistoryType.USER_TRANSACTIONS:\r\n      return HistoryApi.getPaymentsUserCheck(userId, data, cursor, limit)\r\n    case HistoryType.TRANSACTIONS:\r\n      // data:\r\n      // - userAccountId\r\n      invariant(!isNil(data.userAccountId), `required user account id`)\r\n      return HistoryApi.getTransactions(userId, data, cursor, limit)\r\n    default:\r\n      invariant(false, `invalid historyType ${historyType}`)\r\n  }\r\n}\r\n\r\n/**\r\n * @param  {string} userId\r\n * @param  {[type]} historyType\r\n * @param  {object} props        must contain:\r\n *                                - restaurantIds: the ids of the restaurants we already loaded\r\n * @param  {String} [cursor=''] the next cursor\r\n * @param  {Number} [limit=10]  the limit of items to retrieve\r\n */\r\nexport const fetchUserHistory = (userId, historyType, props, cursor = '', limit = 10) =>\r\n  createApiCallAction(\r\n    GetHistoryAction,\r\n    getHistoryApiForType(userId, historyType, props, cursor, limit),\r\n    {\r\n      userId,\r\n      historyType,\r\n      props,\r\n      cursor,\r\n      limit,\r\n    }\r\n  )\r\n","import isNil from 'lodash/isNil'\r\nimport forEach from 'lodash/forEach'\r\nimport map from 'lodash/map'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { filterDuplicates, existsOnArray, findOnArray } from 'pmt-utils/array'\r\n\r\nimport { formatRestaurant, formatRestaurantsMap, formatRestaurantsListData } from './format'\r\n\r\nexport const getRestaurantState = state => (isNil(state) ? null : state.entities.restaurant)\r\n\r\nconst getRestaurantIdOnProps = (state, props) => (isNil(props) ? null : props.restaurantId)\r\n\r\nexport const getRestaurantListData = createSelector([getRestaurantState], restaurantState => {\r\n  // retrieve restaurants from list data\r\n  const restaurantsListData = restaurantState.getIn(['list', 'data'])\r\n  return isNil(restaurantsListData) ? null : formatRestaurantsListData(restaurantsListData.toJS())\r\n})\r\n\r\n/**\r\n * Gives only the restaurants list loaded, updated with the restaurant's data loaded separatly.\r\n * We do not add restaurants that are not on the list, we just update the data.\r\n */\r\nexport const getRestaurantList = createSelector(\r\n  [getRestaurantListData, getRestaurantState],\r\n  (restaurantListData, restaurantState) => {\r\n    // retrieve restaurants from list data\r\n    let restaurantList = restaurantListData?.restaurants || []\r\n    // retrieve restaurants directly stored in state\r\n    let restaurants = restaurantState.toJS()\r\n    restaurants = map(restaurants, r => r.restaurant)\r\n      // filter list/post from state\r\n      .filter(Boolean)\r\n      // keep only the restaurants that are on our list\r\n      .filter(r => existsOnArray(restaurantList, r))\r\n\r\n    // filter duplicates\r\n    return filterDuplicates(\r\n      [...(restaurantList || []), ...restaurants],\r\n      r => r.id,\r\n      (restaurant, other) => other.modificationDate > restaurant.modificationDate\r\n    )\r\n  }\r\n)\r\n\r\n/**\r\n * Gives all the restaurants list loaded merged with the restaurants loaded seperatly\r\n */\r\nexport const getAllRestaurants = createSelector(\r\n  [getRestaurantListData, getRestaurantState],\r\n  (restaurantListData, restaurantState) => {\r\n    // retrieve restaurants from list data\r\n    let restaurantList = restaurantListData?.restaurants || []\r\n\r\n    // retrieve restaurants directly stored in state\r\n    let restaurants = restaurantState.toJS()\r\n    restaurants = map(restaurants, r => r.restaurant)\r\n      // filter list/post from state\r\n      .filter(Boolean)\r\n\r\n    // filter duplicates\r\n    return filterDuplicates(\r\n      [...(restaurantList || []), ...restaurants],\r\n      r => r.id,\r\n      (restaurant, other) => other.modificationDate > restaurant.modificationDate\r\n    )\r\n  }\r\n)\r\n\r\nexport const makeIsFetchingRestaurant = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      if (isNil(restaurants)) {\r\n        return null\r\n      }\r\n      const restaurantData = restaurants.get(restaurantId)\r\n      if (isNil(restaurantData)) {\r\n        return false\r\n      }\r\n\r\n      return restaurantData.get('isFetching')\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurantData = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      if (isNil(restaurants)) {\r\n        return null\r\n      }\r\n      const restaurantData = restaurants.get(restaurantId)\r\n      if (isNil(restaurantData)) {\r\n        return null\r\n      }\r\n      return restaurantData.toJS()\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurantError = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      if (isNil(restaurants)) {\r\n        return null\r\n      }\r\n\r\n      const restaurantData = restaurants.get(restaurantId)\r\n      if (isNil(restaurantData)) {\r\n        return null\r\n      }\r\n\r\n      const restaurantError = restaurantData.get('error')\r\n      if (isNil(restaurantError)) {\r\n        return null\r\n      }\r\n\r\n      return restaurantError.toJS()\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurant = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      if (isNil(restaurants)) {\r\n        return null\r\n      }\r\n      const restaurantData = restaurants.get(restaurantId)\r\n      if (isNil(restaurantData)) {\r\n        return null\r\n      }\r\n      const restaurant = restaurantData.get('restaurant')\r\n\r\n      if (isNil(restaurant)) {\r\n        return null\r\n      }\r\n      return formatRestaurant(restaurant.toJS())\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetRestaurantFromRestaurantList = () => {\r\n  return createSelector(\r\n    [getRestaurantIdOnProps, getRestaurantState],\r\n    (restaurantId, restaurants) => {\r\n      const restaurantEntity = restaurants.toJS()\r\n      const restaurantList = restaurantEntity?.list?.data?.restaurants || []\r\n\r\n      const restaurantFromList = findOnArray(\r\n        restaurantList,\r\n        restaurant => restaurant.id === restaurantId\r\n      )\r\n      return restaurantFromList\r\n    }\r\n  )\r\n}\r\n\r\nexport const getLoadedRestaurantsIds = createSelector([getRestaurantState], restaurantsData => {\r\n  return restaurantsData.keySeq().toArray()\r\n})\r\n\r\nexport const getRestaurantMap = createSelector([getRestaurantState], restaurantsData => {\r\n  const restaurantsDataMap = restaurantsData.toJS()\r\n\r\n  const restaurantsMap = {}\r\n  forEach(restaurantsDataMap, (restaurantData, key) => {\r\n    restaurantsMap[key] = restaurantData.restaurant\r\n  })\r\n\r\n  return formatRestaurantsMap(restaurantsMap)\r\n})\r\n\r\nexport const getRestaurantPost = createSelector([getRestaurantState], restaurantData => {\r\n  if (isNil(restaurantData)) {\r\n    return null\r\n  }\r\n\r\n  const restaurantPost = restaurantData.getIn(['post', 'data'], null)\r\n  if (!isNil(restaurantPost)) {\r\n    return restaurantPost.toJS()\r\n  }\r\n\r\n  return null\r\n})\r\n\r\nexport const isFetchingRestaurantPost = createSelector([getRestaurantState], restaurantData => {\r\n  if (isNil(restaurantData)) {\r\n    return false\r\n  }\r\n\r\n  return restaurantData.getIn(['post', 'isFetching'], false)\r\n})\r\n\r\nexport const getRestaurantPostError = createSelector([getRestaurantState], restaurantData => {\r\n  const error = restaurantData.getIn(['post', 'error'])\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n\r\n  return error.toJS()\r\n})\r\n\r\nexport const isFetchingRestaurantList = createSelector([getRestaurantState], restaurantData => {\r\n  if (isNil(restaurantData)) {\r\n    return false\r\n  }\r\n\r\n  return restaurantData.getIn(['list', 'isFetching'], false)\r\n})\r\n\r\nexport const getRestaurantListError = createSelector([getRestaurantState], restaurantData => {\r\n  const error = restaurantData.getIn(['list', 'error'])\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n  return error.toJS()\r\n})\r\n","import { createMiddleware } from '../redux'\r\n\r\nimport {\r\n  GetRestaurantAction,\r\n} from './actions'\r\n\r\nimport { getCurrentTheme, changeCurrentTheme } from '../theme'\r\n\r\nimport { createMuiThemeWithPmtRestaurantColors } from 'pmt-utils/theme/theme'\r\n\r\n/**\r\n* Intercepts GET restaurant and update theme if succeeded\r\n* Otherwise just sends action to next middleware\r\n*\r\n* @returns {Function}\r\n*/\r\nexport const restaurantThemeMiddleware = createMiddleware(\r\n  GetRestaurantAction.SUCCESS,\r\n  ({ getState, dispatch, next, action }) => {\r\n\r\n    const currentTheme = getCurrentTheme(getState())\r\n    const newTheme = createMuiThemeWithPmtRestaurantColors(currentTheme, action.response.colors)\r\n\r\n    next(changeCurrentTheme(newTheme))\r\n  }\r\n)\r\n","import Immutable from 'immutable'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport {\r\n  RestaurantAction,\r\n  GetRestaurantAction,\r\n  GetRestaurantListAction,\r\n  GetRestaurantListByGeoPtAction,\r\n  RefreshRestaurantAction,\r\n  PostRestaurantAction,\r\n} from './actions'\r\n\r\nimport { GetHistoryAction } from '../userHistory/actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\nexport * from './constants'\r\nexport * from './format'\r\n\r\n// Example of restaurant data\r\n// {\r\n//   restaurant: null,\r\n//   isFetching: false,\r\n//   lastUpdated: null,\r\n//   error: null,\r\n// }\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\nexport const restaurantReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case RestaurantAction.SET:\r\n      if (isNil(action.restaurant)) {\r\n        return state\r\n      }\r\n\r\n      return state.mergeIn([action.restaurant.id], {\r\n        restaurant: action.restaurant,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantAction.REQUEST:\r\n      return state.mergeIn([action.data.restaurantId], {\r\n        restaurant: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case RefreshRestaurantAction.SUCCESS:\r\n    case GetRestaurantAction.SUCCESS:\r\n      return state.mergeIn([action.response.id], {\r\n        restaurant: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantAction.FAILURE:\r\n      return state.mergeIn([action.data.restaurantId], {\r\n        restaurant: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case RefreshRestaurantAction.REQUEST:\r\n      return state.mergeIn([action.data.restaurantId, 'isFetching'], true)\r\n\r\n    case PostRestaurantAction.REQUEST:\r\n      return state.mergeIn(['post'], {\r\n        data: action.response,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case PostRestaurantAction.SUCCESS:\r\n      return state.mergeIn(['post'], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case PostRestaurantAction.FAILURE:\r\n      return state.mergeIn(['post'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case GetRestaurantListAction.REQUEST:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListAction.SUCCESS:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListAction.FAILURE:\r\n      return state.mergeIn(['list'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case GetRestaurantListAction.RESET:\r\n      return state.mergeIn(['list'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListByGeoPtAction.REQUEST:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListByGeoPtAction.SUCCESS:\r\n      return state.mergeIn(['list'], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetRestaurantListByGeoPtAction.FAILURE:\r\n      return state.mergeIn(['list'], {\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    // Should we really make this module dependant of userHistory?\r\n    // another method:\r\n    // middleware on userHistory that dispatch a new action for here\r\n    case GetHistoryAction.SUCCESS:\r\n      if (!action.response.restaurants) {\r\n        return state\r\n      }\r\n      action.response.restaurants.forEach(restaurant => {\r\n        state = state.mergeIn([restaurant.id], {\r\n          restaurant,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: null,\r\n        })\r\n      })\r\n      return state\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNil from 'lodash/isNil'\r\nimport isNull from 'lodash/isNull'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  fetchRestaurant,\r\n  makeGetRestaurant,\r\n  makeGetRestaurantError,\r\n  makeIsFetchingRestaurant,\r\n  makeGetRestaurantFromRestaurantList,\r\n  setRestaurant,\r\n} from '../'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the restaurant and pass it to the children\r\n *\r\n * Requirements:\r\n * - restaurantId\r\n *\r\n * see `withRestaurant`\r\n *\r\n */\r\nclass RestaurantContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // check if we are not already loading a restaurant\r\n    if ((isNull(props.restaurant) || props.forceRefresh) && !props.isFetchingRestaurant) {\r\n      this.loadRestaurant(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n\r\n    if (\r\n      nextProps.restaurantId !== props.restaurantId &&\r\n      ((!props.restaurant || props.restaurant.id) && nextProps.restaurantId)\r\n    ) {\r\n      // we check if the new restaurant id exists in the list of the restaurant store\r\n      if (!nextProps.restaurantFromRestaurantList) {\r\n        this.loadRestaurant(nextProps)\r\n      } else {\r\n        // if it does and the id is not the same of the current restaurant,\r\n        // we set it as our new restaurant\r\n        nextProps.setRestaurant(nextProps.restaurantFromRestaurantList)\r\n      }\r\n    }\r\n  }\r\n\r\n  loadRestaurant(props) {\r\n    const restaurantId = props.restaurantId\r\n\r\n    if (!isNil(restaurantId)) {\r\n      props.fetchRestaurant(restaurantId)\r\n    } else {\r\n      // TODO : display error message?\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      RestaurantWrappedComponent,\r\n      children,\r\n      isFetchingRestaurant,\r\n      restaurant,\r\n      restaurantId,\r\n      restaurantError,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    if (isNil(RestaurantWrappedComponent)) {\r\n      return children({\r\n        isFetchingRestaurant,\r\n        restaurant,\r\n        restaurantId,\r\n        restaurantError,\r\n        ...otherProps,\r\n      })\r\n    }\r\n\r\n    return (\r\n      <RestaurantWrappedComponent\r\n        isFetchingRestaurant={isFetchingRestaurant}\r\n        restaurant={restaurant}\r\n        restaurantId={restaurantId}\r\n        restaurantError={restaurantError}\r\n        children={children}\r\n        {...otherProps}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nRestaurantContainer.propTypes = {\r\n  children: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\r\n  fetchRestaurant: PropTypes.func.isRequired,\r\n  forceRefresh: PropTypes.bool,\r\n  isFetchingRestaurant: PropTypes.bool,\r\n  restaurant: PropTypes.object,\r\n  restaurantId: PropTypes.string,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getRestaurant = makeGetRestaurant()\r\n  const getRestaurantError = makeGetRestaurantError()\r\n  const isFetchingRestaurant = makeIsFetchingRestaurant()\r\n  const getRestaurantFromRestaurantList = makeGetRestaurantFromRestaurantList()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    if (props.restaurant) {\r\n      return {\r\n        restaurant: props.restaurant,\r\n        restaurantError: null,\r\n        isFetchingRestaurant: false,\r\n      }\r\n    }\r\n\r\n    return {\r\n      restaurant: getRestaurant(state, props),\r\n      restaurantError: getRestaurantError(state, props),\r\n      isFetchingRestaurant: isFetchingRestaurant(state, props),\r\n      restaurantFromRestaurantList: getRestaurantFromRestaurantList(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchRestaurant,\r\n    setRestaurant,\r\n  }\r\n)(RestaurantContainer)\r\n","import React from 'react'\r\nimport get from 'lodash/get'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getDefaultRestaurantId } from 'pmt-modules/authRestaurant'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport RestaurantContainer from './RestaurantContainer'\r\n\r\nconst getRestaurantIdOnProps = props => {\r\n  const queryParam = getQueryParam('restaurantId')\r\n  if (!isEmpty(queryParam)) {\r\n    return queryParam\r\n  }\r\n  if (!isNil(props.routeParams) && !isEmpty(props.routeParams.restaurantId)) {\r\n    return props.routeParams.restaurantId\r\n  }\r\n  if (!isNil(props.params) && !isEmpty(props.params.restaurantId)) {\r\n    return props.params.restaurantId\r\n  }\r\n\r\n  return (\r\n    getDefaultRestaurantId() ||\r\n    get(props, 'orderProperties.restaurantId', props.restaurantId || null)\r\n  )\r\n}\r\n\r\n/**\r\n * Add the RestaurantContainer as HOC for the given component\r\n * Requirements\r\n * - restaurantId in props or routeParams\r\n */\r\nconst withRestaurant = RestaurantWrappedComponent => {\r\n  return props => (\r\n    <RestaurantContainer\r\n      RestaurantWrappedComponent={RestaurantWrappedComponent}\r\n      {...props}\r\n      // keep restaurantId at bottom to ensure overriding any eventual prop\r\n      // this also allows changing restaurant on the fly \\o/\r\n      restaurantId={getRestaurantIdOnProps(props)}\r\n    />\r\n  )\r\n}\r\n\r\nexport default withRestaurant\r\n","/** This should match the java UserType enum */\r\nconst UserType = {\r\n  NORMAL: 'NORMAL',\r\n  LIGHT: 'LIGHT',\r\n  INCOGNITO: 'INCOGNITO',\r\n}\r\n\r\nexport default UserType\r\n","import cloneDeep from 'lodash/cloneDeep'\r\nimport ApiEndpoints from '../config/ApiEndpoints'\r\nimport UserErrors from '../errors/UserErrors'\r\n\r\nimport { cleanForApi } from 'pmt-utils/phone'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\n\r\nconst RegisterApi = {\r\n  postUser: user => {\r\n    const newUser = cloneDeep(user)\r\n    newUser.phone = cleanForApi((newUser.phone || '').replace(/ /g, ''))\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.REGISTER,\r\n      type: 'POST',\r\n      body: newUser,\r\n      query: {\r\n        sendRegistrationEmail: false,\r\n        sendPhoneVerificationCode: false,\r\n      },\r\n      errorHandler: UserErrors.POST_USER,\r\n    }\r\n  },\r\n\r\n  postIncognitoUser: user => {\r\n    user.userType = UserType.INCOGNITO\r\n    return {\r\n      endpoint: ApiEndpoints.REGISTER,\r\n      type: 'POST',\r\n      body: user,\r\n      query: {\r\n        sendRegistrationEmail: false,\r\n        sendPhoneVerificationCode: false,\r\n      },\r\n      header: {\r\n        authorization: null,\r\n      },\r\n      errorHandler: UserErrors.POST_USER,\r\n    }\r\n  },\r\n\r\n  postUserLightUser: user => {\r\n    user.userType = UserType.LIGHT\r\n    return {\r\n      endpoint: ApiEndpoints.REGISTER,\r\n      type: 'POST',\r\n      body: user,\r\n      query: {\r\n        sendRegistrationEmail: false,\r\n        sendPhoneVerificationCode: false,\r\n      },\r\n      header: {\r\n        authorization: null,\r\n      },\r\n    }\r\n  },\r\n}\r\n\r\nexport default RegisterApi\r\n","import RegisterApi from '../api/calls/RegisterApi'\r\n\r\nimport {\r\n  createApiCallAction,\r\n  createApiEnumAction,\r\n  // createTestApiCallAction,\r\n} from '../api/utils'\r\n\r\nexport const RegisterUserAction = createApiEnumAction('REGISTRATION::REGISTER')\r\n\r\nexport const RegisterIncognitoUserAction = createApiEnumAction('REGISTRATION::REGISTER_INCOGNITO')\r\n\r\nexport const RegisterUserLightAction = createApiEnumAction('REGISTRATION::REGISTER_USER_LIGHT')\r\n\r\n// export const registerUserTest = (user) => createTestApiCallAction(\r\n//   RegisterUserAction,\r\n//   true,\r\n//   {\r\n//     data: { user },\r\n//   }\r\n// )\r\n\r\nexport const registerUser = (user, props) =>\r\n  createApiCallAction(RegisterUserAction, RegisterApi.postUser(user), {\r\n    user,\r\n    props,\r\n  })\r\n\r\nexport const registerAsIncognito = (user, props) =>\r\n  createApiCallAction(RegisterIncognitoUserAction, RegisterApi.postIncognitoUser(user), {\r\n    user,\r\n    props,\r\n  })\r\n\r\nexport const registerUserLight = (user, props) =>\r\n  createApiCallAction(RegisterUserLightAction, RegisterApi.postUserLightUser(user), {\r\n    user,\r\n    props,\r\n  })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getRegisterData = state => state.entities.registration\r\n\r\nexport const getRegisterError = createSelector(\r\n  [ getRegisterData ],\r\n  (authData) => {\r\n    const error = authData.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n    return error.toJS()\r\n  }\r\n)\r\n\r\nexport const isFetchingRegister = createSelector(\r\n  [ getRegisterData ],\r\n  (authData) => {\r\n    return authData.get('isFetching')\r\n  }\r\n)\r\n","import { authenticateUser, saveIncognitoCookie } from 'pmt-modules/auth'\r\nimport { createMiddleware } from 'pmt-modules/redux'\r\nimport { EventManager } from 'pmt-modules/event'\r\n\r\nimport { RegisterUserAction, RegisterUserLightAction, RegisterIncognitoUserAction } from './actions'\r\nimport { removeIncognitoCookie, saveUserLightCookie } from '../auth'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { replaceWith } from 'pmt-modules/routing'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\n/**\r\n * Intercepts RegisterUserAction action. Redirects to login screen while running the oauth2\r\n * authentication flow.\r\n */\r\nconst registeredSuccessMiddleware = createMiddleware(\r\n  RegisterUserAction.SUCCESS,\r\n  ({ action, dispatch, next }) => {\r\n    EventManager.dispatch(EventManager.Events.ON_REGISTER_SUCCESS, {\r\n      user: action.response.email,\r\n    })\r\n\r\n    // oauth login\r\n    const { email, password } = action.data.user\r\n    dispatch(authenticateUser(email, password, action.data.props))\r\n    // we do not handle redirection-after-registration here, because it will be done by the middleware of AuthUserAction.SUCCESS\r\n  }\r\n)\r\n\r\nconst registeredIncognitoSuccessMiddleware = createMiddleware(\r\n  RegisterIncognitoUserAction.SUCCESS,\r\n  ({ getState, action, dispatch, next }) => {\r\n    saveIncognitoCookie(action.response.id)\r\n    // if we registered as Incognito, it means we were not already authenticated (as \"incognito\" authentication is proposed only when not already authenticated)\r\n    // so there is no cookies to remove\r\n\r\n    // we handle a `redirectTo` parameter to go back on the page that asked the user to logged in\r\n    if (redirectToRedirectToParamIfExists(dispatch)) {\r\n      // let the SUCCESS action reach the reducers / other middlewares (e.g. to set isFetching:false)\r\n      // before returning the marker, because returning a non-nil value from a middleware prevents\r\n      // createMiddleware from calling `next(action)` itself.\r\n      next(action)\r\n      return DID_REDIRECT_TO_PARAM\r\n    }\r\n    // else : maybe the user doesn't come from login page, for example because the mode is \"incognito only\"\r\n    // the redirection will then depend from the front (order plugin, web customer)\r\n    // so it will be handled in specific middlewares\r\n    // cf. orderPlugin/middlewares\r\n  }\r\n)\r\n\r\nconst registeredUserLightSuccessMiddleware = createMiddleware(\r\n  RegisterUserLightAction.SUCCESS,\r\n  ({ action, dispatch, next }) => {\r\n    saveUserLightCookie(action.response)\r\n    // maybe the user was incognito, and asked to create an account => now he is registered, he's not incognito anymore\r\n    removeIncognitoCookie()\r\n\r\n    if (redirectToRedirectToParamIfExists(dispatch)) {\r\n      // let the SUCCESS action reach the reducers / other middlewares (e.g. to set isFetching:false)\r\n      // before returning the marker, because returning a non-nil value from a middleware prevents\r\n      // createMiddleware from calling `next(action)` itself.\r\n      next(action)\r\n      return DID_REDIRECT_TO_PARAM\r\n    }\r\n  }\r\n)\r\n\r\n// we handle a `redirectTo` parameter to go back on the page that asked the user to logged in\r\n// returns true if a redirection was performed\r\nconst redirectToRedirectToParamIfExists = dispatch => {\r\n  const redirectToParam = getQueryParam('redirectTo')\r\n  if (!isEmpty(redirectToParam)) {\r\n    dispatch(replaceWith(decodeURIComponent(redirectToParam)))\r\n    return true\r\n  }\r\n  return false\r\n}\r\n\r\n// marker returned by the registration middlewares when they performed a `redirectTo` redirection.\r\n// It is returned as the middleware result so it propagates up through `next(action)` and lets\r\n// upstream middlewares (cf. orderPlugin/middlewares) know a redirection already happened.\r\nexport const DID_REDIRECT_TO_PARAM = 'DID_REDIRECT_TO_PARAM'\r\n\r\nexport const registrationMiddlewares = [\r\n  registeredSuccessMiddleware,\r\n  registeredIncognitoSuccessMiddleware,\r\n  registeredUserLightSuccessMiddleware,\r\n]\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport { RegisterUserAction, RegisterUserLightAction, RegisterIncognitoUserAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  user: null,\r\n  isFetching: false,\r\n  error: null,\r\n})\r\n\r\nexport const registrationReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case RegisterUserAction.REQUEST:\r\n    case RegisterUserLightAction.REQUEST:\r\n    case RegisterIncognitoUserAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        user: null,\r\n        error: null,\r\n      })\r\n\r\n    case RegisterUserAction.SUCCESS:\r\n    case RegisterUserLightAction.SUCCESS:\r\n    case RegisterIncognitoUserAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        user: action.response,\r\n        error: null,\r\n      })\r\n\r\n    case RegisterUserAction.FAILURE:\r\n    case RegisterUserLightAction.FAILURE:\r\n    case RegisterIncognitoUserAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        user: null,\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Lock = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n    <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\"/>\r\n  </SvgIcon>\r\n)\r\n\r\nLock = pure(Lock)\r\nLock.displayName = 'Lock'\r\nLock.pmtName = 'SvgIcon'\r\n\r\nexport default Lock\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles, fade } from 'pmt-ui/styles'\r\nimport ArrowBack from 'pmt-ui/svg-icons/navigation/arrow-back'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    height: '100%',\r\n    width: '100%',\r\n    overflow: 'hidden',\r\n  },\r\n  inner: {\r\n    position: 'relative',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    minHeight: 0,\r\n    width: '100%',\r\n    margin: '0 auto',\r\n    overflow: 'hidden',\r\n  },\r\n  headerImage: {\r\n    position: 'relative',\r\n    flexShrink: 0,\r\n    background: `${theme.palette.primary.main} center center`,\r\n    backgroundSize: 'cover',\r\n    backgroundPosition: 'center',\r\n    backgroundRepeat: 'no-repeat',\r\n  },\r\n  headerImageGrow: {\r\n    flexGrow: 1,\r\n    flexShrink: 1,\r\n    minHeight: 'max(140px, 25%)',\r\n  },\r\n  headerImageCollapsed: {\r\n    flexGrow: 0,\r\n    flexShrink: 0,\r\n    flexBasis: 0,\r\n    minHeight: 0,\r\n    height: 0,\r\n  },\r\n  headerOverlay: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    right: 0,\r\n    bottom: 0,\r\n    left: 0,\r\n    background: `linear-gradient(180deg, ${fade('#000000', 0)} 0%, ${fade(\r\n      '#000000',\r\n      0\r\n    )} 55%, ${fade('#000000', 0.55)} 100%)`,\r\n  },\r\n  headerOverlayHidden: {\r\n    display: 'none',\r\n  },\r\n  card: {\r\n    position: 'relative',\r\n    zIndex: 2,\r\n    flexShrink: 0,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    marginTop: -theme.spacing(4),\r\n    background: theme.pmt.colors.white,\r\n    borderTopLeftRadius: theme.spacing(3.5),\r\n    borderTopRightRadius: theme.spacing(3.5),\r\n    boxShadow: '0 -8px 24px rgba(0, 0, 0, 0.08)',\r\n    padding: `${theme.spacing(4.5)}px ${theme.spacing(3)}px ${theme.spacing(3.5)}px`,\r\n  },\r\n  // card grows + scrolls internally (header image stays a fixed height) -\r\n  // used when the card's own content height varies a lot (e.g. auth forms)\r\n  cardScrollable: {\r\n    flexGrow: 1,\r\n    flexShrink: 1,\r\n    minHeight: 0,\r\n    overflowY: 'auto',\r\n  },\r\n  cardNoOverlap: {\r\n    marginTop: 0,\r\n  },\r\n  // card grows (no internal scroll of its own) to fill the leftover space\r\n  // when there is no header image at all - used by the restaurant page,\r\n  // whose content already manages its own internal scrolling\r\n  cardGrow: {\r\n    flexGrow: 1,\r\n    flexShrink: 1,\r\n    minHeight: 0,\r\n  },\r\n  badge: {\r\n    position: 'absolute',\r\n    top: -theme.spacing(3.5),\r\n    left: '50%',\r\n    transform: 'translateX(-50%)',\r\n    width: theme.spacing(7),\r\n    height: theme.spacing(7),\r\n    // required: without this, this flex item's automatic minimum size is 0\r\n    // (because it has `overflow: hidden`), so it can get squished into an\r\n    // ellipse by its flex container when vertical space is tight (e.g. a\r\n    // long form on a short viewport)\r\n    flexShrink: 0,\r\n    borderRadius: '50%',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    background: theme.pmt.colors.white,\r\n    color: theme.palette.primary.main,\r\n    boxShadow: '0 4px 14px rgba(0, 0, 0, 0.15)',\r\n    overflow: 'hidden',\r\n    '& svg': {\r\n      width: 26,\r\n      height: 26,\r\n    },\r\n    '& img': {\r\n      width: '100%',\r\n      height: '100%',\r\n      objectFit: 'cover',\r\n    },\r\n  },\r\n  badgeInline: {\r\n    position: 'relative',\r\n    top: 0,\r\n    left: 'auto',\r\n    transform: 'none',\r\n    margin: '0 auto',\r\n  },\r\n  headerInfo: {\r\n    textAlign: 'center',\r\n    flexShrink: 0,\r\n    marginTop: theme.spacing(2),\r\n    marginBottom: theme.spacing(3),\r\n  },\r\n  backButton: {\r\n    position: 'absolute',\r\n    top: theme.spacing(2),\r\n    left: theme.spacing(2),\r\n    zIndex: 3,\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: theme.spacing(1),\r\n    margin: -theme.spacing(1),\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    fontSize: 20,\r\n    color: theme.pmt.colors.grey500,\r\n    cursor: 'pointer',\r\n    '&:focus-visible': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: 2,\r\n      borderRadius: '50%',\r\n    },\r\n    '&::-moz-focus-inner': {\r\n      border: 0,\r\n    },\r\n  },\r\n})\r\n\r\nconst BrandedCardLayout = ({\r\n  classes,\r\n  className,\r\n  backgroundImagePath,\r\n  logoPath,\r\n  fallbackIcon,\r\n  headerInfo,\r\n  headerHeightVh,\r\n  scrollableCard,\r\n  growCardWhenNoImage,\r\n  badgeOverlap,\r\n  onBack,\r\n  children,\r\n}) => {\r\n  const hasBackgroundImage = Boolean(backgroundImagePath)\r\n\r\n  return (\r\n    <div className={classNames(classes.root, className)}>\r\n      <div className={classes.inner}>\r\n        <div\r\n          className={classNames(classes.headerImage, {\r\n            [classes.headerImageGrow]: !scrollableCard,\r\n            [classes.headerImageCollapsed]: !hasBackgroundImage,\r\n          })}\r\n          style={\r\n            hasBackgroundImage\r\n              ? {\r\n                  backgroundImage: `url(${backgroundImagePath})`,\r\n                  ...(scrollableCard\r\n                    ? { flexBasis: `${headerHeightVh}vh`, minHeight: 90 }\r\n                    : { flexBasis: `${headerHeightVh}vh` }),\r\n                }\r\n              : {}\r\n          }\r\n        >\r\n          <div\r\n            className={classNames(classes.headerOverlay, {\r\n              [classes.headerOverlayHidden]: !hasBackgroundImage,\r\n            })}\r\n          />\r\n        </div>\r\n\r\n        <div\r\n          className={classNames(classes.card, {\r\n            [classes.cardScrollable]: scrollableCard,\r\n            [classes.cardNoOverlap]: !hasBackgroundImage,\r\n            [classes.cardGrow]: !hasBackgroundImage && growCardWhenNoImage && !scrollableCard,\r\n          })}\r\n        >\r\n          {onBack && (\r\n            <button\r\n              type=\"button\"\r\n              className={classes.backButton}\r\n              onClick={onBack}\r\n              aria-label={tr('global.a11y.go_back', {\r\n                fr: 'Retour',\r\n                context: '',\r\n                desc: 'Accessible label for the back button on branded pages',\r\n              })}\r\n            >\r\n              <ArrowBack aria-hidden=\"true\" />\r\n            </button>\r\n          )}\r\n\r\n          <div\r\n            className={classNames(classes.badge, {\r\n              [classes.badgeInline]: !hasBackgroundImage || !badgeOverlap,\r\n            })}\r\n          >\r\n            {logoPath ? <img src={logoPath} alt=\"\" aria-hidden=\"true\" /> : fallbackIcon}\r\n          </div>\r\n\r\n          {headerInfo && <div className={classes.headerInfo}>{headerInfo}</div>}\r\n\r\n          {children}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nBrandedCardLayout.defaultProps = {\r\n  headerHeightVh: 34,\r\n  scrollableCard: false,\r\n  growCardWhenNoImage: false,\r\n  badgeOverlap: true,\r\n}\r\n\r\nexport default withStyles(styles)(BrandedCardLayout)\r\n","/**\r\n * constant used to switch between views\r\n */\r\nexport const LoginViews = {\r\n  /**\r\n   * This is the first screen of the login/register feature :\r\n   * the user will have to choose if he wants to login, register, or continue without account creation (= as incognito)\r\n   *\r\n   * handled by AuthenticationChoiceForm\r\n   */\r\n  CHOICE_TO_DO: 'CHOICE_TO_DO',\r\n\r\n  /**\r\n   * handled by LoginForm\r\n   */\r\n  LOGIN: 'LOGIN',\r\n\r\n  /**\r\n   * handled by RegisterForm\r\n   */\r\n  REGISTER: 'REGISTER',\r\n\r\n  /**\r\n   * handled by UserLightForm\r\n   */\r\n  USER_LIGHT: 'USER_LIGHT',\r\n\r\n  /**\r\n   * Used when the user chose \"continue without account creation\"\r\n   * it allows to display the CGU checkbox, and make it mandatory to check it to continue\r\n   *\r\n   * handled by IncognitoForm\r\n   */\r\n  INCOGNITO: 'INCOGNITO',\r\n}\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { LoginViews } from '../constants'\r\n\r\n// neutral chrome colors for the tab switch surface - not restaurant-themed\r\nconst TAB_SURFACE_BACKGROUND = '#F8FAF9'\r\nconst TAB_INACTIVE_COLOR = '#757575'\r\nconst TAB_INACTIVE_HOVER_COLOR = '#262626'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    padding: 4,\r\n    borderRadius: 16,\r\n    background: TAB_SURFACE_BACKGROUND,\r\n    width: '100%',\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  tab: {\r\n    flex: 1,\r\n    textAlign: 'center',\r\n    padding: 8,\r\n    borderRadius: 8,\r\n    fontSize: 15,\r\n    fontWeight: 700,\r\n    fontFamily: 'inherit',\r\n    color: TAB_INACTIVE_COLOR,\r\n    background: 'transparent',\r\n    border: 'none',\r\n    cursor: 'pointer',\r\n    whiteSpace: 'nowrap',\r\n    textOverflow: 'ellipsis',\r\n    overflow: 'hidden',\r\n    transition: '300ms cubic-bezier(0.4, 0, 0.2, 1)',\r\n\r\n    '&:hover': {\r\n      color: TAB_INACTIVE_HOVER_COLOR,\r\n    },\r\n\r\n    // visible keyboard focus indicator\r\n    '&:focus': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: 2,\r\n    },\r\n    '&:focus:not(:focus-visible)': {\r\n      outline: 'none',\r\n    },\r\n    '&:focus-visible': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: 2,\r\n    },\r\n  },\r\n  tabActive: {\r\n    background: '#FFFFFF',\r\n    color: theme.palette.primary.main,\r\n    boxShadow: '0 1px 3px rgba(0, 0, 0, 0.04)',\r\n    borderRadius: 8,\r\n\r\n    '&:hover': {\r\n      color: theme.palette.primary.main,\r\n    },\r\n  },\r\n})\r\n\r\nconst AuthTabs = ({ classes, active, onChange }) => {\r\n  const tabs = [LoginViews.LOGIN, LoginViews.REGISTER]\r\n\r\n  const handleKeyDown = (event, index) => {\r\n    let newIndex = null\r\n    if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\r\n      newIndex = (index + 1) % tabs.length\r\n    } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\r\n      newIndex = (index - 1 + tabs.length) % tabs.length\r\n    } else if (event.key === 'Home') {\r\n      newIndex = 0\r\n    } else if (event.key === 'End') {\r\n      newIndex = tabs.length - 1\r\n    }\r\n\r\n    if (newIndex !== null) {\r\n      event.preventDefault()\r\n      onChange(tabs[newIndex])\r\n      const nextTabNode = document.getElementById(`auth-tab-${tabs[newIndex]}`)\r\n      if (nextTabNode) {\r\n        nextTabNode.focus()\r\n      }\r\n    }\r\n  }\r\n\r\n  return (\r\n    <div className={classes.root} role=\"tablist\">\r\n      <button\r\n        id={`auth-tab-${LoginViews.LOGIN}`}\r\n        type=\"button\"\r\n        role=\"tab\"\r\n        aria-selected={active === LoginViews.LOGIN}\r\n        aria-controls=\"auth-tabpanel\"\r\n        tabIndex={active === LoginViews.LOGIN ? 0 : -1}\r\n        className={classNames(classes.tab, { [classes.tabActive]: active === LoginViews.LOGIN })}\r\n        onClick={() => active !== LoginViews.LOGIN && onChange(LoginViews.LOGIN)}\r\n        onKeyDown={event => handleKeyDown(event, 0)}\r\n      >\r\n        {tr('web_customer.login.connect')}\r\n      </button>\r\n\r\n      <button\r\n        id={`auth-tab-${LoginViews.REGISTER}`}\r\n        type=\"button\"\r\n        role=\"tab\"\r\n        aria-selected={active === LoginViews.REGISTER}\r\n        aria-controls=\"auth-tabpanel\"\r\n        tabIndex={active === LoginViews.REGISTER ? 0 : -1}\r\n        className={classNames(classes.tab, {\r\n          [classes.tabActive]: active === LoginViews.REGISTER,\r\n        })}\r\n        onClick={() => active !== LoginViews.REGISTER && onChange(LoginViews.REGISTER)}\r\n        onKeyDown={event => handleKeyDown(event, 1)}\r\n      >\r\n        {tr('web_customer.login.signin')}\r\n      </button>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(AuthTabs)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ActionVisibility = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"/>\r\n  </SvgIcon>\r\n);\r\nActionVisibility = pure(ActionVisibility);\r\nActionVisibility.displayName = 'ActionVisibility';\r\nActionVisibility.muiName = 'SvgIcon';\r\n\r\nexport default ActionVisibility;\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ActionVisibilityOff = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"/>\r\n  </SvgIcon>\r\n);\r\nActionVisibilityOff = pure(ActionVisibilityOff);\r\nActionVisibilityOff.displayName = 'ActionVisibilityOff';\r\nActionVisibilityOff.muiName = 'SvgIcon';\r\n\r\nexport default ActionVisibilityOff;\r\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n","export default function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(s.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||\"get\",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},s.onerror=r,s.withCredentials=\"include\"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})}\n//# sourceMappingURL=unfetch.module.js.map\n","module.exports = self.fetch || (self.fetch = require('unfetch').default || require('unfetch'));\n","/**\n * Known potential responses from the remote API.\n *\n * https://haveibeenpwned.com/api/v3#PwnedPasswords\n *\n */\n/** @internal */\nvar OK = {\n    status: 200\n};\n/** @internal */\nvar BAD_REQUEST = {\n    status: 400,\n    body: 'The hash prefix was not in a valid format'\n};\n\nexport { BAD_REQUEST, OK };\n//# sourceMappingURL=responses2.js.map\n","import fetch from 'isomorphic-unfetch';\nimport { BAD_REQUEST } from './responses2.js';\n\n/**\n * Fetches data from the supplied API endpoint.\n *\n * HTTP status code 200 returns plain text (data found).\n * HTTP status code 400 throws an Error (bad request).\n *\n * @internal\n * @private\n * @param {string} endpoint the API endpoint to query\n * @param {object} [options] a configuration object\n * @param {string} [options.baseUrl] a custom base URL for the\n * pwnedpasswords.com API endpoints (default: `https://api.pwnedpasswords.com`)\n * @param {string} [options.userAgent] a custom string to send as the User-Agent\n * field in the request headers (default: `hibp <version>`)\n * @returns {Promise<string>} a Promise which resolves to the data resulting\n * from the query, or rejects with an Error\n */\nvar fetchFromApi = (function (endpoint) {\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$baseUrl = _ref.baseUrl, baseUrl = _ref$baseUrl === void 0 ? 'https://api.pwnedpasswords.com' : _ref$baseUrl, _ref$userAgent = _ref.userAgent, userAgent = _ref$userAgent === void 0 ? undefined : _ref$userAgent;\n    var config = Object.assign({}, userAgent ? {\n        headers: {\n            'User-Agent': userAgent\n        }\n    } : {});\n    var url = \"\".concat(baseUrl.replace(/\\/$/g, '')).concat(endpoint);\n    return fetch(url, config).then(function (res) {\n        if (res.ok)\n            return res.text();\n        if (res.status === BAD_REQUEST.status) {\n            return res.text().then(function (text) {\n                throw new Error(text);\n            });\n        }\n        throw new Error(res.statusText);\n    });\n});\n\nexport default fetchFromApi;\n//# sourceMappingURL=fetchFromApi2.js.map\n","import 'isomorphic-unfetch';\nimport './responses2.js';\nimport fetchFromApi from './fetchFromApi2.js';\n\n/**\n * An object representing an exposed password hash suffix (corresponding to a\n * given hash prefix) and how many times it occurred in the Pwned Passwords\n * repository.\n *\n * @typedef {object} PwnedPasswordSuffix\n * @property {string} suffix\n * @property {number} count\n */\n/**\n * Fetches the SHA-1 hash suffixes for the given 5-character SHA-1 hash prefix.\n *\n * When a password hash with the same first 5 characters is found in the Pwned\n * Passwords repository, the API will respond with an HTTP 200 and include the\n * suffix of every hash beginning with the specified prefix, followed by a count\n * of how many times it appears in the data set. This function parses the\n * response and returns a more structured format.\n *\n * @param {string} prefix the first 5 characters of a SHA-1 password hash (case\n * insensitive)\n * @param {object} [options] a configuration object\n * @param {string} [options.baseUrl] a custom base URL for the\n * pwnedpasswords.com API endpoints (default: `https://api.pwnedpasswords.com`)\n * @param {string} [options.userAgent] a custom string to send as the User-Agent\n * field in the request headers (default: `hibp <version>`)\n * @returns {Promise<PwnedPasswordSuffix[]>} a Promise which resolves to an\n * array of objects, each containing the `suffix` that when matched with the\n * prefix composes the complete hash, and a `count` of how many times it appears\n * in the breached password data set, or rejects with an Error\n *\n * @example\n * pwnedPasswordRange('5BAA6')\n *   .then(results => {\n *     // results will have the following shape:\n *     // [\n *     //   { suffix: \"003D68EB55068C33ACE09247EE4C639306B\", count: 3 },\n *     //   { suffix: \"012C192B2F16F82EA0EB9EF18D9D539B0DD\", count: 1 },\n *     //   ...\n *     // ]\n *   })\n * @example\n * const suffix = '1E4C9B93F3F0682250B6CF8331B7EE68FD8';\n * pwnedPasswordRange('5BAA6')\n *   // filter to matching suffix\n *   .then(results => results.filter(row => row.suffix === suffix))\n *   // return count if match, 0 if not\n *   .then(results => (results[0] ? results[0].count : 0))\n *   .catch(err => {\n *     // ...\n *   });\n * @see https://haveibeenpwned.com/api/v3#SearchingPwnedPasswordsByRange\n * @alias module:pwnedPasswordRange\n */\nvar pwnedPasswordRange = function pwnedPasswordRange(prefix) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return fetchFromApi(\"/range/\".concat(encodeURIComponent(prefix)), options) // create array from lines of text in response body\n        .then(function (data) {\n        return data.split('\\n');\n    }) // convert into array of objects containing suffix and count for each line\n        .then(function (results) {\n        return results.map(function (row) {\n            return {\n                suffix: row.split(':')[0],\n                count: parseInt(row.split(':')[1], 10)\n            };\n        });\n    });\n};\n\nexport default pwnedPasswordRange;\n//# sourceMappingURL=pwnedPasswordRange.js.map\n","/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r\n/*  SHA-1 implementation in JavaScript | (c) Chris Veness 2002-2010 | www.movable-type.co.uk      */\r\n/*   - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html                             */\r\n/*         http://csrc.nist.gov/groups/ST/toolkit/examples.html                                   */\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r\n\r\nvar Sha1 = {} // Sha1 namespace\r\n\r\n/**\r\n * Generates SHA-1 hash of string\r\n *\r\n * @param {String} msg                String to be hashed\r\n * @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash\r\n * @returns {String}                  Hash of msg as hex character string\r\n */\r\nSha1.hash = function(msg, utf8encode) {\r\n  utf8encode = typeof utf8encode == 'undefined' ? true : utf8encode\r\n\r\n  // convert string to UTF-8, as SHA only deals with byte-streams\r\n  if (utf8encode) msg = Utf8.encode(msg)\r\n\r\n  // constants [§4.2.1]\r\n  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]\r\n\r\n  // PREPROCESSING\r\n\r\n  msg += String.fromCharCode(0x80) // add trailing '1' bit (+ 0's padding) to string [§5.1.1]\r\n\r\n  // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]\r\n  var l = msg.length / 4 + 2 // length (in 32-bit integers) of msg + ‘1’ + appended length\r\n  var N = Math.ceil(l / 16) // number of 16-integer-blocks required to hold 'l' ints\r\n  var M = new Array(N)\r\n\r\n  for (var i = 0; i < N; i++) {\r\n    M[i] = new Array(16)\r\n    for (var j = 0; j < 16; j++) {\r\n      // encode 4 chars per integer, big-endian encoding\r\n      M[i][j] =\r\n        (msg.charCodeAt(i * 64 + j * 4) << 24) |\r\n        (msg.charCodeAt(i * 64 + j * 4 + 1) << 16) |\r\n        (msg.charCodeAt(i * 64 + j * 4 + 2) << 8) |\r\n        msg.charCodeAt(i * 64 + j * 4 + 3)\r\n    } // note running off the end of msg is ok 'cos bitwise ops on NaN return 0\r\n  }\r\n  // add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1]\r\n  // note: most significant word would be (len-1)*8 >>> 32, but since JS converts\r\n  // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators\r\n  M[N - 1][14] = ((msg.length - 1) * 8) / Math.pow(2, 32)\r\n  M[N - 1][14] = Math.floor(M[N - 1][14])\r\n  M[N - 1][15] = ((msg.length - 1) * 8) & 0xffffffff\r\n\r\n  // set initial hash value [§5.3.1]\r\n  var H0 = 0x67452301\r\n  var H1 = 0xefcdab89\r\n  var H2 = 0x98badcfe\r\n  var H3 = 0x10325476\r\n  var H4 = 0xc3d2e1f0\r\n\r\n  // HASH COMPUTATION [§6.1.2]\r\n\r\n  var W = new Array(80)\r\n  var a, b, c, d, e\r\n  for (let i = 0; i < N; i++) {\r\n    // 1 - prepare message schedule 'W'\r\n    for (let t = 0; t < 16; t++) W[t] = M[i][t]\r\n    for (let u = 16; u < 80; u++) W[u] = Sha1.ROTL(W[u - 3] ^ W[u - 8] ^ W[u - 14] ^ W[u - 16], 1)\r\n\r\n    // 2 - initialise five working variables a, b, c, d, e with previous hash value\r\n    a = H0\r\n    b = H1\r\n    c = H2\r\n    d = H3\r\n    e = H4\r\n\r\n    // 3 - main loop\r\n    for (let v = 0; v < 80; v++) {\r\n      var s = Math.floor(v / 20) // seq for blocks of 'f' functions and 'K' constants\r\n      var T = (Sha1.ROTL(a, 5) + Sha1.f(s, b, c, d) + e + K[s] + W[v]) & 0xffffffff\r\n      e = d\r\n      d = c\r\n      c = Sha1.ROTL(b, 30)\r\n      b = a\r\n      a = T\r\n    }\r\n\r\n    // 4 - compute the new intermediate hash value\r\n    H0 = (H0 + a) & 0xffffffff // note 'addition modulo 2^32'\r\n    H1 = (H1 + b) & 0xffffffff\r\n    H2 = (H2 + c) & 0xffffffff\r\n    H3 = (H3 + d) & 0xffffffff\r\n    H4 = (H4 + e) & 0xffffffff\r\n  }\r\n\r\n  return (\r\n    Sha1.toHexStr(H0) +\r\n    Sha1.toHexStr(H1) +\r\n    Sha1.toHexStr(H2) +\r\n    Sha1.toHexStr(H3) +\r\n    Sha1.toHexStr(H4)\r\n  )\r\n}\r\n\r\n//\r\n// function 'f' [§4.1.1]\r\n//\r\nSha1.f = function(s, x, y, z) {\r\n  switch (s) {\r\n    case 0:\r\n      return (x & y) ^ (~x & z) // Ch()\r\n    case 1:\r\n      return x ^ y ^ z // Parity()\r\n    case 2:\r\n      return (x & y) ^ (x & z) ^ (y & z) // Maj()\r\n    case 3:\r\n      return x ^ y ^ z // Parity()\r\n    default:\r\n      return null\r\n  }\r\n}\r\n\r\n//\r\n// rotate left (circular left shift) value x by n positions [§3.2.5]\r\n//\r\nSha1.ROTL = function(x, n) {\r\n  return (x << n) | (x >>> (32 - n))\r\n}\r\n\r\n//\r\n// hexadecimal representation of a number\r\n//   (note toString(16) is implementation-dependant, and\r\n//   in IE returns signed numbers when used on full words)\r\n//\r\nSha1.toHexStr = function(n) {\r\n  var s = '',\r\n    v\r\n  for (var i = 7; i >= 0; i--) {\r\n    v = (n >>> (i * 4)) & 0xf\r\n    s += v.toString(16)\r\n  }\r\n  return s\r\n}\r\n\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r\n/*  Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple          */\r\n/*              single-byte character encoding (c) Chris Veness 2002-2010                         */\r\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */\r\n\r\nvar Utf8 = {} // Utf8 namespace\r\n\r\n/**\r\n * Encode multi-byte Unicode string into utf-8 multiple single-byte characters\r\n * (BMP / basic multilingual plane only)\r\n *\r\n * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars\r\n *\r\n * @param {String} strUni Unicode string to be encoded as UTF-8\r\n * @returns {String} encoded string\r\n */\r\nUtf8.encode = function(strUni) {\r\n  // use regular expressions & String.replace callback function for better efficiency\r\n  // than procedural approaches\r\n  var strUtf = strUni.replace(\r\n    /[\\u0080-\\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz\r\n    function(c) {\r\n      var cc = c.charCodeAt(0)\r\n      return String.fromCharCode(0xc0 | (cc >> 6), 0x80 | (cc & 0x3f))\r\n    }\r\n  )\r\n  strUtf = strUtf.replace(\r\n    /[\\u0800-\\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz\r\n    function(c) {\r\n      var cc = c.charCodeAt(0)\r\n      return String.fromCharCode(0xe0 | (cc >> 12), 0x80 | ((cc >> 6) & 0x3f), 0x80 | (cc & 0x3f))\r\n    }\r\n  )\r\n  return strUtf\r\n}\r\n\r\n/**\r\n * Decode utf-8 encoded string back into multi-byte Unicode characters\r\n *\r\n * @param {String} strUtf UTF-8 string to be decoded back to Unicode\r\n * @returns {String} decoded string\r\n */\r\nUtf8.decode = function(strUtf) {\r\n  // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!\r\n  var strUni = strUtf.replace(\r\n    /[\\u00e0-\\u00ef][\\u0080-\\u00bf][\\u0080-\\u00bf]/g, // 3-byte chars\r\n    function(c) {\r\n      // (note parentheses for precence)\r\n      var cc =\r\n        ((c.charCodeAt(0) & 0x0f) << 12) |\r\n        ((c.charCodeAt(1) & 0x3f) << 6) |\r\n        (c.charCodeAt(2) & 0x3f)\r\n      return String.fromCharCode(cc)\r\n    }\r\n  )\r\n  strUni = strUni.replace(\r\n    /[\\u00c0-\\u00df][\\u0080-\\u00bf]/g, // 2-byte chars\r\n    function(c) {\r\n      // (note parentheses for precence)\r\n      var cc = ((c.charCodeAt(0) & 0x1f) << 6) | (c.charCodeAt(1) & 0x3f)\r\n      return String.fromCharCode(cc)\r\n    }\r\n  )\r\n  return strUni\r\n}\r\n\r\nexport default Sha1\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport debounce from 'lodash/debounce'\r\nimport find from 'lodash/find'\r\nimport { pwnedPasswordRange } from 'hibp'\r\nimport sha1 from 'pmt-utils/security/sha1'\r\n\r\n/**\r\n * see https://haveibeenpwned.com/API/v2#SearchingPwnedPasswordsByRange\r\n */\r\nclass HibpPasswordRangeContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const { password, minLength } = props\r\n\r\n    this.state = {\r\n      isPwned: false,\r\n      count: 0,\r\n      isFetching: !isEmpty(password) && password.length >= minLength,\r\n    }\r\n  }\r\n\r\n  componentDidMount() {\r\n    if (!isEmpty(this.props.password) && this.props.password.length >= this.props.minLength) {\r\n      this.check(this.props.password)\r\n    }\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if (prevProps.password !== this.props.password) {\r\n      this.check(this.props.password)\r\n    }\r\n  }\r\n\r\n  check = debounce(password => {\r\n    if (isEmpty(password) || password.length < this.props.minLength) {\r\n      this.setState({\r\n        isPwned: false,\r\n        count: 0,\r\n        isFetching: false,\r\n      })\r\n      return\r\n    }\r\n\r\n    const shaValue = sha1.hash(password)\r\n    const prefix = shaValue.substring(0, 5).toUpperCase()\r\n    const suffix = shaValue.substring(5).toUpperCase()\r\n\r\n    this.setState({\r\n      isFetching: true,\r\n    })\r\n\r\n    pwnedPasswordRange(prefix).then(results => {\r\n      const pwdData = find(results, data => data.suffix === suffix)\r\n\r\n      const isPwned = pwdData !== undefined\r\n\r\n      this.setState({\r\n        isPwned,\r\n        count: isPwned ? pwdData.count : 0,\r\n        isFetching: false,\r\n      })\r\n    })\r\n  }, 300)\r\n\r\n  render() {\r\n    const { children } = this.props\r\n    const { isPwned, count, isFetching } = this.state\r\n\r\n    return children({\r\n      isPwned,\r\n      count,\r\n      isFetching,\r\n    })\r\n  }\r\n}\r\n\r\nHibpPasswordRangeContainer.defaultProps = {\r\n  minLength: 4,\r\n}\r\n\r\nHibpPasswordRangeContainer.propTypes = {\r\n  children: PropTypes.func.isRequired,\r\n\r\n  password: PropTypes.string,\r\n\r\n  /**\r\n   * min length after which we begin to test the password\r\n   */\r\n  minLength: PropTypes.number,\r\n}\r\n\r\nexport default HibpPasswordRangeContainer\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet ErrorOutline = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\r\n    <path d=\"M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"/>\r\n  </SvgIcon>\r\n);\r\nErrorOutline = pure(ErrorOutline);\r\nErrorOutline.displayName = 'ErrorOutline';\r\nErrorOutline.muiName = 'SvgIcon';\r\n\r\nexport default ErrorOutline;\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport clsx from 'clsx'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n  },\r\n  container: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    width: '100%',\r\n  },\r\n  icon: {\r\n    display: 'flex',\r\n    marginRight: theme.spacing(1),\r\n  },\r\n  variant_contained: {}, // nothing\r\n  variant_text: {\r\n    background: 'none!important',\r\n    border: 'none!important',\r\n    '& *': {\r\n      color: 'inherit',\r\n    },\r\n  },\r\n})\r\n\r\nconst MessageBlock = ({ classes, className, icon, variant = 'contained', text, ...otherProps }) => (\r\n  <div\r\n    className={clsx(\r\n      classes.root,\r\n      className,\r\n      clsx({\r\n        [classes.variant_contained]: variant === 'contained',\r\n        [classes.variant_text]: variant === 'text',\r\n      })\r\n    )}\r\n    {...otherProps}\r\n  >\r\n    <div className={classes.container}>\r\n      {icon && <div className={classes.icon}>{icon}</div>}\r\n      {text}\r\n    </div>\r\n  </div>\r\n)\r\n\r\nMessageBlock.propTypes = {\r\n  // icon element\r\n  icon: PropTypes.element,\r\n\r\n  // text to display, can be a string or an element\r\n  // e.g.: <Typography />\r\n  text: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,\r\n\r\n  variant: PropTypes.string,\r\n}\r\n\r\nconst toExport = withStyles(styles)(MessageBlock)\r\n\r\ntoExport.Error = ({ error, ...otherProps }) => (\r\n  <ErrorBlock\r\n    error={error}\r\n    mode={ErrorBlock.Mode.CUSTOM}\r\n    customElement={<toExport type={MessageBlock.Type.ERROR} />}\r\n    {...otherProps}\r\n  />\r\n)\r\nexport default toExport\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport InfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\nimport ErrorOutline from 'pmt-ui/svg-icons/action/error-outline'\r\nimport MessageBlockSdk from 'pmt-ui/MessageBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nconst styles = theme => ({\r\n  root: {},\r\n  errorRoot: {\r\n    color: theme.pmt.status.error,\r\n  },\r\n  infoRoot: {\r\n    color: theme.pmt.status.info,\r\n  },\r\n  warningRoot: {\r\n    color: theme.pmt.status.warning,\r\n  },\r\n})\r\n\r\nconst Type = {\r\n  INFO: 'TYPE::INFO',\r\n  ERROR: 'TYPE::ERROR',\r\n  WARNING: 'TYPE::WARNING',\r\n}\r\n\r\n/**\r\n * error will be displayed with the color defined in theme: theme.pmt.status.error\r\n * be sure to set it properly in your config theme file\r\n */\r\nconst MessageBlock = ({ classes, type, text }) => {\r\n  switch (type) {\r\n    case Type.ERROR:\r\n      return (\r\n        <MessageBlockSdk\r\n          classes={{\r\n            root: clsx(classes.root, classes.errorRoot),\r\n          }}\r\n          icon={<ErrorOutline />}\r\n          text={\r\n            <TypographyCustom skipColor type=\"164\">\r\n              {text}\r\n            </TypographyCustom>\r\n          }\r\n        />\r\n      )\r\n    case Type.WARNING:\r\n      return (\r\n        <MessageBlockSdk\r\n          classes={{\r\n            root: clsx(classes.root, classes.warningRoot),\r\n          }}\r\n          icon={<ErrorOutline />}\r\n          text={\r\n            <TypographyCustom skipColor type=\"164\">\r\n              {text}\r\n            </TypographyCustom>\r\n          }\r\n        />\r\n      )\r\n\r\n    case Type.INFO:\r\n    default:\r\n      return (\r\n        <MessageBlockSdk\r\n          classes={{\r\n            root: clsx(classes.root, classes.infoRoot),\r\n          }}\r\n          icon={<InfoOutline />}\r\n          text={\r\n            <TypographyCustom skipColor type=\"164\">\r\n              {text}\r\n            </TypographyCustom>\r\n          }\r\n        />\r\n      )\r\n  }\r\n}\r\n\r\nMessageBlock.defaultProps = {\r\n  type: Type.INFO,\r\n}\r\n\r\nMessageBlock.propTypes = {\r\n  // type of message block to display\r\n  type: PropTypes.string,\r\n\r\n  // text to display\r\n  text: PropTypes.string,\r\n}\r\n\r\nconst MessageBlockComponent = withStyles(styles)(MessageBlock)\r\n\r\nMessageBlockComponent.Type = Type\r\n\r\nexport default MessageBlockComponent\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport Input, { InputLabel, InputAdornment } from '../Input'\r\nimport TextField from '../TextField'\r\nimport { FormHelperText } from 'pmt-ui/Form'\r\nimport IconButton from '../IconButton'\r\nimport Visibility from '../svg-icons/action/visibility'\r\nimport VisibilityOff from '../svg-icons/action/visibility-off'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { makeStyles, withStyles } from 'pmt-ui/styles'\r\n\r\nimport HibpPasswordRangeContainer from 'pmt-modules/hibp/container/HibpPasswordRangeContainer'\r\n\r\n//could be dynamically imported if we want to reduce the bundle size\r\nimport MessageBlock from 'app/components/MessageBlock'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    marginTop: theme.spacing(2),\r\n  },\r\n}))\r\n\r\nconst HibpPasswordView = ({\r\n  password,\r\n  pwnedText,\r\n  displayIsSecureMessage = true,\r\n  displayCheckSecure = true,\r\n  minPasswordLength = 8,\r\n}) => {\r\n  const classes = useStyles()\r\n\r\n  // Kiosk doesn't need HIBP here, and thus, not message block either\r\n\r\n  return (\r\n    <HibpPasswordRangeContainer password={password}>\r\n      {({ isPwned, isFetching }) => {\r\n        if (isFetching) {\r\n          if (displayCheckSecure && !process.env.FEATURE_KIOSK) {\r\n            return (\r\n              <MessageBlock\r\n                classes={{ root: classes.root }}\r\n                type={MessageBlock.Type.INFO}\r\n                text={tr('security.hibp.pwned.checking')}\r\n              />\r\n            )\r\n          }\r\n          return null\r\n        }\r\n\r\n        if (isPwned && !process.env.FEATURE_KIOSK) {\r\n          return (\r\n            <MessageBlock\r\n              classes={{ root: classes.root }}\r\n              type={MessageBlock.Type.WARNING}\r\n              text={pwnedText}\r\n            />\r\n          )\r\n        }\r\n\r\n        const isTooSmall = isEmpty(password) || password.length < minPasswordLength\r\n        if (displayIsSecureMessage && !isTooSmall && !process.env.FEATURE_KIOSK) {\r\n          return (\r\n            <MessageBlock\r\n              classes={{ root: classes.root }}\r\n              type={MessageBlock.Type.INFO}\r\n              text={tr('security.hibp.pwned.is_secure')}\r\n            />\r\n          )\r\n        }\r\n        return null\r\n      }}\r\n    </HibpPasswordRangeContainer>\r\n  )\r\n}\r\n\r\nconst securityStyles = theme => ({\r\n  helperTextInfo: {\r\n    color: `${theme.pmt.status.info} !important`,\r\n  },\r\n  helperTextWarning: {\r\n    color: `${theme.pmt.status.warning} !important`,\r\n  },\r\n  notchedOutlineInfo: {\r\n    borderColor: `${theme.pmt.status.info} !important`,\r\n  },\r\n  notchedOutlineWarning: {\r\n    borderColor: `${theme.pmt.status.warning} !important`,\r\n  },\r\n})\r\n\r\nclass PasswordField extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // we don't think we can have > 10 password fields on a same page, so this should work\r\n    this.key = Math.random() * 100 + 1\r\n  }\r\n\r\n  state = {\r\n    showPassword: false,\r\n  }\r\n\r\n  handleClickShowPassword = () => {\r\n    this.setState({\r\n      showPassword: !this.state.showPassword,\r\n    })\r\n  }\r\n\r\n  // Handle field change event, pass name and value to the onChange callback.\r\n  handleChange = event => {\r\n    this.props.onChange(event)\r\n  }\r\n\r\n  //compute which message/color to display in place of the regular helperText,\r\n  getSecurityHelperState = ({ isPwned, isFetching }) => {\r\n    const { classes, helperText, error, value, minPasswordLength = 8 } = this.props\r\n\r\n    if (error && helperText) {\r\n      return { helperText, helperTextClassName: null, outlineClassName: null }\r\n    }\r\n\r\n    if (process.env.FEATURE_KIOSK) {\r\n      return { helperText, helperTextClassName: null, outlineClassName: null }\r\n    }\r\n\r\n    if (isFetching) {\r\n      return {\r\n        helperText: tr('security.hibp.pwned.checking'),\r\n        helperTextClassName: classes.helperTextInfo,\r\n        outlineClassName: null,\r\n      }\r\n    }\r\n\r\n    if (isPwned) {\r\n      return {\r\n        helperText: tr('security.hibp.pwned.should_choose_another'),\r\n        helperTextClassName: classes.helperTextWarning,\r\n        outlineClassName: classes.notchedOutlineWarning,\r\n      }\r\n    }\r\n\r\n    const isTooSmall = isEmpty(value) || value.length < minPasswordLength\r\n    if (!isTooSmall) {\r\n      return {\r\n        helperText: tr('security.hibp.pwned.is_secure'),\r\n        helperTextClassName: classes.helperTextInfo,\r\n        outlineClassName: classes.notchedOutlineInfo,\r\n      }\r\n    }\r\n\r\n    return { helperText, helperTextClassName: null, outlineClassName: null }\r\n  }\r\n\r\n  renderOutlinedTextField = ({ helperText, helperTextClassName, outlineClassName } = {}) => {\r\n    const {\r\n      label,\r\n      value,\r\n      name,\r\n      fullWidth,\r\n      disabled,\r\n      error,\r\n      startAdornment,\r\n      helperText: _rawHelperText,\r\n      classes: _classes,\r\n      checkSecurity: _checkSecurity,\r\n      variant: _variant,\r\n      minPasswordLength: _minPasswordLength,\r\n      ...props\r\n    } = this.props\r\n\r\n    const key = `adornment-password_${this.key}`\r\n\r\n    const visibilityToggle = (\r\n      <InputAdornment position=\"end\">\r\n        <IconButton\r\n          aria-label=\"Toggle password visibility\"\r\n          onClick={this.handleClickShowPassword}\r\n        >\r\n          {this.state.showPassword ? <Visibility /> : <VisibilityOff />}\r\n        </IconButton>\r\n      </InputAdornment>\r\n    )\r\n\r\n    return (\r\n      <TextField\r\n        variant=\"outlined\"\r\n        id={key}\r\n        name={name}\r\n        label={label}\r\n        type={this.state.showPassword ? 'text' : 'password'}\r\n        value={value}\r\n        fullWidth={fullWidth || false}\r\n        disabled={disabled || false}\r\n        error={error}\r\n        helperText={helperText}\r\n        FormHelperTextProps={helperTextClassName ? { className: helperTextClassName } : undefined}\r\n        InputProps={{\r\n          startAdornment,\r\n          endAdornment: visibilityToggle,\r\n          classes: outlineClassName ? { notchedOutline: outlineClassName } : undefined,\r\n        }}\r\n        onChange={this.handleChange}\r\n        {...props}\r\n      />\r\n    )\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      value,\r\n      className,\r\n      helperText,\r\n      classes,\r\n      checkSecurity = false,\r\n      variant,\r\n      startAdornment,\r\n      minPasswordLength,\r\n      ...props\r\n    } = this.props\r\n\r\n    const key = `adornment-password_${this.key}`\r\n\r\n    const visibilityToggle = (\r\n      <InputAdornment position=\"end\">\r\n        <IconButton\r\n          aria-label=\"Toggle password visibility\"\r\n          onClick={this.handleClickShowPassword}\r\n        >\r\n          {this.state.showPassword ? <Visibility /> : <VisibilityOff />}\r\n        </IconButton>\r\n      </InputAdornment>\r\n    )\r\n\r\n    if (variant === 'outlined') {\r\n      if (checkSecurity) {\r\n        return (\r\n          <div className={className}>\r\n            <HibpPasswordRangeContainer password={value}>\r\n              {hibpState => this.renderOutlinedTextField(this.getSecurityHelperState(hibpState))}\r\n            </HibpPasswordRangeContainer>\r\n          </div>\r\n        )\r\n      }\r\n\r\n      return <div className={className}>{this.renderOutlinedTextField({ helperText })}</div>\r\n    }\r\n\r\n    return (\r\n      <div className={className}>\r\n        <InputLabel htmlFor={key}>{this.props.label}</InputLabel>\r\n        <Input\r\n          id={key}\r\n          name={this.props.name}\r\n          type={this.state.showPassword ? 'text' : 'password'}\r\n          value={value}\r\n          fullWidth={this.props.fullWidth || false}\r\n          disabled={this.props.disabled || false}\r\n          onChange={this.handleChange}\r\n          startAdornment={startAdornment}\r\n          endAdornment={visibilityToggle}\r\n          {...props}\r\n        />\r\n        {helperText && <FormHelperText>{helperText}</FormHelperText>}\r\n        {checkSecurity && (\r\n          <HibpPasswordView\r\n            password={value}\r\n            pwnedText={tr('security.hibp.pwned.should_choose_another')}\r\n          />\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(securityStyles)(PasswordField)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { generateUUID } from 'pmt-utils/uuid'\r\nimport Menu from '@material-ui/core/Menu'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\n\r\nclass MenuView extends React.Component {\r\n  state = {\r\n    anchorEl: null,\r\n    id: generateUUID(),\r\n  }\r\n\r\n  handleClick = event => {\r\n    this.setState({ anchorEl: event.currentTarget })\r\n  }\r\n\r\n  handleClose = () => {\r\n    this.setState({ anchorEl: null })\r\n  }\r\n\r\n  render() {\r\n    const { anchorEl } = this.state\r\n    const { children, button } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {React.cloneElement(button, {\r\n          'aria-owns': anchorEl ? this.state.id : null,\r\n          'aria-haspopup': 'true',\r\n          onClick: this.handleClick,\r\n        })}\r\n        <Menu\r\n          id={this.state.id}\r\n          anchorEl={anchorEl}\r\n          open={Boolean(anchorEl)}\r\n          onClose={this.handleClose}\r\n        >\r\n          {children({\r\n            onClose: this.handleClose,\r\n          })}\r\n        </Menu>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nMenuView.propTypes = {\r\n  button: PropTypes.node.isRequired,\r\n}\r\n\r\nMenuView.MenuItem = MenuItem\r\n\r\nexport default MenuView\r\n","export default \"__VITE_ASSET__B1U7nfPf__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ae'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300732f'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='red'%20d='M0%200h220v480H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__85xt6jpi__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ag'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ag-a'%3e%3cpath%20fill-opacity='.7'%20d='M-79.7%200H603v512H-79.7z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23ag-a)'%20transform='translate(74.7)scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M-79.7%200H603v512H-79.7z'/%3e%3cpath%20fill='%23000001'%20d='M-79.6%200H603v204.8H-79.7z'/%3e%3cpath%20fill='%230072c6'%20d='M21.3%20203.2h480v112h-480z'/%3e%3cpath%20fill='%23ce1126'%20d='M603%20.1V512H261.6L603%200zM-79.7.1V512h341.3L-79.7%200z'/%3e%3cpath%20fill='%23fcd116'%20d='M440.4%20203.3%20364%20184l64.9-49-79.7%2011.4%2041-69.5-70.7%2041L332.3%2037l-47.9%2063.8-19.3-74-21.7%2076.3-47.8-65%2013.7%2083.2L138.5%2078l41%2069.5-77.4-12.5%2063.8%2047.8L86%20203.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-ai'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='ai-b'%20fill='%23f90'%20d='M271%2087c1.5%203.6%206.5%207.6%207.8%209.6-1.7%202-2%201.8-1.8%205.4%203-3.1%203-3.5%205-3%204.2%204.2.8%2013.3-2.8%2015.3-3.4%202.1-2.8%200-8%202.6%202.3%202%205.1-.3%207.4.3%201.2%201.5-.6%204.1.4%206.7%202-.2%201.8-4.3%202.2-5.8%201.5-5.4%2010.4-9.1%2010.8-14.1%201.9-.9%203.7-.3%206%201-1.1-4.6-4.9-4.6-5.9-6-2.4-3.7-4.5-7.8-9.6-9-3.8-.7-3.5.3-6-1.4-1.6-1.2-6.3-3.4-5.5-1.6'/%3e%3c/defs%3e%3cclipPath%20id='ai-a'%3e%3cpath%20d='M0%200v120h373.3v120H320zm320%200H160v280H0v-40z'/%3e%3c/clipPath%3e%3cpath%20fill='%23012169'%20d='M0%200h640v480H0z'/%3e%3cpath%20stroke='%23fff'%20stroke-width='50'%20d='m0%200%20320%20240m0-240L0%20240'/%3e%3cpath%20stroke='%23c8102e'%20stroke-width='30'%20d='m0%200%20320%20240m0-240L0%20240'%20clip-path='url(%23ai-a)'/%3e%3cpath%20stroke='%23fff'%20stroke-width='75'%20d='M160%200v280M0%20120h373.3'/%3e%3cpath%20stroke='%23c8102e'%20stroke-width='50'%20d='M160%200v280M0%20120h373.3'/%3e%3cpath%20fill='%23012169'%20d='M0%20240h320V0h106.7v320H0z'/%3e%3cpath%20fill='%23fff'%20d='M424%20191.8c0%2090.4%209.7%20121.5%2029.3%20142.5a179.4%20179.4%200%200%200%2035%2030%20179.7%20179.7%200%200%200%2035-30c19.5-21%2029.3-52.1%2029.3-142.5-14.2%206.5-22.3%209.7-34%209.5a78.4%2078.4%200%200%201-30.3-9.5%2078.4%2078.4%200%200%201-30.3%209.5c-11.7.2-19.8-3-34-9.5'/%3e%3cg%20transform='matrix(1.96%200%200%202.002%20-40.8%2062.9)'%3e%3cuse%20xlink:href='%23ai-b'/%3e%3ccircle%20cx='281.3'%20cy='91.1'%20r='.8'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/g%3e%3cg%20transform='matrix(-.916%20-1.77%201.733%20-.935%20563.4%20829)'%3e%3cuse%20xlink:href='%23ai-b'/%3e%3ccircle%20cx='281.3'%20cy='91.1'%20r='.8'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/g%3e%3cg%20transform='matrix(-1.01%201.716%20-1.68%20-1.031%20925.4%20-103.2)'%3e%3cuse%20xlink:href='%23ai-b'/%3e%3ccircle%20cx='281.3'%20cy='91.1'%20r='.8'%20fill='%23fff'%20fill-rule='evenodd'/%3e%3c/g%3e%3cpath%20fill='%239cf'%20d='M440%20315.1a78%2078%200%200%200%2013.3%2019.2%20179.4%20179.4%200%200%200%2035%2030%20180%20180%200%200%200%2035-30%2078%2078%200%200%200%2013.2-19.2z'/%3e%3cpath%20fill='%23fdc301'%20d='M421.2%20188.2c0%2094.2%2010.2%20126.6%2030.6%20148.5a187%20187%200%200%200%2036.5%2031.1%20186.3%20186.3%200%200%200%2036.4-31.1c20.4-21.9%2030.6-54.3%2030.6-148.5-14.8%206.8-23.3%2010.1-35.5%2010-11-.3-22.6-5.7-31.5-10-9%204.3-20.6%209.7-31.5%2010-12.3.1-20.7-3.2-35.6-10m4%205c14%206.5%2022%209.6%2033.5%209.4a76.4%2076.4%200%200%200%2029.6-9.4c8.4%204%2019.3%209.2%2029.6%209.4%2011.5.2%2019.4-3%2033.4-9.4%200%2089-9.6%20119.6-28.8%20140.2a176%20176%200%200%201-34.2%2029.4%20175.6%20175.6%200%200%201-34.3-29.4c-19.2-20.6-28.7-51.3-28.7-140.2z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BdaKJLV4__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-am'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23d90012'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%230033a0'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23f2a800'%20d='M0%20320h640v160H0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ao'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='red'%20d='M0%200h640v243.6H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20236.4h640V480H0z'/%3e%3c/g%3e%3cpath%20fill='%23ffec00'%20fill-rule='evenodd'%20d='M228.7%20148.2c165.2%2043.3%2059%20255.6-71.3%20167.2l-8.8%2013.6c76.7%2054.6%20152.6%2010.6%20174-46.4%2022.2-58.8-7.6-141.5-92.6-150z'/%3e%3cpath%20fill='%23ffec00'%20fill-rule='evenodd'%20d='m170%20330.8%2021.7%2010.1-10.2%2021.8-21.7-10.2zm149-99.5h24v24h-24zm-11.7-38.9%2022.3-8.6%208.7%2022.3-22.3%208.7zm-26-29.1%2017.1-16.9%2016.9%2017-17%2016.9zm-26.2-39.8%2022.4%208.4-8.5%2022.4-22.4-8.4zM316%20270l22.3%208.9-9%2022.2-22.2-8.9zm-69.9%2070%2022-9.3%209.5%2022-22%209.4zm-39.5%202.8h24v24h-24zm41.3-116-20.3-15-20.3%2014.6%208-23-20.3-15h24.5l8.5-22.6%207.8%2022.7%2024.7-.3-19.6%2015.3z'/%3e%3cpath%20fill='%23fe0'%20fill-rule='evenodd'%20d='M336%20346.4c-1.2.4-6.2%2012.4-9.7%2018.2l3.7%201c13.6%204.8%2020.4%209.2%2026.2%2017.5a7.9%207.9%200%200%200%2010.2.7s2.8-1%206.4-5c3-4.5%202.2-8-1.4-11.1-11-8-22.9-14-35.4-21.3'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M365.3%20372.8a4.3%204.3%200%201%201-8.7%200%204.3%204.3%200%200%201%208.6%200zm-21.4-13.6a4.3%204.3%200%201%201-8.7%200%204.3%204.3%200%200%201%208.7%200m10.9%207a4.3%204.3%200%201%201-8.7%200%204.3%204.3%200%200%201%208.7%200'/%3e%3cpath%20fill='%23fe0'%20fill-rule='evenodd'%20d='M324.5%20363.7c-42.6-24.3-87.3-50.5-130-74.8-18.7-11.7-19.6-33.4-7-49.9%201.2-2.3%202.8-1.8%203.4-.5%201.5%208%206%2016.3%2011.4%2021.5A5288%205288%200%200%201%20334%20345.6c-3.4%205.8-6%2012.3-9.5%2018z'/%3e%3cpath%20fill='%23ffec00'%20fill-rule='evenodd'%20d='m297.2%20305.5%2017.8%2016-16%2017.8-17.8-16z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='3'%20d='m331.5%20348.8-125-75.5m109.6%2058.1L274%20304.1m18.2%2042.7L249.3%20322'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-aq'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%233a7dce'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M157.7%20230.8c-3.5-7.8-3.5-7.8-3.5-15.6-1.8%200-2%20.3-3%200-1.1-.3-1.5%207.2-4.8%205.8-.5-.8%202.4-6.2-.7-8.5-1-.7.2-5.2-.2-7.2%200%200-4%202.4-7-5.8-1.5-2.2-3.5%202-3.5%202s.9%202.4-.7%203c-2.2-1.8-3.9-.8-6.7-3.4-2.8-2.5.6-5.4-4.8-7.5%203.5-9.8%203.5-7.9%2012.2-11.8-5.2-4-5.2-4-8.7-9.8-5.2-2-7-4-12.2-7.8-7-9.9-10.5-29.5-10.5-43.2%204.4-4.6%2010.5%2015.7%2019.2%2021.6l12.2%205.9c7%203.9%208.7%207.8%2014%2011.7l15.6%206c7%205.8%2010.5%2013.6%2015.7%2015.6%205.7%200%206.8-3.7%208.6-3.9%2010.3-.6%2015.5-2%2017.5-5.5%202.1-2.8%207%201.6%2021-4.3l-1.7-7.9s3.7-3.4%208.7-2c-.1-3.5-.5-13%204.5-17.4-3-3.5%201.8-9%202-10.7-1.4-8.6%201.4-8.7%202-11.3.6-2.5-2.4-1.7-1.6-5.2.9-3.5%206-4.3%206.6-7.2.7-2.9-1.1-14.3-1.3-16.8%209.4-2.8%2012.4-11.4%2015.7-7.8C264%2070%20265.8%2066%20276.3%2066c1.4-3.6-3.9-6.7-1.8-7.9%203.5-.5%206.1-.2%2010.2%205.7%201.3%202%201.6-2.7%202.9-3.2%201.3-.5%204.4-.5%204.9-2.8.5-2.4%201.2-5.6%203-9.5%201.4-3.2%202.5%201.3%203.8%207.5%207.4.3%2024%202.1%2031%204.3%205.2%201.5%208.7-1.5%2013.7-2.2%203.7%204.2%207.2%201%209.2%2010%202.7%204.8%207.3.4%208.3%201.8%205.8%2018.1%2025.8%205.9%2027.4%206.2%202.5%200%205.6%208%207.7%207.9%203.2-.6%202.3-3.1%205.2-2.1-.8%206.8%205.6%2014.6%205.6%2019.7%200%200%201.5.9%203-.6%201.4-1.6%202.7-5.4%204-5.3%203%20.5%2022%206%2025.8%207.9%201.7%203.5%203.3%205.3%206.8%204.7%202.8%202.1.8%205%202.4%205.1%203.5-2%204.7-4%208.2-2.1%203.5%202%207%205.9%208.7%209.8%200%202-1.8%209.8%200%2021.6.9%203.9%209.7%2032.3%209.7%2035.2%200%204-2.7%206-4.5%209.9%207%205.9%200%2015.7-3.5%2021.6%2026.2%205.9%2014%2017.6%2034.9%2011.7-5.2%2013.8-3.4%2012.7%201.8%2026.4-10.4%207.8-.2%2010.2-7.1%2020-.5.7%204.1%208.6%2010.5%208.6-1.7%2015.6-7%209.8-5.2%2033.3-13.7-.3-8.2%2017.6-17.4%2015.7.5%2011.2%205.2%2012.2%203.4%2023.5-7%202-7%202-10.4%207.9l-5.2-2c-1.8%209.8-5.3%2011.8%200%2021.6%200%200-6.8.2-8.8%200-.1%203.4%203%204.3%203.5%207.8-.2%201.4-9.9%207.6-17.4%207.9-2%204.8%205.2%2010%204.8%2012.4-8.2%201.8-11.8%2013-11.8%2013s4.2%202%203.5%204c-2.2-1.8-3.5-2-7-2-1.7.5-6%200-10%207.7-4.5%201.6-6.6%201-10%206-1.5-4.7-3.7.1-6.3%202-2.7%201.8-6.2%206.5-6.7%206.3.1-1.4%201.6-6.3%201.6-6.3L399%20437c-.7.1-.5-5.7-2.2-5.5-1.7.2-6.4%207.3-8%207.5-1.6.2-2.1-2.2-3.5-2-1.4.2-4%207.5-5%207.7-1%20.1-5-4.5-8.3-3.8-17.1%206.8-19.9-13.4-22.5-2-3.6-2.2-3-1-6.7.1-2.3.7-2.5-3.4-4.6-3.4-4.1.2-4%204.6-6.2%203.3-1.8-9.2-13-7.6-14-11.5-1-4%204.8-4%206.6-6.8%201.4-4-1.5-5.6%204.3-9.4%207.5-5.7%206.8-19.8%204.9-25.3%200%200-5.9-17.7-7-17.7-3.5-1-3.5%206.5-8.6%208.6-10.5%204-29-9.9-32.2-9.9-2.9%200-16.5%203.6-16-4-2%207.4-9.5%201.7-10%201.7-7%200-4.3%206.1-9%205.9-2.1-.8-23.6-2.3-23.6-2.3v4l-26.1-11.8c-10.5-4-5.3-13.7-22.7-7.8v-11.8h-8.7c3.5-23.6%200-11.8-1.8-33.4l-7%202c-7-10.6%209.8-8.6-5.2-15.7%200%200%20.3-11.7-3.5-7.8-.7.5%201.8%205.8%201.8%205.8-14-2-17.4-5.8-17.4-21.5%200%200%2011.4%201.8%2010.4%200-1.6-3-3.7-22-3.4-23.4-.1-2.6%2010.7-9%208.6-15.2%201.4-.6%205.3-.7%205.3-.7'/%3e%3cpath%20fill='none'%20stroke='%23fff'%20stroke-linejoin='round'%20stroke-width='2.5'%20d='M595.5%20297.6c-.6%201.3-.5%202.6.1%203.6%201.1-1.7.2-2.4%200-3.6zm-476-149.4s-3-.4-2.4%202.3c1-2%202.3-2.2%202.4-2.3zm-.3-6.4c-1.7%200-3.8-.2-3%202.5%201-2.1%203-2.4%203-2.5zm12.7%2036.3s2.6-.2%202%202.5c-1-2-2-2.4-2-2.5z'%20transform='scale(.86021%20.96774)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-ar'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2374acdf'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cg%20id='c'%20transform='translate(-64)%20scale(.96)'%3e%3cpath%20id='a'%20fill='%23f6b40e'%20stroke='%2385340a'%20stroke-width='1.1'%20d='m396.8%20251.3%2028.5%2062s.5%201.2%201.3.9c.8-.4.3-1.5.3-1.5l-23.7-64m-.7%2024.1c-.4%209.4%205.4%2014.6%204.7%2023-.8%208.5%203.8%2013.2%205%2016.5%201%203.3-1.3%205.2-.3%205.7s3-2.1%202.4-6.8c-.7-4.6-4.2-6-3.4-16.3.8-10.3-4.2-12.7-3-22'/%3e%3cuse%20xlink:href='%23a'%20width='100%25'%20height='100%25'%20transform='rotate(22.5%20400%20250)'/%3e%3cuse%20xlink:href='%23a'%20width='100%25'%20height='100%25'%20transform='rotate(45%20400%20250)'/%3e%3cuse%20xlink:href='%23a'%20width='100%25'%20height='100%25'%20transform='rotate(67.5%20400%20250)'/%3e%3cpath%20id='b'%20fill='%2385340a'%20d='M404.3%20274.4c.5%209%205.6%2013%204.6%2021.3%202.2-6.5-3.1-11.6-2.8-21.2m-7.7-23.8%2019.5%2042.6-16.3-43.9'/%3e%3cuse%20xlink:href='%23b'%20width='100%25'%20height='100%25'%20transform='rotate(22.5%20400%20250)'/%3e%3cuse%20xlink:href='%23b'%20width='100%25'%20height='100%25'%20transform='rotate(45%20400%20250)'/%3e%3cuse%20xlink:href='%23b'%20width='100%25'%20height='100%25'%20transform='rotate(67.5%20400%20250)'/%3e%3c/g%3e%3cuse%20xlink:href='%23c'%20width='100%25'%20height='100%25'%20transform='rotate(90%20320%20240)'/%3e%3cuse%20xlink:href='%23c'%20width='100%25'%20height='100%25'%20transform='rotate(180%20320%20240)'/%3e%3cuse%20xlink:href='%23c'%20width='100%25'%20height='100%25'%20transform='rotate(-90%20320%20240)'/%3e%3ccircle%20cx='320'%20cy='240'%20r='26.7'%20fill='%23f6b40e'%20stroke='%2385340a'%20stroke-width='1.4'/%3e%3cpath%20id='h'%20fill='%23843511'%20d='M329.1%20234.3c-1.8%200-3.6.8-4.6%202.4%202%201.9%206.6%202%209.7-.2a7%207%200%200%200-5.1-2.2zm0%20.4c1.7%200%203.4.8%203.6%201.6-2%202.3-5.3%202-7.4.4a4.3%204.3%200%200%201%203.8-2z'/%3e%3cuse%20xlink:href='%23d'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640.2%200)'/%3e%3cuse%20xlink:href='%23e'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640.2%200)'/%3e%3cuse%20xlink:href='%23f'%20width='100%25'%20height='100%25'%20transform='translate(18.1)'/%3e%3cuse%20xlink:href='%23g'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640.2%200)'/%3e%3cpath%20fill='%2385340a'%20d='M316%20243.7a1.9%201.9%200%201%200%201.8%202.9%204%204%200%200%200%202.2.6h.2a3.9%203.9%200%200%200%202.3-.6%201.9%201.9%200%201%200%201.8-3c.5.3.8.7.8%201.3%200%20.6-.5%201.2-1.2%201.2a1.2%201.2%200%200%201-1.2-1.2%203%203%200%200%201-2.6%201.7%203%203%200%200%201-2.5-1.7%201.2%201.2%200%200%201-1.3%201.2c-.6%200-1.2-.6-1.2-1.2s.3-1%20.8-1.2zm2%205.5c-2.1%200-3%201.8-4.8%203%201-.4%201.9-1.2%203.3-2s2.7.2%203.5.2c.8%200%202-1%203.5-.2%201.4.8%202.3%201.6%203.3%202-1.9-1.2-2.7-3-4.8-3a5.5%205.5%200%200%200-2%20.6%205.5%205.5%200%200%200-2-.7z'/%3e%3cpath%20fill='%2385340a'%20d='M317.2%20251.6c-.8%200-1.8.2-3.4.6%203.7-.8%204.5.5%206.2.5%201.6%200%202.4-1.3%206.1-.5-4-1.2-4.9-.4-6.1-.4-.8%200-1.4-.3-2.8-.2z'/%3e%3cpath%20fill='%2385340a'%20d='M314%20252.2h-.8c4.3.5%202.3%203%206.8%203s2.5-2.5%206.8-3c-4.5-.4-3.1%202.3-6.8%202.3-3.5%200-2.4-2.3-6-2.3zm9.7%206.7a3.7%203.7%200%200%200-7.4%200%203.8%203.8%200%200%201%207.4%200z'/%3e%3cpath%20id='e'%20fill='%2385340a'%20d='M303.4%20234.3c4.7-4.1%2010.7-4.8%2014-1.7a8%208%200%200%201%201.5%203.5c.4%202.3-.3%204.8-2.1%207.4l.8.4a14.6%2014.6%200%200%200%201.6-9.4%2013.3%2013.3%200%200%200-.6-2.3c-4.5-3.7-10.7-4-15.2%202z'/%3e%3cpath%20id='d'%20fill='%2385340a'%20d='M310.8%20233c2.7%200%203.3.7%204.5%201.7%201.2%201%201.9.8%202%201%20.3.2%200%20.8-.3.6-.5-.2-1.3-.6-2.5-1.6s-2.5-1-3.7-1c-3.7%200-5.7%203-6.2%202.8-.3-.2%202.1-3.5%206.2-3.5z'/%3e%3cuse%20xlink:href='%23h'%20width='100%25'%20height='100%25'%20transform='translate(-18.4)'/%3e%3ccircle%20id='f'%20cx='310.9'%20cy='236.3'%20r='1.9'%20fill='%2385340a'/%3e%3cpath%20id='g'%20fill='%2385340a'%20d='M305.9%20237.5c3.5%202.7%207%202.5%209%201.3%202-1.3%202-1.7%201.6-1.7-.4%200-.8.4-2.4%201.3-1.7.8-4.1.8-8.2-.9z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__4aApqlNk__\"","export default \"__VITE_ASSET__D2TcaFgd__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-at'%3e%3cg%20fillRule='evenodd'%3e%3cpath%20fill='%23fff'%20d='M640%20480H0V0h640z'/%3e%3cpath%20fill='%23df0000'%20d='M640%20480H0V319.997h640zm0-319.875H0V.122h640z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-au'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300008B'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='red'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='red'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3cpath%20fill='%23fff'%20d='m527%20396.7-20.5%202.6%202.2%2020.5-14.8-14.4-14.7%2014.5%202-20.5-20.5-2.4%2017.3-11.2-10.9-17.5%2019.6%206.5%206.9-19.5%207.1%2019.4%2019.5-6.7-10.7%2017.6zm-3.7-117.2%202.7-13-9.8-9%2013.2-1.5%205.5-12.1%205.5%2012.1%2013.2%201.5-9.8%209%202.7%2013-11.6-6.6zm-104.1-60-20.3%202.2%201.8%2020.3-14.4-14.5-14.8%2014.1%202.4-20.3-20.2-2.7%2017.3-10.8-10.5-17.5%2019.3%206.8L387%20178l6.7%2019.3%2019.4-6.3-10.9%2017.3%2017.1%2011.2ZM623%20186.7l-20.9%202.7%202.3%2020.9-15.1-14.7-15%2014.8%202.1-21-20.9-2.4%2017.7-11.5-11.1-17.9%2020%206.7%207-19.8%207.2%2019.8%2019.9-6.9-11%2018zm-96.1-83.5-20.7%202.3%201.9%2020.8-14.7-14.8-15.1%2014.4%202.4-20.7-20.7-2.8%2017.7-11L467%2073.5l19.7%206.9%207.3-19.5%206.8%2019.7%2019.8-6.5-11.1%2017.6zM234%20385.7l-45.8%205.4%204.6%2045.9-32.8-32.4-33%2032.2%204.9-45.9-45.8-5.8%2038.9-24.8-24-39.4%2043.6%2015%2015.8-43.4%2015.5%2043.5%2043.7-14.7-24.3%2039.2%2038.8%2025.1Z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DA2RSJsI__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ax'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ax-a'%3e%3cpath%20fill-opacity='.7'%20d='M106.3%200h1133.3v850H106.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23ax-a)'%20transform='matrix(.56472%200%200%20.56482%20-60%20-.1)'%3e%3cpath%20fill='%230053a5'%20d='M0%200h1300v850H0z'/%3e%3cg%20fill='%23ffce00'%3e%3cpath%20d='M400%200h250v850H400z'/%3e%3cpath%20d='M0%20300h1300v250H0z'/%3e%3c/g%3e%3cg%20fill='%23d21034'%3e%3cpath%20d='M475%200h100v850H475z'/%3e%3cpath%20d='M0%20375h1300v100H0z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-az'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%233f9c35'%20d='M.1%200h640v480H.1z'/%3e%3cpath%20fill='%23ed2939'%20d='M.1%200h640v320H.1z'/%3e%3cpath%20fill='%2300b9e4'%20d='M.1%200h640v160H.1z'/%3e%3ccircle%20cx='304'%20cy='240'%20r='72'%20fill='%23fff'/%3e%3ccircle%20cx='320'%20cy='240'%20r='60'%20fill='%23ed2939'/%3e%3cpath%20fill='%23fff'%20d='m384%20200%207.7%2021.5%2020.6-9.8-9.8%2020.7L424%20240l-21.5%207.7%209.8%2020.6-20.6-9.8L384%20280l-7.7-21.5-20.6%209.8%209.8-20.6L344%20240l21.5-7.7-9.8-20.6%2020.6%209.8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ba'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-85.333%200h682.67v512h-682.67z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23a)'%20transform='translate(80)%20scale(.9375)'%20fillRule='evenodd'%3e%3cpath%20fill='%23009'%20d='M-85.333%200h682.67v512h-682.67V0z'/%3e%3cpath%20fill='%23FC0'%20d='M56.489%200l510.978%20512.267v-512L56.489%200z'/%3e%3cpath%20fill='%23FFF'%20d='M439.883%20481.532l-27.865-20.359-28.639%2020.261%2010.828-33.243-28.18-20.528%2034.914.071%2010.855-33.192%2010.725%2033.233%2034.923.099-27.942%2020.657%2010.381%2033.001zm81.294%2010.343l-34.923-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.261%2027.865%2020.359-10.38-33%2027.941-20.658zM365.636%20384.666l27.942-20.657-34.923-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.261%2027.865%2020.359-10.381-33.001zm-64.355-64.445l27.942-20.657-34.923-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.261%2027.865%2020.359-10.381-33.001zm-63.645-63.644l27.941-20.658-34.922-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.263%2027.865%2020.36-10.381-32.999zm-64.445-64.267l27.941-20.658-34.922-.099-10.725-33.233-10.855%2033.192-34.914-.071%2028.18%2020.528-10.828%2033.243%2028.639-20.262%2027.865%2020.36-10.381-33zm-63.644-63.912l27.941-20.658-34.922-.099L91.84%2074.408%2080.985%20107.6l-34.914-.071%2028.18%2020.528L63.423%20161.3l28.639-20.262%2027.865%2020.36-10.38-33zm-64-64L73.488%2043.74l-34.922-.099L27.84%2010.408%2016.985%2043.6l-34.914-.071%2028.18%2020.528L-.576%2097.3l28.639-20.262%2027.865%2020.36-10.381-33zm-64-64L9.488-20.259l-34.922-.099-10.726-33.234L-47.015-20.4l-34.914-.071L-53.749.057-64.576%2033.3l28.639-20.263%2027.865%2020.36L-18.453.398z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-bb'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300267f'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23ffc726'%20d='M213.3%200h213.4v480H213.3z'/%3e%3cpath%20id='bb-a'%20fill='%23000001'%20d='M319.8%20135.5c-7%2019-14%2038.6-29.2%2053.7%204.7-1.6%2013-3%2018.2-2.8v79.5l-22.4%203.3c-.8%200-1-1.3-1-3-2.2-24.7-8-45.5-14.8-67-.5-2.9-9-14-2.4-12%20.8%200%209.5%203.6%208.2%201.9a85%2085%200%200%200-46.4-24c-1.5-.3-2.4.5-1%202.2%2022.4%2034.6%2041.3%2075.5%2041.1%20124%208.8%200%2030-5.2%2038.7-5.2v56.1H320l2.5-156.7z'/%3e%3cuse%20xlink:href='%23bb-a'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20639.5%200)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bd'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23006a4e'%20d='M0%200h640v480H0z'/%3e%3ccircle%20cx='280'%20cy='240'%20r='160'%20fill='%23f42a41'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-be'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20d='M0%200h213.335v479.997H0z'/%3e%3cpath%20fill='%23ffd90c'%20d='M213.335%200H426.67v479.997H213.335z'/%3e%3cpath%20fill='%23f31830'%20d='M426.67%200h213.335v479.997H426.67z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bf'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23de0000'%20d='M640%20479.6H.4V0H640z'/%3e%3cpath%20fill='%2335a100'%20d='M639.6%20480H0V240.2h639.6z'/%3e%3cpath%20fill='%23fff300'%20d='m254.6%20276.2-106-72.4h131L320%2086.6%20360.4%20204l131-.1-106%2072.4%2040.5%20117.3-106-72.6L214%20393.4'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-bg'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23d62612'%20d='M0%20319.997h640V480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v160.003H0z'/%3e%3cpath%20fill='%2300966e'%20d='M0%20160.003h640v160.003H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bh'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0'/%3e%3cpath%20fill='%23ce1126'%20d='M640%200H96l110.7%2048L96%2096l110.7%2048L96%20192l110.7%2048L96%20288l110.7%2048L96%20384l110.7%2048L96%20480h544'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bi'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='bi-a'%3e%3cpath%20fill-opacity='.7'%20d='M-90.5%200H592v512H-90.5z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23bi-a)'%20transform='translate(84.9)scale(.9375)'%3e%3cpath%20fill='%2318b637'%20d='m-178%200%20428.8%20256L-178%20512zm857.6%200L250.8%20256l428.8%20256z'/%3e%3cpath%20fill='%23cf0921'%20d='m-178%200%20428.8%20256L679.6%200zm0%20512%20428.8-256%20428.8%20256z'/%3e%3cpath%20fill='%23fff'%20d='M679.6%200h-79.9L-178%20464.3V512h79.9L679.6%2047.7z'/%3e%3cpath%20fill='%23fff'%20d='M398.9%20256a148%20148%200%201%201-296.1%200%20148%20148%200%200%201%20296%200z'/%3e%3cpath%20fill='%23fff'%20d='M-178%200v47.7L599.7%20512h79.9v-47.7L-98.1%200z'/%3e%3cpath%20fill='%23cf0921'%20stroke='%2318b637'%20stroke-width='3.9'%20d='m280%20200.2-19.3.3-10%2016.4-9.9-16.4-19.2-.4%209.3-16.9-9.2-16.8%2019.2-.4%2010-16.4%209.9%2016.5%2019.2.4-9.3%2016.8zm-64.6%20111.6-19.2.3-10%2016.4-9.9-16.4-19.2-.4%209.3-16.9-9.2-16.8%2019.2-.4%2010-16.4%209.9%2016.5%2019.2.4-9.3%2016.8zm130.6%200-19.2.3-10%2016.4-10-16.4-19.1-.4%209.3-16.9-9.3-16.8%2019.2-.4%2010-16.4%2010%2016.5%2019.2.4-9.4%2016.8z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bj'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='bj-a'%3e%3cpath%20fill='gray'%20d='M67.6-154h666v666h-666z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23bj-a)'%20transform='matrix(.961%200%200%20.7207%20-65%20111)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23319400'%20d='M0-154h333v666H0z'/%3e%3cpath%20fill='%23ffd600'%20d='M333-154h666v333H333z'/%3e%3cpath%20fill='%23de2110'%20d='M333%20179h666v333H333z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bl'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DHdZBu1Q__\"","export default \"__VITE_ASSET__Byfc_H8D__\"","export default \"__VITE_ASSET__W58mEDTG__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bq'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2321468b'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23ae1c28'%20d='M0%200h640v160H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__gHmFQC5u__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bs'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='bs-a'%3e%3cpath%20fill-opacity='.7'%20d='M-12%200h640v480H-12z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23bs-a)'%20transform='translate(12)'%3e%3cpath%20fill='%23fff'%20d='M968.5%20480h-979V1.8h979z'/%3e%3cpath%20fill='%23ffe900'%20d='M968.5%20344.5h-979V143.3h979z'/%3e%3cpath%20fill='%2308ced6'%20d='M968.5%20480h-979V320.6h979zm0-318.7h-979V2h979z'/%3e%3cpath%20fill='%23000001'%20d='M-11%200c2.3%200%20391.8%20236.8%20391.8%20236.8L-12%20479.2z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__gF2tNH4c__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bv'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='bv-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23bv-a)'%3e%3cpath%20fill='%23fff'%20d='M-28%200h699.7v512H-28z'/%3e%3cpath%20fill='%23d72828'%20d='M-53-77.8h218.7v276.2H-53zM289.4-.6h381v199h-381zM-27.6%20320h190.4v190.3H-27.6zm319.6%202.1h378.3v188.2H292z'/%3e%3cpath%20fill='%23003897'%20d='M196.7-25.4H261v535.7h-64.5z'/%3e%3cpath%20fill='%23003897'%20d='M-27.6%20224.8h698v63.5h-698z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-bw'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%2300cbff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20186h640v108H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BcwpdoD3__\"","export default \"__VITE_ASSET__DppOD_Bw__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ca'%3e%3cg%20transform='translate(74.118)%20scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M81.137%200h362.276v512H81.137z'/%3e%3cpath%20fill='%23bf0a30'%20d='M-100%200H81.138v512H-100zm543.413%200H624.55v512H443.414zM135.31%20247.41l-14.067%204.808%2065.456%2057.446c4.95%2014.764-1.72%2019.116-5.97%2026.86l71.06-9.02-1.85%2071.512%2014.718-.423-3.21-70.918%2071.13%208.432c-4.402-9.297-8.32-14.233-4.247-29.098l65.414-54.426-11.447-4.144c-9.36-7.222%204.044-34.784%206.066-52.178%200%200-38.195%2013.135-40.698%206.262l-9.727-18.685-34.747%2038.17c-3.796.91-5.413-.6-6.304-3.808l16.053-79.766-25.42%2014.297c-2.128.91-4.256.125-5.658-2.355l-24.45-49.06-25.21%2050.95c-1.9%201.826-3.803%202.037-5.382.796l-24.204-13.578%2014.53%2079.143c-1.156%203.14-3.924%204.025-7.18%202.324l-33.216-37.737c-4.345%206.962-7.29%2018.336-13.033%2020.885-5.744%202.387-24.98-4.823-37.873-7.637%204.404%2015.895%2018.176%2042.302%209.46%2050.957z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cc'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='cc-a'%20d='m0-360%2069.4%20215.8%20212-80.3L156-35.6%20351%2080.1%20125%2099.8l31.1%20224.6L0%20160l-156.2%20164.3%2031.1-224.5L-351%2080l195-115.7-125.5-188.9%20212%2080.3z'/%3e%3cpath%20id='cc-b'%20d='M0-210%2054.9-75.5l144.8%2010.6-111%2093.8%2034.7%20141L0%2093.3-123.4%20170l34.6-141-111-93.8%20145-10.6z'/%3e%3c/defs%3e%3cpath%20fill='green'%20d='M0%200h640v480H0z'/%3e%3ccircle%20cx='320'%20cy='240'%20r='66.7'%20fill='%23ffe000'/%3e%3ccircle%20cx='340.8'%20cy='240'%20r='54.9'%20fill='green'/%3e%3ccircle%20cx='109.8'%20cy='173.3'%20r='69.8'%20fill='%23ffe000'/%3e%3cpath%20fill='%23802000'%20stroke='%237b3100'%20stroke-width='1.5'%20d='M105%20226h17.5s.7-1.6-.2-2.4c-1-.8-4.7-1-3.7-3.8%202-5.8%202.4-4%203.7-17.8a739%20739%200%200%200%202-35.5h-2.6s.5%206.7-1%2015.5c-1.4%208.8-1.9%209.5-3.5%2016.3a63.5%2063.5%200%200%201-3.3%2011.2c-1.4%204-1.6%204.1-3.8%207.8-2.3%203.6-1.5%202.2-2.7%204.4-.7%201.1-1.4.8-1.9%201.6-.4.8-.5%202.7-.5%202.7z'/%3e%3cpath%20fill='green'%20d='M118.3%20122.5a23%2023%200%200%201-1.2%209.2%2026.5%2026.5%200%200%200-2.3%209.8c-1.8.6-3.7-3.9-5.5-1.2%201.3%203.7%204.4%206.6%206.4%209.9.4%201%203.4%203.7%201.6%204.3-4.3-1.5-5.4-7-8-10.3a19%2019%200%200%200-15.5-10c-2.5.1-10.4-.5-8.4%203.7%203%202%206.8%203.4%209.8%205.7%202.3.2%206.3%204%206.1%205.4-4-1.6-5.8-3.5-10-5.2-5.8-2.2-13.7-.9-17%204.8-.5%201.5-1.4%205.8.5%206.3%202.2-3.4%205.3-7.3%209.9-6.2%203.6.3-4%206.7-1.1%205.4%201-.4%203-1.8%204.6-2%201.5%200%202.3%201%203.4%201.2%202.3.3%203%201.2%202.7%201.8-.2.6-1%200-3.3.8-1.1.4-1.7%201.4-3%201.9-1.4.4-4.2.5-5.2%200-3.7-1.5-9.7-1.3-10.8%203.3%200%202-1.8-.2-2.6.7-.7%202.2-.8%204.4-4%204.2-2%202-4%204.2-6.6%205.7%201.5%203.4%207.3-3.4%207-.5-2.5%203.5%201.4%204.2%203%201.5%202.9-3%206.5-6.7%2010.7-3.6%202%201.9%203.2-1%204.7-1%201%202.5%202.1.2%203.2-.5%201.7-.2%201.2%202.2%203.2.7%204.1-2.7%209.1-.4%2013.1-3%204.3-2%20.6%201.5-.5%202.9-1.9%203.6-.3%208.4-4.3%2010.6-1.7%204.3%201.9%2010-1.7%2013.2-.5%202%204.6%201.8%206%202.6%202.6%200%200-5.8%202.5-6.6%203.4%202%203.2-3.8%202.5-5.6.4-4%20.6-8.6%202.6-12.3%202.2-4.5%204.2%201.9%201.8%203.7-1.4%204.1-3.4%209.4-.3%2013.3%201%20.2%201.7%202.4%202.8%203%201.2.7%202.8-.1%203-2.1%201.6-6%20.8-12.4%203-18.3%201.5-1.8%203.6-.3%204.5%201.4%203%203.5%205.1%207.8%208.7%2010.7a15%2015%200%200%201%207.8%207.3c0%202.6%207.4%203%205.2%200-2.1-2.7-.7-5.6%201.4-7.5%201.2.3.9-1.8%200-1-1.5-.3-1.6-3%20.4-1.7%203.5%201.1-.2-2.5-1.5-2.6-2.9-1.8-6.2-3.8-7.6-7%203.8%200%207.7%202.1%2011.5.9%203.1-1.6%206.2%200%207.3%202.8%202.4-.4%201.4-2.8%200-3.6%201.7-.7%203-2.2.8-3.5-1-1.4%201.5-4-1.7-3.8.1-2.5-.8-4.7-3.5-5.6-2.7-2.2-10.6%203.4-10.3-1.7-.8-2.8%203.2-.4%204.3-1.8%201.1-3-5.5-2.6-3.3-5%201.4-.8%208.1-2.1%202.9-3.1a8.3%208.3%200%200%201-7-1.1c-1.9%203.1-7.2-1.8-6.3%203.8-.7%202.1-5.5%207.6-6.8%203.4%201-3.3%206.8-4.3%205-8.8-.3-2.7-2.6.5-3.6.3-.6-1.7%201.6-3.8%203.2-4.2%203%202.4%203-3%206-2.5%202.1-.5-.7-1.4-1.3-1.8.6-1.5%203.9-2.3.7-3.7-2.9-2-5%202.1-7.3%202.3-2.2-2.5%202-3.7%203.2-5%20.1-1-2.4-.3-1.7-1.2.7-1.1%205.2-1.2%203-3a14.7%2014.7%200%200%200-10.2.6c-2%20.6-2.5%205-4.2%204.8-.7-2%20.3-5.8-2.4-6.3m15%2042.3c2.4-.4%200%203.7-1%203.6%200-1.4-3.6-1.3-1.3-2.6a7.3%207.3%200%200%201%202.3-1'/%3e%3cg%20fill='%23ffe000'%20transform='translate(0%2080)scale(.0635)'%3e%3cuse%20xlink:href='%23cc-a'%20width='100%25'%20height='100%25'%20x='7560'%20y='4200'/%3e%3cuse%20xlink:href='%23cc-a'%20width='100%25'%20height='100%25'%20x='6300'%20y='2205'/%3e%3cuse%20xlink:href='%23cc-a'%20width='100%25'%20height='100%25'%20x='7560'%20y='840'/%3e%3cuse%20xlink:href='%23cc-a'%20width='100%25'%20height='100%25'%20x='8680'%20y='1869'/%3e%3cuse%20xlink:href='%23cc-b'%20width='100%25'%20height='100%25'%20x='8064'%20y='2730'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cd'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23007fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23f7d618'%20d='M28.8%2096H96l20.8-67.2L137.6%2096h67.2l-54.4%2041.6%2020.8%2067.2-54.4-41.6-54.4%2041.6%2020.8-67.2zM600%200%200%20360v120h40l600-360V0z'/%3e%3cpath%20fill='%23ce1021'%20d='M640%200%200%20384v96L640%2096z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cefta'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23039'%20d='M0%200h640v480H0z'/%3e%3ccircle%20cx='320'%20cy='249.8'%20r='30.4'%20fill='none'%20stroke='%23fc0'%20stroke-width='27.5'/%3e%3ccircle%20cx='320'%20cy='249.8'%20r='88.3'%20fill='none'%20stroke='%23fc0'%20stroke-width='27.5'/%3e%3cpath%20fill='%23039'%20d='m404.7%20165.1%2084.7%2084.7-84.7%2084.7-84.7-84.7z'/%3e%3cpath%20fill='%23fc0'%20d='M175.7%20236.1h59.2v27.5h-59.2zm259.1%200h88.3v27.5h-88.3zM363%20187.4l38.8-38.8%2019.4%2019.5-38.7%2038.7zM306.3%2048.6h27.5v107.1h-27.5z'/%3e%3ccircle%20cx='225.1'%20cy='159.6'%20r='13.7'%20fill='%23fc0'/%3e%3ccircle%20cx='144.3'%20cy='249.8'%20r='13.7'%20fill='%23fc0'/%3e%3ccircle%20cx='320'%20cy='381.4'%20r='13.7'%20fill='%23fc0'/%3e%3ccircle%20cx='320'%20cy='425.5'%20r='13.7'%20fill='%23fc0'/%3e%3ccircle%20cx='408.3'%20cy='249.8'%20r='13.7'%20fill='%23fc0'/%3e%3cpath%20fill='%23fc0'%20d='m208.3%20341.5%2019.5-19.4%2019.4%2019.4-19.4%2019.5zm204.7%2021%2019.5-19.5%2019.5%2019.5-19.5%2019.4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cf'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cf-a'%3e%3cpath%20fill-opacity='.7'%20d='M-12.4%2032h640v480h-640z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23cf-a)'%20transform='translate(12.4%20-32)'%3e%3cpath%20fill='%2300f'%20d='M-52%2032h719.3v119H-52z'/%3e%3cpath%20fill='%23ff0'%20d='M-52%20391.6h719.3V512H-52z'/%3e%3cpath%20fill='%23009a00'%20d='M-52%20271.3h719.3v120.3H-52z'/%3e%3cpath%20fill='%23fff'%20d='M-52%20151h719.3v120.3H-52z'/%3e%3cpath%20fill='red'%20d='M247.7%2032.5h119.9V512H247.7z'/%3e%3cpath%20fill='%23ff0'%20d='m99.3%20137.7-31.5-21.8-31.3%2022L47.4%20101%2016.9%2078l38.2-1%2012.5-36.3L80.3%2077l38.1.7L88.2%20101'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cg-a'%3e%3cpath%20fill-opacity='.7'%20d='M-79.5%2032h640v480h-640z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23cg-a)'%20transform='translate(79.5%20-32)'%3e%3cpath%20fill='%23ff0'%20d='M-119.5%2032h720v480h-720z'/%3e%3cpath%20fill='%2300ca00'%20d='M-119.5%2032v480l480-480z'/%3e%3cpath%20fill='red'%20d='M120.5%20512h480V32z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ch'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23d52b1e'%20d='M0%200h640v480H0z'/%3e%3cg%20fill='%23fff'%3e%3cpath%20d='M170%20194.997h299.996v89.997H170z'/%3e%3cpath%20d='M275%2089.997h89.996v299.996H275z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ci'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%2300cd00'%20d='M426.8%200H640v480H426.8z'/%3e%3cpath%20fill='%23ff9a00'%20d='M0%200h212.9v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M212.9%200h214v480h-214z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ck'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23006'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='m471.6%20213%205.2-16.7-14-10.6%2017.6-.2%206-16.5%205.6%2016.5%2017.7.5-14.1%2010.5%205%2016.7-14.5-10m27.1%2013%2010.4-13.9-9.7-14.8%2016.7%205.8%2011-13.5v17.6l16.4%206.4-16.8%205-.8%2017.5-10.2-14.4m-98.4%2015-.7-17.5-16.8-5.2L431%20198v-17.4l10.9%2013.5%2016.8-5.6-9.8%2014.7%2010.3%2014-17-4.5m-39.6%2040.9-7.4-15.8-17.4%201.8%2012.8-12.3L384%20211l15.2%208.2%2013.3-11.8-3.4%2017.4%2014.9%208.9-17.3%202.5M389%20291.8l-13.3-11.1-15%209.2%206.4-16.7-12.9-11.6%2017.3.7%207-16.4%204.3%2017.2%2017.2%201.5-14.6%209.8m3.2%2060.4-16.5-4.8-10.1%2014.5-.7-17.9-16.4-5.5%2016.1-6.2v-18l10.7%2014.1%2016.4-5.6-9.6%2015m29.5%2050.8-17%202.4-3.5%2017.4-7.8-16-17.1%201.6%2012.2-12.3-7.1-16.4%2015.3%208.5%2012.8-11.8L393%20362m45%2038-15.1%208.2%202.6%2017.6-12.7-12.4-15.6%207.6%207.3-15.9-12.3-12.9%2017.3%202.6%208-15.5%203.4%2017.4m53.8%209-8.3%2015.3%2011.7%2013.2-17.4-3.3-8.9%2015-2.4-17.3-17.2-4%2015.8-7.4-1.7-17.5%2012.2%2012.8m57.4-13.1-.5%2017.4%2016.3%206.4-17%205-1.2%2017.5-10-14.3-17%204.4%2010.8-13.9-9.4-14.7%2016.6%205.7M559%20209.8l12%2012.6%2015.9-7.4-8.3%2015.8%2011.5%2013.1-17-2.8-9%2015.5L562%20239l-17-3.5%2015.7-8m34.2%2021%205.5%2016.6%2017.5.3-14.2%2010.7%204.7%2016.8-14.1-10-14.6%2010.1%205.4-16.8-13.8-10.6%2017.6-.4m19.5%2033.2-2%2017.4%2015.7%207.7-17.3%203.6-2.7%2017.3-8.7-15.1-17.4%202.9%2012-13-8.1-15.5%2016%207.2m3%2039.8-7.8%2015.6L603%20379l-17.4-2.7-8.4%2015.3-3-17.3-17.4-3.3%2015.6-8-2.3-17.4%2012.6%2012.3m-9.8%2039.1-14.7%209.2%203.8%2017.3-13.5-11.5-15%208.6%206.3-16.3-13.1-12.1%2017.4%201.5%207-16%204.4%2017.2'/%3e%3cpath%20fill='%23006'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='%23c8102e'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='%23c8102e'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cl'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cl-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23cl-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M256%200h512v256H256z'/%3e%3cpath%20fill='%230039a6'%20d='M0%200h256v256H0z'/%3e%3cpath%20fill='%23fff'%20d='M167.8%20191.7%20128.2%20162l-39.5%2030%2014.7-48.8L64%20113.1l48.7-.5L127.8%2064l15.5%2048.5%2048.7.1-39.2%2030.4z'/%3e%3cpath%20fill='%23d52b1e'%20d='M0%20256h768v256H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cm'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23007a5e'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M213.3%200h213.4v480H213.3z'/%3e%3cpath%20fill='%23fcd116'%20d='M426.7%200H640v480H426.7z'/%3e%3cg%20fill='%23fcd116'%20transform='translate(320%20240)scale(7.1111)'%3e%3cg%20id='cm-b'%3e%3cpath%20id='cm-a'%20d='M0-8-2.5-.4%201.3.9z'/%3e%3cuse%20xlink:href='%23cm-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23cm-b'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23cm-b'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3cuse%20xlink:href='%23cm-b'%20width='100%25'%20height='100%25'%20transform='rotate(-144)'/%3e%3cuse%20xlink:href='%23cm-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='cn-a'%20fill='%23ff0'%20d='M-.6.8%200-1%20.6.8-1-.3h2z'/%3e%3c/defs%3e%3cpath%20fill='%23ee1c25'%20d='M0%200h640v480H0z'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(71.9991%200%200%2072%20120%20120)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-12.33562%20-20.5871%2020.58684%20-12.33577%20240.3%2048)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-3.38573%20-23.75998%2023.75968%20-3.38578%20288%2095.8)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(6.5991%20-23.0749%2023.0746%206.59919%20288%20168)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(14.9991%20-18.73557%2018.73533%2014.99929%20240%20216)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-co'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23ffe800'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300148e'%20d='M0%20240h640v240H0z'/%3e%3cpath%20fill='%23da0010'%20d='M0%20360h640v120H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cp'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cr'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%230000b4'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2075.4h640v322.3H0z'/%3e%3cpath%20fill='%23d90000'%20d='M0%20157.7h640v157.7H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cu'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cu-a'%3e%3cpath%20fill-opacity='.7'%20d='M-32%200h682.7v512H-32z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23cu-a)'%20transform='translate(30)scale(.94)'%3e%3cpath%20fill='%23002a8f'%20d='M-32%200h768v512H-32z'/%3e%3cpath%20fill='%23fff'%20d='M-32%20102.4h768v102.4H-32zm0%20204.8h768v102.4H-32z'/%3e%3cpath%20fill='%23cb1515'%20d='m-32%200%20440.7%20255.7L-32%20511z'/%3e%3cpath%20fill='%23fff'%20d='M161.8%20325.5%20114.3%20290l-47.2%2035.8%2017.6-58.1-47.2-36%2058.3-.4%2018.1-58%2018.5%2057.8%2058.3.1-46.9%2036.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-cv'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cv-a'%3e%3cpath%20fill-opacity='.7'%20d='M-123.4%200h682.6v512h-682.6z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23cv-a)'%20transform='translate(115.7)scale(.94)'%3e%3cpath%20fill='%23fff'%20d='M-123.4%20233H723v206h-846.5z'/%3e%3cpath%20fill='%23081873'%20d='M-122.8%200h846v256.6h-846zm.3%20385.9h852.1V512h-852.1z'/%3e%3cpath%20fill='%23de3929'%20d='M-122.5%20302.6h846v39.6h-846z'/%3e%3cpath%20fill='%23ffce08'%20d='m131%20399.2%206.6%2020.4H159l-17.4%2012.7%206.6%2020.5L131%20440l-17.4%2012.7%206.7-20.5-17.4-12.7h21.5M317%20250.4l6.7%2020.5H345l-17.4%2012.6%206.6%2020.5-17.4-12.7-17.4%2012.7%206.6-20.5-17.4-12.6h21.6m-222%2064.4%206.6%2020.5h21.5L99%20368.6l6.7%2020.4-17.4-12.6L70.9%20389l6.6-20.4-17.4-12.7h21.5M317%20329.5l6.7%2020.4H345l-17.4%2012.7%206.6%2020.4-17.4-12.6-17.4%2012.7%206.6-20.5-17.4-12.7h21.6m-40.5-161.7%206.7%2020.4H298l-17.4%2012.7%206.6%2020.5-17.4-12.7-17.4%2012.7%206.7-20.5-17.5-12.7h21.6m-64.5-45.2%206.7%2020.5h21.5l-17.4%2012.6%206.6%2020.5-17.4-12.6-17.4%2012.6%206.7-20.5-17.4-12.6H192m-64.5%202.9%206.7%2020.5h21.5l-17.4%2012.6%206.7%2020.5-17.5-12.7-17.4%2012.7%206.7-20.5-17.4-12.6H121m-34.8%2043.2%206.6%2020.5h21.6l-17.5%2012.6%206.7%2020.5-17.4-12.7-17.4%2012.7%206.6-20.5L58%20271h21.5m119.2%20149.4%206.7%2020.5h21.5l-17.4%2012.6%206.7%2020.5-17.5-12.7-17.4%2012.7%206.7-20.5-17.4-12.6H192m82.2-41.7%206.6%2020.4h21.5L285%20432.3l6.7%2020.5-17.4-12.7-17.5%2012.7%206.7-20.5-17.4-12.7h21.5'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cw'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='cw-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3cpath%20id='cw-b'%20d='m0-1%20.2.7H1L.3%200l.2.7L0%20.4l-.6.4.2-.7-.5-.4h.7z'/%3e%3c/defs%3e%3cg%20clip-path='url(%23cw-a)'%20transform='scale(.94)'%3e%3cpath%20fill='%23002b7f'%20d='M0%200h768v512H0z'/%3e%3cpath%20fill='%23f9e814'%20d='M0%20320h768v64H0z'/%3e%3cuse%20xlink:href='%23cw-b'%20width='13500'%20height='9000'%20x='2'%20y='2'%20fill='%23fff'%20transform='scale(42.67)'/%3e%3cuse%20xlink:href='%23cw-b'%20width='13500'%20height='9000'%20x='3'%20y='3'%20fill='%23fff'%20transform='scale(56.9)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cx'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230021ad'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%231c8a42'%20d='M0%200h640v480z'/%3e%3ccircle%20cx='320'%20cy='240'%20r='57.8'%20fill='%23ffc639'/%3e%3cpath%20fill='%231c8a42'%20d='M284.7%20214c4%205.5%2010%2014.6%2014.8%2012.2%203.7%200%205.7.3%206.2%202.8a37%2037%200%200%200%2033-14.3s.8%200%20.5-4.5c0-2%202.8-1.6%202.8-1%20.4%201%20.4%201.7.9%201.8%201-.4%202.7-3%204-4.6.3-.7.1-1.5.2-2.4.7-1.7%202.4-1.3%202.8-.4l.6%201.6c1.8%201.2%205%200%205.2%200%20.3-1.4%201.2-1.2%201.2-1.2%201.2-.3.7-.2%201.5.2-.7%207.7%201.5%208%201.3%2012%20.1%204.4-1.3%205.6-1.3%207.3.4%202%207%202.1%204.6%203.9-2%201%200%203-3%203.8-8.8%204.5-10.4%208.3-10.4%208.3s-2.2%204.2-2.5%204.2c-1.5%202.8-3.3%201.2-4.4%202.6-.5%201.7-1%205.5%200%207.4.5%202.7%200%204.2-.7%206.9-.6%205.6-2.8%206.5-3.1%208.4-1%202.2.2%2012-.8%2012-6.5.2-11.5-1.2-14.1-1.7%202.5-10.9%201.5-20.4%201.5-21.4-.6-7.8-11.6-5.9-13.3-7-1.4-.2-2.3-1.3-2.7-1.8-1.6-.2-2.2-.6-3.7-.7-.8.4-.3.8-2%201.3-4.5.5-6.4-3.8-6.4-3.8.2-1.5-9.9.3-15.3-1-2.3%201.3-3.3%205-5.1%205.4%200%201.1-3-1-3.6-2-.2-3.4%202.8-4.8%202.8-4.8%202.4-1.7%203.8-2%205-3.1.5-2.9.2-5%201.5-7.1%201-1.7%202.5-1%203.5-1.6%201.1-.8%201.6-5.6.6-7l-4.7-4.2c-1.4-4.1%201.7-6.8%202.6-6.5'/%3e%3cpath%20fill='%23ffc639'%20d='M561.9%20142.4c-2.6-10.3-26-32.7-43.7-46.9-4.2-2.8-7-1.1-6.4%203%202.2%203.6%203.8%207.6%206%2011.3.6%202.5%201.8%204.2%202.4%206.6%200%200%20.2%204.2.6%204.6%205.4%206%206.2%2011.1%206.2%2011.1a49%2049%200%200%200%2011.5%2015.6c6.2%203.9%201.6%2016%201.8%2022.5%200%204-2.9%203.6-5.5%203-20.1-18.5-40.1-18.5-57.8-23.9-6.8-.7-7%202.6-4.7%204.4a129%20129%200%200%200%2039.1%2029.6l7.7%204.8%208.8%207.3c6.8%204.4%207.3%208.4%207.3%208.8.2%208.2-4.2%2014.6-5.5%2017.2-2.3%208.7-7%2010.2-7%2010.2-37.6%2025.4-57.4%2032-118.4%2024.1-1-.4-6.8.5%200%203%2015.5%205.2%2053.7%2013.5%2090.6-4%209-6.2%2014.8-4.2%2021.3-8a287.3%20287.3%200%200%201%2028.3-15.4c8.3-4.5%2031.3-9.4%2036.6-13.8%206.1-.5%2012.4-1.3%2012.8-6.5%202-1.3%205-.3%207.2-4.6%204.8-.9%204-2.6%204-2.6-1.2-3.4-5.8-4.8-9-7.3-4.8-1.6-8-2-11.5-.4l-3.3%201.5s-5.1-.7-5.1-1.1c-11.4-.6-10.3-38.3-14.3-54z'/%3e%3cpath%20fill='%231c8a42'%20d='M588.6%20204.2a2.8%201.8%2016%201%201-5.4-1.7%202.8%201.8%2016%200%201%205.4%201.7'/%3e%3cg%20fill='%23fff'%20transform='matrix(.64%200%200%20.64%200%2080)'%3e%3cpath%20id='cx-a'%20d='m188.2%20191-12.8-12-12.9%2011.8%201.4-17.4-17.3-2.8%2014.5-9.8-8.6-15.2%2016.7%205.3%206.5-16.2L182%20151l16.7-5-8.8%2015%2014.4%2010-17.3%202.5z'/%3e%3cpath%20d='m233.4%20335.5-13.8-9.1-13.4%209.6%204.8-15.5-13.6-9.5%2016.6-.4%205-15.5%205.6%2015.3%2016.7-.1L228%20320l5.3%2015.4z'/%3e%3cuse%20xlink:href='%23cx-a'%20width='100%25'%20height='100%25'%20x='2.5'%20y='269.1'/%3e%3cuse%20xlink:href='%23cx-a'%20width='100%25'%20height='100%25'%20x='-112.1'%20y='123.2'/%3e%3cuse%20xlink:href='%23cx-a'%20width='100%25'%20height='100%25'%20x='108.4'%20y='85'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__B847aADH__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-cz'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-74%200h682.67v512H-74z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20clip-path='url(%23a)'%20transform='translate(69.38)%20scale(.94)'%20strokeWidth='1pt'%3e%3cpath%20fill='%23e80000'%20d='M-74%200h768v512H-74z'/%3e%3cpath%20fill='%23fff'%20d='M-74%200h768v256H-74z'/%3e%3cpath%20d='M-74%200l382.73%20255.67L-74%20511.01V0z'%20fill='%2300006f'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-de'%3e%3cpath%20fill='%23ffce00'%20d='M0%20320h640v160.002H0z'/%3e%3cpath%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23d00'%20d='M0%20160h640v160H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__OfQKVGuG__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-dj'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='dj-a'%3e%3cpath%20fill-opacity='.7'%20d='M-40%200h682.7v512H-40z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23dj-a)'%20transform='translate(37.5)scale(.94)'%3e%3cpath%20fill='%230c0'%20d='M-40%200h768v512H-40z'/%3e%3cpath%20fill='%2369f'%20d='M-40%200h768v256H-40z'/%3e%3cpath%20fill='%23fffefe'%20d='m-40%200%20382.7%20255.7L-40%20511z'/%3e%3cpath%20fill='red'%20d='M119.8%20292%2089%20270l-30.7%2022.4L69.7%20256l-30.6-22.5%2037.9-.3%2011.7-36.3%2012%2036.2h37.9l-30.5%2022.7%2011.7%2036.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-dk'%3e%3cpath%20fill='%23c60c30'%20d='M0%200h640.1v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M205.714%200h68.57v480h-68.57z'/%3e%3cpath%20fill='%23fff'%20d='M0%20205.714h640.1v68.57H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__B7fJoHwe__\"","export default \"__VITE_ASSET__CAs_VQWr__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-dz'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M320%200h320v480H320z'/%3e%3cpath%20fill='%23006233'%20d='M0%200h320v480H0z'/%3e%3cpath%20fill='%23d21034'%20d='M424%20180a120%20120%200%201%200%200%20120%2096%2096%200%201%201%200-120m4%2060-108-35.2%2067.2%2092V183.2l-67.2%2092z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__8dP0R8bt__\"","export default \"__VITE_ASSET__7XOj9e9w__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ee'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3crect%20rx='0'%20ry='0'%20height='477.9'%20width='640'/%3e%3crect%20rx='0'%20ry='0'%20height='159.3'%20width='640'%20y='320.7'%20fill='%23fff'/%3e%3cpath%20fill='%231291ff'%20d='M0%200h640v159.3H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CUQSxBVX__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-eh'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='eh-a'%3e%3cpath%20fill-opacity='.7'%20d='M-158.7%200H524v512h-682.7z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23eh-a)'%20transform='translate(148.8)scale(.94)'%3e%3cpath%20fill='%23000001'%20d='M-158.3%200h680.9v255.3h-680.9z'/%3e%3cpath%20fill='%23007a3d'%20d='M-158.3%20255.3h680.9v255.3h-680.9z'/%3e%3cpath%20fill='%23fff'%20d='M-158.3%20148.9h680.9v212.8h-680.9z'/%3e%3cpath%20fill='%23c4111b'%20d='m-158.3%200%20340.4%20255.3-340.4%20255.3Z'/%3e%3ccircle%20cx='352.3'%20cy='255.3'%20r='68.1'%20fill='%23c4111b'/%3e%3ccircle%20cx='377.9'%20cy='255.3'%20r='68.1'%20fill='%23fff'/%3e%3cpath%20fill='%23c4111b'%20d='m334%20296.5%2029.1-20.7%2028.8%2021-10.8-34%2029-20.9-35.7-.2-11-34-11.2%2033.9-35.7-.2%2028.7%2021.2-11.1%2034z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-er'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23be0027'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23b4d7f4'%20d='m0%20480%20640-.3V240z'/%3e%3cpath%20fill='%23239e46'%20d='m0%200%20640%20.3V240z'/%3e%3cpath%20fill='%23f3e295'%20d='M186.2%20360.4c-10.7%203-16.8%2011.3-16.7%2019.1l52.8-.2c.4-8.4-6.5-16.2-17-19.3%2051.6-1%2096.4-20.4%20104.6-32.8-8-3.5-17.4%202.1-24%20.8%2015.7-7.3%2063-37.9%2055.3-70.7-6%2018.2-24%2033.3-31.8%2037.4%2017.7-26.8%2041.8-54.8%2020.9-76.4%201%2012.5-8%2026.3-12%2027.4%2010.3-28.4%2020-64-2.1-87.4%202.9%208.5%201.7%2032.4-2.3%2033.5-1.2-19.3-4.5-59.8-24.8-59.3%206.4%205.8%209.2%2021.4%209.4%2037.2a57.5%2057.5%200%200%200-21.1-27%20118.3%20118.3%200%200%200-41.5-42.2c1.8%2012.7%203.3%2022.7%2021%2035.9-9.2-.6-18.4-18.1-28.3-18.6-7.9-.4-14%207.1-26.9%202.8%201.4%204.2%207.4%206.1%208.7%209.2-2.8%202-9.3-.3-14.7-3%207.5%2010%2019%2016%2028.8%2014%2011.7-2.2%2024.2-1%2036.2%205.8a63%2063%200%200%201-22.5.6c6.9%207%2011.5%2011.7%2023.6%2011.6%2010.7%200%2016.4-5.8%2019.1-2.2%206.8%208%2011.3%2016%2017%2025.4-12.5%201.3-8.7-14.1-22.6-22-7.9%2016%209%2035.2%2020.3%2043.2a65%2065%200%200%200%207.1%2031.5c3.5%206.5%208%2013.2%206.3%2027.9-6.9-5-13.5-21.8-11-35.1-8.6%202.3-12%2017.4-8%2025%203%205.7%205%2016.8%201.6%2021.7-3.4%204.6-3.7%204-3.7%2014%20.1%205.8-3.2%2012.8-8.5%2017.7a35.5%2035.5%200%200%200%201.1-15.8c-4.2%207.2-14.9%2014.6-18.2%2022.4-3.3%207.7-4.1%2021.2-20%2024.3-20.6%204-27.7%207.6-40.8%2013-1.5-10%202.9-31%2011.3-29.7%208.1%201.4%2033-8.6%2024-29.5-1.7%206.6-7.5%2013-13.9%2013.3%206.9-8.8%2019-18%2013.1-32.8a42.6%2042.6%200%200%201-16.3%2018c8.4-16%201-21-9-7.6-3.8%205.1-6.1%2015.4-8.5%2028.5-4-10.6-3.7-24.6-8.4-36-4.8-12.3%206.5-15.5%2011.8-14.5%2013%203.5%2034.9%203.5%2033.3-18.1-5.7%207.3-15.5%209.5-26.2%207%2012-8.8%2021.4-25.3%208-34a31%2031%200%200%201-16.9%2024.1%2050.8%2050.8%200%200%201-.3-24.8c-5.2%205.6-9%2017-12.1%2030.2-.3-13%202.2-22.3%204-29.3%202.8-10.1%209.6-3.5%2020-2.8%2010.2.6%2024-5%2021.4-18.7-3.4%205.5-10.5%207.6-17.7%207%208.7-5.3%2023.8-14.6%2015.5-29-3.5%205.4-4.6%2010-14.7%2011.7%202.6-6%203-14.7%2011-18-14-2.9-22%206.3-26.2%2020.7-1.6-10-3.6-13.6-4-21%207.6-8.3%208.4-24.8-8-28.4a35%2035%200%200%200%201.2%2017.4c-7.7-4.6-18.5-7.1-25.8-.7%205%205.3%2012.5%2010%2024.2%204.2-2.8%209-10%207.5-19.8%204%206%2011.3%2013.6%2013.3%2022%2012%204.4%2011.6%204.6%2020.4-8.3%2037.2.6-10.4-.1-18.2-8.4-26.7-7.2-7-13%20.3-1.8%2015.8-6.8-5-14.4-15-16.7-25.1-2.2%2012.4-.2%2027.1%206.7%2035.4-3.3%203.5-7-.4-12.5-9%202%2027.4%2013.7%2032.7%2029.4%2026.6.4%2015%20.4%2028.9%201.3%2047-9.1-13.2-20.7-23-27.1-25.4-2%207.3%205.5%2017%209.8%2022.3-6.5-1.4-20.5-12-20.5-12-1.4%2012.1%2014.3%2023.4%2024.5%2028.4-12-.5-17.3-5-25-12.4.2%2033.8%2036.6%2027.9%2043.5%2022.7l3%2052.5c-10.3-1.8-9.5-5-18.3-5.7-24.5-1-43.9-29.4-50.3-50.3-1.9%203.4-.4%207-2.1%2011.3-4-10.3-9-23.6-15.9-29.8%201.8%206%202%2012.1%201.4%2023.3-2.4-7.2-4.5-9.5-4.7-18%20.1-6.5%206.3-11.3%206-20.5-.3-6.7-6.4-21.3-7.3-32.5-3%2011.6-4.8%2023.8-9.4%2031%202.3-12.4%201.6-21%205.4-29.3%204.4-8.7%208.1-16.6%205.2-25.4-2.8%203.4-1.9%206.5-9%2014.8-1.5-9%209.2-23.5%2019.6-29.3%207.3-3.8%2016.5-17.6%2010.5-27-6.9%205-10%2011.6-19.7%2023%207-27%2025-34.2%2046.5-34.3%204.7%200%2014.3-1.7%2017-8-6%202.3-13.2%202.6-19.6%201.4%204.7-6.9%2014.4-6%2023.6-6%207.1%200%2018.3-1%2022.8-11.2a50.8%2050.8%200%200%201-31%201.9c13.7-7%2035-7.8%2046-17.1-12.5-9.3-43.7%202.2-63.4%2015.7%205.5-5%2014.2-14%2019-21.2-10.8-5.2-38%2025-47.4%2043-9%205-12.5%2013-16%2018.5%204.7-16.1%205.2-27.8%209.2-41C80%20138%2092.6%20194.6%2086%20208.2c.8-15%20.1-34.1-6-44-9.4%207.2-10.2%2049.5-1.4%2084.7-3.2-9.4-9.2-18.2-11.1-29.7-14%2025.4%208.2%2055.5%2026.7%2079.2-14-7.3-27.7-22.9-36.8-36%202.5%2045.6%2050%2055%2057.4%2066.2-10-4.7-29.1-13.9-37.3-4.2a99%2099%200%200%201%2032.3%2012.1c12.4%2015.4%2035.7%2022.2%2076.4%2023.9'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-es-ct'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fcdd09'%20d='M0%200h640v480H0z'/%3e%3cpath%20stroke='%23da121a'%20stroke-width='60'%20d='M0%2090h810m0%20120H0m0%20120h810m0%20120H0'%20transform='scale(.79012%20.88889)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DXfFc7va__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-es-pv'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23D52B1E'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23009B48'%20d='M0%200h53.1l133.4%20100.1%20133.5%20100L586.9%200H640v39.9l-133.4%20100L373.2%20240%20640%20440.2V480h-53.1L453.5%20380A69411.7%2069411.7%200%200%200%20320%20279.9L53.1%20480H0v-39.8l133.4-100.1L266.8%20240%200%2039.9v-20z'/%3e%3cpath%20fill='%23FFF'%20d='M288.1%200h63.8v208.1H640v63.8H351.9V480h-63.8V271.9H0v-63.8h288.1v-104z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CWgZdGVX__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-et'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='et-a'%3e%3cpath%20fill-opacity='.7'%20d='M-61.3%200h682.7v512H-61.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23et-a)'%20transform='translate(57.5)scale(.94)'%3e%3cpath%20fill='%23ffc621'%20d='M-238%203.5H800v498H-238z'/%3e%3cpath%20fill='%23ef2118'%20d='M-240%20342.5H799.3V512H-240z'/%3e%3cpath%20fill='%23298c08'%20d='M-238%200H800v180H-238z'/%3e%3ccircle%20cx='534.2'%20cy='353'%20r='199.7'%20fill='%23006bc6'%20transform='matrix(.54%200%200%20.54%20-25.8%2074)'/%3e%3cpath%20fill='%23ffc621'%20d='m214.3%20188.2-6.5%204.5%2023.5%2033%206.3-4zm29.4%2078-9.7-6.8%204-12.7-48.1.7-14-10.7%2065.7-.7%2012.2-36.9%206.6%2015zm76.5-70.7-6.3-4.8-24.3%2032.4%205.6%204.7zM254.8%20247l3.5-11.2h13.3L256.4%20190l6-16.5%2020.5%2062.4%2038.8.5-12.2%2010.7zm90.6%2051.2%202.7-7.4-38.3-13.3-2.8%207zm-69.1-46.4%2011.7-.1%204.1%2012.6%2038.8-28.5%2017.6.6-53.1%2038.7%2011.5%2037.2-14-8.4zm-19.8%20102%207.9.2.3-40.5-7.4-.5zm22-80.3%203.8%2011.1-10.7%208%2039.4%2027.7%205%2016.8-53.6-38-31.5%2022.7%203.5-16%2044-32.3zm-103.3%2013%202.3%207.5%2038.7-12.2-2-7.2zm83.2-4-9.4%207.1-10.8-7.7-14.2%2046-14.4%2010%2019.5-62.7-31.4-23%2016.3-1.6z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-eu'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cg%20id='eu-d'%3e%3cg%20id='eu-b'%3e%3cpath%20id='eu-a'%20d='m0-1-.3%201%20.5.1z'/%3e%3cuse%20xlink:href='%23eu-a'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cg%20id='eu-c'%3e%3cuse%20xlink:href='%23eu-b'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23eu-b'%20transform='rotate(144)'/%3e%3c/g%3e%3cuse%20xlink:href='%23eu-c'%20transform='scale(-1%201)'/%3e%3c/g%3e%3c/defs%3e%3cpath%20fill='%23039'%20d='M0%200h640v480H0z'/%3e%3cg%20fill='%23fc0'%20transform='translate(320%20242.3)scale(23.7037)'%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20y='-6'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20y='6'/%3e%3cg%20id='eu-e'%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20x='-6'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20transform='rotate(-144%20-2.3%20-2.1)'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20transform='rotate(144%20-2.1%20-2.3)'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20transform='rotate(72%20-4.7%20-2)'/%3e%3cuse%20xlink:href='%23eu-d'%20width='100%25'%20height='100%25'%20transform='rotate(72%20-5%20.5)'/%3e%3c/g%3e%3cuse%20xlink:href='%23eu-e'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-fi'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23003580'%20d='M0%20174.545h640v130.909H0z'/%3e%3cpath%20fill='%23003580'%20d='M175.455%200h130.909v480H175.455z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__uTfr_eDB__\"","export default \"__VITE_ASSET__LpWbTuIU__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-fm'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='fm-a'%3e%3cpath%20fill-opacity='.7'%20d='M-81.3%200h682.6v512H-81.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23fm-a)'%20transform='translate(76.3)scale(.94)'%3e%3cpath%20fill='%236797d6'%20d='M-252%200H772v512H-252z'/%3e%3cpath%20fill='%23fff'%20d='m259.8%20123-32.4%2022.2%2012.4-35.9-32.5-22.2h40.1l12.4-35.9%2012.4%2036h40l-32.4%2022.1%2012.4%2035.9M259.8%20390l-32.4-22.2%2012.4%2036-32.5%2022.1h40.1l12.4%2035.9%2012.4-36%2040%20.1-32.4-22.2%2012.4-35.9m-188.4-92.4L79.3%20306l1.4-38-37.5-11.7%2038.4-11.7%201.3-38%2022.3%2030.8%2038.4-11.8-24.6%2030.7%2022.4%2030.7m274.2-11.7%2024.6%2030.7-1.4-38%2037.5-11.7-38.4-11.7-1.3-38-22.3%2030.8-38.4-11.8%2024.6%2030.7-22.4%2030.7'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-fo'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-78.015%2032h640v480h-640z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20clip-path='url(%23a)'%20transform='translate(78.02%20-32)'%20strokeWidth='0'%3e%3cpath%20fill='%23fff'%20d='M-78.015%2032h663.91v480h-663.91z'/%3e%3cpath%20d='M-76.033%20218.67h185.9V32h106.23v186.67h371.79v106.67h-371.79v186.67h-106.23V325.34h-185.9V218.67z'%20fill='%23003897'/%3e%3cpath%20d='M-76.033%20245.33h212.45V32h53.113v213.33h398.35v53.333H189.53v213.33h-53.113v-213.33h-212.45V245.33z'%20fill='%23d72828'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-fr'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300267f'%20d='M0%200h213.337v480H0z'/%3e%3cpath%20fill='%23f31830'%20d='M426.662%200H640v480H426.662z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ga'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23ffe700'%20d='M640%20480H0V0h640z'/%3e%3cpath%20fill='%2336a100'%20d='M640%20160H0V0h640z'/%3e%3cpath%20fill='%23006dbc'%20d='M640%20480H0V320h640z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gb-eng'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23ce1124'%20d='M281.6%200h76.8v480h-76.8z'/%3e%3cpath%20fill='%23ce1124'%20d='M0%20201.6h640v76.8H0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BH42wpQA__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gb-sct'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230065bd'%20d='M0%200h640v480H0z'/%3e%3cpath%20stroke='%23fff'%20stroke-width='.6'%20d='m0%200%205%203M0%203l5-3'%20transform='scale(128%20160)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BtUvly0e__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-gb'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-85.333%200h682.67v512h-682.67z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23a)'%20transform='translate(80)%20scale(.94)'%3e%3cg%20strokeWidth='1pt'%3e%3cpath%20fill='%23006'%20d='M-256%200H768.02v512.01H-256z'/%3e%3cpath%20d='M-256%200v57.244l909.535%20454.768H768.02V454.77L-141.515%200H-256zM768.02%200v57.243L-141.515%20512.01H-256v-57.243L653.535%200H768.02z'%20fill='%23fff'/%3e%3cpath%20d='M170.675%200v512.01h170.67V0h-170.67zM-256%20170.67v170.67H768.02V170.67H-256z'%20fill='%23fff'/%3e%3cpath%20d='M-256%20204.804v102.402H768.02V204.804H-256zM204.81%200v512.01h102.4V0h-102.4zM-256%20512.01L85.34%20341.34h76.324l-341.34%20170.67H-256zM-256%200L85.34%20170.67H9.016L-256%2038.164V0zm606.356%20170.67L691.696%200h76.324L426.68%20170.67h-76.324zM768.02%20512.01L426.68%20341.34h76.324L768.02%20473.848v38.162z'%20fill='%23c00'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-gd'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cg%20id='gd-c'%3e%3cg%20id='gd-b'%3e%3cpath%20id='gd-a'%20fill='%23fcd116'%20d='M0-1v1h.5'%20transform='rotate(18%200%20-1)'/%3e%3cuse%20xlink:href='%23gd-a'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23gd-b'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23gd-b'%20transform='rotate(144)'/%3e%3cuse%20xlink:href='%23gd-b'%20transform='rotate(216)'/%3e%3cuse%20xlink:href='%23gd-b'%20transform='rotate(288)'/%3e%3c/g%3e%3c/defs%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23007a5e'%20d='M67.2%2067.2h505.6v345.6H67.2z'/%3e%3cpath%20fill='%23fcd116'%20d='M67.2%2067.3h505.6L67.2%20412.9h505.6z'/%3e%3ccircle%20cx='319.9'%20cy='240.1'%20r='57.6'%20fill='%23ce1126'/%3e%3cuse%20xlink:href='%23gd-c'%20width='100%25'%20height='100%25'%20transform='translate(320%20240)scale(52.8)'/%3e%3cuse%20xlink:href='%23gd-d'%20width='100%25'%20height='100%25'%20x='-100'%20transform='translate(-30.3)'/%3e%3cuse%20xlink:href='%23gd-c'%20id='gd-d'%20width='100%25'%20height='100%25'%20transform='translate(320%2033.6)scale(31.2)'/%3e%3cuse%20xlink:href='%23gd-d'%20width='100%25'%20height='100%25'%20x='100'%20transform='translate(30.3)'/%3e%3cpath%20fill='%23ce1126'%20d='M102.3%20240.7a80.4%2080.4%200%200%200%2033.5%2033.2%20111%20111%200%200%200-11.3-45z'/%3e%3cpath%20fill='%23fcd116'%20d='M90.1%20194.7c10.4%2021.7-27.1%2073.7%2035.5%2085.9a63.2%2063.2%200%200%201-10.9-41.9%2070%2070%200%200%201%2032.5%2030.8c16.4-59.5-42-55.8-57.1-74.8'/%3e%3cuse%20xlink:href='%23gd-d'%20width='100%25'%20height='100%25'%20x='-100'%20transform='translate(-30.3%20414.6)'/%3e%3cuse%20xlink:href='%23gd-c'%20width='100%25'%20height='100%25'%20transform='translate(320%20448.2)scale(31.2)'/%3e%3cuse%20xlink:href='%23gd-d'%20width='100%25'%20height='100%25'%20x='100'%20transform='translate(30.3%20414.6)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ge'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='red'%20d='M272%200h96v480h-96z'/%3e%3cpath%20fill='red'%20d='M0%20192h640v96H0z'/%3e%3cpath%20fill='red'%20fill-rule='evenodd'%20d='M146.8%20373.1c1-16.8%204-31.1%204-31.1s-9.8%201-14.8%201c-4.9%200-14.8-1-14.8-1s3%2014.3%204%2031.2c-16.9-1-31.2-4-31.2-4s1%207.4%201%2014.8-1%2014.8-1%2014.8%2014.3-3%2031.2-4c-1%2016.9-4%2031.2-4%2031.2s7.4-1%2014.8-1%2014.8%201%2014.8%201-3-14.3-4-31.2c16.9%201%2031.2%204%2031.2%204s-1-9.8-1-14.8c0-4.9%201-14.8%201-14.8s-14.3%203-31.1%204zm368-288c1-16.8%204-31.1%204-31.1s-9.8%201-14.8%201c-4.9%200-14.8-1-14.8-1s3%2014.3%204%2031.1c-16.9-1-31.2-3.9-31.2-3.9s1%207.4%201%2014.8-1%2014.8-1%2014.8%2014.3-3%2031.2-4c-1%2016.9-4%2031.2-4%2031.2s7.4-1%2014.8-1%2014.8%201%2014.8%201-3-14.3-4-31.1c16.9%201%2031.2%204%2031.2%204s-1-10-1-14.9%201-14.8%201-14.8-14.3%203-31.2%204zm-368%200c1-16.8%204-31.1%204-31.1s-9.8%201-14.8%201c-4.9%200-14.8-1-14.8-1s3%2014.3%204%2031.2c-16.9-1-31.2-4-31.2-4s1%207.4%201%2014.8-1%2014.8-1%2014.8%2014.3-3%2031.2-4c-1%2016.9-4%2031.2-4%2031.2s7.4-1%2014.8-1%2014.8%201%2014.8%201-3-14.3-4-31.2c16.9%201%2031.2%204%2031.2%204s-1-9.8-1-14.8c0-4.9%201-14.8%201-14.8s-14.3%203-31.1%204zm368%20288c1-16.8%204-31.1%204-31.1s-9.8%201-14.8%201c-4.9%200-14.8-1-14.8-1s3%2014.3%204%2031.2c-16.9-1-31.2-4-31.2-4s1%207.4%201%2014.8-1%2014.8-1%2014.8%2014.3-3%2031.2-4c-1%2016.9-4%2031.2-4%2031.2s7.4-1%2014.8-1%2014.8%201%2014.8%201-3-14.3-4-31.2c16.9%201%2031.2%204%2031.2%204s-1-9.8-1-14.8c0-4.9%201-14.8%201-14.8s-14.3%203-31.2%204z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-gf'%3e%3cpath%20fill='%23078930'%20d='M0%200h640v480z'/%3e%3cpath%20fill='%23fcdd09'%20d='M0%200l640%20480H0z'/%3e%3cpath%20fill='%23da121a'%20d='M252.37%20218.025h135.26L278.203%20297.53%20320%20168.89l41.798%20128.64z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-gg'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23e8112d'%20d='M256%200h128v480H256z'/%3e%3cpath%20fill='%23e8112d'%20d='M0%20176h640v128H0z'/%3e%3cpath%20id='gg-a'%20fill='%23f9dd16'%20d='m110%20286.7%2023.3-23.4h210v-46.6h-210L110%20193.3z'/%3e%3cuse%20xlink:href='%23gg-a'%20width='36'%20height='24'%20transform='rotate(90%20320%20240)'/%3e%3cuse%20xlink:href='%23gg-a'%20width='36'%20height='24'%20transform='rotate(-90%20320%20240)'/%3e%3cuse%20xlink:href='%23gg-a'%20width='36'%20height='24'%20transform='rotate(180%20320%20240)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gh'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23006b3f'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fcd116'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='m320%20160%2052%20160-136.1-98.9H404L268%20320z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__Dcnvsq1G__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gl'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23d00c33'%20d='M0%20240h640v240H0zm80%200a160%20160%200%201%200%20320%200%20160%20160%200%200%200-320%200'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gm'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='gm-a'%3e%3cpath%20fill-opacity='.7'%20d='M0-48h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23gm-a)'%20transform='translate(0%2048)'%3e%3cpath%20fill='red'%20d='M0-128h640V85.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2085.3h640V121H0z'/%3e%3cpath%20fill='%23009'%20d='M0%20120.9h640V263H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20263.1h640v35.6H0z'/%3e%3cpath%20fill='%23090'%20d='M0%20298.7h640V512H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gn'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='red'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23ff0'%20d='M213.3%200h213.4v480H213.3z'/%3e%3cpath%20fill='%23090'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gp'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__gbjdc$$i__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-gr'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M0%200h120v90H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20clip-path='url(%23a)'%20transform='scale(5.33)'%20strokeWidth='1pt'%3e%3cpath%20fill='%230d5eaf'%20d='M0%200h135v10H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2010h135v10H0z'/%3e%3cpath%20fill='%230d5eaf'%20d='M0%2020h135v10H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2030h135v10H0z'/%3e%3cpath%20fill='%230d5eaf'%20d='M0%2040h135v10H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2050h135v10H0z'/%3e%3cpath%20fill='%230d5eaf'%20d='M0%2060h135v10H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2070h135v10H0z'/%3e%3cpath%20fill='%230d5eaf'%20d='M0%2080h135v10H0zM0%200h50v50H0z'/%3e%3cg%20fill='%23fff'%3e%3cpath%20d='M20%200h10v50H20z'/%3e%3cpath%20d='M0%2020h50v10H0z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BPAIWr$y__\"","export default \"__VITE_ASSET__DjhXxbW7__\"","export default \"__VITE_ASSET__BZ3A9Bae__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-gw'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23ce1126'%20d='M0%200h220v480H0z'/%3e%3cpath%20fill='%23fcd116'%20d='M220%200h420v240H220z'/%3e%3cpath%20fill='%23009e49'%20d='M220%20240h420v240H220z'/%3e%3cg%20id='gw-b'%20transform='matrix(80%200%200%2080%20110%20240)'%3e%3cpath%20id='gw-a'%20fill='%23000001'%20d='M0-1v1h.5'%20transform='rotate(18%200%20-1)'/%3e%3cuse%20xlink:href='%23gw-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23gw-b'%20width='100%25'%20height='100%25'%20transform='rotate(72%20110%20240)'/%3e%3cuse%20xlink:href='%23gw-b'%20width='100%25'%20height='100%25'%20transform='rotate(144%20110%20240)'/%3e%3cuse%20xlink:href='%23gw-b'%20width='100%25'%20height='100%25'%20transform='rotate(-144%20110%20240)'/%3e%3cuse%20xlink:href='%23gw-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72%20110%20240)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gy'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23399408'%20d='M2.4%200H640v480H2.4z'/%3e%3cpath%20fill='%23fff'%20d='M.2%200c-.9%200%20619.6%20241.5%20619.6%20241.5L0%20479.8z'/%3e%3cpath%20fill='%23ffde08'%20d='M.3%2020.2c3.4%200%20559%20217.9%20555.9%20220L1.9%20463.2.3%2020.3z'/%3e%3cpath%20fill='%23000001'%20d='M1.9.8c1.8%200%20290.9%20240.9%20290.9%20240.9L1.8%20477z'/%3e%3cpath%20fill='%23de2110'%20d='M.3%2033.9c1.6-15%20260.9%20208.4%20260.9%20208.4L.2%20451.7V33.9z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-hk'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23EC1B2E'%20d='M0%200h640v480H0'/%3e%3cpath%20id='hk-a'%20fill='%23fff'%20d='M346.3%20103.1C267%2098%20230.6%20201.9%20305.6%20240.3c-26-22.4-20.6-55.3-10.1-72.4l1.9%201.1c-13.8%2023.5-11.2%2052.7%2011.1%2071-12.7-12.3-9.5-39%2012.1-48.9s23.6-39.3%2016.4-49.1q-14.7-25.6%209.3-38.9M307.9%20164l-4.7%207.4-1.8-8.6-8.6-2.3%207.8-4.3-.6-8.9%206.5%206.1%208.3-3.3-3.7%208.1%205.6%206.8z'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(72%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(144%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(216%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(288%20312.5%20243.5)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-hm'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300008B'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='red'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='red'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3cpath%20fill='%23fff'%20d='m527%20396.7-20.5%202.6%202.2%2020.5-14.8-14.4-14.7%2014.5%202-20.5-20.5-2.4%2017.3-11.2-10.9-17.5%2019.6%206.5%206.9-19.5%207.1%2019.4%2019.5-6.7-10.7%2017.6zm-3.7-117.2%202.7-13-9.8-9%2013.2-1.5%205.5-12.1%205.5%2012.1%2013.2%201.5-9.8%209%202.7%2013-11.6-6.6zm-104.1-60-20.3%202.2%201.8%2020.3-14.4-14.5-14.8%2014.1%202.4-20.3-20.2-2.7%2017.3-10.8-10.5-17.5%2019.3%206.8L387%20178l6.7%2019.3%2019.4-6.3-10.9%2017.3%2017.1%2011.2ZM623%20186.7l-20.9%202.7%202.3%2020.9-15.1-14.7-15%2014.8%202.1-21-20.9-2.4%2017.7-11.5-11.1-17.9%2020%206.7%207-19.8%207.2%2019.8%2019.9-6.9-11%2018zm-96.1-83.5-20.7%202.3%201.9%2020.8-14.7-14.8-15.1%2014.4%202.4-20.7-20.7-2.8%2017.7-11L467%2073.5l19.7%206.9%207.3-19.5%206.8%2019.7%2019.8-6.5-11.1%2017.6zM234%20385.7l-45.8%205.4%204.6%2045.9-32.8-32.4-33%2032.2%204.9-45.9-45.8-5.8%2038.9-24.8-24-39.4%2043.6%2015%2015.8-43.4%2015.5%2043.5%2043.7-14.7-24.3%2039.2%2038.8%2025.1Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-hn'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2318c3df'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cg%20id='hn-c'%20fill='%2318c3df'%20transform='translate(320%20240)scale(26.66665)'%3e%3cg%20id='hn-b'%3e%3cpath%20id='hn-a'%20d='m-.3%200%20.5.1L0-1z'/%3e%3cuse%20xlink:href='%23hn-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23hn-b'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23hn-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3cuse%20xlink:href='%23hn-b'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3cuse%20xlink:href='%23hn-b'%20width='100%25'%20height='100%25'%20transform='rotate(-144)'/%3e%3c/g%3e%3cuse%20xlink:href='%23hn-c'%20width='100%25'%20height='100%25'%20transform='translate(133.3%20-42.7)'/%3e%3cuse%20xlink:href='%23hn-c'%20width='100%25'%20height='100%25'%20transform='translate(133.3%2037.3)'/%3e%3cuse%20xlink:href='%23hn-c'%20width='100%25'%20height='100%25'%20transform='translate(-133.3%20-42.7)'/%3e%3cuse%20xlink:href='%23hn-c'%20width='100%25'%20height='100%25'%20transform='translate(-133.3%2037.3)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BtOx$4os__\"","export default \"__VITE_ASSET__CYk6RizZ__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-hu'%3e%3cg%20fillRule='evenodd'%3e%3cpath%20fill='%23fff'%20d='M640.006%20479.994H0V0h640.006z'/%3e%3cpath%20fill='%23388d00'%20d='M640.006%20479.994H0V319.996h640.006z'/%3e%3cpath%20fill='%23d43516'%20d='M640.006%20160.127H0V.13h640.006z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ic'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%230768a9'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23fc0'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-id'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23e70011'%20d='M0%200h640v240H0Z'/%3e%3cpath%20fill='%23fff'%20d='M0%20240h640v240H0Z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ie'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h639.995v480.004H0z'/%3e%3cpath%20fill='%23009A49'%20d='M0%200h213.334v480.004H0z'/%3e%3cpath%20fill='%23FF7900'%20d='M426.668%200h213.334v480.004H426.668z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-il'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='il-a'%3e%3cpath%20fill-opacity='.7'%20d='M-87.6%200H595v512H-87.6z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23il-a)'%20transform='translate(82.1)scale(.94)'%3e%3cpath%20fill='%23fff'%20d='M619.4%20512H-112V0h731.4z'/%3e%3cpath%20fill='%230038b8'%20d='M619.4%20115.2H-112V48h731.4zm0%20350.5H-112v-67.2h731.4zm-483-275%20110.1%20191.6L359%20191.6z'/%3e%3cpath%20fill='%23fff'%20d='m225.8%20317.8%2020.9%2035.5%2021.4-35.3z'/%3e%3cpath%20fill='%230038b8'%20d='M136%20320.6%20246.2%20129l112.4%20190.8z'/%3e%3cpath%20fill='%23fff'%20d='m225.8%20191.6%2020.9-35.5%2021.4%2035.4zM182%20271.1l-21.7%2036%2041-.1-19.3-36zm-21.3-66.5%2041.2.3-19.8%2036.3zm151.2%2067%2020.9%2035.5-41.7-.5zm20.5-67-41.2.3%2019.8%2036.3zm-114.3%200L189.7%20256l28.8%2050.3%2052.8%201.2%2032-51.5-29.6-52z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CgJwNywi__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-in'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23f93'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23128807'%20d='M0%20320h640v160H0z'/%3e%3cg%20transform='matrix(3.2%200%200%203.2%20320%20240)'%3e%3ccircle%20r='20'%20fill='%23008'/%3e%3ccircle%20r='17.5'%20fill='%23fff'/%3e%3ccircle%20r='3.5'%20fill='%23008'/%3e%3cg%20id='in-d'%3e%3cg%20id='in-c'%3e%3cg%20id='in-b'%3e%3cg%20id='in-a'%20fill='%23008'%3e%3ccircle%20r='.9'%20transform='rotate(7.5%20-8.8%20133.5)'/%3e%3cpath%20d='M0%2017.5.6%207%200%202l-.6%205z'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-a'%20width='100%25'%20height='100%25'%20transform='rotate(15)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-b'%20width='100%25'%20height='100%25'%20transform='rotate(30)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-c'%20width='100%25'%20height='100%25'%20transform='rotate(60)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(120)'/%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(-120)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__D9E7PzvJ__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-iq'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20320h640v160H0z'/%3e%3cg%20fill='%23007a3d'%20transform='translate(-179.3%20-92.8)scale(1.75182)'%3e%3cpath%20d='M325.5%20173.2a5%205%200%200%201-1.4-1c-.3-.5-.1-.5%201.2-.2%202.3.7%203.8.4%205.3-.8l1.3-1.1%201.5.7c.9.5%201.8.8%202%20.7.7-.2%202.1-2%202-2.6%200-.7.6-.5%201%20.3.6%201.6-.3%203.5-2%203.9-.7.2-1.4.1-2.6-.3-1.4-.5-1.7-.5-2.4%200a5.4%205.4%200%200%201-5.9.4m5.8-5.3a8%208%200%200%201-1-4c.1-.6.3-.8.8-.6%201%20.3%201.2%201%201%203%200%201.8-.3%202.3-.8%201.6m-67.6-1.9c-.1%201.3%202.4%204.6%203.5%205.2-.8.3-1.7.2-2.4.5-4%204-18.4%2018-21%2021.4%207.8.2%2016.4-.1%2023.7-.4%200-5.3%205-5.6%208.4-7.5%201.7%202.7%206%202.5%206.6%206.6v17.6H216a9.7%209.7%200%200%201-12.3%207.5c2-2%205.4-2.8%206.6-5.7%201-6.4-2-10.3-4-14a24%2024%200%200%200%207-3.6c-2.3%207%206.2%206.3%2012.4%206.1.2-2.4.1-5.2-1.7-5.6%202.3-.9%202.7-1.2%206.6-4.4v9.6l46.1-.1c0-3%20.8-7.9-1.6-7.9-2.2%200%200%206.2-1.8%206.2h-35.7v-6c1.5-1.6%201.3-1.5%2011.6-11.8%201-1%208.3-7.6%2014.6-13.7zm89.1-.3c2.5%201.4%204.5%203.2%207.5%204-.3%201.3-1.5%201.8-1.8%203.1v27c3.4.7%204.2-1.3%205.8-2.3.4%204.3%203.2%208.5%203%2012h-14.5zm-19.4%2014.5s5.3-4.5%205.3-4.7V199h3.8l-.1-26.3c1.5-1.6%204.6-3.8%205.3-5.4v42h-33.4c-.5-8.7-.6-17.7%209.6-15.8V190c-.3-.6-.9.1-1-.7%201.6-1.6%202.1-2%206.5-5.8l.1%2015.5h3.9zm-12.6%2018.6c.7%201%203.2%201%203-.8-.3-1.5-3.5-1-3%20.8'/%3e%3ccircle%20cx='224'%20cy='214.4'%20r='2'/%3e%3cpath%20d='M287%20165.8c2.5%201.3%204.5%203.2%207.6%204-.4%201.2-1.5%201.7-1.8%203v27c3.4.7%204.1-1.2%205.7-2.3.5%204.3%203.2%208.6%203.1%2012H287z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__uahRzTjq__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-is'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20strokeWidth='0'%20clip-path='url(%23a)'%3e%3cpath%20fill='%23003897'%20d='M0%200h666.67v480H0z'/%3e%3cpath%20d='M0%20186.67h186.67V0h106.67v186.67h373.33v106.67H293.34v186.67H186.67V293.34H0V186.67z'%20fill='%23fff'/%3e%3cpath%20d='M0%20213.33h213.33V0h53.333v213.33h400v53.333h-400v213.33H213.33v-213.33H0V213.33z'%20fill='%23d72828'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-it'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v479.997H0z'/%3e%3cpath%20fill='%23009246'%20d='M0%200h213.331v479.997H0z'/%3e%3cpath%20fill='%23ce2b37'%20d='M426.663%200h213.331v479.997H426.663z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__C1uAv91C__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jm'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23000001'%20d='m0%200%20320%20240L0%20480zm640%200L320%20240l320%20240z'/%3e%3cpath%20fill='%23090'%20d='m0%200%20320%20240L640%200zm0%20480%20320-240%20320%20240z'/%3e%3cpath%20fill='%23fc0'%20d='M640%200h-59.6L0%20435.3V480h59.6L640%2044.7z'/%3e%3cpath%20fill='%23fc0'%20d='M0%200v44.7L580.4%20480H640v-44.7L59.6%200z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jo'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='jo-a'%3e%3cpath%20fill-opacity='.7'%20d='M-117.8%200h682.6v512h-682.6z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23jo-a)'%20transform='translate(110.5)scale(.9375)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23000001'%20d='M-117.8%200h1024v170.7h-1024z'/%3e%3cpath%20fill='%23fff'%20d='M-117.8%20170.7h1024v170.6h-1024z'/%3e%3cpath%20fill='%23090'%20d='M-117.8%20341.3h1024V512h-1024z'/%3e%3cpath%20fill='red'%20d='m-117.8%20512%20512-256-512-256z'/%3e%3cpath%20fill='%23fff'%20d='m24.5%20289%205.7-24.9H4.7l23-11-15.9-19.9%2023%2011%205.6-24.8%205.7%2024.9L69%20233.2l-16%2019.9%2023%2011H50.6l5.7%2024.9-15.9-20z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jp'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='jp-a'%3e%3cpath%20fill-opacity='.7'%20d='M-88%2032h640v480H-88z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23jp-a)'%20transform='translate(88%20-32)'%3e%3cpath%20fill='%23fff'%20d='M-128%2032h720v480h-720z'/%3e%3ccircle%20cx='523.1'%20cy='344.1'%20r='194.9'%20fill='%23bc002d'%20transform='translate(-168.4%208.6)scale(.76554)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-ke'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='ke-a'%20stroke-miterlimit='10'%20d='m-28.6%2047.5%201.8%201%2046.7-81c2.7-.6%204.2-3.2%205.7-5.8%201-1.8%205-8.7%206.7-17.7a58%2058%200%200%200-11.9%2014.7c-1.5%202.6-3%205.2-2.3%207.9z'/%3e%3c/defs%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v144H0z'/%3e%3cpath%20fill='%23060'%20d='M0%20336h640v144H0z'/%3e%3cg%20id='ke-b'%20transform='matrix(3%200%200%203%20320%20240)'%3e%3cuse%20xlink:href='%23ke-a'%20width='100%25'%20height='100%25'%20stroke='%23000'/%3e%3cuse%20xlink:href='%23ke-a'%20width='100%25'%20height='100%25'%20fill='%23fff'/%3e%3c/g%3e%3cuse%20xlink:href='%23ke-b'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3cpath%20fill='%23b00'%20d='M640.5%20168H377c-9-24-39-72-57-72s-48%2048-57%2072H-.2v144H263c9%2024%2039%2072%2057%2072s48-48%2057-72h263.5z'/%3e%3cpath%20id='ke-c'%20d='M377%20312c9-24%2015-48%2015-72s-6-48-15-72c-9%2024-15%2048-15%2072s6%2048%2015%2072'/%3e%3cuse%20xlink:href='%23ke-c'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3cg%20fill='%23fff'%20transform='matrix(3%200%200%203%20320%20240)'%3e%3cellipse%20rx='4'%20ry='6'/%3e%3cpath%20id='ke-d'%20d='M1%205.8s4%208%204%2021-4%2021-4%2021z'/%3e%3cuse%20xlink:href='%23ke-d'%20width='100%25'%20height='100%25'%20transform='scale(-1)'/%3e%3cuse%20xlink:href='%23ke-d'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3cuse%20xlink:href='%23ke-d'%20width='100%25'%20height='100%25'%20transform='scale(1%20-1)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-kg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kg-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85%200h682.7v512H-85z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kg-a)'%20transform='translate(79.6)scale(.9375)'%3e%3cpath%20fill='red'%20d='M-128%200h768.8v512H-128z'/%3e%3cpath%20fill='%23ff0'%20d='M105.5%20261.1c13.6-16.6%2041.9-.4%2065-12.3-27.4%201.5-42.3-13.2-63.9-11.1%2022.4-13.8%2041.5%204.5%2066.5-2.8-33.1-2.8-31.7-17.7-61.9-19.8%2026.8-11.4%2040%2011.8%2066.3%206.5-31-7.1-35-25.3-58-29.2%2033.6-5%2031.4%2014.8%2064.3%2017.2-33.4-14.3-24.7-26.8-52.6-37.7%2031.3-.7%2029.2%2021%2061%2026.6-27.2-17.2-23.9-32.9-46.2-45.2%2026.5.5%2029%2027.6%2056.1%2036-24.1-19.1-17.8-35.3-38.6-52.4%2026.4%206.2%2022.5%2029.6%2050%2044.6-20.4-22.6-12.6-38.8-30.3-57.3%2025.4%208.1%2015.7%2030.4%2042%2051.6-15-24.9-5.7-40.8-20.6-61.7%2023.6%2012.1%2012.2%2034.9%2034%2057.5-10.3-25.5%200-41.3-10.5-63.9%2020.2%2015%208.2%2039.3%2024.5%2062.5-6-32%207.8-37.2%203.5-65.2%2015.3%2018.8-1.8%2037.6%2010%2065.3-1.5-31.5%2015.3-38.8%2012.4-64%2015.1%2022.6-8.5%2042.3%201.4%2066.5%202.5-29.8%2022.1-37.6%2022.4-60.8%2012%2021.3-14%2036.7-9.8%2065%208.5-31.2%2029.4-35%2032-56%207.1%2024.6-21.4%2036-19.7%2063.4%208.5-27.7%2034.6-31%2040-51.4%203.3%2026-22.4%2030.7-29.7%2059.5%2013.5-23.5%2037.2-25.4%2047.8-44-.8%2025.8-29.8%2029.2-38.7%2053.3%2016.7-20.5%2037.7-17%2054.4-35.1-1.8%2023.3-31.3%2022-47%2046.1%2018.1-16.7%2045.4-11.7%2059.3-26.1-.7%2020.6-36.9%2019-54%2037.5%2021-11.6%2047.8-4.8%2063.2-15.5-2.8%2018-41%2013.8-59.3%2028%2025.2-7%2044.7%203.7%2065-4-9.9%2017.5-44.6%206.4-63%2017.8%2022-3.7%2045.2%209.6%2065.1%205.3-6.5%2015.2-44.6-1-65%208.5%2024.4-.2%2040.3%2015.5%2063%2014.4-12.3%2013.8-45.7-5.1-65.2-1.9%2023.8%205%2042%2024.6%2060%2025.6-14.9%2011.3-42.5-14.5-65-11.3%2023.2%206.2%2042.6%2032.5%2055.8%2033.1-14.3%209.8-42.5-22.5-61.8-21.3%2023.5%2010.6%2034.2%2037.5%2049.7%2041.3-19.1%206.1-37.9-29.2-58.4-30.5%2023.8%2015%2025.1%2038%2043.4%2048.2-19.3%204.7-33-35.2-53.3-38.6%2019.5%2014.3%2022.5%2045%2035.4%2054.6-19.6%201-26.7-40.7-46.8-46.7%2017.2%2014.4%2013.1%2045.6%2026.5%2059-20.4-4.3-17.8-40.6-39.1-52.9%2015.3%2019.4%207.5%2046.9%2017.5%2062.4-19.9-8-11.3-40.6-30.2-59%2010.3%2020.6-.8%2044.6%207.4%2064.5-18.2-8.9-6-47.4-19.9-62.7%206.4%2023.8-5.4%2043.5-.6%2064.8-18.6-21.5%202.8-43.2-13.3-65.1%204.2%2025.1-13.4%2042.7-10.6%2063.7-14.7-17.2%208-44.7-3.5-66.4%202.4%2024.7-20.3%2046.4-18.7%2062-12-20%2013.3-43.6%206.5-66.3-1.4%2023.6-24.4%2036.4-28.7%2057.9-7.7-23.7%2019.6-40.8%2017.2-64.1-7.8%2022.1-30%2031-37.8%2052.5-6.4-23.7%2026-36.2%2026.8-61-10%2023.2-36.5%2028.4-45.3%2046.2-3.3-23.5%2033.8-34%2035.2-56.3-12%2021.4-41%2022.3-51%2039.3-1.5-23.4%2037.6-26.3%2043.7-50.8-11.9%2018.2-43.7%2015.9-57%2030.7%202.1-21.7%2044.4-23%2051.2-42.6-15.8%2015.2-45%209-61.5%2021%209.2-21.4%2048.9-16.9%2057.8-32.3-17.5%209.1-48.6.2-64%209.4%2014-20.2%2044.8-8.1%2062.3-22-28.4%204.1-45.5-7.2-65.2-2z'/%3e%3cpath%20fill='%23ff0'%20d='M356%20256.1a99.2%2099.2%200%201%201-198.5%200%2099.2%2099.2%200%200%201%20198.4%200z'/%3e%3cpath%20fill='red'%20d='M343.2%20256.3a86.3%2086.3%200%201%201-172.6%200%2086.3%2086.3%200%200%201%20172.6%200'/%3e%3cpath%20fill='%23ff0'%20d='M331.2%20256.5a74%2074%200%201%201-148.2%200%2074%2074%200%200%201%20148.2%200'/%3e%3cpath%20fill='red'%20d='M194%20208c20.5-.5%2046%201.4%2062.9%2014.8a97.1%2097.1%200%200%201%2060.5-14.3l11%2020.1a101%20101%200%200%200-50%208.2%2085.3%2085.3%200%200%201%2034.6%2072.1c-2.7%203.4-7%207.1-9.7%2010.5%204-28.5-11-60.3-32.9-77%2017.8%2025.6%2028.3%2048.6%2025.4%2080.4l-10%206.4c4.6-28-2-61-22.7-80%2012%2017.5%2023.8%2049%2016.4%2081-3.2%201-8.2%203.7-11.4%204.6a96%2096%200%200%200-10.8-78.7c-13.8%2019.8-18.3%2050-10.5%2078-3.8-1-6.7-2.2-10.6-3.1-5.7-30%202.2-64%2015.9-81.7-14%208.1-27.1%2042.7-23.4%2078l-9.3-4.3c-4.5-26.3%207.4-60.6%2024.5-80.4-19.4%2012.2-35.2%2042.3-32.5%2074.6-3-2.6-5.7-3.9-8.7-6.6-3.4-28.2%2013-56.6%2032.1-73.6-16.1-7.3-30-8.7-50-8.4%203.1-6.5%206-14.1%209.2-20.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__Cda$e8n5__\"","export default \"__VITE_ASSET__BWOqLVhg__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-km'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='km-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23km-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23ff0'%20d='M0%200h768.8v128H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20128h768.8v128H0z'/%3e%3cpath%20fill='%23be0027'%20d='M0%20256h768.8v128H0z'/%3e%3cpath%20fill='%233b5aa3'%20d='M0%20384h768.8v128H0z'/%3e%3cpath%20fill='%23239e46'%20d='M0%200v512l381.9-255.3z'/%3e%3cpath%20fill='%23fff'%20d='M157.2%20141.4c-85-4.3-123.9%2063.5-123.8%20115.9-.2%2062%2058.6%20113%20112.8%20110C117%20353.5%2081.2%20314.6%2081%20257c-.3-52.1%2029.5-97.5%2076.3-115.6z'/%3e%3cpath%20fill='%23fff'%20d='m156%20197-12-9.3-14.6%204.6%205.2-14.4-8.8-12.4%2015.2.6%209-12.3%204.3%2014.7%2014.4%204.8-12.6%208.5zm-.3%2052.1-12-9.4-14.6%204.6%205.3-14.3-8.9-12.4%2015.3.5%209-12.2%204.2%2014.6%2014.5%204.9-12.7%208.5zm.2%2052.6-12-9.4-14.5%204.6%205.2-14.3-8.8-12.4%2015.2.5%209-12.2%204.3%2014.6%2014.4%204.8-12.6%208.6zm-.2%2053-12-9.3L129%20350l5.3-14.4-8.9-12.4%2015.3.6%209-12.3%204.2%2014.7%2014.5%204.8-12.7%208.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-kn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kn-a'%3e%3cpath%20fill-opacity='.7'%20d='M-80.1%200h682.7v512H-80.1z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kn-a)'%20transform='translate(75.1)scale(.9375)'%3e%3cpath%20fill='%23ffe900'%20d='M-107.8.2h737.6v511.3h-737.6z'/%3e%3cpath%20fill='%2335a100'%20d='m-108.2.2.8%20368.6L466.6%200z'/%3e%3cpath%20fill='%23c70000'%20d='m630.7%20511.5-1.4-383.2-579%20383.5z'/%3e%3cpath%20fill='%23000001'%20d='m-107.9%20396.6.5%20115.4%20125.3-.2%20611.7-410.1L629%201.4%20505.2.2z'/%3e%3cpath%20fill='%23fff'%20d='m380.4%20156.6-9.8-42.2%2033.3%2027%2038-24.6-17.4%2041.3%2033.4%2027-44.2-1.5-17.3%2041.3-9.9-42.2-44.1-1.5zm-275.2%20179-9.9-42.3%2033.3%2027%2038-24.6-17.4%2041.3%2033.4%2027-44.1-1.5-17.4%2041.3-9.8-42.2-44.1-1.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-kp'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kp-a'%3e%3cpath%20fill-opacity='.7'%20d='M5%20.1h682.6V512H5.1z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kp-a)'%20transform='translate(-4.8%20-.1)scale(.93768)'%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20d='M776%20511.5H-76V.5h852z'/%3e%3cpath%20fill='%233e5698'%20d='M776%20419H-76v92.5h852z'/%3e%3cpath%20fill='%23c60000'%20d='M776%20397.6H-76V114.4h852z'/%3e%3cpath%20fill='%233e5698'%20d='M776%20.6H-76V93h852z'/%3e%3cpath%20fill='%23fff'%20d='M328.5%20256c0%2063.5-53%20115-118.6%20115S91.3%20319.5%2091.3%20256s53-114.8%20118.6-114.8c65.5%200%20118.6%2051.4%20118.6%20114.9z'/%3e%3cpath%20fill='%23c40000'%20d='m175.8%20270.6-57-40.7%2071-.2%2022.7-66.4%2021.1%2066.1%2071-.4-57.9%2041.2%2021.3%2066.1-57-40.7-58%2041.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-kr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-95.8-.4h682.7v512H-95.8z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kr-a)'%20transform='translate(89.8%20.4)scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M-95.8-.4H587v512H-95.8Z'/%3e%3cg%20transform='rotate(-56.3%20361.6%20-101.3)scale(10.66667)'%3e%3cg%20id='kr-c'%3e%3cpath%20id='kr-b'%20fill='%23000001'%20d='M-6-26H6v2H-6Zm0%203H6v2H-6Zm0%203H6v2H-6Z'/%3e%3cuse%20xlink:href='%23kr-b'%20width='100%25'%20height='100%25'%20y='44'/%3e%3c/g%3e%3cpath%20stroke='%23fff'%20d='M0%2017v10'/%3e%3cpath%20fill='%23cd2e3a'%20d='M0-12a12%2012%200%200%201%200%2024Z'/%3e%3cpath%20fill='%230047a0'%20d='M0-12a12%2012%200%200%200%200%2024A6%206%200%200%200%200%200Z'/%3e%3ccircle%20cy='-6'%20r='6'%20fill='%23cd2e3a'/%3e%3c/g%3e%3cg%20transform='rotate(-123.7%20191.2%2062.2)scale(10.66667)'%3e%3cuse%20xlink:href='%23kr-c'%20width='100%25'%20height='100%25'/%3e%3cpath%20stroke='%23fff'%20d='M0-23.5v3M0%2017v3.5m0%203v3'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-kw'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kw-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23kw-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M0%20170.6h1024v170.7H0z'/%3e%3cpath%20fill='%23f31830'%20d='M0%20341.3h1024V512H0z'/%3e%3cpath%20fill='%2300d941'%20d='M0%200h1024v170.7H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200v512l255.4-170.7.6-170.8z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__$qLAcyK___\"","export default \"__VITE_ASSET__D$N7gzCv__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-la'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='la-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23la-a)'%3e%3cpath%20fill='%23ce1126'%20d='M-40%200h720v480H-40z'/%3e%3cpath%20fill='%23002868'%20d='M-40%20119.3h720v241.4H-40z'/%3e%3cpath%20fill='%23fff'%20d='M423.4%20240a103.4%20103.4%200%201%201-206.8%200%20103.4%20103.4%200%201%201%20206.8%200'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-lb'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='lb-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23lb-a)'%20transform='translate(80)scale(.9375)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23EE161F'%20d='M-128%20384h768v128h-768zm0-384h768v128h-768z'/%3e%3cpath%20fill='%23fff'%20d='M-128%20128h768v256h-768z'/%3e%3c/g%3e%3cpath%20fill='%2300A850'%20d='M252.1%20130c-7.8%2015.5-13%2015.5-26%2026-5.2%205.1-13%207.7-2.6%2013-10.5%205.1-15.7%207.7-20.9%2018.1l2.6%202.6s10-4.8%2010.4-2.6c1.8%202.1-13%2010-14.9%2011.3l-11%207c-13.1%2010.3-21%207.7-28.7%2023.3l26-2.6c5.2%2018.2-13%2020.8-26%2028.6l-20.9%2013c5.3%2018.2%2020.9%207.8%2033.9%202.6l2.6%202.6v5.2l-26%2013s-30.8%2017.6-31.3%2018.2c-.2%201%200%205.2%200%205.2%2010.4%202.6%2026%205.2%2036.5%200%2013-5.2%2015.6-10.4%2031.2-10.4a100.6%20100.6%200%200%201-52%2020.8v10.4c15.6%200%2026%200%2039-2.6l33.8-10.4c7.8%200%2015.7%207.8%2013%2015.6-7.7%2028.6-39%2023.4-49.4%2046.8L213%20369c10.4-5.2%2020.8-10.3%2033.8-7.7%2015.6%205.2%2015.6%2015.6%2036.4%2020.8l-5.2-13c5.2%202.6%2010.4%202.6%2015.7%205.2%2013%205.2%2015.6%2010.4%2031.2%207.8-13-15.6-15.6-13-26-23.4-10.4-15.6-15.7-39%200-41.6l18.2%205.2c18.2%202.6%2018.2-2.6%2044.2%207.8%2015.7%205.2%2020.9%2013%2039%207.8-7.7-18.2-36.3-31.2-54.6-36.4%2020.9-13%2015.6%205.2%2044.3-2.6v-5.2C369.3%20278%20361.4%20265%20332.8%20265l44.3-5.2v-5.2s-43.7-11.4-44.7-11.9c.3-1.3%201.4-3.3%204.3-4.5%208.3%205.4%2033.3%204.8%2034.8%204.7-.8-6.4-12.7-11.7-23-16.9%200%200-44.7-27.5-44.9-29.9.9-7%2018.3%201.1%2037%206.5-5.2-10.4-15.6-15.6-26-18.2l15.6-2.6c-10.4-23.4-36.4-20.8-52-31.2-10.5-7.8-10.5-13-26.1-20.7z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23fff'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='3.2'%20d='M224%20303c1.9-6.1%204.4-11.6-7.2-16.9-11.6-5.3%205.8%2021.1%207.2%2017zm13.7-12.3c-2.3.3-3.6%208.8%201.1%2011.2%205.2.8%201-11.1-1.1-11.2m13.5-1c-2.4.8-2.5%2012.8%206%2010.6%208.6-2.1%200-11.5-6-10.5zM267%20259c1.8-3-.1-15-7.4-10-7.4%205.1%205%2010.8%207.4%2010m-16-10c2.3-.9%202.5-8.3-4-6.3-6.3%201.9%202.3%207.8%204%206.3m-14.4%202.9s-4.5-6.2-8-4.9c-4.3%204.2%208.3%205%208%204.9M187%20271.7c1.9.2%2016-2.3%2020.9-7.8%204.9-5.5-25.1%202.3-25.1%202.4%200%20.1%202.8%204.9%204.2%205.4m141.1-35c.7-1.3-7.5-7.1-12.4-4.8-1.3%204.3%2012.4%205.7%2012.4%204.8m-27.8-14c1.6-2.2-3.5-11.3-13.7-6.2-10.2%205%2010.7%209.8%2013.7%206.3zm-32.1-5.3s2.5-8.2%208.6-6.6c7%205.3-8.3%206.9-8.6%206.6m-6-6.2c-1-2.3-7.3-1-14.6%203.9-7.4%204.7%2016.8%201.4%2014.6-4zm18.7-22.1s6.5-3%208.5%200c2.7%204.3-8.6%200-8.5%200m-5.5-2.9c-1.3-2.6-8.5-2.9-8.3%201-1.2%203%209.4%202.4%208.3-1m-17.2%200c-.7-1.5-11%200-14%206.2%205%202.4%2016.3-2.3%2014-6.2m-22%206.3s-13.4%208.3-14.3%2014.3c.4%205.2%2016.8-9.4%2016.8-9.4s1.4-5.8-2.4-4.9zm-14.9-7.5c.4-1.7%206.7-5.6%207.2-5.3.5%201.7-5.1%206.3-7.2%205.3m4.3%2031.6c.3-2.5-16-2.3-9.9%205.2%205.2%206.3%2011-4.1%209.9-5.2m-15%2010.7c-.8-1.6-2-6-4.2-6.4-1.9%200-11.7%202-12.5%203.6-.4%201.3%204.1%209.4%205.6%209.6%201.8.7%2010.9-6%2011.2-6.8zm88.4%2055.2c.5-1.8%2017.3-7.5%2023-2%206.8%209.3-23.4%205-23%202m46%2010.9c3.7-6.2-11.3-13.6-17.6-6.5%202.2%208.5%2014.6%2011.6%2017.6%206.5'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-lc'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%2365cfff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='m318.9%2042%20162.7%20395.3-322.6.9z'/%3e%3cpath%20fill='%23000001'%20d='m319%2096.5%20140.8%20340-279%20.8z'/%3e%3cpath%20fill='%23ffce00'%20d='m318.9%20240.1%20162.7%20197.6-322.6.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__ebA2J1OA__\"","export default \"__VITE_ASSET__BvF64tyo__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-lr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='lr-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23lr-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M0%200h767.9v512H0z'/%3e%3cpath%20fill='%23006'%20d='M0%200h232.7v232.8H0z'/%3e%3cpath%20fill='%23c00'%20d='M0%20464.9h767.9V512H0z'/%3e%3cpath%20fill='%23c00'%20d='M0%20465.4h767.9V512H0zm0-92.9h767.9v46.2H0zm0-93.2h766V326H0zM232.7%200h535.1v46.5H232.7zm0%20186h535.1v46.8H232.7zm0-92.7h535.1v46.5H232.7z'/%3e%3cpath%20fill='%23fff'%20d='m166.3%20177.5-50.7-31-50.4%2031.3%2018.7-50.9-50.3-31.4%2062.3-.4%2019.3-50.7L135%2095h62.3l-50.1%2031.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ls'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23009543'%20d='M0%20336h640v144H0z'/%3e%3cpath%20fill='%2300209f'%20d='M0%200h640v144H0z'/%3e%3cpath%20stroke='%23000'%20stroke-width='1.6'%20d='M319.6%20153c-2.7%200-5.4%203-5.4%203l.3%2032.4-10.3%2010.7h8.3v18.5l-49%2066-7.2-2.6-12.7%2027s31.3%2019.6%2076.7%2019c49.8-.5%2076.9-19.9%2076.9-19.9l-13-26.6-6.5%202.8-49.6-65.6v-19.1h8.2L325.1%20188v-32.2s-2.7-3-5.5-2.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='8'%20d='M336.7%20230.4h-33.9s-12.2-25.9-10.3-44c2-18.4%2012.6-27.1%2026.6-27.3%2016.6-.1%2025.2%208.1%2027.8%2026.6%202.6%2018.3-10.2%2044.7-10.2%2044.7z'/%3e%3cpath%20fill='%23fff'%20d='M260.5%20292.1c-.6.7-4.7%208.9-4.7%208.9l7-1.5zm4%2010.5-7.4%202.4%208.9%203.5zm3.3-10.3%203.7%2010.9%209-2.6-2.3-5.2zm5.8%2014.8%201.2%204.4%2012%203-4.8-10.2zm13.2-9.3%204.3%2010.2%209-3.5-3-4.5zm6%2013.9%201.4%203.8%2014%202-5.9-9.2-9.6%203.4zm13.4-11%205.2%209.1%2013-4.8-1.4-3.5-16.8-.7zm7.6%2012.4%202.7%204.8%2016.2-.5-6-9-13%204.7zm17.1-12%204.4%207.6%2010.4-5-2.8-4zm17%205.8-10.3%205.1%202.7%204.5%2013.8-2.2zm3.3-8%205.3%206.7%208.7-6.9-3-3zm15.9%203.5-8.3%206.3%202.2%203.9%2011.4-3zm11.4-13%202%202.9-5.7%208.5-5.9-7.6zm3.9%207.3%203.5%207-7%202.4-.6-3.3%204-6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-lt'%3e%3cg%20fillRule='evenodd'%20transform='matrix(.64143%200%200%20.96773%200%200)'%20strokeWidth='1pt'%3e%3crect%20transform='matrix(.93865%200%200%20.69686%200%200)'%20rx='0'%20ry='0'%20width='1063'%20height='708.66'%20fill='%23007308'/%3e%3crect%20transform='matrix(.93865%200%200%20.69686%200%200)'%20rx='0'%20ry='0'%20width='1063'%20y='475.56'%20height='236.22'%20fill='%23bf0000'/%3e%3cpath%20fill='%23ffb300'%20d='M0%200h997.77v164.61H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-lu'%3e%3cpath%20fill='%2300a1de'%20d='M0%20240h640v240H0z'/%3e%3cpath%20fill='%23ed2939'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-lv'%3e%3cg%20fillRule='evenodd'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480.003H0z'/%3e%3cpath%20fill='%23ab231d'%20d='M0%200h640v192.001H0zM0%20288.002h640v192.001H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ly'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ly-a'%3e%3cpath%20d='M166.7-20h666.6v500H166.7z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23ly-a)'%20transform='matrix(.96%200%200%20.96%20-160%2019.2)'%3e%3cpath%20fill='%23239e46'%20d='M0-20h1000v500H0z'/%3e%3cpath%20fill='%23000001'%20d='M0-20h1000v375H0z'/%3e%3cpath%20fill='%23e70013'%20d='M0-20h1000v125H0z'/%3e%3cpath%20fill='%23fff'%20d='M544.2%20185.8a54.3%2054.3%200%201%200%200%2088.4%2062.5%2062.5%200%201%201%200-88.4M530.4%20230l84.1-27.3-52%2071.5v-88.4l52%2071.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ma'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23c1272d'%20d='M640%200H0v480h640z'/%3e%3cpath%20fill='none'%20stroke='%23006233'%20stroke-width='11.7'%20d='M320%20179.4%20284.4%20289l93.2-67.6H262.4l93.2%2067.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-mc'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23f31830'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20240h640v240H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__ClHHUfTW__\"","export default \"__VITE_ASSET__DqNiN3_A__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mf'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mg'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fc3d32'%20d='M213.3%200H640v240H213.3z'/%3e%3cpath%20fill='%23007e3a'%20d='M213.3%20240H640v240H213.3z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h213.3v480H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mh'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%233b5aa3'%20d='M0%200h639.9v480H0z'/%3e%3cpath%20fill='%23e2ae57'%20d='M0%20467%20639.9%200v87L0%20480z'/%3e%3cpath%20fill='%23fff'%20d='M22.4%20480%20640%20179.2l-.1-95.5L0%20480zm153-464.8L169%20118l-27-65.6%2010.4%2069.8-41.9-56.4%2027.5%2064.3-55-42.6%2042.8%2053.6-62.1-27.6%2054.4%2041.2-67.7-9%2064%2025.4L14%20180.3l100.6%206.7-63.7%2026.2%2067-9-54.3%2040%2063-27.6-43%2054%2054.6-41.3-27%2062.9%2043.6-54.7-11.8%2068.1%2027.5-63.7%206.2%20100.7%209.7-100.4%2023.7%2064-9-69%2043.4%2054.8-28.6-64%2054.6%2044-43.4-54.9%2064.9%2027-57.4-41.9%2069.9%2011.8-67-25.7%20104.1-6.5-104-9.7%2068.5-22.8-71%209%2058.6-41-66%2026.5%2045.6-55.3-55.6%2043.4%2026.7-66.4-43.1%2056.4%209.3-70.4-25.7%2066.5-9.6-102.8z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-mk'%3e%3cpath%20fill='%23d20000'%20d='M0%200h640v480H0z'/%3e%3cpath%20d='M0%200h96l224%20231.43L544%200h96L0%20480h96l224-231.43L544%20480h96zm640%20192v96L0%20192v96zM280%200l40%20205.714L360%200zm0%20480l40-205.714L360%20480z'%20fill='%23ffe600'/%3e%3ccircle%20r='77.143'%20cy='240'%20cx='320'%20fill='%23ffe600'%20stroke='%23d20000'%20strokeWidth='17.143'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ml'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='red'%20d='M425.8%200H640v480H425.7z'/%3e%3cpath%20fill='%23009a00'%20d='M0%200h212.9v480H0z'/%3e%3cpath%20fill='%23ff0'%20d='M212.9%200h214v480h-214z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-mm'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fecb00'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2334b233'%20d='M0%20160h640v320H0z'/%3e%3cpath%20fill='%23ea2839'%20d='M0%20320h640v160H0z'/%3e%3cg%20transform='translate(320%20256.9)scale(176.87999)'%3e%3cpath%20id='mm-a'%20fill='%23fff'%20d='m0-1%20.3%201h-.6z'/%3e%3cuse%20xlink:href='%23mm-a'%20width='100%25'%20height='100%25'%20transform='rotate(-144)'/%3e%3cuse%20xlink:href='%23mm-a'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3cuse%20xlink:href='%23mm-a'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23mm-a'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20fill='%23ffd900'%20id='flag-icons-mn'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23da2032'%20d='M0%200h640v480H0Z'/%3e%3cpath%20fill='%230066b3'%20d='M213.3%200h213.4v480H213.3Z'/%3e%3ccircle%20cx='106.7'%20cy='181.8'%20r='40'/%3e%3ccircle%20cx='106.7'%20cy='163.6'%20r='43.6'%20fill='%23da2032'/%3e%3ccircle%20cx='106.7'%20cy='170.9'%20r='29.1'/%3e%3cpath%20d='M109.7%2076.4a8.7%208.7%200%200%200-5.2%207.5c-.2%202.5.9%205.3%201%207.7%200%204.2-4.3%205.6-4.3%2011.5%200%202%201.9%204.3%201.9%209.6-.4%202.8-2%203.5-3.7%203.7a3.6%203.6%200%200%201-3.6-3.7%203.6%203.6%200%200%201%201-2.5%203.6%203.6%200%200%201%20.4-.3c.8-.9%202-1.2%202-3.4%200-1.1-.8-2.2-1.5-4.2s-.2-5.2%201.4-7.1c-2.6%201-4.1%203.4-5%205.6-.8%202.7%200%204.2-1.2%206.5-.7%201.4-1.5%202-2.3%203.2-1%201.4-2%204.4-2%205.9a18.2%2018.2%200%200%200%2036.3%200c0-1.5-1.1-4.5-2-5.9-.9-1.2-1.7-1.8-2.4-3.2-1.2-2.3-.4-3.8-1.3-6.5-.8-2.2-2.3-4.6-4.9-5.6%201.6%202%202%205.2%201.4%207.1-.7%202-1.4%203-1.4%204.2%200%202.2%201.1%202.5%202%203.4a3.6%203.6%200%200%201%20.3.3%203.6%203.6%200%200%201%201%202.5%203.6%203.6%200%200%201-3.6%203.7c-2-.3-3.5-1.2-3.7-3.7%200-7%203-7.4%203-12.6%200-7.4-6.6-10.9-6.6-16.3%200-1.8.4-5%203-7.4M26.7%20229H63v174.5H26.7Zm123.6%200h36.4v174.5h-36.4zm-80%200H143l-36.3%2021.8Zm0%2029H143v14.6H70.3Zm0%20101.9H143v14.6H70.3Zm0%2021.8H143l-36.3%2021.8Z'/%3e%3ccircle%20cx='106.7'%20cy='316.4'%20r='36.4'/%3e%3cg%20fill='%23da2032'%20transform='translate(-38.8%2032.7)scale(.72727)'%3e%3ccircle%20cx='200'%20cy='363.5'%20r='10'/%3e%3ccircle%20cx='200'%20cy='416.5'%20r='10'/%3e%3cpath%20d='M200%20334a29.5%2029.5%200%200%201%200%2059%2023.5%2023.5%200%200%200%200%2047v6a29.5%2029.5%200%200%201%200-59%2023.5%2023.5%200%200%200%200-47z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-mo'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300785e'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fbd116'%20d='m295%20108.7%2040.5%2029.5L320%2090.5l-15.5%2047.7%2040.6-29.5z'/%3e%3cg%20id='mo-a'%3e%3cpath%20fill='%23fff'%20d='M320%20331.6H217.5a146.3%20146.3%200%200%201-3.8-4H320a2.1%202.1%200%200%201%201.4%202c0%20.8-.5%201.7-1.4%202m0-31.3a13%2013%200%200%200%201.2-7.6%2012.4%2012.4%200%200%200-1.2-3.8%2082%2082%200%200%201-32.5%2019%2081%2081%200%200%201-23.5%203.5h-63.1a144.4%20144.4%200%200%200%205.8%208h61c20%200%2038.2-7.2%2052.3-19.1m-109.6-24.7a32.3%2032.3%200%200%201-9.7%202%2081%2081%200%200%200%2060.8%2027.5%2080.9%2080.9%200%200%200%2058.5-25%20441%20441%200%200%200%204.5-58.8%20441%20441%200%200%200-4.5-67.7c-6.6%206-19%2018.7-24.8%2038.3A81%2081%200%200%200%20292%20215a80.7%2080.7%200%200%200%2013.7%2045%2080.7%2080.7%200%200%201-17-49.5c0-12.4%202.8-24.2%207.8-34.7a32.5%2032.5%200%200%201-7.5-13%2080.7%2080.7%200%200%200-10.5%2040c0%2018%205.9%2034.7%2015.9%2048.1a95%2095%200%200%200-73.4-29.4%2032.6%2032.6%200%200%201%206.8%208.9%2095%2095%200%200%201%2068.6%2029.4%2095%2095%200%200%200-61-22.2%2095%2095%200%200%200-36.7%207.3%2081.2%2081.2%200%200%200%2082.6%2052.2c-4.7.8-9.5%201.3-14.4%201.3a80.8%2080.8%200%200%201-56.4-22.8zM320%20364.4h-53.1a143.5%20143.5%200%200%200%2053.1%2010.1%2011%2011%200%200%200%201.3-5%2011%2011%200%200%200-1.3-5.1m0-24.5h-93.6a143.8%20143.8%200%200%200%207.8%206.2H320a4.6%204.6%200%200%200%201.3-3.1%204%204%200%200%200-1.3-3.1m0%2012.5h-76.7a143.6%20143.6%200%200%200%2014.4%208H320a7.6%207.6%200%200%200%201.2-4.2%207.5%207.5%200%200%200-1.2-3.8'/%3e%3cpath%20fill='%23fbd116'%20d='m200.5%20174.8%2025.4%2023.6-6.7-34-14.6%2031.4%2030.3-16.8zm36.9-32%2034.7.6-27.7-21%2010.1%2033.3%2011.3-32.9z'/%3e%3c/g%3e%3cuse%20xlink:href='%23mo-a'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BCQKfom$__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mq'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23231f1e'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300a650'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23ef1923'%20d='m0%200%20320%20240L0%20480z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mr'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23cd2a3e'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23006233'%20d='M0%2072h640v336H0z'/%3e%3cpath%20fill='%23ffc400'%20d='M470%20154.6a150%20150%200%200%201-300%200%20154.9%20154.9%200%200%200-5%2039.2%20155%20155%200%201%200%20310%200%20154.4%20154.4%200%200%200-5-39.2'%20class='mr-st1'/%3e%3cpath%20fill='%23ffc400'%20d='m320%2093.8-13.5%2041.5H263l35.3%2025.6-13.5%2041.4%2035.3-25.6%2035.3%2025.6-13.5-41.4%2035.3-25.6h-43.6z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DpqncORN__\"","export default \"__VITE_ASSET__BY1E7F6L__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mu'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%2300a04d'%20d='M0%20360h640v120H0z'/%3e%3cpath%20fill='%23151f6d'%20d='M0%20120h640v120H0z'/%3e%3cpath%20fill='%23ee2737'%20d='M0%200h640v120H0z'/%3e%3cpath%20fill='%23ffcd00'%20d='M0%20240h640v120H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mv'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23d21034'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23007e3a'%20d='M120%20120h400v240H120z'/%3e%3ccircle%20cx='350'%20cy='240'%20r='80'%20fill='%23fff'/%3e%3ccircle%20cx='380'%20cy='240'%20r='80'%20fill='%23007e3a'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mw'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23f41408'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2321873b'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23f31509'%20d='M220.5%20141c22.3-49.2%2084.5-72.8%20138.8-52.5a98.4%2098.4%200%200%201%2058%2052.5zm-26%206.4a332.3%20332.3%200%200%201-52.4-7.8c-4.1-1.3-4.3-3.6-3.8-5.3.5-1.7%203.1-3.6%206.2-3%205.6%201.4%2028.8%207%2050%2016.1m124.6-85.9c-4.2-21-5.2-44-4.8-48C314.7%209.6%20317%209%20319%209s4.7%201.8%204.7%204.7c0%205.3-.1%2027-4.6%2048zm11.6.5a249%20249%200%200%201-.3-48.2c.8-3.9%203.2-4.4%205.1-4.2%202%20.1%204.5%202.1%204.2%205-.5%205.3-2.6%2026.9-9%2047.4m10.4%201.3c-.2-21.3%203-44.3%204.1-48%201.1-3.9%203.6-4.2%205.5-3.9%202%20.3%204.3%202.5%203.8%205.3-1%205.3-5.2%2026.6-13.4%2046.6m11%202.2c1.8-21.2%207.3-43.8%208.8-47.5%201.5-3.7%204-3.8%205.8-3.4%202%20.5%204%202.8%203.3%205.6-1.6%205.1-7.7%2026-17.8%2045.3zm10.9%203.2c3.9-21%2011.5-43.1%2013.3-46.7%201.9-3.5%204.3-3.5%206.2-2.9%201.8.6%203.7%203.2%202.7%205.8A264%20264%200%200%201%20363%2068.7m10.1%203.8c5.8-20.7%2015.5-42%2017.7-45.5%202.2-3.4%204.6-3.1%206.4-2.3%201.8.7%203.4%203.4%202.1%206-2.5%204.8-12.5%2024.4-26.2%2041.8m10%204.7a262.9%20262.9%200%200%201%2022-43.9c2.4-3.2%204.9-2.7%206.6-1.8a4.4%204.4%200%200%201%201.5%206.1c-3%204.6-14.9%2023.4-30.1%2039.6m9.4%205.5c9.7-19.4%2023.3-39%2026.1-42%202.8-3%205.2-2.3%206.8-1.3a4.4%204.4%200%200%201%201%206.2c-3.5%204.4-17.2%2022.1-34%2037zm8.8%206.2c11.6-18.6%2027-37%2030.1-39.7%203-2.8%205.4-2%206.9-.8a4.3%204.3%200%200%201%20.3%206.2c-3.8%204.1-19.1%2020.7-37.3%2034.3m8.3%206.9a284%20284%200%200%201%2033.8-37.2c3.3-2.5%205.5-1.5%206.9-.3a4.3%204.3%200%200%201-.3%206.3c-4.1%203.8-21%2019.1-40.4%2031.2m7.6%207.5A278.4%20278.4%200%200%201%20454.4%2069c3.6-2.3%205.7-1.1%207%20.3%201.2%201.3%201.5%204.4-1%206.2a306%20306%200%200%201-43.2%2027.8m6.5%207.8A297.1%20297.1%200%200%201%20464%2079.6c3.7-2%205.7-.6%206.8.9%201.2%201.4%201.1%204.5-1.4%206.1-4.8%203-24.3%2015.6-45.7%2024.5m5.9%208.3a307%20307%200%200%201%2043-28.1c4-1.7%205.9-.2%206.9%201.3%201%201.6.6%204.6-2%206a320.8%20320.8%200%200%201-48%2020.8zm5.4%209.6a313.4%20313.4%200%200%201%2045.8-24.4c4.1-1.4%205.8.3%206.6%201.9.9%201.6.3%204.6-2.6%205.8-5.3%202.2-27%2011.4-49.8%2016.7m4.2%209.2a320%20320%200%200%201%2048-20.8c4.2-1%205.7.8%206.4%202.5.6%201.6-.3%204.6-3.2%205.5-5.5%201.9-28%209.3-51.2%2012.8m3.4%209.8a324.5%20324.5%200%200%201%2049.8-16.9c4.2-.6%205.6%201.2%206.1%203%20.5%201.7-.7%204.5-3.7%205.3-5.7%201.3-28.8%207-52.2%208.6M307.8%2062a252.4%20252.4%200%200%201-9.7-47.4c0-3.9%202.3-4.8%204.2-5%202-.1%205%201.5%205.2%204.3.5%205.3%202.6%2026.9.4%2048.1zm-11%201.3a251%20251%200%200%201-14.3-46.4c-.4-4%201.8-5%203.7-5.3%202-.3%205%201%205.6%203.8a263%20263%200%200%201%205%2047.9m-11%202.2A259%20259%200%200%201%20267%2020.3c-.8-3.9%201.3-5.1%203.2-5.6%201.9-.4%205%20.6%205.9%203.4%201.5%205.1%207.7%2026%209.6%2047.3zm-10.5%203A264%20264%200%200%201%20252.5%2025c-1.1-3.8.8-5.2%202.6-5.8%201.9-.6%205.1.2%206.2%202.8%202%205%2010.2%2025.4%2014%2046.4zM265.2%2072a270.4%20270.4%200%200%201-27-41.5c-1.4-3.7.4-5.3%202.2-6%201.8-.8%205-.2%206.4%202.4%202.5%204.8%2012.5%2024.5%2018.4%2045.1m-10.3%205a275.6%20275.6%200%200%201-31-39.2c-1.7-3.5-.1-5.2%201.6-6.1%201.7-.9%205-.6%206.6%201.9%203%204.6%2015%2023.3%2022.8%2043.4m-9.4%205.4A285.2%20285.2%200%200%201%20211%2045.7c-2.1-3.4-.7-5.2%201-6.3%201.5-1%205-1%206.7%201.4%203.4%204.3%2017.1%2022%2026.8%2041.5zm-8.7%206a292.2%20292.2%200%200%201-37.9-33.9c-2.4-3.2-1.1-5%20.4-6.2a5.5%205.5%200%200%201%206.8.8c3.8%204%2019.2%2020.7%2030.7%2039.3m-8.5%207a299%20299%200%200%201-41-30.7c-2.8-3-1.7-5-.3-6.3a5.5%205.5%200%200%201%206.9.3c4.2%203.7%2021%2019%2034.4%2036.6zm-7.4%207A306.6%20306.6%200%200%201%20177.2%2075c-3-2.8-2.1-4.8-.8-6.2%201.2-1.4%204.5-2.1%206.9-.3a292%20292%200%200%201%2037.6%2034zm-7%208.2a313%20313%200%200%201-46.2-23.8c-3.3-2.5-2.6-4.7-1.5-6.1%201.1-1.5%204.3-2.5%206.9-.9%204.8%203.1%2024.3%2015.5%2040.8%2030.8m-6.3%208.8c-22.2-7-44.9-17.6-48.4-19.9-3.6-2.2-3-4.4-2.1-6s4-2.8%206.8-1.4c5%202.7%2025.8%2013.5%2043.7%2027.3m-5.3%209c-22.8-5.3-46.3-14-50.1-16-3.7-2-3.5-4.2-2.6-5.8.8-1.6%203.7-3.1%206.6-2%205.3%202.3%2027%2011.4%2046.1%2023.8m-4.2%209a328.5%20328.5%200%200%201-51.4-12.2c-4-1.6-3.8-3.9-3.2-5.5.7-1.7%203.5-3.4%206.4-2.5%205.6%201.9%2028%209.3%2048.2%2020.2'/%3e%3cpath%20fill='%23f31509'%20d='M194.5%20147.4a332.4%20332.4%200%200%201-52.4-7.8c-4.1-1.3-4.3-3.6-3.8-5.3.5-1.7%203.1-3.6%206.2-3%205.6%201.4%2028.8%207%2050%2016.1'/%3e%3cpath%20d='M129.4%20141.5h381.2v12.6H129.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DHfKScpC__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-my'%20viewBox='0%200%20640%20480'%3e%3cg%20clip-path='url(%23my-a)'%3e%3cpath%20fill='%23C00'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%200h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%2034.3h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%2068.6h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20102.9h640V137H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20137.1h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20171.4h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20205.7h640V240H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20240h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20274.3h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20308.6h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20342.9h640V377H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20377.1h640v34.3H0z'/%3e%3cpath%20fill='%23C00'%20d='M0%20411.4h640v34.3H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20445.7h640V480H0z'/%3e%3cpath%20fill='%23006'%20d='M0%20.5h320v274.3H0z'/%3e%3cpath%20fill='%23FC0'%20d='m207.5%2073.8%206%2040.7%2023-34-12.4%2039.2%2035.5-20.8-28.1%2030%2041-3.2-38.3%2014.8%2038.3%2014.8-41-3.2%2028.1%2030-35.5-20.8%2012.3%2039.3-23-34.1-6%2040.7-5.9-40.7-23%2034%2012.4-39.2-35.5%2020.8%2028-30-41%203.2%2038.4-14.8-38.3-14.8%2041%203.2-28.1-30%2035.5%2020.8-12.4-39.3%2023%2034.1zm-33.3%201.7a71.1%2071.1%200%200%200-100%2065%2071.1%2071.1%200%200%200%20100%2065%2080%2080%200%200%201-83.2%206.2%2080%2080%200%200%201-43.4-71.2%2080%2080%200%200%201%20126.6-65'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='my-a'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-mz'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='mz-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23mz-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23009a00'%20fill-rule='evenodd'%20d='M0%200h768v160H0z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M0%20160h768v16H0z'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M0%20176h768v160H0z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M0%20336h768v16H0z'/%3e%3cpath%20fill='%23ffca00'%20fill-rule='evenodd'%20d='M0%20352h768v160H0z'/%3e%3cpath%20fill='red'%20fill-rule='evenodd'%20d='M0%200v512l336-256z'/%3e%3cpath%20fill='%23ffca00'%20fill-rule='evenodd'%20d='m198.5%20333-51.2-37.5L96.1%20333l19.9-60.3-51.5-37.1%2063.5.2%2019.3-60.4%2019.4%2060.5%2063.5-.3-51.5%2037.1z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.1'%20d='M102.8%20290.9h37c3%203.3%209.5%204.7%2015.8%200%2011.6-6.4%2034%200%2034%200l4.4-4.7-10.7-35.2-3.9-4.2s-8.3-5-24-3.3c-15.7%201.7-21.2-.5-21.2-.5s-13.7%201.6-17.6%203.6l-4.4%204.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.1'%20d='M110.3%20281.8s35.2-4.4%2045.4%209.1c-5.7%204-10.8%204.3-16.2.3.8-1.5%2012.6-13.8%2042.7-9.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='1.2'%20d='m148%20246.6-.3%2038.8m31.7-38.3L186%20278'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.1'%20d='m117%20246.6-3.7%2016'/%3e%3cpath%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.1'%20d='m78.9%20295.1%208.6%2010.2c1%20.6%202%20.6%202.9%200l12.8-15.4%205.4-6.7c.9-1%201.1-2.1%201-3l10.4-9.3%202.2.2c-1-.2-1.7-.7-1-1.8l2.4-1.8%201.8%202.3s-2.6%203.4-2.9%203.4h-2.8l-5.4%204.9%202.4%202%203.5%209.8%204.4-3.1-2.8-10%206.1-6.7-2.3-3.6%201.6-2s21.3%2013.4%2029.6%209.8c.2%200%20.5-9.6.5-9.6s-22.2-2.3-22.7-6.7%205-5%205-5l-2.4-3.2.5-1.8%203.9%204.8%208.7-7.4%2051.5%2058.6c2.8-1.1%203.4-1.8%203.6-4.6L155%20241.5l3.8-4.1c.8-.9%201-1.2%201-2.6l6-5.1a7.3%207.3%200%200%201%203.8%203L186%20219c.4.4%201.7.8%202.6.4l26.9-25.9-29.3%2020.7-1-.7c0-.9%201-1%200-2.6-1.2-1.4-2.9%201.3-3.1%201.3-.3%200-4.3-1.4-5.2-3.2l-.2%204.7-7.5%207-5.7-.3-8.2%208-1%203%201.3%202.7s-4.4%203.8-4.4%203.6c0-.3-.9-1.2-1-1.3l3.8-3.4.5-2.3-1.2-2c-.4.3-5.2%205.4-5.5%204.8l-14-15.5.8-2.9-8.7-9.5c-3.2-1.1-8.3-1.3-9.3%205.7-.8%201.6-7.4.2-7.4.2l-3.6.8L85.2%20241l11.3%2013.6%2023.2-29.3.7-8.3%204.8%205.4c1.7.2%203.2.3%204.7-.5l13.7%2015.3-2.3%202.3%202%202.2%202.4-1.6.9%201.3c-1.1.6-2%201.5-3.1%202.1-1.8-1.2-3.6-2.7-3.5-5l-7.7%206.4-.3%201.2-22.9%2019-2%20.3-.5%206%2014.9-12.4v-1.8l1.5%201.3%2011.6-9.3s.8%201%20.5%201-10.3%209.3-10.3%209.3l-.2%201-1.8%201.6-1-.8-14%2012.4h-2l-7.7%207.7c-2%20.2-3.7.4-5.4%201.5z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-na'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='na-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23na-a)'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%233662a2'%20d='m-26.4.2.8%20345.6L512.5%200z'/%3e%3cpath%20fill='%2338a100'%20d='M666.4%20479.6%20665%20120.3%20122.3%20479.8l544-.2z'/%3e%3cpath%20fill='%23c70000'%20d='m-26%20371.8.4%20108.2%20117.5-.1L665.4%2095.4l-.7-94.1-116-1L-26%20371.7z'/%3e%3cpath%20fill='%23ffe700'%20d='m219.6%20172-21.8-13.2-12.6%2022.1-12.2-22.2-22%2012.9.6-25.4-25.4.2%2013.2-21.8-22.1-12.5%2022.2-12.3-12.8-22%2025.4.6-.1-25.5%2021.7%2013.2L186.3%2044l12.2%2022.2%2022-12.9-.6%2025.4%2025.4-.2-13.2%2021.8%2022.1%2012.5-22.2%2012.3%2012.8%2022-25.4-.6z'/%3e%3cpath%20fill='%233662a2'%20d='M232.4%20112.4c0%2025.6-20.9%2046.3-46.6%2046.3s-46.6-20.7-46.6-46.3%2020.8-46.2%2046.6-46.2%2046.6%2020.7%2046.6%2046.2'/%3e%3cpath%20fill='%23ffe700'%20d='M222.3%20112.4a36.5%2036.5%200%201%201-73%200%2036.5%2036.5%200%200%201%2073%200'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-nc'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23009543'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23ed4135'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%230035ad'%20d='M0%200h640v160H0z'/%3e%3ccircle%20cx='240'%20cy='240'%20r='157.3'%20fill='%23fae600'%20stroke='%23000'%20stroke-width='5.3'/%3e%3cpath%20stroke='%23000'%20stroke-width='6.4'%20d='M213.3%20263.5h53.3M213.3%20224h53.3M240%2083.2V352'/%3e%3cpath%20fill='%23000001'%20d='M176.6%20384.4c64.2%2026.3%20124.4%201.7%20124.4%201.7s-22.7-24.6-34.3-34.2c-11.4-9.4-44.8-9-56.2%200a488.7%20488.7%200%200%200-33.9%2032.5'/%3e%3cellipse%20cx='240'%20cy='312.5'%20fill='%23000001'%20rx='17.6'%20ry='25.6'/%3e%3cellipse%20cx='240'%20cy='243.7'%20fill='%23000001'%20rx='21.3'%20ry='13.5'/%3e%3ccircle%20cx='240'%20cy='181.3'%20r='21.3'%20fill='%23000001'/%3e%3cpath%20fill='%23000001'%20d='M265.6%20101.9s1.8%203-2%2010c-18.6%2033.5-37.3%2034.2-40.8%2037.1-4%203.2-5.6%203-5.6%203%20.3-2.9.5-14.6.7-15.7%202.9-15.7%2026.5-15.5%2045-31.5%202.9-2.5%202.7-3%202.7-3zm-62.4%2072s4.3%2012%204.8%2024c1%2019.2%2019.4%2019.7%2032%2019.7v-10.7c-9.5%200-17.7-1.4-24.5-15.4a122.7%20122.7%200%200%200-12.3-17.6m-.5%20154.6s6.7-8.3%2014.6-27.7c4-10.1%2013.8-16%2022.7-16v-15c-20.3%200-30%207.5-31%2018.6a329%20329%200%200%201-6.3%2040.1'/%3e%3cpath%20d='M276.8%20173.9s-4.3%2012-4.8%2024c-1%2019.2-19.4%2019.7-32%2019.7V207c9.5%200%2017.7-1.4%2024.5-15.5%203.6-6.2%207.7-12.1%2012.3-17.6m.5%20154.7s-6.7-8.4-14.6-27.8c-4-10.1-13.8-16-22.7-16V270c20.3%200%2030%207.5%2031%2018.6a329%20329%200%200%200%206.3%2040'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ne'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230db02b'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23e05206'%20d='M0%200h640v160H0z'/%3e%3ccircle%20cx='320'%20cy='240'%20r='68'%20fill='%23e05206'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__D$Emj0Fa__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ng'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23008753'%20d='M426.6%200H640v480H426.6zM0%200h213.3v480H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CVSNb4p0__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-nl'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%20transform='scale(1.25%20.9375)'%3e%3crect%20rx='0'%20ry='0'%20height='509.76'%20width='512'%20fill='%23fff'/%3e%3crect%20rx='0'%20ry='0'%20height='169.92'%20width='512'%20y='342.08'%20fill='%2321468b'/%3e%3cpath%20fill='%23ae1c28'%20d='M0%200h512v169.92H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-no'%3e%3cpath%20fill='%23ef2b2d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M180%200h120v480H180z'/%3e%3cpath%20fill='%23fff'%20d='M0%20180h640v120H0z'/%3e%3cpath%20fill='%23002868'%20d='M210%200h60v480h-60z'/%3e%3cpath%20fill='%23002868'%20d='M0%20210h640v60H0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-np'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='np-a'%3e%3cpath%20fill-opacity='.7'%20d='M0-16h512v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23np-a)'%20transform='translate(0%2015)scale(.9375)'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23ce0000'%20stroke='%23000063'%20stroke-width='13.8'%20d='M6.5%20489.5h378.8L137.4%20238.1l257.3.3L6.6-9.5v499z'/%3e%3cpath%20fill='%23fff'%20d='m180.7%20355.8-27%209%2021.2%2019.8-28.5-1.8%2011.7%2026.2-25.5-12.3.5%2028.6-18.8-20.9-10.7%2026.6-9.2-26.3-20.3%2020.6%201.8-27.7L49%20409l12.6-25-29.3.6%2021.5-18.3-27.3-10.5%2027-9L32.2%20327l28.4%201.8L49%20302.6l25.6%2012.3-.5-28.6%2018.8%2020.9%2010.7-26.6%209.1%2026.3%2020.4-20.6-1.9%2027.7%2027-11.4-12.7%2025%2029.4-.6-21.5%2018.3zm-32.4-184.7-11.3%208.4%205.6%204.6a93.8%2093.8%200%200%200%2030.7-36c1.8%2021.3-17.7%2069-68.7%2069.5a70.6%2070.6%200%200%201-71.5-70.3c10%2018.2%2016.2%2027%2032%2036.5l4.7-4.4-10.6-8.9%2013.7-3.6-7.4-12.4%2014.4%201-1.8-14.4%2012.6%207.4%204-13.5%209%2010.8%208.5-10.3%204.6%2014%2011.8-8.2-1.5%2014.3%2014.2-1.7-6.7%2013.2z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-nr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='nr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-54.7%200H628v512H-54.7z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23nr-a)'%20transform='translate(51.3)scale(.9375)'%3e%3cpath%20fill='%23002170'%20d='M-140%200H884v512H-140z'/%3e%3cpath%20fill='%23ffb20d'%20d='M-140%20234.1H884V278H-140z'/%3e%3cpath%20fill='%23fff'%20d='m161.8%20438-33-33-10.5%2045.4-12-45-31.9%2034%2012.1-45L42%20407.9l33-33-45.4-10.6%2045-12-34-31.8%2045%2012L72%20288l33%2033%2010.6-45.4%2012%2045%2031.8-34-12%2045%2044.5-13.5-33%2033%2045.4%2010.5-45%2012%2034%2032-45-12.2z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-nu'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fedd00'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23012169'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='%23c8102e'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='%23c8102e'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3ccircle%20cx='160'%20cy='120'%20r='40.8'%20fill='%23012169'/%3e%3cpath%20fill='%23fedd00'%20d='m160%2079.2%2024%2073.8-62.8-45.6h77.6L136%20153M66.7%2098.3l14%2043.4L43.9%20115h45.7l-37%2026.8m200.7-43.5%2014.1%2043.4-36.9-26.8h45.7l-37%2026.8M160%20178.3l14.1%2043.4-37-26.8h45.7l-37%2026.8M160%2018.3l14.1%2043.4-37-26.8h45.7l-37%2026.8'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-nz'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cg%20id='nz-b'%3e%3cg%20id='nz-a'%3e%3cpath%20d='M0-.3v.5l1-.5z'/%3e%3cpath%20d='M.2.3%200-.1l1-.2z'/%3e%3c/g%3e%3cuse%20xlink:href='%23nz-a'%20transform='scale(-1%201)'/%3e%3cuse%20xlink:href='%23nz-a'%20transform='rotate(72%200%200)'/%3e%3cuse%20xlink:href='%23nz-a'%20transform='rotate(-72%200%200)'/%3e%3cuse%20xlink:href='%23nz-a'%20transform='scale(-1%201)rotate(72)'/%3e%3c/g%3e%3c/defs%3e%3cpath%20fill='%2300247d'%20fill-rule='evenodd'%20d='M0%200h640v480H0z'/%3e%3cg%20transform='translate(-111%2036.1)scale(.66825)'%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23fff'%20transform='translate(900%20120)scale(45.4)'/%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23cc142b'%20transform='matrix(30%200%200%2030%20900%20120)'/%3e%3c/g%3e%3cg%20transform='rotate(82%20525.2%20114.6)scale(.66825)'%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23fff'%20transform='rotate(-82%20519%20-457.7)scale(40.4)'/%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23cc142b'%20transform='rotate(-82%20519%20-457.7)scale(25)'/%3e%3c/g%3e%3cg%20transform='rotate(82%20525.2%20114.6)scale(.66825)'%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23fff'%20transform='rotate(-82%20668.6%20-327.7)scale(45.4)'/%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23cc142b'%20transform='rotate(-82%20668.6%20-327.7)scale(30)'/%3e%3c/g%3e%3cg%20transform='translate(-111%2036.1)scale(.66825)'%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23fff'%20transform='translate(900%20480)scale(50.4)'/%3e%3cuse%20xlink:href='%23nz-b'%20width='100%25'%20height='100%25'%20fill='%23cc142b'%20transform='matrix(35%200%200%2035%20900%20480)'/%3e%3c/g%3e%3cpath%20fill='%23012169'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='%23c8102e'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='%23c8102e'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BCUnGKBV__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pa'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='pa-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23pa-a)'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M92.5%200h477.2v480H92.4z'/%3e%3cpath%20fill='%23db0000'%20fill-rule='evenodd'%20d='M323%203.6h358v221.7H323z'/%3e%3cpath%20fill='%230000ab'%20fill-rule='evenodd'%20d='M3.2%20225.3h319.9V480H3.2zm211.6-47.6-42-29.4-41.7%2029.6%2015.5-48L105%20100l51.6-.4%2016-48%2016.3%2047.9h51.6l-41.5%2030%2015.9%2048z'/%3e%3cpath%20fill='%23d80000'%20fill-rule='evenodd'%20d='m516.9%20413.9-42.4-27.7-42.1%2028%2015.6-45.6-42-28%2052-.5%2016.2-45.4%2016.4%2045.3h52l-41.8%2028.5%2016%2045.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-pc'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23003da5'%20d='M0%200h640v480H0z'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(164.3%20311.5%20242.2)'/%3e%3cpath%20id='pc-a'%20fill='%23fff'%20fill-opacity='1'%20fill-rule='nonzero'%20stroke='none'%20stroke-width='.7'%20d='m472.9%20262.8-8.4%201.5-1.1%208.5-4.1-7.5-8.4%201.6%205.8-6.2-4-7.5%207.7%203.6%205.8-6.2-1%208.5z'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-10.3%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-30.9%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-20.6%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-51.5%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-72.1%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-61.8%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-41.2%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-92.7%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-113.3%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-103%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-133.9%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-154.5%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-144.2%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-123.6%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-82.4%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-175.1%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(174.6%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(143.7%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(123.1%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(133.4%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(154%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(-164.8%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(112.8%20311.5%20242.2)'/%3e%3cuse%20xlink:href='%23pc-a'%20width='1000'%20height='700'%20transform='rotate(102.5%20311.5%20242.2)'/%3e%3cpath%20fill='none'%20stroke='%2300aec7'%20stroke-width='13.7'%20d='M444.9%20313A151%20151%200%200%201%20293%20392'/%3e%3cpath%20fill='%23fff'%20d='M474.3%20288.5S449%20277.2%20398%20277c-51-.2-105.2%2013.9-135.1%2013.5-30-.3-38.8-.3-56.7-3.7%200%200%2027%209%2055.8%2011.6%2028.7%202.7%2095.2-10.4%20128.4-12.5%2034-2.1%2060.4-2.1%2083.8%202.6'/%3e%3cpath%20fill='%2300aec7'%20d='M275%20303.2s19.2%201%2056-3c37-4%2063-9.4%2092.1-10.2%2029.1-.7%2061.2%204.4%2068%206.1%200%200-48.5-1.3-68.8%201.6-20.3%203-73%209.5-100.7%2010.2-27.7.6-37.3-3.2-46.6-4.7m-80.5-27.8s51%2013.6%2097.2%204.7c52.3-10.2%2083-10%20106.4-10%2023.4-.2%2047.9%205.7%2047.9%205.7s-96-100.2-196.5-153.3c0%200-7.5%2084.5-55%20152.9'/%3e%3cpath%20fill='%23fff'%20d='M274.2%20197.5s-1.4-5.3-8.3-4.5c0%200%204.4-2%206.4-1%202%201.1%202.4%201.4%202%205.5m-16.8-9.4s1.5-.5%202.2-.3c0%200%201%203.3%203.2%204.5%200%200-3.8-.3-5.4-4.2m22.2%205a12.5%2012.5%200%200%200-8.7-4.8c-1.8%200-6%203.5-6%203.5-1-2-.5-3.4-.5-3.4%202%20.2%203.7%201%203.7%201-.8-2.6-2-3.8-2-3.8%204-1%208.8%202.5%208.8%202.5a16.7%2016.7%200%200%200-11-6.8c-1.2-.1-2.7%201.6-2.7%201.6-7.8%200-9.9%204.3-9.9%204.3%203.3%205.1%2010%206.3%2010%206.3-11.8-1.3-11.5%208-11.5%208l10.9-5.7c-4.2%2024.1-21%2035-22.4%2036.3-1.4%201.4-.5%203%201.5%203.2%201.1%200%202.5%201%206.2-3.4a65%2065%200%200%200%2016.4-35.4l.2.2c1.2%202.9.4%205.4.6%207.3.2%201.9%204.4%206%204.4%206s2.3-4.5%202-7.1c-.5-2.7-5.5-7.6-5.5-7.6%207.8-1.5%208.2%2011.6%208.2%2011.6%203-3.5%202.4-7.3%202.4-7.3s6.3-4.6%204.9-6.4'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pe'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23D91023'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M213.3%200h213.4v480H213.3z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DkpuluLm__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pg'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23000001'%20d='m1.6%200-.5%20480h640z'/%3e%3cpath%20fill='red'%20d='m640.6%20480%20.5-480H1.1z'/%3e%3c/g%3e%3cpath%20fill='%23fc0'%20stroke='%23fc0'%20stroke-width='1.1'%20d='m178%2054-3.8-.2c-1.2-2.8-4.5-3.8-6.6-2.6A333%20333%200%200%201%20156%2051l7.1%203.1C165%2059%20171%2060%20171%2060c-.6%208.8-8.9-1.1-15.9%203.9-5%203-5%206.5-7.7%2012.3-.9%201.6-4.4%205.8-4.4%205.8l5.9-.5L147%2084l7-1-1.5%201.4c1%20.2%208-1.7%208-1.7L160%2085l8-2.9s1.6%201.3%203%201.9l1-4%204%201%201-4c6%208%208%2016%2019%2018l-1-4a262.2%20262.2%200%200%201%208.7%204l.9-1.7c4.8%203.4%208.7%203.3%2011.4%203.7l-2-5%202%201-3-8%203%201-4-6%201.5-1-.5-3c6%202%2014%205%2015%2012%201%2011-11%2014-19%2013%206%205%2017%203%2022-2%202-2%203-5%204-8%201%203%203%207%203%2011-1%209-13%2012-21%2013%209%205%2025-1%2026-14%200-11-7-16-10-21l-1-5.4%203%201.4s-1.8-3.3-2-4c0%200-3.1-8.5-4.2-10.4l2.2.4-8.2-10.3%202.3-.2S215.6%2044%20213%2043l3-1c-6-3-13-1-19%203l1-3-1.8.2v-3.5L198%2036l-3-1%202-5-3%201%201-5s-2.2%201-3.6.9a51.7%2051.7%200%200%200%201.6-3.4c-1-1.5%200-4.5%200-4.5-7%201-8%202-12%208-6%2011-4%2016-3%2027z'%20transform='matrix(2.21989%200%200%202.21194%201.1%200)'/%3e%3cpath%20fill='red'%20fill-rule='evenodd'%20stroke='red'%20stroke-width='1.4'%20d='M215.8%2070.4c.5.9%206.2%203.6%2010.4%206-1.1-4.6-9.4-5.6-10.4-6z'%20transform='matrix(2.21989%200%200%202.21194%201.1%200)'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='m175%20399-14.2-9-19%209.1%204.3-16.2-14.5-15.1%2016.7-1%2010-18.4%206.1%2015.5%2020.7%203.8-13%2010.6zm36.2-79-6.6-3-6.3%203.6%201-7.2-5.4-4.9%207.1-1.3%203-6.6%203.5%206.4%207.2.8-5%205.2zm32-45.2-14.5-7-13.9%207.8%202.3-15.7-11.8-10.8%2015.7-2.8%206.6-14.4%207.6%2014%2015.8%201.8-11%2011.5zm-65.8-63-17-8.5-16.5%209.1%202.8-18.6-13.8-13%2018.7-3%208-17%208.7%2016.7%2018.8%202.3-13.3%2013.4zm-60.8%2065.4-17-10-17%2010.3%204.3-19.3-15.1-13%2019.7-1.8%207.7-18.3%207.9%2018.2%2019.8%201.6-14.9%2013z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ph'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230038a8'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%20240h640v240H0z'/%3e%3cpath%20fill='%23fff'%20d='M415.7%20240%200%20480V0'/%3e%3cpath%20fill='%23fcd116'%20d='M26.7%2042.4%2041%2055l16.6-9.2-7.4%2017.5%2014%2013-19-1.6-8.1%2017.2-4.3-18.5L14%2071l16.3-10zm323.8%20172.3.4%2019%2018%206.3-18%206.2-.4%2019-11.5-15.1-18.2%205.5%2010.8-15.6-10.8-15.6%2018.2%205.5zM37.2%20388.1l8%2017.2%2019-1.6-13.9%2013%207.4%2017.5-16.6-9.1-14.4%2012.4%203.6-18.7L14%20409l18.9-2.4zm114.2-249-6.2%206.2%203.1%2047-3%20.3-5.7-42.9-5.1%205%207.6%2038.4a47.5%2047.5%200%200%200-17.2%207.1l-21.7-32.4H96l26.4%2034.3a48%2048%200%200%200-2.4%202l-31.1-35.5h-8.8v8.8l35.4%2031-2%202.5-34.3-26.3v7.1l32.5%2021.7c-3.4%205.2-5.9%2011-7.1%2017.2L66.3%20223l-5.1%205%2042.9%205.7c-.2%201-.3%202.1-.3%203.1l-47-3-6.2%206.2%206.2%206.2%2047-3.1.3%203.1-42.9%205.7%205%205%2038.4-7.6a47.5%2047.5%200%200%200%207.1%2017.2l-32.5%2021.7v7.2l34.3-26.3a48%2048%200%200%200%202%202.4l-35.4%2031v8.8H89l31-35.4%202.5%202L96%20312.2h7.2l21.7-32.5c5.1%203.4%2011%205.9%2017.2%207.1l-7.6%2038.4%205%205%205.7-42.9c1%20.2%202%20.3%203.1.3l-3%2047%206.1%206.2%206.3-6.2-3.1-47%203-.3%205.7%2043%205.1-5.1-7.6-38.4a47.5%2047.5%200%200%200%2017.2-7.1l21.7%2032.5h7.2l-26.4-34.3a48%2048%200%200%200%202.4-2l31.1%2035.4h8.8v-8.8l-35.4-31%202-2.4%2034.3%2026.3v-7.2l-32.5-21.7c3.4-5.1%205.9-11%207.1-17.2l38.3%207.6%205.1-5-42.9-5.7c.2-1%20.3-2%20.3-3.1l47%203%206.2-6.1-6.2-6.2-47%203-.3-3%2042.9-5.7-5-5-38.4%207.5a47.5%2047.5%200%200%200-7.1-17.2l32.5-21.7v-7.1l-34.3%2026.3a48%2048%200%200%200-2-2.4l35.4-31v-8.9H214l-31%2035.5a48%2048%200%200%200-2.5-2l26.4-34.3h-7.2L178%20200.2c-5.1-3.4-11-5.9-17.2-7.1l7.6-38.3-5-5-5.7%2042.8-3.1-.3%203-47z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pk'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='pk-a'%3e%3cpath%20fill-opacity='.7'%20d='M-52.3%200h682.6v512H-52.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23pk-a)'%20transform='translate(49)scale(.9375)'%3e%3cpath%20fill='%230c590b'%20d='M-95%200h768v512H-95z'/%3e%3cpath%20fill='%23fff'%20d='M-95%200H97.5v512H-95z'/%3e%3cg%20fill='%23fff'%3e%3cpath%20d='m403.7%20225.4-31.2-6.6-16.4%2027.3-3.4-31.6-31-7.2%2029-13-2.7-31.7%2021.4%2023.6%2029.3-12.4-15.9%2027.6%2021%2024z'/%3e%3cpath%20d='M415.4%20306a121.2%20121.2%200%200%201-161.3%2059.4%20122.1%20122.1%200%200%201-59.5-162.1A118.6%20118.6%200%200%201%20266%20139a156.2%20156.2%200%200%200-11.8%2010.9A112.3%20112.3%200%200%200%20415.5%20306z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-pl'%3e%3cg%20fillRule='evenodd'%3e%3cpath%20fill='%23e9e8e7'%20d='M640%20480H0V0h640z'/%3e%3cpath%20fill='%23d4213d'%20d='M640%20480H0V240h640z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pm'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__vUUF8SEt__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='pr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-37.3%200h682.7v512H-37.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23pr-a)'%20transform='translate(35)scale(.9375)'%3e%3cpath%20fill='%23ed0000'%20d='M-37.3%200h768v512h-768z'/%3e%3cpath%20fill='%23fff'%20d='M-37.3%20102.4h768v102.4h-768zm0%20204.8h768v102.4h-768z'/%3e%3cpath%20fill='%230050f0'%20d='m-37.3%200%20440.7%20255.7L-37.3%20511z'/%3e%3cpath%20fill='%23fff'%20d='M156.4%20325.5%20109%20290l-47.2%2035.8%2017.6-58.1-47.2-36%2058.3-.4%2018.1-58%2018.5%2057.8%2058.3.1-46.9%2036.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ps'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ps-a'%3e%3cpath%20fill-opacity='.7'%20d='M-118%200h682.7v512H-118z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23ps-a)'%20transform='translate(110.6)scale(.9375)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23000001'%20d='M-246%200H778v170.7H-246z'/%3e%3cpath%20fill='%23fff'%20d='M-246%20170.7H778v170.6H-246z'/%3e%3cpath%20fill='%23090'%20d='M-246%20341.3H778V512H-246z'/%3e%3cpath%20fill='red'%20d='m-246%20512%20512-256L-246%200z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__FKQFVHqb__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-pw'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='pw-a'%3e%3cpath%20fill-opacity='.7'%20d='M-70.3%200h640v480h-640z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23pw-a)'%20transform='translate(70.3)'%3e%3cpath%20fill='%234aadd6'%20d='M-173.4%200h846.3v480h-846.3z'/%3e%3cpath%20fill='%23ffde00'%20d='M335.6%20232.1a135.9%20130.1%200%201%201-271.7%200%20135.9%20130.1%200%201%201%20271.7%200'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__B$yZvKNL__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-qa'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%238d1b3d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200v480h158.4l97.8-26.7-97.8-26.6%2097.7-26.7-97.7-26.7%2097.7-26.6-97.7-26.7%2097.8-26.7-97.8-26.6%2097.7-26.7-97.7-26.7%2097.7-26.6-97.7-26.7%2097.8-26.7-97.8-26.6L256.1%2080l-97.7-26.7%2097.8-26.6L158.3%200z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-re'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300267f'%20d='M0%200h213.337v480H0z'/%3e%3cpath%20fill='%23f31830'%20d='M426.662%200H640v480H426.662z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ro'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%2300319c'%20d='M0%200h213.333v480H0z'/%3e%3cpath%20fill='%23ffde00'%20d='M213.333%200h213.333v480H213.333z'/%3e%3cpath%20fill='%23de2110'%20d='M426.666%200H640v480H426.666z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__azh1xeAu__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ru'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%230039a6'%20d='M0%20160.003h640V480H0z'/%3e%3cpath%20fill='%23d52b1e'%20d='M0%20319.997h640V480H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-rw'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2320603d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fad201'%20d='M0%200h640v360H0z'/%3e%3cpath%20fill='%2300a1de'%20d='M0%200h640v240H0z'/%3e%3cg%20transform='translate(511%20125.4)scale(.66667)'%3e%3cg%20id='rw-b'%3e%3cpath%20id='rw-a'%20fill='%23e5be01'%20d='M116.1%200%2035.7%204.7l76.4%2025.4-78.8-16.3L100.6%2058l-72-36.2L82%2082.1%2021.9%2028.6l36.2%2072-44.3-67.3L30%20112%204.7%2035.7%200%20116.1-1-1z'/%3e%3cuse%20xlink:href='%23rw-a'%20width='100%25'%20height='100%25'%20transform='scale(1%20-1)'/%3e%3c/g%3e%3cuse%20xlink:href='%23rw-b'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3ccircle%20r='34.3'%20fill='%23e5be01'%20stroke='%2300a1de'%20stroke-width='3.4'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CZk3ZsL8__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sb'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sb-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23sb-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%230000d6'%20d='M0%20507.2%20987.4%200H0z'/%3e%3cpath%20fill='%23006000'%20d='M1024%200%2027.2%20512H1024z'/%3e%3cpath%20fill='%23fc0'%20d='M1024%200h-54.9L0%20485.4V512h54.9L1024%2027.6z'/%3e%3cpath%20fill='%23fff'%20d='m71.4%209.1%2011.8%2034.5h38.5L90.6%2064.7l11.9%2034.4L71.4%2078%2040.3%2099.2l11.9-34.4-31.1-21.3h38.4zm191.1%200%2011.9%2034.5h38.5l-31.2%2021.2%2012%2034.4L262.4%2078l-31%2021.3%2011.9-34.4-31.2-21.3h38.5zm0%20144.5%2011.9%2034.5h38.5l-31.2%2021.2%2012%2034.4-31.2-21.3-31%2021.3%2011.9-34.4-31.2-21.3h38.5zm-95-71.4%2011.9%2034.4h38.4l-31%2021.3%2011.8%2034.4-31-21.3-31.2%2021.3%2012-34.4-31.2-21.3h38.5zm-96.1%2071.4%2011.8%2034.5h38.5l-31.1%2021.2%2011.9%2034.4-31.1-21.3-31.1%2021.3%2012-34.4L21%20188h38.4z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sc'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0Z'/%3e%3cpath%20fill='%23d92223'%20d='M0%20480V0h640v160z'/%3e%3cpath%20fill='%23fcd955'%20d='M0%20480V0h426.7z'/%3e%3cpath%20fill='%23003d88'%20d='M0%20480V0h213.3z'/%3e%3cpath%20fill='%23007a39'%20d='m0%20480%20640-160v160z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sd'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sd-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23sd-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23000001'%20d='M0%20341.3h1024V512H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20170.6h1024v170.7H0z'/%3e%3cpath%20fill='red'%20d='M0%200h1024.8v170.7H0z'/%3e%3cpath%20fill='%23009a00'%20d='M0%200v512l341.3-256z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-se'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-53.421%200h682.67v512h-682.67z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23a)'%20transform='translate(50.082)%20scale(.9375)'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23006aa7'%20d='M-121.103.302h256V205.1h-256zM-121.103%20307.178h256v204.8h-256z'/%3e%3cpath%20fill='%23fecc00'%20d='M-121.103%20204.984h256v102.4h-256z'/%3e%3cpath%20fill='%23fecc00'%20d='M133.843.01h102.4v511.997h-102.4z'/%3e%3cpath%20fill='%23fecc00'%20d='M232.995%20205.013h460.798v102.4H232.995z'/%3e%3cpath%20fill='%23006aa7'%20d='M236.155%20307.208h460.797v204.799H236.155zM236.155.302h460.797V205.1H236.155z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sg-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23sg-a)'%3e%3cpath%20fill='%23fff'%20d='M-20%200h720v480H-20z'/%3e%3cpath%20fill='%23df0000'%20d='M-20%200h720v240H-20z'/%3e%3cpath%20fill='%23fff'%20d='M146%2040.2a84.4%2084.4%200%200%200%20.8%20165.2%2086%2086%200%200%201-106.6-59%2086%2086%200%200%201%2059-106c16-4.6%2030.8-4.7%2046.9-.2z'/%3e%3cpath%20fill='%23fff'%20d='m133%20110%204.9%2015-13-9.2-12.8%209.4%204.7-15.2-12.8-9.3%2015.9-.2%205-15%205%2015h15.8zm17.5%2052%205%2015.1-13-9.2-12.9%209.3%204.8-15.1-12.8-9.4%2015.9-.1%204.9-15.1%205%2015h16zm58.5-.4%204.9%2015.2-13-9.3-12.8%209.3%204.7-15.1-12.8-9.3%2015.9-.2%205-15%205%2015h15.8zm17.4-51.6%204.9%2015.1-13-9.2-12.8%209.3%204.8-15.1-12.9-9.4%2016-.1%204.8-15.1%205%2015h16zm-46.3-34.3%205%2015.2-13-9.3-12.9%209.4%204.8-15.2-12.8-9.4%2015.8-.1%205-15.1%205%2015h16z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CDYDPDmE__\"","export default \"__VITE_ASSET__kF7$3UxR__\"","export default \"__VITE_ASSET__Ct82MiGp__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sh'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23012169'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23FFF'%20d='m75%200%20244%20181L562%200h78v62L400%20241l240%20178v61h-80L320%20301%2081%20480H0v-60l239-178L0%2064V0z'/%3e%3cpath%20fill='%23C8102E'%20d='m424%20281%20216%20159v40L369%20281zm-184%2020%206%2035L54%20480H0zM640%200v3L391%20191l2-44L590%200zM0%200l239%20176h-60L0%2042z'/%3e%3cpath%20fill='%23FFF'%20d='M241%200v480h160V0zM0%20160v160h640V160z'/%3e%3cpath%20fill='%23C8102E'%20d='M0%20193v96h640v-96zM273%200v480h96V0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-si'%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20fill-opacity='.67'%20d='M-15.067%200h682.67v512h-682.67z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fillRule='evenodd'%20clip-path='url(%23a)'%20transform='translate(14.125)%20scale(.9375)'%20strokeWidth='1pt'%3e%3cpath%20fill='%23fff'%20d='M-62%200H962v512H-62z'/%3e%3cpath%20fill='%23de2918'%20d='M-62%20341.33H962V512H-62z'/%3e%3cpath%20fill='%2308399c'%20d='M-62%20170.67H962v170.67H-62z'/%3e%3cpath%20d='M228.37%2092.976c-4.02%2061.651-6.322%2095.436-15.709%20111.07-10.15%2016.789-20.025%2029.081-59.63%2043.882-39.61-14.81-49.48-27.1-59.633-43.89-9.387-15.63-11.69-49.41-15.709-111.06l5.853-1.971c11.783-3.594%2020.574-6.484%2027.077-7.767%209.313-1.971%2017.228-4.2%2042.257-4.722%2025.029.43%2032.983%202.797%2042.296%204.768%206.45%201.375%2015.617%204.081%2027.312%207.744l5.884%201.948z'%20fill='%23de2918'/%3e%3cpath%20d='M222.6%2090.955c-3.802%2061.518-6.983%2089.69-11.943%20103.24-9.626%2023.193-24.866%2035.909-57.665%2048.038-32.8-12.14-48.04-24.86-57.664-48.05-4.961-13.54-8.095-41.64-11.788-103.3%2011.534-3.602%2020.577-6.418%2027.08-7.7%209.313-1.972%2017.228-4.294%2042.257-4.725%2025.029.431%2033.037%202.753%2042.35%204.724%206.503%201.283%2015.732%204.098%2027.373%207.763z'%20fill='%2308399c'/%3e%3cpath%20d='M152.96%20109.79l1.573%203.723%206.91.947-4.478%202.7%204.33%202.894-6.298%201.055-1.916%203.374-2.156-3.474-5.995-.85%204.08-2.958-4.2-2.691%206.635-1.017%201.515-3.703z'%20fill='%23fc0'/%3e%3cpath%20d='M208.28%20179.62l-3.83-3.028-2.769-4.554-5.422-4.704-2.826-4.753-5.423-4.852-2.653-4.753-2.883-2.327-1.903-1.832-4.899%204.295-2.67%204.665-3.326%203.016-3.655-2.854-2.763-4.867L153%20134.855l-10.26%2018.217-2.763%204.867-3.654%202.854-3.327-3.016-2.67-4.665-4.898-4.295-1.904%201.832-2.883%202.328-2.653%204.752-5.423%204.852-2.825%204.753-5.423%204.704-2.768%204.554-3.821%203.099c1.984%2016.886%2012.748%2030.116%2018.613%2036.168%206.545%206.355%2020.039%2014.858%2036.54%2020.486%2016.548-5.508%2030.229-14.131%2036.774-20.486%205.865-6.052%2016.629-19.282%2018.625-36.239z'%20fill='%23fff'/%3e%3cpath%20d='M169.45%2083.89l1.573%203.723%206.91.947-4.478%202.7%204.33%202.894-6.298%201.055-1.916%203.374-2.156-3.474-5.995-.85%204.08-2.958-4.2-2.691%206.635-1.017%201.515-3.703zM136.47%2083.834l1.573%203.723%206.91.947-4.478%202.7%204.33%202.894-6.298%201.055-1.916%203.374-2.156-3.474-5.995-.85%204.08-2.958-4.2-2.691%206.635-1.017%201.515-3.703z'%20fill='%23fc0'/%3e%3cpath%20d='M199.72%20203.03l-7.468.023-6.892-.513-8.348-4.094-9.409.056-8.149%203.981-6.427.569-6.428-.569-8.148-3.98-9.41-.057-8.347%204.094-6.892.513-7.562-.104-3.652-6.187.136-.142%2011.172%201.848%206.891-.512%208.348-4.095%209.41.057%208.148%203.981%206.427.568%206.428-.568%208.148-3.981%209.41-.057%208.347%204.095%206.892.512%2010.874-1.906.144.286-3.643%206.182zM113.25%20212.54l7.393-.513%208.348-4.094%209.409.057%208.148%203.98%206.428.569%206.427-.568%208.149-3.981%209.41-.057%208.347%204.094%207.493.513%204.835-5.96-.163-.135-5.18%201.51-6.892-.512-8.347-4.094-9.41.056-8.148%203.981-6.428.569-6.427-.569-8.149-3.98-9.409-.057-8.347%204.094-6.892.513-5.077-1.28-.061.25%204.543%205.614z'%20fill='%2308399c'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sj'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23ef2b2d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M180%200h120v480H180z'/%3e%3cpath%20fill='%23fff'%20d='M0%20180h640v120H0z'/%3e%3cpath%20fill='%23002868'%20d='M210%200h60v480h-60z'/%3e%3cpath%20fill='%23002868'%20d='M0%20210h640v60H0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-sk'%3e%3cpath%20fill='%23ee1c25'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%230b4ea2'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v160H0z'/%3e%3cpath%20d='M233.004%20370.8c-43.025-20.724-104.568-61.858-104.568-143.226%200-81.37%203.89-118.374%203.89-118.374h201.358s3.891%2037.005%203.891%20118.374c0%2081.368-61.543%20122.502-104.571%20143.226z'%20fill='%23fff'/%3e%3cpath%20d='M233.004%20360c-39.472-19.013-95.934-56.75-95.934-131.4%200-74.651%203.57-108.6%203.57-108.6H325.37s3.57%2033.95%203.57%20108.6c0%2074.65-56.462%20112.387-95.936%20131.4z'%20fill='%23ee1c25'/%3e%3cpath%20d='M241.446%20209.027c10.688.173%2031.54.591%2050.109-5.622%200%200-.49%206.645-.49%2014.385%200%207.742.49%2014.386.49%2014.386-17.032-5.7-38.064-5.819-50.108-5.666v41.231h-16.883V226.51c-12.044-.153-33.076-.034-50.108%205.665%200%200%20.49-6.644.49-14.386%200-7.74-.49-14.384-.49-14.384%2018.568%206.213%2039.42%205.795%2050.108%205.622v-25.894c-9.741-.087-23.779.378-39.65%205.69%200%200%20.49-6.645.49-14.386%200-7.74-.49-14.385-.49-14.385%2015.848%205.303%2029.868%205.776%2039.607%205.691-.501-16.398-5.278-37.065-5.278-37.065s9.831.767%2013.761.767c3.934%200%2013.763-.767%2013.763-.767s-4.776%2020.667-5.277%2037.064c9.739.084%2023.759-.388%2039.606-5.691%200%200-.49%206.644-.49%2014.385%200%207.74.49%2014.385.49%2014.385-15.87-5.311-29.909-5.776-39.65-5.69v25.894z'%20fill='%23fff'/%3e%3cpath%20d='M233%20263.275c-19.878%200-30.525%2027.575-30.525%2027.575s-5.907-13.075-22.125-13.075c-10.973%200-19.06%209.761-24.2%2018.8C176.113%20328.34%20207.964%20347.941%20233%20360c25.039-12.06%2056.91-31.657%2076.875-63.425-5.14-9.039-13.227-18.8-24.2-18.8-16.219%200-22.15%2013.075-22.15%2013.075S252.879%20263.275%20233%20263.275z'%20fill='%230b4ea2'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sl'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%230000cd'%20d='M0%20320.3h640V480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160.7h640v159.6H0z'/%3e%3cpath%20fill='%2300cd00'%20d='M0%200h640v160.7H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__SSi5mPFg__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sn'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%230b7226'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23ff0'%20d='M213.3%200h213.3v480H213.3z'/%3e%3cpath%20fill='%23bc0000'%20d='M426.6%200H640v480H426.6z'/%3e%3c/g%3e%3cpath%20fill='%230b7226'%20d='M342%20218.8h71.8l-56.6%2043.6%2020.7%2069.3-56.6-43.6-56.6%2041.6%2020.7-67.3-56.6-43.6h69.8l22.7-71.3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-so'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='so-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23so-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%2340a6ff'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23fff'%20d='M336.5%20381.2%20254%20327.7l-82.1%2054%2030.5-87.7-82-54.2L222%20239l31.4-87.5%2032.1%2087.3%20101.4.1-81.5%2054.7z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sr'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23377e3f'%20d='M.1%200h640v480H.1z'/%3e%3cpath%20fill='%23fff'%20d='M.1%2096h640v288H.1z'/%3e%3cpath%20fill='%23b40a2d'%20d='M.1%20144h640v192H.1z'/%3e%3cpath%20fill='%23ecc81d'%20d='m320%20153.2%2056.4%20173.6-147.7-107.3h182.6L263.6%20326.8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ss'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23078930'%20d='M0%20336h640v144H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20144h640v192H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v144H0z'/%3e%3cpath%20fill='%23da121a'%20d='M0%20168h640v144H0z'/%3e%3cpath%20fill='%230f47af'%20d='m0%200%20415.7%20240L0%20480z'/%3e%3cpath%20fill='%23fcdd09'%20d='M200.7%20194.8%2061.7%20240l139%2045.1L114.9%20167v146z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-st'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2312ad2b'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23ffce00'%20d='M0%20137.1h640V343H0z'/%3e%3cpath%20fill='%23d21034'%20d='M0%200v480l240-240'/%3e%3cg%20id='st-c'%20transform='translate(351.6%20240)scale(.34286)'%3e%3cg%20id='st-b'%3e%3cpath%20id='st-a'%20fill='%23000001'%20d='M0-200V0h100'%20transform='rotate(18%200%20-200)'/%3e%3cuse%20xlink:href='%23st-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23st-b'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3cuse%20xlink:href='%23st-b'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3cuse%20xlink:href='%23st-b'%20width='100%25'%20height='100%25'%20transform='rotate(-144)'/%3e%3cuse%20xlink:href='%23st-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3c/g%3e%3cuse%20xlink:href='%23st-c'%20width='100%25'%20height='100%25'%20x='700'%20transform='translate(-523.2)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__pFp3Vu7h__\"","export default \"__VITE_ASSET__C6gqnOQn__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sy'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23000001'%20d='M0%200h640v480H0Z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v320H0Z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v160H0Z'/%3e%3cpath%20fill='%23007a3d'%20d='m161%20300%2039-120%2039%20120-102-74.2h126M401%20300l39-120%2039%20120-102-74.2h126'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__Bckfc3XK__\"","export default \"__VITE_ASSET__C0RraYKt__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-td'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23002664'%20d='M0%200h214v480H0z'/%3e%3cpath%20fill='%23c60c30'%20d='M426%200h214v480H426z'/%3e%3cpath%20fill='%23fecb00'%20d='M214%200h212v480H214z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-tf'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='tf-a'%20fill='%23fff'%20d='m0-21%2012.3%2038L-20-6.5h40L-12.3%2017z'/%3e%3c/defs%3e%3cpath%20fill='%23002395'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h292.8v196.8H0z'/%3e%3cpath%20fill='%23002395'%20d='M0%200h96v192H0z'/%3e%3cpath%20fill='%23ed2939'%20d='M192%200h96v192h-96z'/%3e%3cpath%20fill='%23fff'%20d='m426%20219.6%2015.4%2024.6h44V330l-33-51.6-44.4%2070.8h21.6l22.8-40.8%2046.8%2084%2046.8-84%2022.8%2040.8h21.6L546%20278.4%20513%20330v-47.4h19.8l14.7-23.4H513v-15h44l15.4-24.6zm51.6%20105h-48v16.8h48zm91.2%200h-48v16.8h48z'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='416'%20y='362'%20transform='scale(1.2)'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='371'%20y='328'%20transform='scale(1.2)'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='461'%20y='328'%20transform='scale(1.2)'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='333'%20y='227'%20transform='scale(1.2)'/%3e%3cuse%20xlink:href='%23tf-a'%20width='100%25'%20height='100%25'%20x='499'%20y='227'%20transform='scale(1.2)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='tg-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23tg-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23ffe300'%20d='M0%200h767.6v512H0z'/%3e%3cpath%20fill='%23118600'%20d='M0%20208.1h767.6V311H0zM0%20.2h767.6v102.9H0z'/%3e%3cpath%20fill='%23d80000'%20d='M0%20.3h306.5v310.6H0z'/%3e%3cpath%20fill='%23fff'%20d='M134.4%20128.4c0-.8%2018.9-53%2018.9-53l17%2052.2s57.4%201.7%2057.4.8-45.3%2034.3-45.3%2034.3%2021.4%2060%2020.5%2058.2c-.8-1.7-49.6-36-49.6-36s-49.7%2034.3-48.8%2034.3c.8%200%2018.8-56.5%2018.8-56.5l-44.5-33.4z'/%3e%3cpath%20fill='%23118600'%20d='M0%20409.2h767.6V512H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-th'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23f4f5f8'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%232d2a4a'%20d='M0%20162.5h640v160H0z'/%3e%3cpath%20fill='%23a51931'%20d='M0%200h640v82.5H0zm0%20400h640v80H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-tj'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23060'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h640v342.9H0z'/%3e%3cpath%20fill='%23c00'%20d='M0%200h640v137.1H0z'/%3e%3cpath%20fill='%23f8c300'%20d='M300.8%20233.6a8.6%208.6%200%200%201%2016%204V272h6.4v-34.3a8.6%208.6%200%200%201%2016-4%2020.2%2020.2%200%201%200-38.4%200'/%3e%3cpath%20fill='%23fff'%20d='M305.4%20224.7a13.7%2013.7%200%200%201%2014.6%206.5%2013.7%2013.7%200%200%201%2014.6-6.5%2014.7%2014.7%200%200%200-29.2%200'/%3e%3cpath%20id='tj-a'%20fill='%23f8c300'%20d='M316.8%20258.3a26%2026%200%200%201-43.8%2016.6%2027%2027%200%200%201-41%2012c2.5%2025%2040%2019.9%2042.8-4.4%2011.7%2020.7%2037.6%2014.7%2045.2-10.6z'/%3e%3cuse%20xlink:href='%23tj-a'%20width='100%25'%20height='100%25'%20fill='%23f8c300'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3cpath%20id='tj-b'%20fill='%23f8c300'%20d='M291.8%20302.6c-5.3%2011.3-15.7%2013.2-24.8%204.1%200%200%203.6-2.6%207.6-3.3-.8-3.1.7-7.5%202.9-9.8a15%2015%200%200%201%206.1%208.1c5.5-.7%208.2%201%208.2%201z'/%3e%3cuse%20xlink:href='%23tj-b'%20width='100%25'%20height='100%25'%20fill='%23f8c300'%20transform='rotate(9.4%20320%20551.3)'/%3e%3cuse%20xlink:href='%23tj-b'%20width='100%25'%20height='100%25'%20fill='%23f8c300'%20transform='rotate(18.7%20320%20551.3)'/%3e%3cpath%20fill='none'%20stroke='%23f8c300'%20stroke-width='11'%20d='M253.5%20327.8a233.1%20233.1%200%200%201%20133%200'/%3e%3cg%20fill='%23f8c300'%20transform='translate(320%20164.6)scale(.68571)'%3e%3cpath%20id='tj-c'%20d='m301930%20415571-790463-574305h977066l-790463%20574305L0-513674z'%20transform='scale(.00005)'/%3e%3c/g%3e%3cg%20id='tj-d'%20fill='%23f8c300'%20transform='translate(320%20260.6)scale(.68571)'%3e%3cuse%20xlink:href='%23tj-c'%20width='100%25'%20height='100%25'%20transform='translate(-70%20-121.2)'/%3e%3cuse%20xlink:href='%23tj-c'%20width='100%25'%20height='100%25'%20transform='translate(-121.2%20-70)'/%3e%3cuse%20xlink:href='%23tj-c'%20width='100%25'%20height='100%25'%20transform='translate(-140)'/%3e%3c/g%3e%3cuse%20xlink:href='%23tj-d'%20width='100%25'%20height='100%25'%20fill='%23f8c300'%20transform='matrix(-1%200%200%201%20640%200)'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tk'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300247d'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fed100'%20d='M108.1%20354.6c-6.7-.1%2062.8-37%20120.9-84.4%2076.2-62.1%20240.3-161.4%20288.6-177.6%205-1.7-10.3%208.6-12.3%2011.9-51.5%2061-10.4%20176%2054%20233.9%2019.4%2014.8%2018.4%2015.6%2054.3%2017v3.4zm-4.2%206.7s-4.9%203.5-4.9%206.1c0%202.9%205.5%206.7%205.5%206.7l498.5%205.5%209.2-6.1-12.8-7.9z'/%3e%3cpath%20fill='%23fff'%20d='m106.8%20109.1-4%2012.2%2010.4-7.5%2010.3%207.5-3.9-12.2%2010.3-7.5h-12.8l-3.9-12.2-4%2012.2H96.4zm78.1%2057.4%208.6-6.3h-10.7l-3.3-10.1-3.3%2010.1h-10.6l8.6%206.3-3.3%2010.1%208.6-6.3%208.7%206.3zm-145.2%2013-4-12.2-3.9%2012.2H19l10.3%207.5-3.9%2012.2%2010.3-7.5%2010.4%207.5-4-12.2%2010.4-7.5zm78.1%20122.3-4.6-14.2-4.6%2014.2h-15l12.1%208.7-4.6%2014.3%2012.1-8.8%2012.1%208.8-4.7-14.3%2012.1-8.7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tl'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='tl-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h682.7v512H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23tl-a)'%20transform='scale(.9375)'%3e%3cpath%20fill='%23cb000f'%20d='M0%200h1031.2v512H0z'/%3e%3cpath%20fill='%23f8c00c'%20d='M0%200c3.2%200%20512%20256.7%20512%20256.7L0%20512z'/%3e%3cpath%20fill='%23000001'%20d='M0%200c2.1%200%20340.6%20256.7%20340.6%20256.7L0%20512z'/%3e%3cpath%20fill='%23fff'%20d='M187.7%20298.2%20127%20284.7l-31%2052.8-5-59.7-60.7-13.3%2054.9-24.9-3.3-59.3%2040.2%2043.4%2055.4-25.3-28.9%2054%2039.2%2045.8z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DdrlDQo1__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tn'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23e70013'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M320%20119.2a1%201%200%200%200-1%20240.3%201%201%200%200%200%201-240.3M392%20293a90%2090%200%201%201%200-107%2072%2072%200%201%200%200%20107m-4.7-21.7-37.4-12.1-23.1%2031.8v-39.3l-37.4-12.2%2037.4-12.2V188l23.1%2031.8%2037.4-12.1-23.1%2031.8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-to'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23c10000'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%200h250v200.3H0z'/%3e%3cg%20fill='%23c10000'%3e%3cpath%20d='M102.8%2031.2h39.9v139.6h-39.8z'/%3e%3cpath%20d='M192.6%2081v40H53V81z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tr'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23e30a17'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M407%20247.5c0%2066.2-54.6%20119.9-122%20119.9s-122-53.7-122-120%2054.6-119.8%20122-119.8%20122%2053.7%20122%20119.9'/%3e%3cpath%20fill='%23e30a17'%20d='M413%20247.5c0%2053-43.6%2095.9-97.5%2095.9s-97.6-43-97.6-96%2043.7-95.8%2097.6-95.8%2097.6%2042.9%2097.6%2095.9z'/%3e%3cpath%20fill='%23fff'%20d='m430.7%20191.5-1%2044.3-41.3%2011.2%2040.8%2014.5-1%2040.7%2026.5-31.8%2040.2%2014-23.2-34.1%2028.3-33.9-43.5%2012-25.8-37z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tt'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23e00000'%20fill-rule='evenodd'%20d='M463.7%20480%200%201v478.8zM176.3%200%20640%20479V.2z'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M27.7.2h118.6l468.2%20479.3H492.2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tv'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23009fca'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff40d'%20fill-rule='evenodd'%20d='M593.3%20122.7H621l-22.3%2015.2%208.5%2024.7-22.3-15.3-22.2%2015.3%208.5-24.7-22.3-15.2h27.5l8.5-24.7zm-69.2%20196.8h27.6l-22.3%2015.2%208.5%2024.7-22.3-15.3-22.3%2015.3%208.6-24.7-22.3-15.2H507l8.5-24.7zm69.2-44.6H621l-22.3%2015.2%208.5%2024.7-22.3-15.3-22.2%2015.3%208.5-24.7-22.3-15.2h27.5l8.5-24.7zM295.8%20417.7h27.6L301%20432.8l8.6%2024.6-22.3-15.2-22.3%2015.2%208.6-24.6-22.4-15.3h27.6l8.5-24.6zm62.6-76.5h-27.6l22.3-15.3-8.5-24.6%2022.3%2015.2%2022.3-15.2-8.6%2024.6%2022.3%2015.3h-27.5l-8.5%2024.6zm81.3-112.5H412l22.3-15.2-8.5-24.7%2022.3%2015.3%2022.3-15.3-8.6%2024.7%2022.3%2015.2h-27.5l-8.5%2024.7zm68.3-23.3h-27.6l22.4-15.3-8.6-24.6%2022.3%2015.2%2022.3-15.2-8.6%2024.6%2022.4%2015.3H525l-8.5%2024.6zM439.7%20400H412l22.3-15.2L426%20360l22.3%2015.2%2022.3-15.2-8.6%2024.7%2022.3%2015.2h-27.5l-8.5%2024.7zm-81.3%2019.9h-27.6l22.3-15.2-8.5-24.7%2022.3%2015.2%2022.3-15.2-8.6%2024.6L403%20420h-27.5l-8.5%2024.7z'/%3e%3cpath%20fill='%23012169'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23FFF'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='%23C8102E'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23FFF'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='%23C8102E'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tw'%20viewBox='0%200%20640%20480'%3e%3cclipPath%20id='tw-a'%3e%3cpath%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3cg%20clip-path='url(%23tw-a)'%3e%3cpath%20fill='red'%20d='M0%200h720v480H0z'/%3e%3cpath%20fill='%23000095'%20d='M0%200h360v240H0z'/%3e%3cg%20fill='%23fff'%3e%3cpath%20d='m154%20126.9-2.5%209.6%209.4%202.6-1.8-7.1zm46.9%205.1-1.8%207.1%209.4-2.6-2.5-9.6zm-41.8-24-5.1%205.1%201.9%206.9z'/%3e%3cpath%20d='m155.9%20120-1.9%206.9%205.1%205.1z'/%3e%3cpath%20d='m154%20113.1-6.9%206.9%206.9%206.9%201.9-6.9zm14%2027.8%205.1%205.1%206.9-1.9zm18.9%205.1%209.6%202.5%202.6-9.4-7.1%201.8z'/%3e%3cpath%20d='m192%20140.9%207.1-1.8%201.8-7.1zm-31.1-1.8%202.6%209.4%209.6-2.5-5.1-5.1zm19.1%205%206.9%201.9%205.1-5.1z'/%3e%3cpath%20d='m173.1%20146%206.9%206.9%206.9-6.9-6.9-1.9zm-12.2-45.1-9.4%202.6%202.5%209.6%205.1-5.1zm-1.8%2031.1%201.8%207.1%207.1%201.8zm45-12%201.9-6.9-5.1-5.1z'/%3e%3cpath%20d='m168%2099.1-7.1%201.8-1.8%207.1zm32.9%208.9-1.8-7.1-7.1-1.8zm5.1%2018.9%206.9-6.9-6.9-6.9-1.9%206.9z'/%3e%3cpath%20d='m200.9%20108-8.9-8.9-12-3.2-12%203.2-8.9%208.9-3.2%2012%203.2%2012%208.9%208.9%2012%203.2%2012-3.2%208.9-8.9%203.2-12z'/%3e%3cpath%20d='m200.9%20132%205.1-5.1-1.9-6.9zm5.1-18.9%202.5-9.6-9.4-2.6%201.8%207.1zm-6.9-12.2-2.6-9.4-9.6%202.5%205.1%205.1zm-26-6.9-9.6-2.5-2.6%209.4%207.1-1.8zm6.9%201.9-6.9-1.9-5.1%205.1z'/%3e%3cpath%20d='m186.9%2094-6.9-6.9-6.9%206.9%206.9%201.9z'/%3e%3cpath%20d='m192%2099.1-5.1-5.1-6.9%201.9zM173.1%20146l-9.6%202.5%204.5%2016.6%2012-12.2zm-5.1%2019.1%2012%2044.9%2012-44.9-12-12.2zm-7.1-26-9.4-2.6-4.4%2016.4%2016.4-4.4z'/%3e%3cpath%20d='m147.1%20152.9-12%2045.1%2032.9-32.9-4.5-16.6zm-12-20.9L102%20165.1l45.1-12.2%204.4-16.4z'/%3e%3cpath%20d='m154%20126.9-6.9-6.9-12%2012%2016.4%204.5zm0-13.8-2.5-9.6-16.4%204.5%2012%2012z'/%3e%3cpath%20d='M135.1%20108%2090%20120l45.1%2012%2012-12zm90%2024-16.6%204.5%204.4%2016.4%2045.1%2012.2z'/%3e%3cpath%20d='m199.1%20139.1-2.6%209.4%2016.4%204.4-4.4-16.4zm-12.2%206.9-6.9%206.9%2012%2012.2%204.5-16.6zm19.1-19.1%202.5%209.6%2016.6-4.5-12.2-12z'/%3e%3cpath%20d='m192%20165.1%2033.1%2032.9-12.2-45.1-16.4-4.4zm7.1-64.2%209.4%202.6%204.4-16.4-16.4%204.4z'/%3e%3cpath%20d='M225.1%20108%20258%2075.1l-45.1%2012-4.4%2016.4zm-12.2-20.9L225.1%2042%20192%2075.1l4.5%2016.4zm12.2%2044.9%2044.9-12-44.9-12-12.2%2012z'/%3e%3cpath%20d='m206%20113.1%206.9%206.9%2012.2-12-16.6-4.5zm-38-38L135.1%2042l12%2045.1%2016.4%204.4z'/%3e%3cpath%20d='m160.9%20100.9%202.6-9.4-16.4-4.4%204.4%2016.4z'/%3e%3cpath%20d='m147.1%2087.1-45.1-12%2033.1%2032.9%2016.4-4.5zm39.8%206.9%209.6-2.5-4.5-16.4-12%2012z'/%3e%3cpath%20d='M192%2075.1%20180%2030l-12%2045.1%2012%2012z'/%3e%3cpath%20d='m173.1%2094%206.9-6.9-12-12-4.5%2016.4z'/%3e%3c/g%3e%3ccircle%20cx='180'%20cy='120'%20r='51.1'%20fill='%23000095'/%3e%3ccircle%20cx='180'%20cy='120'%20r='45.1'%20fill='%23fff'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tz'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='tz-a'%3e%3cpath%20fill-opacity='.7'%20d='M10%200h160v120H10z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23tz-a)'%20transform='matrix(4%200%200%204%20-40%200)'%3e%3cpath%20fill='%2309f'%20d='M0%200h180v120H0z'/%3e%3cpath%20fill='%23090'%20d='M0%200h180L0%20120z'/%3e%3cpath%20fill='%23000001'%20d='M0%20120h40l140-95V0h-40L0%2095z'/%3e%3cpath%20fill='%23ff0'%20d='M0%2091.5%20137.2%200h13.5L0%20100.5zM29.3%20120%20180%2019.5v9L42.8%20120z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20height='480'%20width='640'%20viewBox='0%200%20640%20480'%20id='flag-icon-css-ua'%3e%3cg%20fillRule='evenodd'%20strokeWidth='1pt'%3e%3cpath%20fill='%23ffd500'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23005bbb'%20d='M0%200h640v240H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ug'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='ug-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23ug-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23ffe700'%20fill-rule='evenodd'%20d='M-128%20341.4h768v85.3h-768z'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M-128%20256h768v85.3h-768z'/%3e%3cpath%20fill='%23de3908'%20fill-rule='evenodd'%20d='M-128%20170.7h768V256h-768z'/%3e%3cpath%20fill='%23ffe700'%20fill-rule='evenodd'%20d='M-128%2085.4h768v85.3h-768z'/%3e%3cpath%20fill='%23000001'%20fill-rule='evenodd'%20d='M-128%200h768v85.3h-768z'/%3e%3cpath%20fill='%23fffdff'%20fill-rule='evenodd'%20stroke='%23000'%20d='M335.7%20256a79.7%2079.7%200%201%201-159.4%200%2079.7%2079.7%200%200%201%20159.4%200z'/%3e%3cpath%20fill='%23de3108'%20fill-rule='evenodd'%20stroke='%23000'%20d='m242%20194.9-5.2-9.5c2-2%205.3-3.6%2010.7-3.6l-.6%2010.5z'/%3e%3cpath%20fill='%23ffe700'%20fill-rule='evenodd'%20stroke='%23000'%20d='m247%20192.3.7-10.5s10.7-.6%2016.5%206.4l-5.7%208.2z'/%3e%3cpath%20fill='%23de3108'%20fill-rule='evenodd'%20stroke='%23000'%20d='m258.6%20196.3%205.3-8.2c3.5%203.7%205%206.3%205.5%2010.3.1.1-8.3%202.1-8.3%202z'/%3e%3cpath%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M244.6%20331.1s9.9-11.3%2029.1-8.9c-2.9-4.7-12.3-4.1-12.3-4.1s-2.8-22-.6-23.2%2012%20.1%2012%20.1c1.2%200%203.4-3.4%201.6-5.6-1.7-2.2-6.8-10.5-4.7-12.2%202.1-1.6%2013.4%201%2013.4%201l-32-41s-3.3-15.5%203.3-23c7.9-6.5%207-13.6%206.8-13.5-1.1-7.2-12-12.3-19.4-5.7-4.3%205.2-1.4%209.2-1.4%209.2s-11.5%203.1-11.9%205.1c-.5%202%2012.9-.3%2012.9-.3l-1.3%209.1s-26%2023.6-6%2044l.6-.8s7%208.6%2014.3%2010.5c7%207%206.3%206%206.3%206s1.3%2011.1%200%2013.3c-1.7-.5-19.3-1.2-21.9-.2-2.4.8-11.4.3-9.2%2015.1l3.3-7.5s-.3%205.3%201.9%207.2c-.4-5.6%202.1-9.4%202.1-9.4s.4%206.2%201.8%207c1.4%201%201.4-10%209-9%207.4.9%2012.9.6%2012.9.6s2.5%2021.4%201.7%2023.4c-5.4-1.3-18.4.5-19.2%203.8%207.6-.5%2011.1.4%2011.1.4s-6.1%205.5-4.2%208.6'/%3e%3cpath%20fill='%239ca69c'%20fill-rule='evenodd'%20stroke='%239ca69c'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M247.6%20214.8s-18.9%2020.8-10.7%2036.7c.4-2.2.2-3.6.5-3.5-.5-.3%202.3%201.9%202.1%201.5%200-1.2-.8-3.7-.8-3.7l2.5.7-1.5-2.8%203.7.4s-1.3-3.4-.9-3.4l3%20.2c-5.4-9.6-.3-17.6%202.1-26.2z'/%3e%3cpath%20fill='%239ca69c'%20fill-rule='evenodd'%20stroke='%239ca69c'%20d='M254.2%20196.9s1%207.2-3%209.2c-.5.5-3%201.3-2.6%202.8.4%202%201.5%201.6%203%201.2%204.1-.7%208.9-9.4%202.6-13.2z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M247.2%20203a1.5%201.5%200%201%201-3%200%201.5%201.5%200%200%201%203%200'/%3e%3cpath%20fill='%23de3108'%20fill-rule='evenodd'%20stroke='%23000'%20d='M241.1%20209c-1%20.9-6.2%206.3-1%208.3%205.3-1.4%203.8-2.4%205-3.6%200-2.5-2.6-3.1-4-4.6z'/%3e%3cpath%20fill='%239ca69c'%20fill-rule='evenodd'%20stroke='%239ca69c'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M252.6%20260.5c-.3%201.2-1.5%205.6.1%209%204.6-2%206.7-1.4%208.2-.4-3.7-3-5.2-4.3-8.3-8.6'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23fff'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='m260.4%20281.1.2%2010.2s3.6.6%205.2%200%200-7-5.4-10.2'/%3e%3cpath%20fill='%239ca69c'%20fill-rule='evenodd'%20stroke='%23000'%20d='M286%20282.4s-6.5-15.8-23.2-19.8-14.5-21.8-13.2-22.9c.8-1.5%201.3-3.9%206.1-1.6s27%2013.4%2030.2%2014%20.4%2030.7.2%2030.3z'/%3e%3cpath%20fill='%23de3108'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M270.2%20262.5c-.3.2%2022.3%2013.4%2015.5%2024.7%206.4-4.3%204.4-11.7%204.4-11.7s5.2%2013.7-7.6%2020.4c1.4%201.2%202.3%201%202.3%201l-2.2%202.1s-1%201.7%207.6-2.5c-2.3%201.9-2.5%203.3-2.5%203.3s.6%201.8%206.2-3.1c-4.5%204.9-5.5%207.4-5.5%207.3%2012.3-1%2039-41-8.4-52.7l2.1%202.2z'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.9'%20d='M271.2%20258.6c3%202.2%204.1%203%204.5%204-2.8-.6-5.3-.4-5.3-.4s-6.1-5.8-7.2-6.3c-.8%200-5.6-3-5.6-3-2.3-1.2-4.5-9.3%204.2-7a93%2093%200%200%200%2010.3%204.6l10.7%203.4%206.2%206.9s-11-5.4-12.4-5.5c3%202.4%204.7%205.8%204.7%205.8-3.5-1-6.5-2-10.1-2.5'/%3e%3cpath%20fill='none'%20stroke='%23fff'%20stroke-linecap='round'%20stroke-width='.9'%20d='M228.4%20209.9s10.5-2.6%2011.8-2.2'/%3e%3cpath%20fill='%23de3908'%20fill-rule='evenodd'%20d='M-128%20426.7h768V512h-768z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-um'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23bd3d44'%20d='M0%200h640v480H0'/%3e%3cpath%20stroke='%23fff'%20stroke-width='37'%20d='M0%2055.3h640M0%20129h640M0%20203h640M0%20277h640M0%20351h640M0%20425h640'/%3e%3cpath%20fill='%23192f5d'%20d='M0%200h364.8v258.5H0'/%3e%3cmarker%20id='um-a'%20markerHeight='30'%20markerWidth='30'%3e%3cpath%20fill='%23fff'%20d='m14%200%209%2027L0%2010h28L5%2027z'/%3e%3c/marker%3e%3cpath%20fill='none'%20marker-mid='url(%23um-a)'%20d='m0%200%2016%2011h61%2061%2061%2061%2060L47%2037h61%2061%2060%2061L16%2063h61%2061%2061%2061%2060L47%2089h61%2061%2060%2061L16%20115h61%2061%2061%2061%2060L47%20141h61%2061%2060%2061L16%20166h61%2061%2061%2061%2060L47%20192h61%2061%2060%2061L16%20218h61%2061%2061%2061%2060z'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BS5_gH7a__\"","export default \"__VITE_ASSET__Dzjuol2Z__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-uy'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%230038a8'%20d='M266%2053.3h374v53.4H266zm0%20106.7h374v53.3H266zM0%20266.7h640V320H0zm0%20106.6h640v53.4H0z'/%3e%3cg%20fill='%23fcd116'%20stroke='%23000'%20stroke-miterlimit='20'%20stroke-width='.6'%20transform='translate(133.3%20133.3)scale(2.93333)'%3e%3cg%20id='uy-c'%3e%3cg%20id='uy-b'%3e%3cg%20id='uy-a'%3e%3cpath%20stroke-linecap='square'%20d='m-2%208.9%203%204.5c-12.4%209-4.9%2014.2-13.6%2017%205.4-5.2-.9-5.7%203.7-16.8'/%3e%3cpath%20fill='none'%20d='M-4.2%2010.2c-6.8%2011.2-2.4%2017.4-8.4%2020.3'/%3e%3cpath%20d='M0%200h6L0%2033-6%200h6v33'/%3e%3c/g%3e%3cuse%20xlink:href='%23uy-a'%20width='100%25'%20height='100%25'%20transform='rotate(45)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uy-b'%20width='100%25'%20height='100%25'%20transform='rotate(90)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uy-c'%20width='100%25'%20height='100%25'%20transform='scale(-1)'/%3e%3ccircle%20r='11'/%3e%3c/g%3e%3cg%20transform='translate(133.3%20133.3)scale(.29333)'%3e%3cg%20id='uy-d'%3e%3cpath%20d='M81-44c-7%208-11-6-36-6S16-35%2012-38s21-21%2029-22%2031%207%2040%2016m-29%209c7%206%201%2019-6%2019S26-28%2032-36'/%3e%3cpath%20d='M19-26c1-12%2011-14%2027-14s23%2012%2029%2015c-7%200-13-10-29-10s-16%200-27%2010m3%202c4-6%209%206%2020%206s17-3%2024-8-10%2012-21%2012-26-6-23-10'/%3e%3cpath%20d='M56-17c13-7%205-17%200-19%202%202%2010%2012%200%2019M0%2043c6%200%208-2%2016-2s27%2011%2038%207c-23%209-14%203-54%203h-5m63%206c-4-7-3-5-11-16%208%206%2010%209%2011%2016M0%2067c25%200%2021-5%2054-19-24%203-29%2011-54%2011h-5m5-29c7%200%209-5%2017-5s19%203%2024%207c1%201-3-8-11-9S25%209%2016%207c0%204%203%203%204%209%200%205-9%205-11%200%202%208-4%208-9%208'/%3e%3c/g%3e%3cuse%20xlink:href='%23uy-d'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3cpath%20d='M0%2076c-5%200-18%203%200%203s5-3%200-3'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-uz'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%231eb53a'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='%230099b5'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%20153.6h640v172.8H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20163.2h640v153.6H0z'/%3e%3ccircle%20cx='134.4'%20cy='76.8'%20r='57.6'%20fill='%23fff'/%3e%3ccircle%20cx='153.6'%20cy='76.8'%20r='57.6'%20fill='%230099b5'/%3e%3cg%20fill='%23fff'%20transform='translate(261.1%20122.9)scale(1.92)'%3e%3cg%20id='uz-e'%3e%3cg%20id='uz-d'%3e%3cg%20id='uz-c'%3e%3cg%20id='uz-b'%3e%3cpath%20id='uz-a'%20d='M0-6-1.9-.3%201%20.7'/%3e%3cuse%20xlink:href='%23uz-a'%20width='100%25'%20height='100%25'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uz-b'%20width='100%25'%20height='100%25'%20transform='rotate(72)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uz-b'%20width='100%25'%20height='100%25'%20transform='rotate(-72)'/%3e%3cuse%20xlink:href='%23uz-c'%20width='100%25'%20height='100%25'%20transform='rotate(144)'/%3e%3c/g%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20y='-24'/%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20y='-48'/%3e%3c/g%3e%3cuse%20xlink:href='%23uz-e'%20width='100%25'%20height='100%25'%20x='24'/%3e%3cuse%20xlink:href='%23uz-e'%20width='100%25'%20height='100%25'%20x='48'/%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20x='-48'/%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20x='-24'/%3e%3cuse%20xlink:href='%23uz-d'%20width='100%25'%20height='100%25'%20x='-24'%20y='-24'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__D3$ECMbb__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-vc'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23f4f100'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23199a00'%20d='M490%200h150v480H490z'/%3e%3cpath%20fill='%230058aa'%20d='M0%200h150v480H0z'/%3e%3cpath%20fill='%23199a00'%20d='m259.3%20130-46.4%2071.3%2044.7%2074.4%2043.8-73.7zm121.2%200-46.3%2071.3%2044.7%2074.4%2043.8-73.7zm-61.2%2097.3-46.4%2071.4%2044.8%2074.4%2043.8-73.7-42.2-72z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-ve'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cg%20id='ve-d'%20transform='translate(0%20-36)'%3e%3cg%20id='ve-c'%3e%3cg%20id='ve-b'%3e%3cpath%20id='ve-a'%20fill='%23fff'%20d='M0-5-1.5-.2l2.8.9z'/%3e%3cuse%20xlink:href='%23ve-a'%20width='180'%20height='120'%20transform='scale(-1%201)'/%3e%3c/g%3e%3cuse%20xlink:href='%23ve-b'%20width='180'%20height='120'%20transform='rotate(72)'/%3e%3c/g%3e%3cuse%20xlink:href='%23ve-b'%20width='180'%20height='120'%20transform='rotate(-72)'/%3e%3cuse%20xlink:href='%23ve-c'%20width='180'%20height='120'%20transform='rotate(144)'/%3e%3c/g%3e%3c/defs%3e%3cpath%20fill='%23cf142b'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%2300247d'%20d='M0%200h640v320H0z'/%3e%3cpath%20fill='%23fc0'%20d='M0%200h640v160H0z'/%3e%3cg%20id='ve-f'%20transform='matrix(4%200%200%204%20320%20336)'%3e%3cg%20id='ve-e'%3e%3cuse%20xlink:href='%23ve-d'%20width='180'%20height='120'%20transform='rotate(10)'/%3e%3cuse%20xlink:href='%23ve-d'%20width='180'%20height='120'%20transform='rotate(30)'/%3e%3c/g%3e%3cuse%20xlink:href='%23ve-e'%20width='180'%20height='120'%20transform='rotate(40)'/%3e%3c/g%3e%3cuse%20xlink:href='%23ve-f'%20width='180'%20height='120'%20transform='rotate(-80%20320%20336)'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__DrShXt9M__\"","export default \"__VITE_ASSET__KtASqI____\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-vn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='vn-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23vn-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23da251d'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23ff0'%20d='M349.6%20381%20260%20314.3l-89%2067.3L204%20272l-89-67.7%20110.1-1%2034.2-109.4L294%20203l110.1.1-88.5%2068.4%2033.9%20109.6z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-vu'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='vu-a'%3e%3cpath%20d='M0%200v475l420-195h480v-85H420Z'/%3e%3c/clipPath%3e%3c/defs%3e%3cpath%20fill='%23009543'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23d21034'%20d='M0%200h640v240H0z'/%3e%3cg%20clip-path='url(%23vu-a)'%20transform='scale(.71111%201.01053)'%3e%3cpath%20stroke='%23fdce12'%20stroke-width='110'%20d='m0%200%20420%20195h480v85H420L0%20475'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='60'%20d='m0%200%20420%20195h480m0%2085H420L0%20475'/%3e%3c/g%3e%3cg%20fill='%23fdce12'%20transform='translate(-22)scale(1.01053)'%3e%3cpath%20d='M106.9%20283v27c23.5%200%2069.7-18%2069.7-76.1%200-58.1-49.3-68.9-64-68.9-14.8%200-60.3%2010.6-60.3%2058%200%2047.6%2044.7%2052%2053.5%2052%208.8%200%2041.8-8%2038-43.6a35.5%2035.5%200%200%201-35.4%2031.5c-24%200-39-17.8-39-35.4%200-17.6%2014.6-41.2%2039.9-41.2%2025.3%200%2043.8%2022.5%2043.8%2045.1%200%2022.7-17.8%2051.5-46.2%2051.5z'/%3e%3cg%20id='vu-b'%3e%3cpath%20stroke='%23fdce12'%20stroke-width='.8'%20d='m86.2%20247.7%201.4%201s11.2-25.5%2041.1-43.6c-3.8%202-23.8%2012-42.5%2042.6z'/%3e%3cpath%20d='M89.1%20243.3s-3.4-7-.4-10.2c3-3.1%201.7%208.3%201.7%208.3l1.3-1.9s-2-8.6.2-10.4c2.3-1.9%201.2%208.3%201.2%208.3l1.4-1.8s-1.5-8.4.7-10c2.3-1.6.9%208%20.9%208l1.6-2s-1.2-8%201.5-9.9c2.7-1.9.3%207.6.3%207.6l1.8-2s-.8-7.3%201.5-9c2.3-1.6.4%207%20.4%207l1.6-1.8s-.5-6.8%201.7-8.4c2.3-1.6.2%206.5.2%206.5l1.7-1.6s-.4-6.9%202.4-8.2c2.8-1.3-.5%206.4-.5%206.4l2-1.6s.5-8%202.9-8.7c2.4-.8-1%207-1%207l1.7-1.4s.9-6.8%203.5-7.6c2.7-.9-1.6%206.2-1.6%206.2l1.7-1.3s1.9-6.8%204.4-7.6c2.4-.7-2.6%206.5-2.6%206.5l1.7-1.2s2.7-6.2%205-6.6c2.1-.4-2.6%205.1-2.6%205.1l2.1-1.2s3.5-6.4%204.8-4.5c1.2%202-5%204.9-5%204.9l-2%201.2s7.5-3.6%208.4-1.8c.9%201.8-10.3%203-10.3%203l-1.8%201.2s7.5-2%206.6-.1c-1%201.9-8.4%201.5-8.4%201.5l-1.7%201.2s7.5-1.8%206.5%200c-1%201.6-8.3%201.5-8.3%201.5l-1.8%201.5s7.3-2%206.2.3c-1%202.2-9.4%202.1-9.4%202.1l-2%202s7.7-2.7%207-.6c-.6%202-9.4%203-9.4%203l-2%202s8.3-2.7%205.8-.2c-2.4%202.6-8.5%203.2-8.5%203.2l-2.3%203s8.2-5%207-2.2c-1.1%202.8-9.2%204.7-9.2%204.7l-1.6%202s7.4-4.3%206.6-2c-.7%202.5-8.6%205-8.6%205l-1.3%201.8s8.7-5.2%208-2.5c-.8%202.6-9.1%204.5-9.1%204.5l-1%201.7s8-4.7%208-2.4c.2%202.2-9.4%204.4-9.4%204.4z'/%3e%3c/g%3e%3cuse%20xlink:href='%23vu-b'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20220%200)'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-wf'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ws'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23ce1126'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23002b7f'%20d='M0%200h320v240H0z'/%3e%3cpath%20fill='%23fff'%20d='m180%20229.3-20.7-14-19.9%2014.1%206.5-24.9-19-15.2%2024.5-1.5%208.1-23.6%208.8%2024%2024%20.7-19%2016.3zm-3.6-165.6L159.8%2053l-16%2010.4%204.4-20-14.6-12.7%2019.4-1.6%207.2-18.6%207.4%2018.7%2019.1%201.7L172%2044.3zm-73%2059.5-16-11-16.7%2011%205.2-19.4L60.8%2091%2080%2090l7-19%206.8%2018.9%2019.6%201.1-15%2012.5zM250%20110l-15.4-10-15%2010%204.4-18.3-14-11.8%2018.3-1.5%206.3-17.2%207%2017.4%2017.7%201-13.7%2012.3zm-43.1%2043.4-10.3-6.4-10.3%206.6%202.7-12.3-9.2-8.3%2012-1%204.6-11.6%204.9%2011.6%2011.9%201-9.1%208.3z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CwCtSaY2__\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-xx'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20stroke='%23adb5bd'%20stroke-width='1.1'%20d='M.5.5h638.9v478.9H.5z'/%3e%3cpath%20fill='none'%20stroke='%23adb5bd'%20stroke-width='1.1'%20d='m.5.5%20639%20479m0-479-639%20479'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ye'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v472.8H0z'/%3e%3cpath%20fill='%23f10600'%20d='M0%200h640v157.4H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20322.6h640V480H0z'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-yt'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-za'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='za-a'%3e%3cpath%20fill-opacity='.7'%20d='M-71.9%200h682.7v512H-71.9z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23za-a)'%20transform='translate(67.4)scale(.93748)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23000001'%20d='M-71.9%20407.8V104.4L154%20256.1z'/%3e%3cpath%20fill='%23000c8a'%20d='m82.2%20512.1%20253.6-170.6H696V512H82.2z'/%3e%3cpath%20fill='%23e1392d'%20d='M66%200h630v170.8H335.7S69.3-1.7%2066%200'/%3e%3cpath%20fill='%23ffb915'%20d='M-71.9%2064v40.4L154%20256-72%20407.8v40.3l284.5-192z'/%3e%3cpath%20fill='%23007847'%20d='M-71.9%2064V0h95l301.2%20204h371.8v104.2H324.3L23%20512h-94.9v-63.9l284.4-192L-71.8%2064z'/%3e%3cpath%20fill='%23fff'%20d='M23%200h59.2l253.6%20170.7H696V204H324.3zm0%20512.1h59.2l253.6-170.6H696v-33.2H324.3L23%20512z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","export default \"__VITE_ASSET__BpS5J6Z3__\"","export default \"__VITE_ASSET__D8lTC8lr__\"","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { getPublicUrl } from 'pmt-modules/environment'\r\n\r\n// Import all SVG flags with Vite's glob import (eager mode)\r\nconst flagModules = import.meta.glob('./flags/*.svg', {\r\n  eager: true,\r\n  query: '?url',\r\n  import: 'default',\r\n})\r\n\r\n// Create a map for easier access\r\nconst flags = Object.fromEntries(\r\n  Object.entries(flagModules).map(([path, url]) => {\r\n    // Extract country code from path: './flags/fr.svg' → 'fr'\r\n    const countryCode = path.match(/\\.\\/flags\\/(.+)\\.svg/)[1]\r\n    return [countryCode, url]\r\n  })\r\n)\r\n\r\nlet Flag = ({ className, country, alt = '', ...otherProps }) => {\r\n  // Determine which flag to use: country flag or default 'xx'\r\n  const countryCode = !isEmpty(country) ? country.toLowerCase() : 'xx'\r\n  const flagSvg = flags[countryCode] || flags['xx']\r\n\r\n  // The flagSvg is already a URL string due to the '?url' query in the glob import\r\n  // Note: small svg might even be inlined as a data URI, so we don't prepend the public URL in that case\r\n  const fullPath = flagSvg.startsWith('data:') ? flagSvg : getPublicUrl() + flagSvg\r\n\r\n  return <img className={className} src={fullPath} alt={alt} {...otherProps} />\r\n}\r\n\r\nFlag = pure(Flag)\r\nFlag.displayName = 'Flag'\r\n\r\nexport default Flag\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport shallowEqual from 'recompose/shallowEqual'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport clsx from 'clsx'\r\n\r\nimport Select from '../Select'\r\nimport { MenuItem } from '../Menu'\r\nimport TextField from '../TextField'\r\nimport { InputLabel, InputAdornment } from 'pmt-ui/Input'\r\nimport { FormControl } from 'pmt-ui/Form'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Flag from 'pmt-utils/country/flag'\r\nimport {\r\n  getCountryCodes,\r\n  getCountryFromCountryCode,\r\n  getCountryDialCodeFromCountryCode,\r\n  formatPhoneNumberAsYouType,\r\n  parse,\r\n} from 'pmt-utils/phone'\r\nimport { getLocale, getCountryCodeForLocale } from 'pmt-modules/i18n/utils'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    flexDirection: 'row',\r\n    height: 48,\r\n  },\r\n  phoneNumberRoot: {\r\n    marginTop: 16,\r\n    flexGrow: 1,\r\n  },\r\n  label: {\r\n    top: 0,\r\n    left: 0,\r\n    position: 'absolute',\r\n    transform: 'translate(0, 1.5px) scale(0.75)', // TODO: use theme?\r\n    transformOrigin: 'top left',\r\n  },\r\n  flagIcon: {\r\n    width: 19,\r\n    height: 15,\r\n    marginRight: theme.spacing(1),\r\n    borderRadius: 2,\r\n  },\r\n  selectedValue: {\r\n    position: 'absolute',\r\n    top: `calc(50% - 9px)`,\r\n    display: 'flex',\r\n    height: '100%',\r\n    width: '100%',\r\n    // TODO: remove after migrating to TypoGraphy\r\n    fontSize: 16,\r\n    paddingTop: 2,\r\n  },\r\n  // New CSS from massive material update\r\n  selectRoot: {\r\n    position: 'relative',\r\n    width: 10,\r\n  },\r\n  // Modern (outlined) variant styles\r\n  outlinedRoot: {\r\n    width: '100%',\r\n  },\r\n  outlinedAdornment: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  outlinedIcon: {\r\n    color: theme.pmt.colors.grey500,\r\n    fontSize: 20,\r\n    marginRight: theme.spacing(0.5),\r\n  },\r\n  outlinedSelectRoot: {\r\n    minWidth: 44,\r\n  },\r\n  outlinedSelectedValue: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n})\r\n\r\nconst getInitialState = () => {\r\n  const locale = getLocale()\r\n\r\n  if (locale) {\r\n    let countryCode = getCountryCodeForLocale(locale)\r\n\r\n    if (countryCode) {\r\n      const countryDialCode = getCountryDialCodeFromCountryCode(countryCode)\r\n\r\n      if (countryDialCode) {\r\n        //We return countryCode+countryDialCode only if we recognized both at the same time\r\n        return {\r\n          localeDetected: true,\r\n          countryCode: countryCode,\r\n          countryDialCode: countryDialCode,\r\n          phoneNumber: countryDialCode,\r\n          formattedPhoneNumber: countryDialCode,\r\n          nationalNumber: '',\r\n          touched: false,\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  //We return France/+33 as default\r\n  return {\r\n    localeDetected: false,\r\n    countryCode: 'FR',\r\n    countryDialCode: '+33',\r\n    phoneNumber: '+33',\r\n    formattedPhoneNumber: '+33',\r\n    nationalNumber: '',\r\n    touched: false,\r\n  }\r\n}\r\n\r\nconst makeSureStartWithPlusOrEmpty = inputValue => {\r\n  return inputValue.startsWith('+') || inputValue === '' ? inputValue : `+${inputValue}`\r\n}\r\n\r\nclass PhoneField extends React.Component {\r\n  static propTypes = {\r\n    /**\r\n     * The value of the text field.\r\n     */\r\n    value: PropTypes.any,\r\n  }\r\n\r\n  escapeSetFormattedNumber = false // allow us to skip infinite loop but setting right phone number and skip error display while there's none\r\n\r\n  state = getInitialState()\r\n\r\n  componentDidMount() {\r\n    //Initialize state from value prop on first mount\r\n    if (this.props.value) {\r\n      this.componentWillReceiveProps(this.props)\r\n    }\r\n\r\n    //We apply the initCountryCode if set and either override boolean is true or locale wasn't detected\r\n    if (\r\n      this.props.initCountryCode &&\r\n      (this.props.initCountryCodeOverridesBrowserLocale || !this.state.localeDetected)\r\n    ) {\r\n      this.handleCountryCodeChange(null, this.props.initCountryCode)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    //console.log('[componentWillReceiveProps] nextProps: ', nextProps)\r\n    //console.log('[componentWillReceiveProps] state: ', this.state)\r\n\r\n    const nextPropsValue = nextProps.value\r\n\r\n    const libPhoneNumber = parse(nextPropsValue)\r\n    if (libPhoneNumber && libPhoneNumber.isValid()) {\r\n      const newState = {\r\n        ...this.state,\r\n        phoneNumber: libPhoneNumber.number,\r\n        nationalNumber: libPhoneNumber.nationalNumber,\r\n        formattedPhoneNumber: libPhoneNumber.formatInternational(),\r\n      }\r\n\r\n      if (libPhoneNumber.country) {\r\n        const dialCode = getCountryDialCodeFromCountryCode(libPhoneNumber.country)\r\n\r\n        if (dialCode) {\r\n          newState.countryCode = libPhoneNumber.country\r\n          newState.countryDialCode = makeSureStartWithPlusOrEmpty(dialCode)\r\n        }\r\n      }\r\n\r\n      this.setState(newState, () => {\r\n        // on certain devices (old samsung), cursor \"jumps\" on previous char\r\n        // we position it at the end on setState callback\r\n        // setTimeout is necessary to ensure it's working\r\n        if (!isNil(this.input)) {\r\n          const cursorPosition = this.input.selectionStart\r\n          setTimeout(\r\n            () => this.input && this.input.setSelectionRange(cursorPosition, cursorPosition),\r\n            0\r\n          )\r\n        }\r\n      })\r\n    }\r\n  }\r\n\r\n  shouldComponentUpdate(nextProps, nextState) {\r\n    return !shallowEqual(this.props, nextProps) || !shallowEqual(this.state, nextState)\r\n  }\r\n\r\n  handleChange = (asYouTypeResults, newState) => {\r\n    const country = asYouTypeResults.country\r\n    const number = asYouTypeResults.number\r\n\r\n    if (country) {\r\n      const dialCode = getCountryDialCodeFromCountryCode(country)\r\n\r\n      if (dialCode) {\r\n        newState.countryCode = country\r\n        newState.countryDialCode = dialCode\r\n      }\r\n    }\r\n\r\n    if (number) {\r\n      newState.phoneNumber = number.number\r\n      newState.nationalNumber = number.nationalNumber\r\n\r\n      if (number.country) {\r\n        const dialCode = getCountryDialCodeFromCountryCode(number.country)\r\n\r\n        if (dialCode) {\r\n          newState.countryCode = number.country\r\n          newState.countryDialCode = makeSureStartWithPlusOrEmpty(dialCode)\r\n        }\r\n      }\r\n    }\r\n\r\n    this.setState(newState, () => {\r\n      this.props.onChange(`${this.state.phoneNumber}`)\r\n    })\r\n  }\r\n\r\n  handleCountryCodeChange = (event, countryCode) => {\r\n    if (countryCode === this.state.countryCode) return\r\n\r\n    const countryDialCode = getCountryDialCodeFromCountryCode(countryCode)\r\n\r\n    const extractedNationalNumber = this.state.phoneNumber.startsWith(this.state.countryDialCode)\r\n      ? this.state.phoneNumber.slice(this.state.countryDialCode.length)\r\n      : this.state.nationalNumber\r\n\r\n    const newFormattedNumber = makeSureStartWithPlusOrEmpty(\r\n      `${countryDialCode}${extractedNationalNumber}`\r\n    )\r\n    const asYouTypeResults = formatPhoneNumberAsYouType(newFormattedNumber, this.state.countryCode)\r\n\r\n    const inputFormatted = asYouTypeResults.input\r\n    const nationalNumber = asYouTypeResults.nationalNumber\r\n\r\n    const newState = {\r\n      ...this.state,\r\n      countryCode: countryCode,\r\n      countryDialCode: countryDialCode,\r\n      phoneNumber: inputFormatted.replace(/[ -()]/g, ''),\r\n      formattedPhoneNumber: inputFormatted,\r\n      nationalNumber: nationalNumber,\r\n    }\r\n\r\n    this.handleChange(asYouTypeResults, newState)\r\n  }\r\n\r\n  handleInputChange = event => {\r\n    this.escapeSetFormattedNumber = false\r\n\r\n    const inputValue = makeSureStartWithPlusOrEmpty(event.target.value)\r\n    const asYouTypeResults = formatPhoneNumberAsYouType(inputValue, this.state.countryCode)\r\n\r\n    const inputFormatted = asYouTypeResults.input\r\n    const nationalNumber = asYouTypeResults.nationalNumber\r\n\r\n    const newState = {\r\n      ...this.state,\r\n      phoneNumber: inputFormatted.replace(/[ -()]/g, ''),\r\n      formattedPhoneNumber: inputFormatted,\r\n      nationalNumber: nationalNumber,\r\n      touched: true,\r\n    }\r\n\r\n    this.handleChange(asYouTypeResults, newState)\r\n  }\r\n\r\n  renderOutlined = () => {\r\n    const { classes, className, label, required, disabled, startAdornment } = this.props\r\n\r\n    const displayAsError = this.state.touched && this.props.error\r\n\r\n    const selectElement = (\r\n      <Select\r\n        name=\"selectCountryCode\"\r\n        value={this.state.countryCode}\r\n        renderValue={() => {\r\n          const country = getCountryFromCountryCode(this.state.countryCode)\r\n\r\n          return (\r\n            <div className={classes.outlinedSelectedValue}>\r\n              <Flag\r\n                className={classes.flagIcon}\r\n                country={this.state.countryCode}\r\n                alt={country.name}\r\n              />\r\n            </div>\r\n          )\r\n        }}\r\n        disableUnderline\r\n        autoWidth={true}\r\n        onChange={event => this.handleCountryCodeChange(event, event.target.value)}\r\n        MenuProps={{\r\n          PaperProps: {\r\n            style: {\r\n              maxHeight: '100%',\r\n            },\r\n          },\r\n        }}\r\n        classes={{\r\n          root: classes.outlinedSelectRoot,\r\n        }}\r\n        disabled={disabled}\r\n      >\r\n        {getCountryCodes().map(({ name, dial_code, code }) => (\r\n          <MenuItem key={code} value={code}>\r\n            <Flag className={classes.flagIcon} country={code} alt={name} />\r\n            {name}\r\n            &nbsp;&nbsp;\r\n            {dial_code}\r\n          </MenuItem>\r\n        ))}\r\n      </Select>\r\n    )\r\n\r\n    return (\r\n      <div className={className}>\r\n        <TextField\r\n          variant=\"outlined\"\r\n          id=\"phone\"\r\n          type=\"tel\"\r\n          label={label}\r\n          className={classes.outlinedRoot}\r\n          inputRef={elem => (this.input = elem)}\r\n          onChange={event => {\r\n            this.handleInputChange(event)\r\n          }}\r\n          value={this.state.formattedPhoneNumber}\r\n          error={displayAsError}\r\n          helperText={displayAsError ? this.props.helperText : undefined}\r\n          placeholder={this.props.placeholder}\r\n          disabled={disabled}\r\n          required={required}\r\n          InputProps={{\r\n            startAdornment: (\r\n              <InputAdornment position=\"start\" className={classes.outlinedAdornment}>\r\n                {startAdornment}\r\n                {selectElement}\r\n              </InputAdornment>\r\n            ),\r\n          }}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n\r\n  renderStandard = () => {\r\n    const { classes, className, label, required, disabled } = this.props\r\n\r\n    const selectElement = (\r\n      <Select\r\n        name=\"selectCountryCode\"\r\n        // current value\r\n        value={this.state.countryCode}\r\n        // display of the current value\r\n        renderValue={() => {\r\n          const country = getCountryFromCountryCode(this.state.countryCode)\r\n\r\n          return (\r\n            <div className={classes.selectedValue}>\r\n              <Flag\r\n                className={classes.flagIcon}\r\n                country={this.state.countryCode}\r\n                alt={country.name}\r\n              />\r\n            </div>\r\n          )\r\n        }}\r\n        autoWidth={true}\r\n        onChange={event => this.handleCountryCodeChange(event, event.target.value)}\r\n        MenuProps={{\r\n          PaperProps: {\r\n            style: {\r\n              maxHeight: '100%',\r\n            },\r\n          },\r\n        }}\r\n        classes={{\r\n          root: classes.selectRoot,\r\n        }}\r\n        disabled={disabled}\r\n      >\r\n        {getCountryCodes().map(({ name, dial_code, code }) => (\r\n          <MenuItem key={code} value={code}>\r\n            <Flag className={classes.flagIcon} country={code} alt={name} />\r\n            {name}\r\n            &nbsp;&nbsp;\r\n            {dial_code}\r\n          </MenuItem>\r\n        ))}\r\n      </Select>\r\n    )\r\n\r\n    const displayAsError = this.state.touched && this.props.error\r\n\r\n    return (\r\n      <div>\r\n        <FormControl className={clsx(className, classes.root)}>\r\n          <InputLabel htmlFor=\"phone\" className={classes.label} error={displayAsError}>\r\n            {label}\r\n            {required ? ' *' : ''}\r\n          </InputLabel>\r\n\r\n          {selectElement}\r\n\r\n          <TextField\r\n            id=\"phone\"\r\n            type=\"tel\"\r\n            classes={{\r\n              root: classes.phoneNumberRoot,\r\n            }}\r\n            inputRef={elem => (this.input = elem)}\r\n            onChange={event => {\r\n              this.handleInputChange(event)\r\n            }}\r\n            value={this.state.formattedPhoneNumber}\r\n            error={displayAsError}\r\n            placeholder={this.props.placeholder}\r\n            disabled={disabled}\r\n            required={required}\r\n          />\r\n        </FormControl>\r\n        {displayAsError && !isEmpty(this.props.helperText) && (\r\n          <p className=\"colorError u-fontSize12 u-marginTop8\">{this.props.helperText}</p>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n\r\n  render() {\r\n    try {\r\n      return this.props.variant === 'outlined' ? this.renderOutlined() : this.renderStandard()\r\n    } catch (e) {\r\n      console.error(e)\r\n    }\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(PhoneField)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport clsx from 'clsx'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport isNil from 'lodash/isNil'\r\nimport moment from 'moment'\r\nimport React from 'react'\r\nimport { trOptional } from 'pmt-modules/i18n'\r\n\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\nimport CountryChooser from 'pmt-ui/CountryChooser'\r\nimport DateField from 'pmt-ui/DateField'\r\nimport { FormControlLabel } from 'pmt-ui/Form'\r\nimport { InputAdornment } from 'pmt-ui/Input'\r\nimport PasswordField from 'pmt-ui/PasswordField'\r\nimport PhoneField from 'pmt-ui/PhoneField'\r\nimport InfoOutline from 'pmt-ui/svg-icons/action/info-outline'\r\nimport TextField from 'pmt-ui/TextField'\r\nimport Tooltip from 'pmt-ui/Tooltip'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport PersonOutlineIcon from '@material-ui/icons/PersonOutline'\r\nimport MailOutlineIcon from '@material-ui/icons/MailOutline'\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined'\r\nimport PhoneOutlinedIcon from '@material-ui/icons/PhoneOutlined'\r\nimport CardMembershipOutlinedIcon from '@material-ui/icons/CardMembershipOutlined'\r\n\r\nconst fieldIconStyles = theme => ({\r\n  icon: {\r\n    color: theme.pmt.colors.grey500,\r\n    fontSize: 20,\r\n  },\r\n})\r\n\r\nconst FieldIcon = withStyles(fieldIconStyles)(({ classes, icon: Icon }) => (\r\n  <InputAdornment position=\"start\">\r\n    <Icon className={classes.icon} />\r\n  </InputAdornment>\r\n))\r\n\r\nexport const FirstName = ({ value, validation, onChange, maxLength, ...otherProps }) => (\r\n  <TextField\r\n    variant=\"outlined\"\r\n    id=\"user-form-first-name\"\r\n    name=\"FirstName\"\r\n    label={tr('global.form.user.firstname')}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    inputProps={{ maxLength: maxLength }}\r\n    InputProps={{ startAdornment: <FieldIcon icon={PersonOutlineIcon} /> }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const LastName = ({ value, validation, onChange, maxLength, ...otherProps }) => (\r\n  <TextField\r\n    variant=\"outlined\"\r\n    id=\"user-form-last-name\"\r\n    name=\"LastName\"\r\n    label={tr('global.form.user.lastname')}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    inputProps={{ maxLength: maxLength }}\r\n    InputProps={{ startAdornment: <FieldIcon icon={PersonOutlineIcon} /> }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const PhoneNumber = ({ value, validation, onChange, className, ...otherProps }) => (\r\n  <PhoneField\r\n    variant=\"outlined\"\r\n    id=\"user-form-phone-number\"name=\"PhoneNumber\"\r\n    label={tr('global.form.user.phone')}\r\n    className={clsx('u-sizeFullWidth u-marginTop10', className)}\r\n    value={value || ''}\r\n    onChange={phoneNumber => onChange(phoneNumber)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    startAdornment={<FieldIcon icon={PhoneOutlinedIcon} />}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const BadgeId = ({ value, validation, onChange, ...otherProps }) => (\r\n  <TextField\r\n    variant=\"outlined\"\r\n    id=\"user-form-badge-id\"\r\n    name=\"BadgeId\"\r\n    label={tr('global.form.user.badge_id')}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    InputProps={{\r\n      startAdornment: <FieldIcon icon={CardMembershipOutlinedIcon} />,\r\n      endAdornment: (\r\n        <InputAdornment position=\"end\">\r\n          <Tooltip\r\n            disabletriggertouch\r\n            title={tr('global.form.user.badgeId.tooltip')}\r\n            placement=\"bottom-end\"\r\n          >\r\n            <InfoOutline color=\"primary\" />\r\n          </Tooltip>\r\n        </InputAdornment>\r\n      ),\r\n    }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const Email = ({ value, validation, onChange, className, ...otherProps }) => (\r\n  <TextField\r\n    variant=\"outlined\"\r\n    type=\"email\"\r\n    id=\"user-form-email\"\r\n    name=\"Email\"\r\n    label={tr('global.form.user.email')}\r\n    className={clsx('u-sizeFullWidth u-marginTop10', className)}\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    InputProps={{ startAdornment: <FieldIcon icon={MailOutlineIcon} /> }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const Password = ({ value, validation, onChange, ...otherProps }) => (\r\n  <PasswordField\r\n    variant=\"outlined\"\r\n    fullWidth\r\n    name=\"password\"\r\n    label={tr('global.form.user.password')}\r\n    className=\"u-sizeFullWidth u-marginTop10 u-marginBottom10\"\r\n    value={value || ''}\r\n    onChange={event => onChange(event.target.value)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    startAdornment={<FieldIcon icon={LockOutlinedIcon} />}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const CountryOfResidence = ({ value, validation, onChange, ...otherProps }) => (\r\n  <CountryChooser\r\n    label={tr('global.form.user.countryOfResidence', {\r\n      fr: 'Pays de résidence',\r\n      context: '',\r\n      desc: 'User form country of residence',\r\n    })}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={country => onChange(country)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const Nationality = ({ value, validation, onChange, ...otherProps }) => (\r\n  <CountryChooser\r\n    label={tr('global.form.user.nationality', {\r\n      fr: 'Nationalité',\r\n      context: '',\r\n      desc: 'User form nationality',\r\n    })}\r\n    className=\"u-sizeFullWidth u-marginTop10\"\r\n    value={value || ''}\r\n    onChange={country => onChange(country)}\r\n    error={value !== null && !isEmpty(validation.message)}\r\n    helperText={value !== null && validation.message}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\nexport const Birthdate = ({ value, validation, onChange, ...otherProps }) => (\r\n  <DateField\r\n    mode={DateField.Mode.INLINE}\r\n    label={tr('global.form.user.birthdate', {\r\n      fr: 'Date de naissance',\r\n      context: '',\r\n      desc: 'User form birthdate',\r\n    })}\r\n    value={value || ''}\r\n    onChange={onChange}\r\n    helperText={value !== null && validation.message}\r\n    options={{\r\n      defaultDate: moment()\r\n        .subtract(30, 'year')\r\n        .startOf('day'),\r\n      minDate: moment()\r\n        .subtract(100, 'year')\r\n        .startOf('day'),\r\n      maxDate: moment()\r\n        .subtract(12, 'year')\r\n        .startOf('day'),\r\n    }}\r\n    {...otherProps}\r\n  />\r\n)\r\n\r\n/**\r\n * /!\\ any changes made to this component must be reflected on the backoffice preview (component MarketingOptimPreview)*\r\n */\r\nexport const MarketingOptim = ({ value, onChange, className, ...otherProps }) => {\r\n  if (isNil(trOptional('ORDER__LOGIN__MARKETING__OPTIN'))) {\r\n    return null\r\n  } else {\r\n    return (\r\n      <FormControlLabel\r\n        label={\r\n          <TypographyCustom type=\"164\">\r\n            {trOptional('ORDER__LOGIN__MARKETING__OPTIN')}\r\n          </TypographyCustom>\r\n        }\r\n        className={clsx('u-sizeFullWidth u-marginTop10', className)}\r\n        control={\r\n          <Checkbox\r\n            color=\"primary\"\r\n            checked={value}\r\n            onChange={(event, isInputChecked) => onChange(isInputChecked)}\r\n            onKeyDown={event => {\r\n              if (event.key === 'Enter') {\r\n                event.preventDefault()\r\n                onChange(!value)\r\n              }\r\n            }}\r\n            {...otherProps}\r\n          />\r\n        }\r\n      />\r\n    )\r\n  }\r\n}\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { compose } from 'redux'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withForm, FormType } from 'pmt-modules/form'\r\nimport { Email, Password } from 'pmt-modules/user/forms/elements/index'\r\nimport { Link } from 'pmt-modules/routing'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  forgottenPassword: {\r\n    color: theme.palette.secondary.main,\r\n  },\r\n})\r\n\r\nconst LoginFormView = ({ classes, formData, formErrors, forgottenPasswordLink, onChange }) => (\r\n  <React.Fragment>\r\n    <Email\r\n      value={formData.username}\r\n      onChange={username => onChange({ ...formData, username })}\r\n      validation={formErrors.username}\r\n      required\r\n    />\r\n\r\n    <Password\r\n      value={formData.password}\r\n      onChange={password => onChange({ ...formData, password })}\r\n      validation={formErrors.password}\r\n      required\r\n      checkSecurity\r\n    />\r\n\r\n    <div className=\"u-textAlignRight u-foreground u-marginTop10\">\r\n      {!isNil(forgottenPasswordLink) && !isEmpty(forgottenPasswordLink) ? (\r\n        <a\r\n          className={classes.forgottenPassword}\r\n          href={forgottenPasswordLink}\r\n          target=\"_blank\"\r\n          rel=\"noopener noreferrer\"\r\n        >\r\n          {tr('global.forgot_password_link', {\r\n            fr: 'Mot de passe oublié ?',\r\n            context: '',\r\n            desc: 'Link for forgotten password',\r\n          })}\r\n        </a>\r\n      ) : (\r\n        <Link to={Link.getRoute('FORGOT_PASSWORD')} className={classes.forgottenPassword}>\r\n          {tr('global.forgot_password_link', {\r\n            fr: 'Mot de passe oublié ?',\r\n            context: '',\r\n            desc: 'Link for forgotten password',\r\n          })}\r\n        </Link>\r\n      )}\r\n    </div>\r\n  </React.Fragment>\r\n)\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.LOGIN)\r\n)(LoginFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\n\r\nimport { notEmpty, isGreaterThan, isValidEmail } from 'pmt-modules/form/validation'\r\n\r\nimport createForm from 'pmt-modules/form/createForm'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nexport { default as LoginFormView } from './LoginFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  username: '',\r\n  password: 'bonjour1',\r\n}\r\n\r\nconst defaultData = {\r\n  username: null,\r\n  password: null,\r\n}\r\n\r\nconst validationRules = () => ({\r\n  username: [\r\n    [notEmpty, tr('global.login.form.validation.required.email')],\r\n    [isValidEmail, tr('global.login.form.validation.email_invalid')],\r\n  ],\r\n  password: [[isGreaterThan(5), tr('global.login.form.validation.password_length')]],\r\n})\r\n\r\nexport default createForm(FormType.LOGIN, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport { compose } from 'redux'\r\nimport isNil from 'lodash/isNil'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\n\r\nimport { LoginFormView } from 'pmt-modules/auth/forms/login'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\n\r\nimport { Button } from '../../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {},\r\n  subheader: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n})\r\n\r\nconst LoginForm = ({\r\n  classes,\r\n  isFetchingAuth,\r\n  isFetchingRegister, // useful if registering as incognito\r\n  formIsValid,\r\n  authError,\r\n  onSubmitLogin,\r\n  formData,\r\n}) => {\r\n  return (\r\n    <div className={classes.root}>\r\n      <form\r\n        onSubmit={event => {\r\n          event.preventDefault()\r\n          onSubmitLogin(formData)\r\n        }}\r\n      >\r\n        {\r\n          !isNil(\r\n            trOptional('LOGIN__SUBHEADER') && (\r\n              <TypographyCustom type=\"144\" className={classes.subheader}>\r\n                {trOptional('LOGIN__SUBHEADER')}\r\n              </TypographyCustom>\r\n            )\r\n          )\r\n        }\r\n\r\n        <LoadingBlockWrapper show={isFetchingAuth || isFetchingRegister} />\r\n\r\n        <ErrorBlock mode={ErrorBlock.Mode.SNACKBAR} error={authError} />\r\n\r\n        <LoginFormView />\r\n\r\n        <Button type=\"submit\" className=\"u-marginTop20 u-sizeFull\" disabled={!formIsValid}>\r\n          <TypographyCustom type=\"167\" skipColor>\r\n            {tr('web_customer.login.connect')}\r\n          </TypographyCustom>\r\n        </Button>\r\n      </form>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.LOGIN)\r\n)(LoginForm)\r\n","import React from 'react'\r\n\r\nimport {\r\n  BadgeId,\r\n  Email,\r\n  FirstName,\r\n  LastName,\r\n  MarketingOptim,\r\n  Password,\r\n  PhoneNumber,\r\n} from 'pmt-modules/user/forms/elements/index'\r\n\r\n// see API class ApiConsumerPresetValidator\r\nexport const fieldsType = {\r\n  FIRST_NAME: 'FIRST_NAME',\r\n  LAST_NAME: 'LAST_NAME',\r\n  EMAIL: 'EMAIL',\r\n  PHONE: 'PHONE',\r\n  PASSWORD: 'PASSWORD',\r\n  BADGE_ID: 'BADGE_ID',\r\n  MARKETING_ALLOW_CONTACT: 'MARKETING_ALLOW_CONTACT',\r\n}\r\n\r\n/**\r\n * map fields retrieved from api consumer setting to formData key\r\n * and component to display in form view\r\n */\r\nexport const getFieldsMap = () => ({\r\n  FIRST_NAME: {\r\n    key: 'firstName',\r\n    component: <FirstName />,\r\n  },\r\n  LAST_NAME: {\r\n    key: 'lastName',\r\n    component: <LastName />,\r\n  },\r\n  EMAIL: {\r\n    key: 'email',\r\n    component: <Email />,\r\n  },\r\n  PHONE: {\r\n    key: 'phone',\r\n    component: <PhoneNumber />,\r\n  },\r\n  PASSWORD: {\r\n    key: 'password',\r\n    component: <Password checkSecurity />,\r\n  },\r\n  BADGE_ID: {\r\n    key: 'badgeId',\r\n    component: <BadgeId />,\r\n  },\r\n  MARKETING_ALLOW_CONTACT: {\r\n    key: 'marketing.allowContact',\r\n    component: <MarketingOptim />,\r\n  },\r\n})\r\n\r\nexport const getField = field => getFieldsMap()[field] || null\r\n\r\nexport const registrationCodeErrors = {\r\n  SET_PASSWORD: '1026',\r\n  INVALID_CODE: '151',\r\n}\r\n","var baseSet = require('./_baseSet');\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n  return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { FormControlLabel } from 'pmt-ui/Form'\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\n\r\nconst Cgu = ({ label, value, onChange }) => (\r\n  // \"label\" can be a component containing the text with a link to the cgu. cf. <CguLabel />\r\n  <FormControlLabel\r\n    className=\"u-sizeFullWidth\"\r\n    label={\r\n      isNil(label)\r\n        ? tr('global.register.accept_terms', {\r\n            fr: \"J'accepte les CGU\",\r\n            context: '',\r\n            desc: 'Label prompting for legal terms',\r\n          })\r\n        : label\r\n    }\r\n    control={\r\n      <Checkbox\r\n        color=\"primary\"\r\n        checked={value}\r\n        onChange={(event, isInputChecked) => onChange(isInputChecked)}\r\n        onKeyDown={event => {\r\n          if (event.key === 'Enter') {\r\n            event.preventDefault()\r\n            onChange(!value)\r\n          }\r\n        }}\r\n      />\r\n    }\r\n  />\r\n)\r\n\r\nexport default Cgu\r\n","import React from 'react'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { ButtonLink } from 'app/components/Button'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\n\r\nconst CguLabel = ({ restaurantsGroup, linkClass }) => (\r\n  <TypographyCustom type=\"164\" component=\"span\">\r\n    {tr('global.register.accept_terms_clickable.first')}\r\n\r\n    {!isEmpty(restaurantsGroup?.userSettings?.touUrl) ? (\r\n      <ButtonLink\r\n        component=\"a\"\r\n        classes={{\r\n          root: linkClass,\r\n        }}\r\n        onClick={e => {\r\n          e.preventDefault()\r\n          e.stopPropagation()\r\n          window.open(restaurantsGroup.userSettings.touUrl)\r\n        }}\r\n        // avoid the browser toggling the checkbox when this link is activated via Space/Enter\r\n        onMouseDown={e => e.stopPropagation()}\r\n        onKeyDown={e => e.stopPropagation()}\r\n        label={tr('global.register.accept_terms_clickable.second')}\r\n      />\r\n    ) : (\r\n      <span>\r\n        &nbsp;\r\n        {tr('global.register.accept_terms_clickable.second')}\r\n      </span>\r\n    )}\r\n  </TypographyCustom>\r\n)\r\n\r\nexport default CguLabel","import React, { Fragment } from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport get from 'lodash/get'\r\nimport set from 'lodash/set'\r\n\r\nimport { getUserSettings } from 'pmt-modules/appConfig/selectors'\r\nimport { withForm, FormType, updateFormOptions } from 'pmt-modules/form'\r\nimport { getRegisterError } from 'pmt-modules/registration'\r\n\r\nimport TextField from 'pmt-ui/TextField'\r\nimport Cgu from 'pmt-ui/Cgu'\r\n\r\nimport { getField, registrationCodeErrors, fieldsType } from './constants'\r\nimport { getUserLightCookie } from '../../../auth/utils'\r\n\r\nimport { getCountryCodeForLocale } from 'pmt-modules/i18n/utils'\r\n\r\n/**\r\n * Register form fields are retrieved from api consumer settings\r\n * see ./constants for mapping field type and components cloned here\r\n * Cgu component is not configurable and thus should always be displayed\r\n */\r\nclass RegisterFormView extends React.PureComponent {\r\n  static Steps = {\r\n    DEFAULT: 'DEFAULT',\r\n    REGISTRATION_CODE: 'REGISTRATION_CODE',\r\n  }\r\n\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const formFields = this.props.userSettings.registration.form.fields\r\n\r\n    this.props.updateFormOptions(FormType.REGISTER, {\r\n      fields: formFields,\r\n    })\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const { registerError, updateUI, ui } = nextProps\r\n\r\n    if (\r\n      !this.props.registerError &&\r\n      registerError &&\r\n      (registerError.code === registrationCodeErrors.SET_PASSWORD ||\r\n        registerError.code === registrationCodeErrors.INVALID_CODE)\r\n    ) {\r\n      updateUI({\r\n        step: RegisterFormView.Steps.REGISTRATION_CODE,\r\n        initialized: ui.initialized,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      style,\r\n      formData,\r\n      formErrors,\r\n      onChange,\r\n      cguLabel,\r\n      ui,\r\n      restaurantCountry,\r\n      restaurantsGroupDefaultLocale,\r\n    } = this.props\r\n    const formFields = this.props.userSettings.registration.form.fields\r\n\r\n    if (!ui.initialized) {\r\n      const userLightCookie = getUserLightCookie()\r\n      if (formFields && userLightCookie) {\r\n        formFields.forEach(fieldInfo => {\r\n          const field = getField(fieldInfo.type)\r\n          set(formData, field.key, get(userLightCookie, field.key))\r\n        })\r\n      }\r\n      ui.initialized = true\r\n    }\r\n\r\n    // if we have a registration error with these specific code, it means the user already\r\n    // exists has user light, so we replace form with a registration code input\r\n    // in order to complete registration\r\n    return (\r\n      <div style={style}>\r\n        {ui.step === RegisterFormView.Steps.DEFAULT && (\r\n          <Fragment>\r\n            {formFields.map(fieldInfo => {\r\n              const field = getField(fieldInfo.type)\r\n              const fieldProps = {\r\n                key: field.key,\r\n                value: get(formData, field.key),\r\n                required: fieldInfo.required,\r\n                onChange: value => onChange(set(formData, field.key, value)),\r\n                validation: get(formErrors, field.key),\r\n                maxLength: fieldInfo.maxLength,\r\n              }\r\n\r\n              if (fieldInfo.type === fieldsType.PHONE) {\r\n                fieldProps.initCountryCode =\r\n                  restaurantCountry || getCountryCodeForLocale(restaurantsGroupDefaultLocale)\r\n                fieldProps.initCountryCodeOverridesBrowserLocale = false\r\n              }\r\n\r\n              return React.cloneElement(field.component, fieldProps)\r\n            })}\r\n            <Cgu\r\n              label={cguLabel}\r\n              value={formData.acceptCgu}\r\n              onChange={acceptCgu => onChange({ ...formData, acceptCgu })}\r\n            />\r\n          </Fragment>\r\n        )}\r\n        {ui.step === RegisterFormView.Steps.REGISTRATION_CODE && (\r\n          <TextField\r\n            autoFocus\r\n            label={tr('global.form.user.registrationCode')}\r\n            inputProps={{ maxLength: 5 }}\r\n            className=\"u-sizeFullWidth u-marginTop20\"\r\n            value={formData.registrationCode || ''}\r\n            onChange={e => onChange({ ...formData, registrationCode: e.target.value })}\r\n          />\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nRegisterFormView.defaultProps = {\r\n  cguLabel: null,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  userSettings: getUserSettings(state),\r\n  registerError: getRegisterError(state),\r\n})\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      step: RegisterFormView.Steps.DEFAULT,\r\n      initialized: false,\r\n    },\r\n  }),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      updateFormOptions,\r\n    }\r\n  ),\r\n  withForm(FormType.REGISTER)\r\n)(RegisterFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport each from 'lodash/each'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport {\r\n  notEmpty,\r\n  isGreaterThan,\r\n  isValidEmail,\r\n  isValidPhone,\r\n  isPhoneNotEmpty,\r\n  isTrue,\r\n} from 'pmt-modules/form/validation'\r\nimport createForm from 'pmt-modules/form/createForm'\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nimport { getField, fieldsType } from './constants'\r\n\r\nexport { default as RegisterFormView } from './RegisterFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  email: ``,\r\n  firstName: 'John',\r\n  lastName: 'Doe',\r\n  phone: `+33 6 30 25 ${new Date().getMinutes()} ${new Date().getSeconds()}`,\r\n  password: 'bonjour1',\r\n  acceptCgu: true,\r\n  marketing: {\r\n    allowContact: true,\r\n  },\r\n  badgeId: null,\r\n  registrationCode: null,\r\n}\r\n\r\nconst defaultData = {\r\n  email: null,\r\n  firstName: null,\r\n  lastName: null,\r\n  phone: null,\r\n  password: null,\r\n  acceptCgu: false,\r\n  nationality: 'FR', // FIXME: find a way to get the user's nationality\r\n  marketing: {\r\n    allowContact: false,\r\n  },\r\n  badgeId: null,\r\n  registrationCode: null,\r\n}\r\n\r\n/**\r\n * Validation rules for register form\r\n * options parameters should contains fields retrieved from api consumer settings\r\n * it is structured as is : {\r\n *   type: FIELD_TYPE,\r\n *   required: boolean\r\n * }\r\n * if field is required, we automatically add a notEmpty rule\r\n */\r\nconst validationRules = options => {\r\n  const rules = {\r\n    email: [[isValidEmail, tr('global.register.form.validation.email_invalid')]],\r\n    phone: [[isValidPhone, tr('global.register.form.validation.phone_invalid')]],\r\n    password: [[isGreaterThan(7), tr('global.register.form.validation.password_length')]],\r\n    acceptCgu: [[isTrue, tr('global.register.form.validation.accept_legal_terms')]],\r\n  }\r\n\r\n  if (!isEmpty(options.fields)) {\r\n    each(options.fields, optionField => {\r\n      if (optionField.required) {\r\n        const field = getField(optionField.type)\r\n        rules[field.key] = [\r\n          [notEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n          ...(rules[field.key] || []),\r\n        ]\r\n        if (optionField.type === fieldsType.PHONE) {\r\n          rules[field.key] = [\r\n            [isPhoneNotEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n            ...(rules[field.key] || []),\r\n          ]\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  return rules\r\n}\r\n\r\nexport default createForm(FormType.REGISTER, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport isNil from 'lodash/isNil'\r\nimport { compose } from 'redux'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\n\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\nimport { RegisterFormView } from 'pmt-modules/registration/forms/register'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { CguLabel } from 'pmt-ui/Cgu'\r\n\r\nimport { Button, ButtonLink } from '../../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {},\r\n  subheader: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  allowIncognito: {\r\n    padding: theme.spacing(2),\r\n    textAlign: 'center',\r\n  },\r\n  link: {\r\n    display: 'inline',\r\n    fontSize: 14,\r\n    lineHeight: '14px',\r\n    marginTop: -2,\r\n  },\r\n})\r\n\r\nconst RegisterForm = ({\r\n  classes,\r\n  isFetchingRegister,\r\n  formIsValid,\r\n  onSubmitRegistration,\r\n  registerError,\r\n  allowIncognito,\r\n  onRedirectToIncognito,\r\n  formData,\r\n  restaurantsGroup,\r\n  restaurant,\r\n}) => (\r\n  <div className={classes.root}>\r\n    <form\r\n      onSubmit={e => {\r\n        e.preventDefault()\r\n        onSubmitRegistration(formData)\r\n      }}\r\n    >\r\n      {!isNil(trOptional('REGISTER__SUBHEADER')) && (\r\n        <TypographyCustom type=\"144\" className={classes.subheader}>\r\n          {trOptional('REGISTER__SUBHEADER')}\r\n        </TypographyCustom>\r\n      )}\r\n\r\n      <LoadingBlockWrapper show={isFetchingRegister} />\r\n\r\n      <ErrorBlock mode={ErrorBlock.Mode.SNACKBAR} error={registerError} />\r\n\r\n      <RegisterFormView\r\n        restaurantCountry={restaurant?.address?.country}\r\n        restaurantsGroupDefaultLocale={restaurantsGroup?.settings?.defaultLocale}\r\n        cguLabel={<CguLabel restaurantsGroup={restaurantsGroup} linkClass={classes.link} />}\r\n      />\r\n\r\n      <Button type=\"submit\" className=\"u-marginTop10 u-sizeFull\" disabled={!formIsValid}>\r\n        <TypographyCustom type=\"167\" skipColor>\r\n          {tr('web_customer.register.signin')}\r\n        </TypographyCustom>\r\n      </Button>\r\n\r\n      {allowIncognito && (\r\n        <div className={classes.allowIncognito}>\r\n          <ButtonLink\r\n            component=\"a\"\r\n            onClick={e => {\r\n              e.stopPropagation()\r\n              onRedirectToIncognito()\r\n            }}\r\n            label={tr('web_customer.login.continue_as_incognito.from_NORMAL.link')}\r\n          />\r\n        </div>\r\n      )}\r\n    </form>\r\n  </div>\r\n)\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.REGISTER)\r\n)(RegisterForm)\r\n","import React from 'react'\r\n\r\nimport {\r\n  BadgeId,\r\n  Email,\r\n  FirstName,\r\n  LastName,\r\n  MarketingOptim,\r\n  PhoneNumber,\r\n} from 'pmt-modules/user/forms/elements/index'\r\n\r\n// see API class ApiConsumerPresetValidator\r\nexport const fieldsType = {\r\n  FIRST_NAME: 'FIRST_NAME',\r\n  LAST_NAME: 'LAST_NAME',\r\n  EMAIL: 'EMAIL',\r\n  PHONE: 'PHONE',\r\n  BADGE_ID: 'BADGE_ID',\r\n  MARKETING_ALLOW_CONTACT: 'MARKETING_ALLOW_CONTACT',\r\n}\r\n\r\n/**\r\n * map fields retrieved from api consumer setting to formData key\r\n * and component to display in form view\r\n */\r\nexport const getFieldsMap = () => ({\r\n  FIRST_NAME: {\r\n    key: 'firstName',\r\n    component: <FirstName />,\r\n  },\r\n  LAST_NAME: {\r\n    key: 'lastName',\r\n    component: <LastName />,\r\n  },\r\n  EMAIL: {\r\n    key: 'email',\r\n    component: <Email />,\r\n  },\r\n  PHONE: {\r\n    key: 'phone',\r\n    component: <PhoneNumber />,\r\n  },\r\n  BADGE_ID: {\r\n    key: 'badgeId',\r\n    component: <BadgeId />,\r\n  },\r\n  MARKETING_ALLOW_CONTACT: {\r\n    key: 'marketing.allowContact',\r\n    component: <MarketingOptim />,\r\n  },\r\n})\r\n\r\nexport const getField = field => getFieldsMap()[field] || null\r\n","import React, { Fragment } from 'react'\r\n\r\nimport get from 'lodash/get'\r\nimport set from 'lodash/set'\r\nimport { connect } from 'react-redux'\r\nimport { compose } from 'redux'\r\n\r\nimport { getUserSettings } from 'pmt-modules/appConfig/selectors'\r\nimport { withForm, FormType, updateFormOptions } from 'pmt-modules/form'\r\nimport { getRegisterError } from 'pmt-modules/registration'\r\n\r\nimport withWidth from 'pmt-ui/utils/withWidth'\r\n\r\nimport Cgu from 'pmt-ui/Cgu'\r\n\r\nimport { getField, fieldsType } from './constants'\r\n\r\nimport { getCountryCodeForLocale } from 'pmt-modules/i18n/utils'\r\n\r\nclass UserLightFormView extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.props.updateFormOptions(FormType.USER_LIGHT, {\r\n      fields: this.props.userSettings.identification.form.fields,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      style,\r\n      formData,\r\n      formErrors,\r\n      onChange,\r\n      cguLabel,\r\n      restaurantCountry,\r\n      restaurantsGroupDefaultLocale,\r\n    } = this.props\r\n    const formFields = this.props.userSettings.identification.form.fields\r\n\r\n    return (\r\n      <div style={style}>\r\n        <Fragment>\r\n          {formFields.map(fieldInfo => {\r\n            const field = getField(fieldInfo.type)\r\n            const fieldProps = {\r\n              key: field.key,\r\n              value: get(formData, field.key),\r\n              required: fieldInfo.required,\r\n              onChange: value => onChange(set(formData, field.key, value)),\r\n              validation: get(formErrors, field.key),\r\n              maxLength: fieldInfo.maxLength,\r\n            }\r\n\r\n            if (fieldInfo.type === fieldsType.PHONE) {\r\n              fieldProps.initCountryCode =\r\n                restaurantCountry || getCountryCodeForLocale(restaurantsGroupDefaultLocale)\r\n              fieldProps.initCountryCodeOverridesBrowserLocale = false\r\n            }\r\n\r\n            return React.cloneElement(field.component, fieldProps)\r\n          })}\r\n          <Cgu\r\n            label={cguLabel}\r\n            value={formData.acceptCgu}\r\n            onChange={acceptCgu => onChange({ ...formData, acceptCgu })}\r\n          />\r\n        </Fragment>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nUserLightFormView.defaultProps = {\r\n  cguLabel: null,\r\n}\r\nconst mapStateToProps = state => ({\r\n  userSettings: getUserSettings(state),\r\n  registerError: getRegisterError(state),\r\n})\r\n\r\nexport default compose(\r\n  withWidth(),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      updateFormOptions,\r\n    }\r\n  ),\r\n  withForm(FormType.USER_LIGHT)\r\n)(UserLightFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport each from 'lodash/each'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport {\r\n  notEmpty,\r\n  isValidEmail,\r\n  isValidPhone,\r\n  isPhoneNotEmpty,\r\n  isTrue,\r\n} from 'pmt-modules/form/validation'\r\n\r\nimport createForm from 'pmt-modules/form/createForm'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nimport { getField, fieldsType } from './constants'\r\n\r\nexport { default as UserLightFormView } from './UserLightFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  email: ``,\r\n  firstName: 'Jane',\r\n  lastName: 'Doe',\r\n  phone: null,\r\n  acceptCgu: true,\r\n  marketing: {\r\n    allowContact: true,\r\n  },\r\n  badgeId: null,\r\n}\r\n\r\nconst defaultData = {\r\n  email: null,\r\n  firstName: null,\r\n  lastName: null,\r\n  phone: null,\r\n  acceptCgu: false,\r\n  nationality: 'FR', // FIXME: find a way to get the user's nationality\r\n  marketing: {\r\n    allowContact: false,\r\n  },\r\n  badgeId: null,\r\n}\r\n\r\n/**\r\n * Validation rules for user light form\r\n * options parameters should contains fields retrieved from api consumer settings\r\n * it is structured as is : {\r\n *   type: FIELD_TYPE,\r\n *   required: boolean\r\n * }\r\n * if field is required, we automatically add a notEmpty rule\r\n */\r\nconst validationRules = options => {\r\n  const rules = {\r\n    email: [[isValidEmail, tr('global.register.form.validation.email_invalid')]],\r\n    phone: [[isValidPhone, tr('global.register.form.validation.phone_invalid')]],\r\n    acceptCgu: [[isTrue, tr('global.register.form.validation.accept_legal_terms')]],\r\n  }\r\n\r\n  if (!isEmpty(options.fields)) {\r\n    each(options.fields, optionField => {\r\n      if (optionField.required) {\r\n        const field = getField(optionField.type)\r\n        rules[field.key] = [\r\n          [notEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n          ...(rules[field.key] || []),\r\n        ]\r\n        if (optionField.type === fieldsType.PHONE) {\r\n          rules[field.key] = [\r\n            [isPhoneNotEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n            ...(rules[field.key] || []),\r\n          ]\r\n        }\r\n      }\r\n    })\r\n  }\r\n\r\n  return rules\r\n}\r\n\r\nexport default createForm(FormType.USER_LIGHT, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport isNil from 'lodash/isNil'\r\nimport { compose } from 'redux'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\n\r\nimport { UserLightFormView } from 'pmt-modules/registration/forms/userLight'\r\nimport { CguLabel } from 'pmt-ui/Cgu'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { Button, ButtonLink } from '../../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {},\r\n  subheader: {\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  allowIncognito: {\r\n    paddingTop: theme.spacing(2),\r\n    textAlign: 'center',\r\n  },\r\n  allowIncognitoLink: {\r\n    textDecoration: 'underline',\r\n  },\r\n  link: {\r\n    display: 'inline',\r\n    fontSize: 14,\r\n    lineHeight: '14px',\r\n    marginTop: -2,\r\n  },\r\n  captionWrapper: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    color: theme.pmt.status.inactive,\r\n    marginBottom: theme.spacing(3),\r\n  },\r\n  captionTitle: {\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n})\r\n\r\nconst UserLightForm = ({\r\n  classes,\r\n  isFetchingRegister,\r\n  formIsValid,\r\n  registerError,\r\n  onSubmitLogin,\r\n  onRedirectToIncognito,\r\n  formData,\r\n  allowIncognito,\r\n  restaurantsGroup,\r\n  restaurant,\r\n}) => {\r\n  const captionTitle = tr('web_customer.login.user_light.caption.title')\r\n  const captionText = tr('web_customer.login.user_light.caption.text')\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <form\r\n        onSubmit={event => {\r\n          event.preventDefault()\r\n          onSubmitLogin(formData)\r\n        }}\r\n      >\r\n        {!isNil(trOptional('LOGIN__SUBHEADER')) && (\r\n          <TypographyCustom type=\"144\" className={classes.subheader}>\r\n            {trOptional('LOGIN__SUBHEADER')}\r\n          </TypographyCustom>\r\n        )}\r\n\r\n        <div className={classes.captionWrapper}>\r\n          {captionTitle && (\r\n            <TypographyCustom type=\"167\" className={classes.captionTitle} skipColor>\r\n              {captionTitle}\r\n            </TypographyCustom>\r\n          )}\r\n\r\n          {captionText && (\r\n            <TypographyCustom type=\"144\" skipColor>\r\n              {captionText}\r\n            </TypographyCustom>\r\n          )}\r\n        </div>\r\n\r\n        <LoadingBlockWrapper show={isFetchingRegister} />\r\n\r\n        <ErrorBlock mode={ErrorBlock.Mode.SNACKBAR} error={registerError} />\r\n\r\n        <UserLightFormView\r\n          restaurantCountry={restaurant?.address?.country}\r\n          restaurantsGroupDefaultLocale={restaurantsGroup?.settings?.defaultLocale}\r\n          cguLabel={<CguLabel restaurantsGroup={restaurantsGroup} linkClass={classes.link} />}\r\n        />\r\n\r\n        <Button type=\"submit\" className=\"u-marginTop20 u-sizeFull\" disabled={!formIsValid}>\r\n          <TypographyCustom type=\"167\" skipColor>\r\n            {tr('web_customer.login.user_light')}\r\n          </TypographyCustom>\r\n        </Button>\r\n\r\n        {allowIncognito && (\r\n          <div className={classes.allowIncognito}>\r\n            <ButtonLink\r\n              component=\"a\"\r\n              className={classes.allowIncognitoLink}\r\n              onClick={e => {\r\n                e.stopPropagation()\r\n                onRedirectToIncognito()\r\n              }}\r\n              label={tr('web_customer.login.continue_as_incognito.from_LIGHT.link')}\r\n            />\r\n          </div>\r\n        )}\r\n      </form>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.USER_LIGHT)\r\n)(UserLightForm)\r\n","import React from 'react'\r\n\r\n/**\r\n * Incognito : no email, no badge id, no password, no phone.\r\n *\r\n * No phone : because there is a check to ensure the uniqueness of phone numbers.\r\n * As a result, a user will not be able to place a second order if they have lost their cookie in the meantime,\r\n * since the incognito user creation step will fail due to the phone number already being in use.\r\n */\r\nimport { FirstName, LastName } from 'pmt-modules/user/forms/elements/index'\r\n\r\n// see API class ApiConsumerPresetValidator\r\nexport const fieldsType = {\r\n  FIRST_NAME: 'FIRST_NAME',\r\n  LAST_NAME: 'LAST_NAME',\r\n}\r\n\r\n/**\r\n * map fields retrieved from api consumer setting to formData key\r\n * and component to display in form view\r\n */\r\nexport const getFieldsMap = () => ({\r\n  FIRST_NAME: {\r\n    key: 'firstName',\r\n    component: <FirstName />,\r\n  },\r\n  LAST_NAME: {\r\n    key: 'lastName',\r\n    component: <LastName />,\r\n  },\r\n})\r\n\r\nexport const getField = field => getFieldsMap()[field] || null\r\n","import React, { Fragment } from 'react'\r\n\r\nimport get from 'lodash/get'\r\nimport set from 'lodash/set'\r\nimport { connect } from 'react-redux'\r\nimport { compose } from 'redux'\r\n\r\nimport { getUserSettings } from 'pmt-modules/appConfig/selectors'\r\nimport { withForm, FormType, updateFormOptions } from 'pmt-modules/form'\r\nimport { getRegisterError } from 'pmt-modules/registration'\r\n\r\nimport withWidth from 'pmt-ui/utils/withWidth'\r\n\r\nimport Cgu from 'pmt-ui/Cgu'\r\n\r\nimport { getField } from './constants'\r\n\r\nclass IncognitoFormView extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.props.updateFormOptions(FormType.INCOGNITO, {\r\n      fields: this.props.userSettings.incognitoIdentification.form.fields,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { style, formData, formErrors, onChange, cguLabel } = this.props\r\n    const formFields = this.props.userSettings.incognitoIdentification.form.fields\r\n\r\n    return (\r\n      <div style={style}>\r\n        <Fragment>\r\n          {formFields?.map(fieldInfo => {\r\n            const field = getField(fieldInfo.type)\r\n\r\n            return React.cloneElement(field.component, {\r\n              key: field.key,\r\n              value: get(formData, field.key),\r\n              required: fieldInfo.required,\r\n              onChange: value => onChange(set(formData, field.key, value)),\r\n              validation: get(formErrors, field.key),\r\n              maxLength: fieldInfo.maxLength,\r\n            })\r\n          })}\r\n          <div className=\"u-marginTop10\">\r\n            <Cgu\r\n              label={cguLabel}\r\n              value={formData.acceptCgu}\r\n              onChange={acceptCgu => onChange({ ...formData, acceptCgu })}\r\n            />\r\n          </div>\r\n        </Fragment>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nIncognitoFormView.defaultProps = {\r\n  cguLabel: null,\r\n}\r\nconst mapStateToProps = state => ({\r\n  userSettings: getUserSettings(state),\r\n  registerError: getRegisterError(state),\r\n})\r\n\r\nexport default compose(\r\n  withWidth(),\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      updateFormOptions,\r\n    }\r\n  ),\r\n  withForm(FormType.INCOGNITO)\r\n)(IncognitoFormView)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport each from 'lodash/each'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { notEmpty, isValidPhone, isTrue } from 'pmt-modules/form/validation'\r\n\r\nimport createForm from 'pmt-modules/form/createForm'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nimport { getField } from './constants'\r\n\r\nexport { default as IncognitoFormView } from './IncognitoFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  firstName: 'Jane',\r\n  lastName: 'Doe',\r\n  phone: null,\r\n  acceptCgu: true,\r\n}\r\n\r\nconst defaultData = {\r\n  firstName: null,\r\n  lastName: null,\r\n  phone: null,\r\n  acceptCgu: false,\r\n  nationality: 'FR', // FIXME: find a way to get the user's nationality\r\n}\r\n\r\n/**\r\n * Validation rules for incognito form\r\n * options parameters should contains fields retrieved from api consumer settings\r\n * it is structured as is : {\r\n *   type: FIELD_TYPE,\r\n *   required: boolean\r\n * }\r\n * if field is required, we automatically add a notEmpty rule\r\n */\r\nconst validationRules = options => {\r\n  const rules = {\r\n    phone: [[isValidPhone, tr('global.register.form.validation.phone_invalid')]],\r\n    acceptCgu: [[isTrue, tr('global.register.form.validation.accept_legal_terms')]],\r\n  }\r\n\r\n  if (!isEmpty(options.fields)) {\r\n    each(options.fields, optionField => {\r\n      if (optionField.required) {\r\n        const field = getField(optionField.type)\r\n        rules[field.key] = [\r\n          [notEmpty, tr(`global.register.form.validation.required.${field.key}`)],\r\n          ...(rules[field.key] || []),\r\n        ]\r\n      }\r\n    })\r\n  }\r\n\r\n  return rules\r\n}\r\n\r\nexport default createForm(FormType.INCOGNITO, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport { compose } from 'redux'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { AuthMode } from 'pmt-modules/auth/constants'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { CguLabel } from 'pmt-ui/Cgu'\r\nimport { IncognitoFormView } from 'pmt-modules/registration/forms/incognito'\r\n\r\nimport { Button, ButtonLink } from '../../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {},\r\n  link: {\r\n    display: 'inline',\r\n    fontSize: 14,\r\n    lineHeight: '14px',\r\n    marginTop: -2,\r\n  },\r\n  caption: {\r\n    color: theme.pmt.status.inactive,\r\n  },\r\n  captionTitle: {\r\n    marginBottom: theme.spacing(1),\r\n  },\r\n  backLink: {\r\n    textAlign: 'center',\r\n  },\r\n})\r\n\r\nconst IncognitoForm = ({\r\n  classes,\r\n  isFetchingAuth,\r\n  isFetchingRegister, // useful if registering as incognito\r\n  authError,\r\n  onRedirectToUserLight,\r\n  handleKeepIncognito,\r\n  restaurantsGroup,\r\n  formIsValid,\r\n  formData,\r\n  authMode,\r\n}) => {\r\n  let btnLabel = tr('web_customer.login.continue_as_incognito.btnLabel')\r\n  let captionTitle = ''\r\n  let captionText = ''\r\n  // default labels\r\n  if (authMode === AuthMode.LIGHT) {\r\n    captionTitle = tr('web_customer.login.continue_as_incognito.from_LIGHT.captionTitle')\r\n    captionText = tr('web_customer.login.continue_as_incognito.from_LIGHT.captionText')\r\n  } else {\r\n    captionTitle = tr('web_customer.login.continue_as_incognito.from_INCOGNITO_ONLY.captionTitle')\r\n    captionText = tr('web_customer.login.continue_as_incognito.from_INCOGNITO_ONLY.captionText')\r\n  }\r\n\r\n  const withCaption = captionTitle || captionText\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <LoadingBlockWrapper show={isFetchingAuth || isFetchingRegister} />\r\n\r\n      {withCaption && (\r\n        <div className={classes.caption}>\r\n          {captionTitle && (\r\n            <TypographyCustom type=\"167\" className={classes.captionTitle} skipColor>\r\n              {captionTitle}\r\n            </TypographyCustom>\r\n          )}\r\n          {captionText && (\r\n            <TypographyCustom type=\"144\" skipColor>\r\n              {captionText}\r\n            </TypographyCustom>\r\n          )}\r\n        </div>\r\n      )}\r\n\r\n      <ErrorBlock mode={ErrorBlock.Mode.SNACKBAR} error={authError} />\r\n\r\n      <div className=\"u-sizeFullWidth\">\r\n        <IncognitoFormView\r\n          cguLabel={<CguLabel restaurantsGroup={restaurantsGroup} linkClass={classes.link} />}\r\n        />\r\n\r\n        <Button\r\n          disabled={!formIsValid}\r\n          className=\"u-sizeFull u-marginTop30 u-marginBottom30\"\r\n          onClick={e => {\r\n            e.stopPropagation()\r\n            handleKeepIncognito(formData)\r\n          }}\r\n          label={btnLabel}\r\n        >\r\n          <TypographyCustom type=\"167\" skipColor>\r\n            {btnLabel}\r\n          </TypographyCustom>\r\n        </Button>\r\n      </div>\r\n\r\n      {authMode === AuthMode.LIGHT && (\r\n        <>\r\n          {/* we display a tiny link to go back to USER_LIGHT view */}\r\n          <div className={classes.backLink}>\r\n            <ButtonLink\r\n              component=\"a\"\r\n              onClick={e => {\r\n                e.stopPropagation()\r\n                onRedirectToUserLight()\r\n              }}\r\n              label={tr('web_customer.login.back_to_user_light')}\r\n            />\r\n          </div>\r\n        </>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default compose(\r\n  withStyles(styles),\r\n  withForm(FormType.INCOGNITO)\r\n)(IncognitoForm)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { compose } from 'redux'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { getOauthClient, withAppConfig } from 'pmt-modules/appConfig'\r\nimport { withRestaurantsGroupMine } from 'pmt-modules/restaurantsGroup/components'\r\nimport { withRestaurant } from 'pmt-modules/restaurant/components'\r\nimport { authenticateUser, getAuthError, isFetchingAuth, logout } from 'pmt-modules/auth'\r\nimport { AuthMode } from 'pmt-modules/auth/constants'\r\nimport { clearAttemptRefresh } from 'pmt-modules/auth/refreshToken/attemptRefresh'\r\nimport { goBack } from 'pmt-modules/routing'\r\nimport {\r\n  getRegisterError,\r\n  isFetchingRegister,\r\n  registerAsIncognito,\r\n  registerUserLight,\r\n  registerUser,\r\n} from 'pmt-modules/registration'\r\n\r\nimport LoadingPage from 'pmt-ui/LoadingPage'\r\nimport Lock from 'pmt-ui/svg-icons/action/lock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { CALLBACK_EVENTS, getCallbackUri, getQueryParam } from 'pmt-utils/url'\r\n\r\nimport PaymentPage from '../../components/Page'\r\nimport BrandedCardLayout from '../../components/BrandedCardLayout'\r\nimport AuthTabs from './components/AuthTabs'\r\nimport LoginForm from './components/LoginForm'\r\nimport RegisterForm from './components/RegisterForm'\r\nimport UserLightForm from './components/UserLightForm'\r\nimport IncognitoForm from './components/IncognitoForm'\r\nimport { LoginViews } from './constants'\r\n\r\nconst styles = () => ({\r\n  cardTitle: {\r\n    whiteSpace: 'pre-line',\r\n    fontFamily: \"Georgia, 'Times New Roman', serif\",\r\n  },\r\n})\r\n\r\nclass LoginPage extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    // clear refresh token retrying\r\n    clearAttemptRefresh()\r\n    // logout\r\n    this.props.logout()\r\n\r\n    let view\r\n    if (this.props.initialView) {\r\n      view = this.props.initialView\r\n    } else if (this.props.appConfig.authentication.mode === AuthMode.LIGHT) {\r\n      view = LoginViews.USER_LIGHT\r\n    } else if (this.props.appConfig.authentication.mode === AuthMode.INCOGNITO_ONLY) {\r\n      // this param is automatically added when the user is redirected to the login page because he got a 401 due to TEST_MODE_UNAUTHORIZED\r\n      if (getQueryParam('forTestMode') === 'true') {\r\n        //  we allow test user to login even on incognito_only apiConsumer\r\n        // so a user can use the login page to authenticate as TEST user, and access test restaurants\r\n        view = LoginViews.LOGIN\r\n      } else {\r\n        view = LoginViews.INCOGNITO\r\n      }\r\n    } else {\r\n      // NORMAL authentication: go straight to the login form - the user can\r\n      // still switch to register via the AuthTabs switch above the form\r\n      view = LoginViews.LOGIN\r\n    }\r\n\r\n    this.state = {\r\n      view: view,\r\n    }\r\n  }\r\n\r\n  handleSubmitUserLightLogin = formData => {\r\n    this.props.registerUserLight(formData)\r\n  }\r\n\r\n  handleSubmitLogin = formData => {\r\n    const credentials = formData\r\n    const { clientId, clientSecret } = this.props.oauthClient\r\n\r\n    this.props.authenticateUser(credentials.username, credentials.password, {\r\n      clientId,\r\n      clientSecret,\r\n    })\r\n  }\r\n\r\n  handleKeepIncognito = formData => {\r\n    this.props.registerAsIncognito(formData)\r\n  }\r\n\r\n  handleSubmitRegistration = formData => {\r\n    const { clientId, clientSecret } = this.props.oauthClient\r\n\r\n    this.props.registerUser(formData, {\r\n      clientId,\r\n      clientSecret,\r\n    })\r\n  }\r\n\r\n  handleToggleView = newView => {\r\n    this.setState({\r\n      view: newView,\r\n    })\r\n    window.scrollTo(0, 0)\r\n  }\r\n\r\n  componentDidUpdate(prevProps, prevState) {\r\n    //Keep Focus correct while switching LOGIN/REGISTER\r\n    if (prevState.view !== this.state.view) {\r\n      this.focusActiveAuthTab()\r\n    }\r\n  }\r\n\r\n  focusActiveAuthTab = () => {\r\n    const { view } = this.state\r\n    if (view === LoginViews.LOGIN || view === LoginViews.REGISTER) {\r\n      const tabNode = document.getElementById(`auth-tab-${view}`)\r\n      if (tabNode) {\r\n        tabNode.focus()\r\n      }\r\n    }\r\n  }\r\n\r\n  onRedirectToUserLight = () => this.handleToggleView(LoginViews.USER_LIGHT)\r\n  onRedirectToIncognito = () => this.handleToggleView(LoginViews.INCOGNITO)\r\n\r\n  handleBack = () => {\r\n    const currentLocation = window.location.href\r\n    this.props.goBack()\r\n    setTimeout(() => {\r\n      if (window.location.href === currentLocation) {\r\n        const callbackUri = getQueryParam('callback_uri')\r\n        if (!isEmpty(callbackUri)) {\r\n          window.location.href = getCallbackUri(callbackUri, CALLBACK_EVENTS.NO_PREVIOUS_PAGE)\r\n        } else {\r\n          Logger.error('[SETUP]', 'callback uri is not defined', { callbackUri })\r\n        }\r\n      }\r\n    }, 500)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      authError,\r\n      isFetchingAuth,\r\n      registerError,\r\n      isFetchingRegister,\r\n      isFetchingRestaurantsGroup,\r\n      restaurantsGroup,\r\n      isFetchingRestaurant,\r\n      restaurant,\r\n      appConfig,\r\n      frontAppConfig,\r\n      classes,\r\n    } = this.props\r\n\r\n    if (isFetchingRestaurantsGroup || isFetchingRestaurant) {\r\n      return <LoadingPage show />\r\n    }\r\n\r\n    const logoPath = frontAppConfig?.theme?.logo?.path || (restaurant && restaurant.logo)\r\n\r\n    const renderBranded = (title, content) => (\r\n      <BrandedCardLayout\r\n        logoPath={logoPath}\r\n        fallbackIcon={<Lock aria-hidden=\"true\" />}\r\n        headerHeightVh={22}\r\n        scrollableCard\r\n        badgeOverlap={false}\r\n        onBack={this.handleBack}\r\n        headerInfo={\r\n          title && (\r\n            <TypographyCustom type={267} component=\"h1\" className={classes.cardTitle}>\r\n              {title}\r\n            </TypographyCustom>\r\n          )\r\n        }\r\n      >\r\n        {content}\r\n      </BrandedCardLayout>\r\n    )\r\n\r\n    const canSwitchLoginRegister = appConfig.authentication.mode === AuthMode.NORMAL\r\n\r\n    return (\r\n      <React.Fragment>\r\n        {this.state.view === LoginViews.USER_LIGHT && (\r\n          <PaymentPage showHeader={false}>\r\n            {renderBranded(\r\n              tr('web_customer.connection.title'),\r\n              <UserLightForm\r\n                isFetchingRegister={isFetchingRegister}\r\n                registerError={registerError}\r\n                onSubmitLogin={this.handleSubmitUserLightLogin}\r\n                onRedirectToIncognito={this.onRedirectToIncognito}\r\n                allowIncognito={appConfig.authentication.allowIncognito}\r\n                restaurantsGroup={restaurantsGroup}\r\n                restaurant={restaurant}\r\n              />\r\n            )}\r\n          </PaymentPage>\r\n        )}\r\n\r\n        {this.state.view === LoginViews.LOGIN && (\r\n          <PaymentPage showHeader={false}>\r\n            {renderBranded(\r\n              canSwitchLoginRegister ? null : tr('web_customer.connection.title'),\r\n              <React.Fragment>\r\n                {canSwitchLoginRegister && (\r\n                  <AuthTabs active={LoginViews.LOGIN} onChange={this.handleToggleView} />\r\n                )}\r\n                <div\r\n                  {...(canSwitchLoginRegister\r\n                    ? {\r\n                        id: 'auth-tabpanel',\r\n                        role: 'tabpanel',\r\n                        'aria-labelledby': `auth-tab-${LoginViews.LOGIN}`,\r\n                      }\r\n                    : {})}\r\n                >\r\n                  <LoginForm\r\n                    isFetchingAuth={isFetchingAuth}\r\n                    isFetchingRegister={isFetchingRegister}\r\n                    authError={authError}\r\n                    onSubmitLogin={this.handleSubmitLogin}\r\n                    onRedirectToIncognito={this.onRedirectToIncognito}\r\n                    allowIncognito={appConfig.authentication.allowIncognito}\r\n                  />\r\n                </div>\r\n              </React.Fragment>\r\n            )}\r\n          </PaymentPage>\r\n        )}\r\n\r\n        {this.state.view === LoginViews.INCOGNITO && (\r\n          <PaymentPage showHeader={false}>\r\n            {renderBranded(\r\n              appConfig.authentication.mode === AuthMode.INCOGNITO_ONLY\r\n                ? tr('web_customer.login.continue_as_incognito.from_INCOGNITO_ONLY.title')\r\n                : tr('web_customer.connection.title'),\r\n              <IncognitoForm\r\n                isFetchingAuth={isFetchingAuth}\r\n                isFetchingRegister={isFetchingRegister}\r\n                authError={authError}\r\n                onRedirectToUserLight={this.onRedirectToUserLight}\r\n                handleKeepIncognito={this.handleKeepIncognito}\r\n                restaurantsGroup={restaurantsGroup}\r\n                authMode={appConfig.authentication.mode}\r\n              />\r\n            )}\r\n          </PaymentPage>\r\n        )}\r\n\r\n        {this.state.view === LoginViews.REGISTER && (\r\n          <PaymentPage showHeader={false}>\r\n            {renderBranded(\r\n              canSwitchLoginRegister ? null : tr('web_customer.connection.title'),\r\n              <React.Fragment>\r\n                {canSwitchLoginRegister && (\r\n                  <AuthTabs active={LoginViews.REGISTER} onChange={this.handleToggleView} />\r\n                )}\r\n                <div\r\n                  {...(canSwitchLoginRegister\r\n                    ? {\r\n                        id: 'auth-tabpanel',\r\n                        role: 'tabpanel',\r\n                        'aria-labelledby': `auth-tab-${LoginViews.REGISTER}`,\r\n                      }\r\n                    : {})}\r\n                >\r\n                  <RegisterForm\r\n                    isFetchingRegister={isFetchingRegister}\r\n                    registerError={registerError}\r\n                    onSubmitRegistration={this.handleSubmitRegistration}\r\n                    onRedirectToIncognito={this.onRedirectToIncognito}\r\n                    allowIncognito={appConfig.authentication.allowIncognito}\r\n                    restaurantsGroup={restaurantsGroup}\r\n                    restaurant={restaurant}\r\n                  />\r\n                </div>\r\n              </React.Fragment>\r\n            )}\r\n          </PaymentPage>\r\n        )}\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  isFetchingAuth: isFetchingAuth(state),\r\n  authError: getAuthError(state),\r\n  isFetchingRegister: isFetchingRegister(state),\r\n  registerError: getRegisterError(state),\r\n  oauthClient: getOauthClient(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withRestaurantsGroupMine(),\r\n  withRestaurant, // restaurantId can be provided - but not always\r\n  connect(mapStateToProps, {\r\n    authenticateUser,\r\n    registerUserLight,\r\n    registerAsIncognito,\r\n    registerUser,\r\n    logout,\r\n    goBack,\r\n  }),\r\n  withStyles(styles)\r\n)(LoginPage)\r\n","import { createAction } from 'pmt-modules/redux'\r\n\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nexport const ForgotPasswordAction = {\r\n  ...createApiEnumAction('FORGOT_PASSWORD::GET'),\r\n  RESET_DATA: 'RESET_DATA',\r\n}\r\n\r\nexport const forgotPassword = username =>\r\n  createApiCallAction(ForgotPasswordAction, UserApi.getRecoverPassword(username), {\r\n    username,\r\n  })\r\n\r\nexport const resetForgotPasswordData = () => createAction(ForgotPasswordAction.RESET_DATA, {})\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst getData = state => state.entities.forgotPassword\r\n\r\nexport const getForgotPasswordError = createSelector(\r\n  [ getData ],\r\n  (data) => {\r\n    const error = data.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n    return error.toJS()\r\n  }\r\n)\r\n\r\nexport const getForgotPasswordData = createSelector(\r\n  [ getData ],\r\n  (data) => {\r\n    const res = data.get('data')\r\n    if (isNil(res)) {\r\n      return null\r\n    }\r\n    return res.toJS()\r\n  }\r\n)\r\n\r\nexport const getForgotPasswordIsFetching = createSelector(\r\n  [ getData ],\r\n  (data) => {\r\n    return data.get('isFetching')\r\n  }\r\n)\r\n","import { createMiddleware } from 'pmt-modules/redux'\r\nimport { isOrderPlugin } from 'pmt-modules/environment'\r\nimport { getRoute, replaceWith } from 'pmt-modules/routing'\r\n\r\nimport { ForgotPasswordAction } from './actions'\r\n\r\n/**\r\n * Intercepts ForgotPasswordAction.SUCCESS action and redirects to login screen if the recovery\r\n * Otherwise just sends action to next middleware\r\n */\r\nconst forgotPasswordSuccessMiddleware = createMiddleware(\r\n  ForgotPasswordAction.SUCCESS,\r\n  ({ next, action }) => {\r\n    if (!isOrderPlugin()) {\r\n      next(action) // send it to next so identity will be set\r\n\r\n      return next(replaceWith(getRoute('LOGIN')))\r\n    }\r\n  }\r\n)\r\n\r\nexport const forgotPasswordMiddlewares = [forgotPasswordSuccessMiddleware]\r\n","import { LOCATION_CHANGE } from 'pmt-modules/routing'\r\n\r\nimport Immutable from 'immutable'\r\n\r\nimport { ForgotPasswordAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './middlewares'\r\n\r\nconst DEFAULT_FORGOT_PASSWORD = Immutable.fromJS({\r\n  isFetching: false,\r\n  data: null,\r\n  error: null,\r\n})\r\n\r\nexport const forgotPasswordReducer = (state = DEFAULT_FORGOT_PASSWORD, action) => {\r\n  switch (action.type) {\r\n    case LOCATION_CHANGE:\r\n      return state.merge({\r\n        error: null,\r\n      })\r\n\r\n    case ForgotPasswordAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        data: null,\r\n        error: null,\r\n      })\r\n\r\n    case ForgotPasswordAction.SUCCESS:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: {\r\n          ...action.response,\r\n          username: action.data.username,\r\n        },\r\n        error: null,\r\n      })\r\n\r\n    case ForgotPasswordAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        data: null,\r\n        error: action.error,\r\n      })\r\n\r\n    case ForgotPasswordAction.RESET_DATA:\r\n      return state.merge({\r\n        data: null,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React from 'react'\r\n\r\nimport {\r\n  withForm,\r\n  FormType,\r\n} from 'pmt-modules/form'\r\n\r\nimport { Email } from 'pmt-modules/user/forms/elements/index'\r\n\r\nconst ForgotPasswordForm = withForm(FormType.FORGOT_PASSWORD)(({ formData, formErrors, onChange }) => (\r\n  <div>\r\n    <Email\r\n      value={formData.username}\r\n      onChange={username => onChange({ ...formData, username })}\r\n      validation={formErrors.username}\r\n    />\r\n  </div>\r\n))\r\n\r\nexport default ForgotPasswordForm\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport { notEmpty, isValidEmail } from 'pmt-modules/form/validation'\r\n\r\nimport createForm from 'pmt-modules/form/createForm'\r\n\r\nimport FormType from 'pmt-modules/form/FormType'\r\n\r\nexport { default as ForgotPasswordFormView } from './ForgotPasswordFormView'\r\n\r\n// in DEV environment, prefill form with the following data\r\nconst devData = {\r\n  username: '',\r\n}\r\n\r\nconst defaultData = {\r\n  username: null,\r\n}\r\n\r\nconst validationRules = () => ({\r\n  username: [\r\n    [notEmpty, tr('global.register.form.validation.required.email')],\r\n    [isValidEmail, tr('global.register.form.validation.email_invalid')],\r\n  ],\r\n})\r\n\r\nexport default createForm(FormType.FORGOT_PASSWORD, validationRules, defaultData, devData)\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { ForgotPasswordFormView } from 'pmt-modules/forgotPassword/forms/forgotPassword'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nimport { Button } from '../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    padding: theme.spacing(2),\r\n  },\r\n  caption: {\r\n    padding: `${theme.spacing(3)}px ${theme.spacing(4)}px`,\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n})\r\n\r\nconst View = ({ classes, isFetching, formIsValid, userError, onSubmit }) => (\r\n  <div className={classes.root}>\r\n    <form\r\n      onSubmit={event => {\r\n        event.preventDefault()\r\n        onSubmit()\r\n      }}\r\n    >\r\n      <LoadingBlockWrapper show={isFetching} />\r\n\r\n      <ErrorBlock mode={ErrorBlock.Mode.SNACKBAR} error={userError} />\r\n\r\n      <TypographyCustom type=\"144\" skipColor align=\"center\" className={classes.caption}>\r\n        {tr('web_customer.forgot_password.caption')}\r\n      </TypographyCustom>\r\n\r\n      <ForgotPasswordFormView />\r\n\r\n      <Button\r\n        type=\"submit\"\r\n        className=\"u-marginTop20 u-sizeFull\"\r\n        disabled={!formIsValid || isFetching}\r\n      >\r\n        <TypographyCustom type=\"167\" skipColor>\r\n          {tr('global.validate')}\r\n        </TypographyCustom>\r\n      </Button>\r\n    </form>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport {\r\n  forgotPassword,\r\n  getForgotPasswordError,\r\n  getForgotPasswordIsFetching,\r\n} from 'pmt-modules/forgotPassword'\r\nimport { FormType, withForm } from 'pmt-modules/form'\r\n\r\nimport Page from '../../components/Page'\r\nimport View from './View'\r\n\r\nclass ForgotPasswordPage extends React.Component {\r\n  handleSubmit = () => {\r\n    const credentials = this.props.formData\r\n    this.props.forgotPassword(credentials.username)\r\n  }\r\n\r\n  render() {\r\n    const { userError, formIsValid, isFetching } = this.props\r\n\r\n    return (\r\n      <Page title={tr('web_customer.forgot_password.title')}>\r\n        <View\r\n          isFetching={isFetching}\r\n          userError={userError}\r\n          formIsValid={formIsValid}\r\n          onSubmit={this.handleSubmit}\r\n        />\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  isFetching: getForgotPasswordIsFetching(state),\r\n  userError: getForgotPasswordError(state),\r\n})\r\n\r\nexport default withForm(FormType.FORGOT_PASSWORD)(\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      forgotPassword,\r\n    }\r\n  )(ForgotPasswordPage)\r\n)\r\n","import React from 'react'\r\nimport LoginPage from '../login'\r\nimport { LoginViews } from '../login/constants'\r\n\r\n// This page uses LoginPage but with view=LoginViews.REGISTER\r\nexport default function RegisterPage() {\r\n  return <LoginPage initialView={LoginViews.REGISTER} />\r\n}\r\n","const CheckErrors = {\r\n  GET_CHECK: {\r\n    100: 'global.check.check_not_found',\r\n    default: 'global.check.check_not_found',\r\n  },\r\n  GET_CHECK_CODE: {\r\n    default: 'global.check.check_not_found',\r\n  },\r\n  PUT_MERGE_CHECKS: {\r\n    default: 'global.check.check_not_found',\r\n  },\r\n}\r\n\r\nexport default CheckErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\n\r\nimport CheckErrors from '../errors/CheckErrors'\r\n\r\nconst CheckApi = {\r\n  getCheckWithTableNumber: (restaurantId, tableNumber) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n      tableNumber,\r\n    },\r\n    query: {},\r\n    endpoint: ApiEndpoints.GET_CHECK_TABLE_NUMBER,\r\n    errorHandler: CheckErrors.GET_CHECK,\r\n  }),\r\n\r\n  getCheckWithPosCheckId: (restaurantId, posCheckId) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n      posCheckId,\r\n    },\r\n    query: {},\r\n    endpoint: ApiEndpoints.GET_CHECK_POS_ID,\r\n    errorHandler: CheckErrors.GET_CHECK,\r\n  }),\r\n\r\n  getCheckWithCode: (restaurantId, code) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n      code,\r\n    },\r\n    query: {},\r\n    headers: {},\r\n    endpoint: ApiEndpoints.GET_CHECK_CODE,\r\n    errorHandler: CheckErrors.GET_CHECK_CODE,\r\n  }),\r\n\r\n  getCheck: (restaurantId, checkId) => ({\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n      checkId,\r\n    },\r\n    query: {},\r\n    endpoint: ApiEndpoints.GET_CHECK,\r\n    errorHandler: CheckErrors.GET_CHECK,\r\n  }),\r\n\r\n  putMergeChecks: (restaurantId, checkIdTarget, posCodeToMerge) => ({\r\n    type: 'PUT',\r\n    params: {\r\n      restaurantId,\r\n    },\r\n    body: {\r\n      posCodeToMerge,\r\n      checkIdTarget,\r\n    },\r\n    headers: {},\r\n    endpoint: ApiEndpoints.PUT_MERGE_CHECKS,\r\n    errorHandler: CheckErrors.PUT_MERGE_CHECKS,\r\n  }),\r\n}\r\n\r\nexport default CheckApi\r\n","import { createAction } from 'pmt-modules/redux'\r\n\r\nimport CheckApi from 'pmt-modules/api/calls/CheckApi'\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { createRedirectToAction, getRoute } from 'pmt-modules/routing'\r\n\r\nexport const GetCheckWithTableNumberAction = createApiEnumAction(\r\n  'PAYMENT::CHECK::GET_WITH_TABLE_NUMBER'\r\n)\r\n\r\nexport const redirectToPayment = restaurantId =>\r\n  createRedirectToAction(getRoute('PAYMENT_TABLE_NUMBER'), { restaurantId })\r\n\r\nexport const fetchCheckWithTableNumber = (restaurantId, tableNumber) =>\r\n  createApiCallAction(\r\n    GetCheckWithTableNumberAction,\r\n    CheckApi.getCheckWithTableNumber(restaurantId, tableNumber),\r\n    {\r\n      restaurantId,\r\n      tableNumber,\r\n    }\r\n  )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const CheckAction = {\r\n  RESET: 'CHECK::RESET',\r\n}\r\n\r\nexport const resetCheck = () => createAction(CheckAction.RESET)\r\n\r\nexport const GetCheckWithPosCheckIdAction = createApiEnumAction(\r\n  'PAYMENT::CHECK::GET_WITH_POS_CHECK_ID'\r\n)\r\n\r\nexport const fetchCheckWithPosCheckId = (restaurantId, posCheckId) =>\r\n  createApiCallAction(\r\n    GetCheckWithPosCheckIdAction,\r\n    CheckApi.getCheckWithPosCheckId(restaurantId, posCheckId),\r\n    {\r\n      restaurantId,\r\n      posCheckId,\r\n    }\r\n  )\r\n\r\nexport const GetCheckAction = createApiEnumAction('PAYMENT::CHECK::GET')\r\nexport const GetRefreshCheckAction = createApiEnumAction('PAYMENT::CHECK::GET_REFRESH')\r\n\r\nexport const fetchCheck = (restaurantId, checkId) =>\r\n  createApiCallAction(GetCheckAction, CheckApi.getCheck(restaurantId, checkId), {\r\n    restaurantId,\r\n    checkId,\r\n  })\r\n\r\nexport const fetchRefreshCheck = (restaurantId, checkId, isFromCheck = false) =>\r\n  createApiCallAction(GetRefreshCheckAction, CheckApi.getCheck(restaurantId, checkId), {\r\n    restaurantId,\r\n    checkId,\r\n    isFromCheck,\r\n  })\r\n\r\nexport const GetCheckWithCodeAction = createApiEnumAction('PAYMENT::CHECK::GET_WITH_CODE')\r\n\r\nexport const fetchCheckWithCode = (restaurantId, code) =>\r\n  createApiCallAction(GetCheckWithCodeAction, CheckApi.getCheckWithCode(restaurantId, code), {\r\n    restaurantId,\r\n    code,\r\n  })\r\n\r\nexport const MergeCheckWithCodeAction = createApiEnumAction('PAYMENT::CHECK::MERGE_WITH_CODE')\r\n\r\nexport const mergeCheckWithCode = (restaurantId, posCheckId, code) =>\r\n  createApiCallAction(\r\n    MergeCheckWithCodeAction,\r\n    CheckApi.putMergeChecks(restaurantId, posCheckId, code),\r\n    {\r\n      restaurantId,\r\n      posCheckId,\r\n      code,\r\n    }\r\n  )\r\n\r\nexport const redirectToPay = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_PAY'), { restaurantId, checkId })\r\n\r\nexport const redirectToCheckTotality = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_PAY'), { restaurantId, checkId })\r\n\r\nexport const redirectToCheckShare = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_SHARE'), { restaurantId, checkId })\r\n\r\nexport const redirectToCheckChoose = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_CHOOSE'), { restaurantId, checkId })\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatCheck } from './format'\r\n\r\nconst getCheckData = state => state.entities.check\r\nconst getEntries = state => getCheckData(state).getIn(['check', 'entries'])\r\n\r\nexport const getCheckError = createSelector([getCheckData], checkData => {\r\n  const error = checkData.get('error')\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n  return error.toJS()\r\n})\r\n\r\nexport const isFetchingCheck = createSelector([getCheckData], checkData =>\r\n  checkData.get('isFetching', false)\r\n)\r\n\r\nexport const getCheck = createSelector([getCheckData], checkData => {\r\n  const check = checkData.get('check')\r\n\r\n  if (isNil(check)) {\r\n    return null\r\n  }\r\n\r\n  return formatCheck(check.toJS())\r\n})\r\n\r\nconst getIdOnProps = (state, props) => props.id\r\n\r\nexport const getEntryWithId = createSelector([getEntries, getIdOnProps], (entries, id) => {\r\n  const check = entries.find((value, key) => value.get('id') === id)\r\n\r\n  if (isNil(check)) {\r\n    return null\r\n  }\r\n\r\n  return check.toJS()\r\n})\r\n","import Immutable from 'immutable'\r\n\r\nimport {\r\n  CheckAction,\r\n  GetCheckWithCodeAction,\r\n  GetCheckWithTableNumberAction,\r\n  GetCheckWithPosCheckIdAction,\r\n  GetRefreshCheckAction,\r\n  GetCheckAction,\r\n  MergeCheckWithCodeAction,\r\n} from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\n/**\r\n *\r\n *\r\n */\r\nconst CHECK_DATA = {\r\n  check: null,\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n}\r\n\r\nexport const checkReducer = (state = Immutable.fromJS(CHECK_DATA), action) => {\r\n  switch (action.type) {\r\n    case CheckAction.RESET:\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...CHECK_DATA,\r\n        })\r\n      )\r\n\r\n    case GetCheckWithCodeAction.REQUEST:\r\n    case GetCheckWithTableNumberAction.REQUEST:\r\n    case GetCheckWithPosCheckIdAction.REQUEST:\r\n    case GetCheckAction.REQUEST:\r\n      return state.merge({\r\n        check: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetRefreshCheckAction.REQUEST:\r\n    case MergeCheckWithCodeAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetCheckWithCodeAction.SUCCESS:\r\n    case GetCheckWithTableNumberAction.SUCCESS:\r\n    case GetCheckWithPosCheckIdAction.SUCCESS:\r\n    case GetRefreshCheckAction.SUCCESS:\r\n    case GetCheckAction.SUCCESS:\r\n    case MergeCheckWithCodeAction.SUCCESS:\r\n      return state.merge({\r\n        check: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetCheckWithCodeAction.FAILURE:\r\n    case GetCheckWithTableNumberAction.FAILURE:\r\n    case GetCheckWithPosCheckIdAction.FAILURE:\r\n    case GetRefreshCheckAction.FAILURE:\r\n    case GetCheckAction.FAILURE:\r\n      return state.merge({\r\n        check: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    case MergeCheckWithCodeAction.FAILURE:\r\n      return state.merge({\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nimport { formatPayment, formatPaymentMade } from './format'\r\n\r\nconst getPostPaymentData = state => state.entities.postPayment\r\nconst getPaymentData = state => state.entities.payment\r\nconst getPaymentMadeData = state => state.entities.payment.get('paymentMade')\r\nconst getItems = state => getPaymentData(state).getIn(['payment', 'items'])\r\n\r\nexport const getPayment = createSelector([getPaymentData], paymentData =>\r\n  formatPayment(paymentData.get('payment').toJS())\r\n)\r\n\r\nconst getIdOnProps = (state, props) => props.id\r\n\r\nexport const getItemWithId = createSelector([getItems, getIdOnProps], (items, id) => {\r\n  const item = items.get(id)\r\n\r\n  if (isNil(item)) {\r\n    return null\r\n  }\r\n\r\n  return item.toJS()\r\n})\r\n\r\nexport const getPostPayment = createSelector([getPostPaymentData], postPaymentData => {\r\n  const data = postPaymentData.get('data')\r\n\r\n  if (isNil(data)) {\r\n    return null\r\n  }\r\n\r\n  return data.toJS()\r\n})\r\n\r\nexport const getPaymentMade = createSelector([getPaymentMadeData], paymentMadeData => {\r\n  if (isNil(paymentMadeData)) {\r\n    return null\r\n  }\r\n\r\n  return formatPaymentMade(paymentMadeData.toJS())\r\n})\r\n\r\nexport const getPaymentError = createSelector([getPostPaymentData], postPaymentData => {\r\n  const error = postPaymentData.get('error')\r\n\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n\r\n  return error.toJS()\r\n})\r\n\r\nexport const getPostPaymentAtTableData = createSelector([getPostPayment], postPayment => {\r\n  return postPayment\r\n})\r\n\r\nexport const isFetchingPostPaymentAtTable = createSelector([getPostPaymentData], postPaymentData =>\r\n  postPaymentData.get('isFetching')\r\n)\r\n\r\n// TODO: unused? or on kiosk?\r\nconst postPaymentEmailSelectors = createSimpleSelector(state => state.entities.postPaymentEmail)\r\n\r\nexport const isFetchingPostPaymentEmail = postPaymentEmailSelectors.isFetching\r\nexport const getDataPostPaymentEmail = postPaymentEmailSelectors.getData\r\nexport const getErrorPostPaymentEmail = postPaymentEmailSelectors.getError\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isNil from 'lodash/isNil'\r\nimport { connect } from 'react-redux'\r\nimport invariant from 'invariant'\r\n\r\nimport {\r\n  fetchCheck,\r\n  getCheck,\r\n  getCheckError,\r\n  isFetchingCheck,\r\n  fetchCheckWithCode,\r\n  fetchCheckWithPosCheckId,\r\n  fetchCheckWithTableNumber,\r\n} from '../check'\r\nimport { getPayment } from '../payment/selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the check and pass it to the children\r\n *\r\n * Requirements:\r\n * - restaurantId\r\n * - checkId\r\n *\r\n * see `withCheck`\r\n */\r\nclass CheckContainer extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (\r\n      isNil(props.check) ||\r\n      props.forceReload ||\r\n      (!isNil(props.check) &&\r\n        ((props.checkId && parseInt(props.checkId) !== props.check.id) ||\r\n          (props.tableNumber && props.tableNumber !== props.check.tableNumber) ||\r\n          (props.posCheckId && props.posCheckId !== props.check.posCheckId)))\r\n    ) {\r\n      this.loadCheck(props, true)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n\r\n    if (\r\n      ((nextProps.checkId && nextProps.checkId !== props.checkId) ||\r\n        (nextProps.tableNumber && nextProps.tableNumber !== props.tableNumber) ||\r\n        (nextProps.posCheckId && nextProps.posCheckId !== props.posCheckId) ||\r\n        (nextProps.code && nextProps.code !== props.code)) &&\r\n      (!props.check || props.check.id)\r\n    ) {\r\n      this.loadCheck(nextProps)\r\n    }\r\n  }\r\n\r\n  loadCheck(props, forceReload = false) {\r\n    if (!props.isFetchingCheck || forceReload) {\r\n      if (props.posCheckId) {\r\n        props.fetchCheckWithPosCheckId(props.restaurantId, props.posCheckId)\r\n      } else if (props.tableNumber) {\r\n        props.fetchCheckWithTableNumber(props.restaurantId, props.tableNumber)\r\n      } else if (props.checkId) {\r\n        props.fetchCheck(props.restaurantId, props.checkId)\r\n      } else if (props.code) {\r\n        props.fetchCheckWithCode(props.restaurantId, props.code)\r\n      } else {\r\n        invariant(false, 'Invalid identifier to fetch check.')\r\n      }\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      CheckWrappedComponent,\r\n      check,\r\n      checkError,\r\n      isFetchingCheck,\r\n      children,\r\n      payment,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    const childrenProps = {\r\n      check,\r\n      checkError,\r\n      reloadCheck: () => this.loadCheck(this.props),\r\n      isFetchingCheck,\r\n      payment,\r\n    }\r\n\r\n    if (isNil(CheckWrappedComponent)) {\r\n      return children(childrenProps)\r\n    }\r\n\r\n    return <CheckWrappedComponent {...childrenProps} {...otherProps} />\r\n  }\r\n}\r\n\r\nCheckContainer.defaultProps = {\r\n  check: null,\r\n  checkId: null,\r\n  tableNumber: null,\r\n  posCheckId: null,\r\n  code: null,\r\n}\r\n\r\nCheckContainer.propTypes = {\r\n  check: PropTypes.object,\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  check: getCheck(state),\r\n  checkError: getCheckError(state),\r\n  isFetchingCheck: isFetchingCheck(state),\r\n  payment: getPayment(state),\r\n})\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  {\r\n    fetchCheck,\r\n    fetchCheckWithCode,\r\n    fetchCheckWithPosCheckId,\r\n    fetchCheckWithTableNumber,\r\n  }\r\n)(CheckContainer)\r\n","const PaymentStatus = {\r\n  CREATED: 'CREATED',\r\n  PAID: 'PAID',\r\n  PAID_NOT_REFUNDABLE: 'PAID_NOT_REFUNDABLE',\r\n  REFUNDED: 'REFUNDED',\r\n  FAILED: 'FAIL',\r\n  REFUND_FAILED: 'REFUND_FAILED',\r\n}\r\n\r\nexport default PaymentStatus\r\n","const TipsValueType = {\r\n  AMOUNT: 'AMOUNT',\r\n  PERCENTAGE: 'PERCENTAGE',\r\n}\r\n\r\nexport default TipsValueType\r\n","import StatusChip from 'pmt-ui/StatusChip'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport PaymentStatus from './PaymentStatus'\r\n\r\nexport { default as PaymentStatus } from './PaymentStatus'\r\nexport { default as TipsValueType } from './TipsValueType'\r\n\r\nexport const getPaymentStatusLabel = status => {\r\n  switch (status) {\r\n    case PaymentStatus.CREATED:\r\n      return tr('global.PaymentStatus.CREATED')\r\n    case PaymentStatus.PAID:\r\n      return tr('global.PaymentStatus.PAID')\r\n    case PaymentStatus.REFUNDED:\r\n      return tr('global.PaymentStatus.REFUNDED')\r\n    case PaymentStatus.FAILED:\r\n      return tr('global.PaymentStatus.FAILED')\r\n    case PaymentStatus.PAID_NOT_REFUNDABLE:\r\n      return tr('global.PaymentStatus.PAID_NOT_REFUNDABLE')\r\n    default:\r\n      return status\r\n  }\r\n}\r\n/**\r\n * IrlPayment, typocally used as order param\r\n */\r\nexport const IrlPaymentMethod = {\r\n  CASH: 'CASH',\r\n  CB: 'CB',\r\n  LUNCHEON_VOUCHER: 'LUNCHEON_VOUCHER',\r\n  COUPON: 'COUPON',\r\n  CHEQUE: 'CHEQUE',\r\n  OTHER: 'OTHER',\r\n}\r\n\r\nexport const getPaymentStatusType = status => {\r\n  switch (status) {\r\n    case PaymentStatus.CREATED:\r\n      return StatusChip.Status.DEFAULT\r\n    case PaymentStatus.PAID:\r\n      return StatusChip.Status.VALID\r\n    case PaymentStatus.REFUNDED:\r\n      return StatusChip.Status.WARNING\r\n    case PaymentStatus.FAILED:\r\n      return StatusChip.Status.ERROR\r\n    case PaymentStatus.PAID_NOT_REFUNDABLE:\r\n      return StatusChip.Status.WARNING\r\n    default:\r\n      return StatusChip.Status.DEFAULT\r\n  }\r\n}\r\n\r\n// TODO: move me on restaurant, please.\r\nexport const PaymentMethodsAllowed = {\r\n  IRL: 1,\r\n  CREDIT_CARD: 2,\r\n  USER_ACCOUNT: 4,\r\n  TRD: 8,\r\n}\r\n","var baseForOwn = require('./_baseForOwn'),\n    castFunction = require('./_castFunction');\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n  return object && baseForOwn(object, castFunction(iteratee));\n}\n\nmodule.exports = forOwn;\n","//\r\n// Listing of possible payment errors.\r\n//\r\n\r\nconst PaymentAsyncErrors = {\r\n  200: 'global.post_payment.error.200',\r\n  201: 'global.post_payment.error.201',\r\n  202: 'global.post_payment.error.202',\r\n  203: 'global.post_payment.error.203',\r\n}\r\n\r\nconst PaymentErrorsList = {\r\n  101: 'global.post_payment.error.101',\r\n  106: 'global.post_payment.error.106',\r\n  107: 'global.post_payment.error.107',\r\n  109: 'global.post_payment.error.109',\r\n  110: 'global.post_payment.error.110',\r\n  112: 'global.post_payment.error.112',\r\n  113: 'global.post_payment.error.113',\r\n  115: 'global.post_payment.error.115',\r\n  116: 'global.post_payment.error.116',\r\n  117: 'global.post_payment.error.117',\r\n  118: 'global.post_payment.error.118',\r\n  119: 'global.post_payment.error.119',\r\n  121: 'global.post_payment.error.121',\r\n  124: 'global.post_payment.error.124',\r\n  401: 'global.post_payment.error.401',\r\n  411: 'global.post_payment.error.411',\r\n\r\n  // user canceled async payment\r\n  // TODO: change i18n, this is not a 3DS in some cases: payment via iframe (TRD)\r\n  499: 'global.post_payment.error.custom.499',\r\n\r\n  ...PaymentAsyncErrors,\r\n  default: 'global.post_payment.error.default',\r\n}\r\n\r\nexport const PaymentPdfErrorsList = {\r\n  ...PaymentErrorsList,\r\n  default: 'global.get_payment_pdf.error.default',\r\n}\r\n\r\nexport default PaymentErrorsList\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport PaymentErrorsList from '../errors/PaymentErrorsList'\r\n\r\nconst AsyncPaymentApi = {\r\n  /**\r\n   * Retrieve a payment and ask to update its status.\r\n   * This call is made after an async payment is made.\r\n   * options authorization is used for user light calls\r\n   */\r\n  getAsyncPayment: (paymentId, options = {}, retry) => {\r\n    let headers = {}\r\n    if (options.authorization) {\r\n      headers.authorization = options.authorization\r\n    }\r\n\r\n    return {\r\n      endpoint: ApiEndpoints.GET_ASYNC_PAYMENT,\r\n      type: 'GET',\r\n      params: {\r\n        paymentId,\r\n      },\r\n      query: {\r\n        retry,\r\n      },\r\n      headers,\r\n      errorHandler: PaymentErrorsList,\r\n    }\r\n  },\r\n}\r\n\r\nexport default AsyncPaymentApi\r\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\n\r\nimport AsyncPaymentApi from 'pmt-modules/api/calls/AsyncPaymentApi'\r\n\r\n/**\r\n * Finalize an async payment\r\n */\r\nexport const GetAsyncPaymentAction = createApiEnumAction('GetAsyncPaymentAction')\r\n\r\n/**\r\n *\r\n * @param {long} paymentId Payment id\r\n * @param {Object} options\r\n * @param {int} retry increased at each getAsyncPayment. this is used to retry with increasing time\r\n * between each get.\r\n * @returns\r\n */\r\nexport const getAsyncPayment = (paymentId, options = {}, retry = 0) =>\r\n  createApiCallAction(\r\n    GetAsyncPaymentAction,\r\n    AsyncPaymentApi.getAsyncPayment(paymentId, options, retry),\r\n    {\r\n      paymentId,\r\n      ...options,\r\n      // must be after spread of the options, which contains the old retry value\r\n      retry,\r\n    }\r\n  )\r\n","export const AsyncPaymentCanceledResponseStatus = 499\r\nexport const AsyncPaymentRedirectToPspResponseStatus = 303\r\n\r\nexport const AsyncPaymentPendingStatus = [\r\n  '300', // The AsyncPaymentRedirectionData is still not received from the PSP\r\n  '301', // The AsyncPaymentRedirectionData has just been received from the PSP and the finalization\r\n]\r\n","import createMiddleware from 'pmt-modules/redux/createMiddleware'\r\n\r\nimport PaymentErrorsList from 'pmt-modules/api/errors/PaymentErrorsList'\r\nimport { PaymentStatus } from 'pmt-modules/payment/constants'\r\n\r\nimport { GetAsyncPaymentAction, getAsyncPayment } from './actions'\r\nimport { AsyncPaymentPendingStatus, AsyncPaymentCanceledResponseStatus } from './constants'\r\n\r\nfunction getTimeout(asyncPaymentRetry) {\r\n  // 2..10: every 2 seconds\r\n  if (asyncPaymentRetry < 5) {\r\n    return 2000\r\n  }\r\n  // 10..35: every 5 seconds\r\n  if (asyncPaymentRetry < 5 + 5) {\r\n    return 5000\r\n  }\r\n  // 35..125: 10 seconds\r\n  if (asyncPaymentRetry < 5 + 5 + 9) {\r\n    return 10000\r\n  }\r\n  // other: every 20 seconds\r\n  return 20000\r\n}\r\n\r\n/**\r\n * We get the payment after an async transaction in order to verify its status\r\n * on success, we redirect to payment confirmation page\r\n */\r\nconst getAsyncPaymentSuccess = createMiddleware(\r\n  GetAsyncPaymentAction.SUCCESS,\r\n  ({ action, dispatch, next }) => {\r\n    if (!action.response.isFinalized) {\r\n      setTimeout(() => {\r\n        const retry = action.data.retry + 1\r\n        dispatch(getAsyncPayment(action.data.paymentId, action.data, retry))\r\n      }, getTimeout(action.data.retry))\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n\r\n    // async payment is finalized\r\n\r\n    // check if objet is a payment or contains a payment with status failed\r\n    const statusFailed = [PaymentStatus.FAILED, PaymentStatus.REFUND_FAILED, PaymentStatus.REFUNDED]\r\n    if (action.response.payment && statusFailed.includes(action.response.payment.status)) {\r\n      next(action)\r\n\r\n      const defaultError = {\r\n        code: AsyncPaymentCanceledResponseStatus,\r\n        message: 'async payment canceled',\r\n        localizedMessage: PaymentErrorsList[AsyncPaymentCanceledResponseStatus],\r\n        response: {\r\n          ok: false,\r\n          status: AsyncPaymentCanceledResponseStatus,\r\n        },\r\n      }\r\n\r\n      const errorWithoutRefundData = action.response.payment?.errorModel || defaultError;\r\n\r\n      dispatch({\r\n        type: GetAsyncPaymentAction.FAILURE,\r\n        data: action.data,\r\n        error: {\r\n          ...errorWithoutRefundData,\r\n          refunded:  action.response.payment.status === PaymentStatus.REFUNDED\r\n        },\r\n      })\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n  }\r\n)\r\n\r\n/**\r\n * the async payment data verification has failed, retry\r\n */\r\nconst getAsyncPaymentFailure = createMiddleware(\r\n  GetAsyncPaymentAction.FAILURE,\r\n  ({ action, dispatch }) => {\r\n    if (action.error && AsyncPaymentPendingStatus.indexOf(action.error.code) >= 0) {\r\n      setTimeout(() => {\r\n        dispatch(getAsyncPayment(action.data.paymentId, action.data, action.data.retry + 1))\r\n      }, getTimeout(action.data.retry))\r\n      return createMiddleware.STOP_PROPAGATION\r\n    }\r\n  }\r\n)\r\n\r\nexport const AsyncPaymentMiddlewares = [getAsyncPaymentSuccess, getAsyncPaymentFailure]\r\n","import get from 'lodash/get'\r\n\r\nimport { AsyncPaymentRedirectToPspResponseStatus } from './constants'\r\n\r\nexport const isAsyncPaymentRedirectToPspResponse = action =>\r\n  get(action, 'error.response.status', false) === AsyncPaymentRedirectToPspResponseStatus\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport PaymentErrorsList, { PaymentPdfErrorsList } from '../errors/PaymentErrorsList'\r\n\r\nconst PaymentApi = {\r\n  get: paymentId => ({\r\n    endpoint: ApiEndpoints.GET_PAYMENT,\r\n    type: 'GET',\r\n    params: {\r\n      paymentId,\r\n    },\r\n    errorHandler: PaymentErrorsList,\r\n  }),\r\n\r\n  getPaymentPdfLink: paymentId => ({\r\n    endpoint: ApiEndpoints.GET_PAYMENT_PDF_LINK,\r\n    type: 'GET',\r\n    params: {\r\n      paymentId,\r\n    },\r\n    errorHandler: PaymentPdfErrorsList,\r\n  }),\r\n\r\n  processIrlPayment: (restaurant, check, payment) => ({\r\n    endpoint: ApiEndpoints.POST_PAYMENT,\r\n    type: 'POST',\r\n    body: {\r\n      ...payment,\r\n      irlPayment: {\r\n        amount: check.outstandingBalance,\r\n        type: 'CB',\r\n        externalId: payment.externalId,\r\n      },\r\n    },\r\n    params: {\r\n      restaurantId: restaurant.id,\r\n      checkId: check.id,\r\n    },\r\n    errorHandler: PaymentErrorsList,\r\n  }),\r\n\r\n  processPaymentv2: (restaurantId, paymentMethod, payment, check) => ({\r\n    endpoint: ApiEndpoints.POST_PAYMENT,\r\n    type: 'POST',\r\n    body: {\r\n      ...payment,\r\n      method: paymentMethod,\r\n    },\r\n    params: {\r\n      restaurantId,\r\n      checkId: check.id,\r\n    },\r\n    updateBody: (card, body) => ({\r\n      ...body,\r\n      method: paymentMethod,\r\n      cardId: card?.id,\r\n    }),\r\n    errorHandler: PaymentErrorsList,\r\n  }),\r\n\r\n  postPaymentEmail: (paymentId, body) => ({\r\n    endpoint: ApiEndpoints.POST_PAYMENT_EMAIL,\r\n    type: 'POST',\r\n    params: {\r\n      paymentId,\r\n    },\r\n    body,\r\n    errorHandler: PaymentErrorsList,\r\n  }),\r\n\r\n  getRestaurantHistory: (restaurantId, fromDate, toDate) => ({\r\n    endpoint: ApiEndpoints.PAYMENTS_HISTORY,\r\n    type: 'GET',\r\n    query: {\r\n      restaurantId,\r\n      fromTime: fromDate,\r\n      toTime: toDate,\r\n      limit: 100, // TODO: remove\r\n    },\r\n  }),\r\n}\r\n\r\nexport default PaymentApi\r\n","import { createAction } from 'pmt-modules/redux'\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\n// import { createTestApiCallAction } from 'pmt-modules/api/utils'\r\nimport PaymentApi from 'pmt-modules/api/calls/PaymentApi'\r\nimport { getRoute, createRedirectToAction } from 'pmt-modules/routing'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/payment/constants'\r\n\r\n//\r\n// PaymentType\r\n//\r\n\r\n/**\r\n * Actions to change type of payment\r\n */\r\nexport const SelectPaymentTypeAction = {\r\n  /**\r\n   * Wants to pay all the check\r\n   */\r\n  ALL: 'PAYMENT::SELECT_TYPE::ALL',\r\n\r\n  /**\r\n   * Wants to pay a part of the check\r\n   */\r\n  SHARE: 'PAYMENT::SELECT_TYPE::SHARE',\r\n\r\n  /**\r\n   * Wants to pay for the attached entries\r\n   */\r\n  ENTRIES: 'PAYMENT::SELECT_TYPE::ENTRIES',\r\n}\r\n\r\nexport const setPaymentTypeAll = () => createAction(SelectPaymentTypeAction.ALL)\r\nexport const setPaymentTypeShare = () => createAction(SelectPaymentTypeAction.SHARE)\r\nexport const setPaymentTypeEntries = () => createAction(SelectPaymentTypeAction.ENTRIES)\r\n\r\n//\r\n// Payment\r\n//\r\n\r\nexport const PaymentAction = {\r\n  GET_PAYMENT: 'PAYMENT::GET_PAYMENT',\r\n  SELECT_TIPS: 'PAYMENT::SELECT_TIPS',\r\n  RESET: 'PAYMENT::RESET',\r\n}\r\n\r\nexport const resetPayment = () => createAction(PaymentAction.RESET)\r\n\r\nexport const selectTips = tips => createAction(PaymentAction.SELECT_TIPS, { tips })\r\n\r\n//\r\n// Sharing\r\n//\r\n\r\nexport const SharePaymentAction = {\r\n  INCREASE_DIVIDER: 'PAYMENT::SHARE::INCREASE_DIVIDER',\r\n  DECREASE_DIVIDER: 'PAYMENT::SHARE::DECREASE_DIVIDER',\r\n  INCREASE_MULTIPLIER: 'PAYMENT::SHARE::INCREASE_MULTIPLIER',\r\n  DECREASE_MULTIPLIER: 'PAYMENT::SHARE::DECREASE_MULTIPLIER',\r\n}\r\n\r\nexport const increaseDivider = () => createAction(SharePaymentAction.INCREASE_DIVIDER)\r\nexport const decreaseDivider = () => createAction(SharePaymentAction.DECREASE_DIVIDER)\r\nexport const increaseMultiplier = () => createAction(SharePaymentAction.INCREASE_MULTIPLIER)\r\nexport const decreaseMultiplier = () => createAction(SharePaymentAction.DECREASE_MULTIPLIER)\r\n\r\n//\r\n// ItemSelection\r\n//\r\nexport const PaymentItemSelection = {\r\n  ADD_ITEM: 'PAYMENT::ITEM::ADD',\r\n  REMOVE_ITEM: 'PAYMENT::ITEM::REMOVE',\r\n  ITEM_SHARE: 'PAYMENT::SHARE::ITEM_SHARE',\r\n  ITEM_SHARE_UPDATE: 'PAYMENT::ITEM::SHARE::UPDATE',\r\n}\r\n\r\nexport const addEntryToPayment = entry => createAction(PaymentItemSelection.ADD_ITEM, { entry })\r\n\r\nexport const removeEntryFromPayment = entry =>\r\n  createAction(PaymentItemSelection.REMOVE_ITEM, { entry })\r\n\r\nexport const shareEntryToPaymentUpdate = (entry, item, share) =>\r\n  createAction(PaymentItemSelection.ITEM_SHARE_UPDATE, { entry, item, share })\r\n\r\nexport const redirectToPaymentUserPage = (restaurantId, checkId) =>\r\n  createRedirectToAction(getRoute('PAYMENT_PAYMENT'), { restaurantId, checkId })\r\n\r\n//\r\n// PostPayment\r\n//\r\n\r\nexport const PostPaymentAction = {\r\n  ...createApiEnumAction('PAYMENT::POST::USER'),\r\n  RESET: 'PAYMENT::POST::RESET',\r\n}\r\nexport const PostIrlPaymentAction = createApiEnumAction('PAYMENT::POST::IRL_PAYMENT')\r\nexport const PostUserLightPaymentAction = createApiEnumAction('PAYMENT::POST::USER_LIGHT')\r\n\r\nexport const resetPostPayment = () => createAction(PostPaymentAction.RESET)\r\n\r\nexport const processPaymentv2 = (\r\n  restaurantId,\r\n  paymentMethod,\r\n  payment,\r\n  check,\r\n) =>\r\n  createApiCallAction(\r\n    PostPaymentAction,\r\n    PaymentApi.processPaymentv2(restaurantId, paymentMethod, payment, check),\r\n    {\r\n      restaurantId,\r\n      paymentMethod,\r\n      payment,\r\n      check,\r\n    }\r\n  )\r\n\r\nexport const processIrlPayment = (restaurant, check, payment) =>\r\n  createApiCallAction(\r\n    PostIrlPaymentAction,\r\n    PaymentApi.processIrlPayment(restaurant, check, payment),\r\n    {\r\n      restaurant,\r\n      check,\r\n      payment,\r\n    }\r\n  )\r\n\r\nexport const GetPaymentAction = createApiEnumAction('PAYMENT::GET')\r\n\r\nexport const getPayment = paymentId =>\r\n  createApiCallAction(GetPaymentAction, PaymentApi.get(paymentId), {\r\n    paymentId,\r\n  })\r\n\r\nexport const PostPaymentEmailAction = createApiEnumAction('PAYMENT::POST::PAYMENT_EMAIL')\r\n\r\nexport const postPaymentEmail = (paymentId, body) =>\r\n  createApiCallAction(PostPaymentEmailAction, PaymentApi.postPaymentEmail(paymentId, body), {\r\n    paymentId,\r\n    body,\r\n  })\r\n","import isNull from 'lodash/isNull'\r\nimport forOwn from 'lodash/forOwn'\r\nimport Immutable from 'immutable'\r\n\r\nimport {\r\n  GetAsyncPaymentAction,\r\n  isAsyncPaymentRedirectToPspResponse,\r\n} from 'pmt-modules/asyncPayment'\r\n\r\nimport { generateIdempotencyKey } from 'pmt-utils/idempotency'\r\nimport { createSimpleReducer } from 'pmt-modules/redux'\r\n\r\nimport {\r\n  PostPaymentAction,\r\n  PostIrlPaymentAction,\r\n  PostUserLightPaymentAction,\r\n  SelectPaymentTypeAction,\r\n  PaymentAction,\r\n  PaymentItemSelection,\r\n  SharePaymentAction,\r\n  PostPaymentEmailAction,\r\n} from './actions'\r\n\r\nimport {\r\n  GetCheckWithTableNumberAction,\r\n  GetRefreshCheckAction,\r\n  GetCheckAction,\r\n  GetCheckWithCodeAction,\r\n  MergeCheckWithCodeAction,\r\n} from '../check'\r\n\r\nimport { PaymentType } from '../../global/constants'\r\nimport { GetAppConfigAction } from '../../appConfig'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\nconst CHECK = Immutable.fromJS({\r\n  outstandingBalance: 0,\r\n})\r\n\r\nexport const getDefaultShare = () => ({\r\n  enabled: false, // to know if we are in share mode or not for an item\r\n\r\n  // the dividend\r\n  divider: 1,\r\n  defaultDivider: 1,\r\n\r\n  // the divisor\r\n  multiplier: 1,\r\n  defaultMultiplier: 1,\r\n\r\n  //\r\n  dividerIsMinimum: true,\r\n  multiplierIsMinimum: true,\r\n  multiplierIsMaximum: true,\r\n})\r\n\r\nexport const getDefaultChoose = () => ({\r\n  ...getDefaultShare(),\r\n  divider: 2,\r\n  defaultDivider: 2,\r\n})\r\n\r\nconst PAYMENT = () => ({\r\n  type: PaymentType.ALL,\r\n  amount: 0,\r\n  tips: 0,\r\n\r\n  idempotencyKey: generateIdempotencyKey(),\r\n\r\n  // replace the array of entry `entries`\r\n  items: {},\r\n\r\n  cardId: null,\r\n\r\n  // the associated check\r\n  check: CHECK,\r\n\r\n  // front data to handle sharing by division\r\n  share: getDefaultShare(),\r\n\r\n  /**\r\n   * true if the requesting client can handle 3D Secure verification.\r\n   */\r\n  supportAsyncPayment: false,\r\n})\r\n\r\n/**\r\n *\r\n *\r\n */\r\nconst PAYMENT_DATA = {\r\n  payment: PAYMENT(),\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n}\r\n\r\n/**\r\n * An item is a payment's entry information.\r\n * An entry is the check's item information.\r\n */\r\nconst createItem = entry => ({\r\n  quantity: 0,\r\n  id: entry.id,\r\n  max: entry.quantity,\r\n  name: entry.name,\r\n  unitPrice: entry.price / entry.quantity,\r\n  absoluteTotal: entry.price,\r\n  total: 0,\r\n  share: getDefaultChoose(),\r\n})\r\n\r\nconst itemsPath = ['payment', 'items']\r\n\r\nconst ceilToCent = exactValue => {\r\n  return Number(Math.ceil(exactValue + 'e2') + 'e-2')\r\n}\r\n\r\nconst ceilWithRoundingValue = (exactValue, roundingValue) => {\r\n  // we must ceil, and not use exact nor round, because if we do, and everyone split the check, we\r\n  // will have some cents remaining. With ceil, the last to pay will pay less.\r\n  return Math.ceil(exactValue / roundingValue) * roundingValue\r\n}\r\n\r\n// this method is used to add share data on payment (check not null) or an item directly (share only)\r\nconst updateShareData = ({ check, share, roundingValue }) => {\r\n  if (isNull(share)) {\r\n    return null\r\n  }\r\n  // verify we are not under the minimum\r\n  share.divider = Math.max(share.defaultDivider, share.divider)\r\n  share.multiplier = Math.max(share.defaultMultiplier, share.multiplier)\r\n\r\n  // at maximum, we multiplier the number of \"divider\"\r\n  const maxMultiplier = share.divider\r\n  share.multiplier = Math.min(maxMultiplier, share.multiplier)\r\n\r\n  // update data\r\n  share.dividerIsMinimum = share.defaultDivider === share.divider\r\n  share.multiplierIsMinimum = share.defaultMultiplier === share.multiplier\r\n  share.multiplierIsMaximum = maxMultiplier === share.multiplier\r\n\r\n  // we add share data on the payment if check is not null.\r\n  // Otherwise we are adding share data on an item\r\n  if (check) {\r\n    check.tips = check.tips || 0\r\n    const checkTotal = check.total ? check.total - check.tips : 0\r\n    const exactValuePerPerson = checkTotal / share.divider\r\n    const amountPerPersonAsNumber = roundingValue\r\n      ? ceilWithRoundingValue(exactValuePerPerson, roundingValue)\r\n      : ceilToCent(exactValuePerPerson)\r\n    share.amountPerPerson = amountPerPersonAsNumber.toFixed(2)\r\n    // set the check total on share information. Used by the API to verify we have an up to date\r\n    // check when wanting to split\r\n    share.total = checkTotal\r\n  }\r\n\r\n  return share\r\n}\r\n\r\nconst getItemOnState = (state, itemId) => {\r\n  const stateItems = state.getIn(itemsPath)\r\n  const items = stateItems.toJS()\r\n\r\n  return items[itemId]\r\n}\r\n\r\nconst createItemOnState = (state, entry) => {\r\n  const stateItems = state.getIn(itemsPath)\r\n  const items = stateItems.toJS()\r\n  const item = items[entry.id] || createItem(entry)\r\n\r\n  // set object\r\n  return state.setIn(itemsPath, stateItems.set(entry.id, item))\r\n}\r\n\r\nconst removeItemOnState = (state, entry) => {\r\n  const stateItems = state.getIn(itemsPath)\r\n  let items = stateItems.toJS()\r\n  delete items[entry.id]\r\n\r\n  return state.setIn(itemsPath, items)\r\n}\r\n\r\nconst updateItem = (item, roundingValue) => {\r\n  if (item.share.enabled) {\r\n    item.share = updateShareData(item)\r\n    item.quantity = item.share.divider / item.share.multiplier\r\n\r\n    // we share for the total quantity of the entry (* item.max)\r\n    item.total = (item.unitPrice * item.max) / item.quantity\r\n    if (roundingValue) {\r\n      item.total = ceilWithRoundingValue(item.total, roundingValue)\r\n    } else {\r\n      item.total = ceilToCent(item.total)\r\n    }\r\n  } else {\r\n    // reset the share data\r\n    item.share = getDefaultShare()\r\n    // calculate total price\r\n    item.total = item.unitPrice * item.quantity\r\n  }\r\n\r\n  return item\r\n}\r\n\r\nconst updateItemOnState = (state, item) => {\r\n  const stateItems = state.getIn(itemsPath)\r\n\r\n  return state.setIn(\r\n    itemsPath,\r\n    stateItems.set(item.id, updateItem(item, state.getIn(['payment', 'roundingValue'])))\r\n  )\r\n}\r\n\r\nconst increaseItemQuantity = (state, itemId) => {\r\n  const item = getItemOnState(state, itemId)\r\n\r\n  if (item.share.enabled) {\r\n    // pass from sharing to quantity\r\n    item.share.enabled = false\r\n    item.quantity = 0\r\n  } else {\r\n    // change quantity\r\n    item.quantity++\r\n  }\r\n\r\n  // the max has reached, we pass it to 0\r\n  if (item.quantity > item.max) {\r\n    item.quantity = 0\r\n  }\r\n\r\n  return updateItemOnState(state, item)\r\n}\r\n\r\n/**\r\n * This function have to be called each time the payment on the state change.\r\n * It will calculate payment information with the new payment state:\r\n * - calculate payment's amount\r\n * - update data for each payment type\r\n */\r\nconst refreshPaymentInfo = payment => {\r\n  let total = 0\r\n  switch (payment.type) {\r\n    case PaymentType.ENTRIES:\r\n      // the total is the added total of each item\r\n      forOwn(payment.items, (item, itemKey) => {\r\n        if (item.share.enabled) {\r\n          let itemPrice = item.unitPrice * item.max * (item.share.multiplier / item.share.divider)\r\n          // to be coherent with the displayed prices (aka ceiled value for each line)\r\n          // the total is the sum of the ceiled values (and not the ceiled nor rounded value of the sum)\r\n          total += payment.roundingValue\r\n            ? ceilWithRoundingValue(itemPrice, payment.roundingValue)\r\n            : ceilToCent(itemPrice)\r\n        } else {\r\n          total += item.unitPrice * item.max\r\n        }\r\n      })\r\n\r\n      break\r\n\r\n    case PaymentType.SHARE:\r\n      payment.share = updateShareData(payment)\r\n\r\n      // calculate total and round to upper cent\r\n      // we split the original check total, without the tips\r\n      payment.check.tips = payment.check.tips || 0\r\n      const checkTotal =\r\n        payment.check && payment.check.total ? payment.check.total - payment.check.tips : 0\r\n      const exactTotal = (checkTotal / payment.share.divider) * payment.share.multiplier\r\n      if (payment.roundingValue) {\r\n        total = ceilWithRoundingValue(exactTotal, payment.roundingValue)\r\n      } else {\r\n        total = ceilToCent(exactTotal)\r\n      }\r\n\r\n      break\r\n\r\n    case PaymentType.ALL:\r\n      // we wants to pay the remaining total\r\n      total = payment.check.outstandingBalance\r\n      console.log('current outstanding balance', total)\r\n      break\r\n\r\n    default:\r\n      console.error(`not handle  type ${payment.type}`)\r\n  }\r\n\r\n  payment.amount = total\r\n\r\n  // update items\r\n  // TODO: remove selected items that are no longer in the entry\r\n  forOwn(payment.items, (item, itemKey) => {\r\n    payment.items[itemKey] = updateItem({ ...item }, payment.roundingValue)\r\n  })\r\n\r\n  // we considered there was new data enough to refreshPaymentInfo\r\n  // so we consider it's not the same payment, and generate a new idempotency key\r\n  // like that, changing tips value or splitting the check differently will allow to resubmit the payment\r\n  payment.idempotencyKey = generateIdempotencyKey()\r\n\r\n  return Immutable.fromJS(payment)\r\n}\r\n\r\nconst refreshPaymentInfoState = state => {\r\n  const payment = state.get('payment').toJS()\r\n  return state.setIn(['payment'], refreshPaymentInfo(payment))\r\n}\r\n\r\nexport const paymentReducer = (state = Immutable.fromJS(PAYMENT_DATA), action) => {\r\n  switch (action.type) {\r\n    case PaymentAction.RESET:\r\n      const paymentMade = {\r\n        amount: Number(state.get('payment').get('amount')) || 0,\r\n        tips: state.get('payment').get('tips') || state.get('payment').get('tip') || 0,\r\n      }\r\n      if (paymentMade.amount === 0 && paymentMade.tips === 0) {\r\n        // due to StrictMode in dev, the reset action is called twice,\r\n        // so we need to check if we already have copied the payment to paymentMade and reset the original payment,\r\n        // in order to not trigger a re-render (and to not copy a resetted payment to paymentMade,\r\n        // which would display 0€ on the confirm page instead of the correct amount)\r\n        return state\r\n      }\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...PAYMENT_DATA,\r\n          payment: {\r\n            ...PAYMENT(),\r\n            // we keep the roundingValue (from apiConsumer) on payment so we have it when we need to do calculation\r\n            roundingValue: state.get('payment').get('roundingValue'),\r\n          },\r\n          // keep data from the payment to be displayed on the confirm page.\r\n          // the rest of the data is reset above, before we display the confirm page, in order to\r\n          // have a clean payment data for the next payment flow.\r\n          paymentMade: paymentMade,\r\n        })\r\n      )\r\n\r\n    //\r\n    // check\r\n    //\r\n    case GetCheckWithTableNumberAction.SUCCESS:\r\n    case GetRefreshCheckAction.SUCCESS:\r\n    case GetCheckAction.SUCCESS:\r\n    case GetCheckWithCodeAction.SUCCESS:\r\n    case MergeCheckWithCodeAction.SUCCESS:\r\n      console.log('check received', action.response)\r\n      state = state.setIn(['payment', 'check'], action.response)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    // PaymentType\r\n    //\r\n\r\n    case SelectPaymentTypeAction.ALL:\r\n      state = state.mergeIn(['payment'], {\r\n        type: PaymentType.ALL,\r\n        amount: state.getIn(['payment', 'check', 'total']),\r\n        items: {},\r\n      })\r\n      return refreshPaymentInfoState(state)\r\n\r\n    case SelectPaymentTypeAction.SHARE:\r\n      state = state.mergeIn(['payment'], {\r\n        type: PaymentType.SHARE,\r\n        items: {},\r\n      })\r\n      return refreshPaymentInfoState(state)\r\n\r\n    case SelectPaymentTypeAction.ENTRIES:\r\n      state = state.mergeIn(['payment'], {\r\n        type: PaymentType.ENTRIES,\r\n        share: getDefaultShare(),\r\n      })\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    // Payment\r\n    //\r\n\r\n    case PaymentAction.SELECT_TIPS:\r\n      state = state.setIn(['payment', 'tips'], action.tips)\r\n      // trick API\r\n      state = state.setIn(['payment', 'tip'], action.tips)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    //\r\n    //\r\n\r\n    case PaymentItemSelection.ADD_ITEM:\r\n      state = createItemOnState(state, action.entry)\r\n      state = increaseItemQuantity(state, action.entry.id)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    case PaymentItemSelection.REMOVE_ITEM:\r\n      state = removeItemOnState(state, action.entry)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    // SHARING ITEM\r\n    //\r\n    case PaymentItemSelection.ITEM_SHARE_UPDATE:\r\n      const increaseItemShareUpdate = (state, itemId, share) => {\r\n        const item = getItemOnState(state, itemId)\r\n        // change quantity\r\n        item.share.divider = share.divider\r\n        item.share.multiplier = share.multiplier\r\n        item.share.enabled = true\r\n        return updateItemOnState(state, item)\r\n      }\r\n      state = createItemOnState(state, action.entry)\r\n      state = increaseItemShareUpdate(state, action.entry.id, action.share)\r\n      return refreshPaymentInfoState(state)\r\n\r\n    //\r\n    // SHARING CHECK\r\n    //\r\n\r\n    case SharePaymentAction.INCREASE_DIVIDER:\r\n      return refreshPaymentInfoState(\r\n        state\r\n          .updateIn(['payment', 'share', 'divider'], value => value + 1)\r\n          .setIn(['payment', 'share', 'enabled'], true)\r\n      )\r\n\r\n    case SharePaymentAction.DECREASE_DIVIDER:\r\n      return refreshPaymentInfoState(\r\n        state\r\n          .updateIn(['payment', 'share', 'divider'], value => value - 1)\r\n          .setIn(['payment', 'share', 'enabled'], true)\r\n      )\r\n\r\n    case SharePaymentAction.INCREASE_MULTIPLIER:\r\n      return refreshPaymentInfoState(\r\n        state\r\n          .updateIn(['payment', 'share', 'multiplier'], value => value + 1)\r\n          .setIn(['payment', 'share', 'enabled'], true)\r\n      )\r\n\r\n    case SharePaymentAction.DECREASE_MULTIPLIER:\r\n      return refreshPaymentInfoState(\r\n        state\r\n          .updateIn(['payment', 'share', 'multiplier'], value => value - 1)\r\n          .setIn(['payment', 'share', 'enabled'], false)\r\n      )\r\n\r\n    // storing roundingValue (from apiConsumer) on payment so we have it when we need to do calculation\r\n    case GetAppConfigAction.SUCCESS:\r\n      state = state.setIn(\r\n        ['payment', 'roundingValue'],\r\n        action.response?.settings?.front?.display?.roundingValue\r\n      )\r\n      return refreshPaymentInfoState(state)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\n/**\r\n *\r\n *\r\n */\r\nconst POST_PAYMENT_DATA = {\r\n  data: null,\r\n  isFetching: false,\r\n  lastUpdated: null,\r\n  error: null,\r\n}\r\n\r\nexport const postPaymentReducer = (state = Immutable.fromJS(POST_PAYMENT_DATA), action) => {\r\n  switch (action.type) {\r\n    case PostPaymentAction.RESET:\r\n      return state.merge(\r\n        Immutable.fromJS({\r\n          ...POST_PAYMENT_DATA,\r\n          data: {\r\n            // we keep some data to display confirm page\r\n            id: state.get('data')?.get('id'), // needed for the download receipt button\r\n          },\r\n        })\r\n      )\r\n\r\n    case GetAsyncPaymentAction.REQUEST:\r\n      return state.merge({\r\n        isFetching: true,\r\n      })\r\n\r\n    case PostPaymentAction.REQUEST:\r\n    case PostIrlPaymentAction.REQUEST:\r\n    case PostUserLightPaymentAction.REQUEST:\r\n      return state.merge({\r\n        data: null,\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case PostPaymentAction.SUCCESS:\r\n    case PostIrlPaymentAction.SUCCESS:\r\n    case PostUserLightPaymentAction.SUCCESS:\r\n      return state.merge({\r\n        data: action.response,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetAsyncPaymentAction.SUCCESS:\r\n      return state.merge({\r\n        data: {\r\n          ...action.response.linkedObject, // linkedObject is the payment\r\n        },\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: null,\r\n      })\r\n\r\n    case GetAsyncPaymentAction.FAILURE:\r\n    case PostPaymentAction.FAILURE:\r\n    case PostIrlPaymentAction.FAILURE:\r\n    case PostUserLightPaymentAction.FAILURE:\r\n      // if 3DSecure response, the error contains the order\r\n      if (isAsyncPaymentRedirectToPspResponse(action)) {\r\n        return state.merge({\r\n          data: action.error.body,\r\n          isFetching: false,\r\n          error: null,\r\n        })\r\n      }\r\n      return state.merge({\r\n        data: null,\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport const postPaymentEmailReducer = createSimpleReducer(PostPaymentEmailAction)\r\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet Table = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M6.7,14.4H2v-1.1h4.7c0.3,0,0.6,0.2,0.6,0.6C7.3,14.2,7,14.4,6.7,14.4z M2,12.3L1,4.4C0.9,4.2,0.7,4,0.4,4    C0.2,4,0,4.3,0,4.5l1,8.3v6.7c0,0.3,0.2,0.5,0.5,0.5c0.3,0,0.5-0.2,0.5-0.5l0-4.3l4.3,0l0,4.3c0,0.3,0.2,0.5,0.5,0.5    c0.3,0,0.5-0.2,0.5-0.5v-4.3c0.6-0.2,1-0.8,1-1.4c0-0.8-0.7-1.5-1.5-1.5L2,12.3z\"/>\r\n    <path d=\"M11.7,19.3C11.7,19.3,11.6,19.3,11.7,19.3l0-8c0,0,0,0,0,0h1v0v0v0v8v0v0v0H11.7z M18.2,11.2    C18.2,11.2,18.2,11.2,18.2,11.2l-12.5,0c0,0,0,0,0,0v-1.1h0h0h0h12.5h0h0h0V11.2z\"/>\r\n    <path d=\"M22,14.4h-4.7c-0.3,0-0.6-0.2-0.6-0.6c0-0.3,0.2-0.6,0.6-0.6H22V14.4z M23.1,4.5L22,12.3h-4.8    c-0.8,0-1.5,0.7-1.5,1.5c0,0.7,0.4,1.2,1,1.4v4.3c0,0.3,0.2,0.5,0.5,0.5c0.3,0,0.5-0.2,0.5-0.5l0-4.3H22l0,4.3    c0,0.3,0.2,0.5,0.5,0.5c0.3,0,0.5-0.2,0.5-0.5v-6.7l1-8.3C24,4.3,23.8,4,23.6,4C23.3,4,23.1,4.2,23.1,4.5z\"/>\r\n  </SvgIcon>\r\n);\r\nTable = pure(Table);\r\nTable.displayName = 'Table';\r\nTable.muiName = 'SvgIcon';\r\n\r\nexport default Table;\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Audit = props => (\r\n  <SvgIcon\r\n    fill=\"currentColor\"\r\n    fillRule=\"evenodd\"\r\n    height=\"100%\"\r\n    viewBox=\"0 0 24 24\"\r\n    width=\"100%\"\r\n    fit=\"\"\r\n    preserveAspectRatio=\"xMidYMid meet\"\r\n    focusable=\"false\"\r\n    {...props}\r\n  >\r\n    <path d=\"M10 7h12V3H10z\" opacity=\".8\" />\r\n    <path d=\"M6 20h4v-2H6zm-2 0h2V8H4z\" opacity=\".6\" />\r\n    <path d=\"M10 21h12v-4H10z\" opacity=\".8\" />\r\n    <path d=\"M6 13h4v-2H6z\" opacity=\".6\" />\r\n    <path d=\"M10 14h12v-4H10z\" opacity=\".8\" />\r\n    <path d=\"M2 8h6V2H2z\" />\r\n  </SvgIcon>\r\n)\r\nAudit = pure(Audit)\r\nAudit.displayName = 'Audit'\r\nAudit.muiName = 'SvgIcon'\r\n\r\nexport default Audit\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet ShoppingCart = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z\"/>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n  </SvgIcon>\r\n)\r\n\r\nShoppingCart = pure(ShoppingCart)\r\nShoppingCart.displayName = 'ShoppingCart'\r\nShoppingCart.pmtName = 'SvgIcon'\r\n\r\nexport default ShoppingCart\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet CreditCard = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z\"/>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n  </SvgIcon>\r\n)\r\n\r\nCreditCard = pure(CreditCard)\r\nCreditCard.displayName = 'CreditCard'\r\nCreditCard.pmtName = 'SvgIcon'\r\n\r\nexport default CreditCard\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n  },\r\n  cents: {\r\n    fontSize: '0.8em',\r\n  },\r\n  hr: {\r\n    position: 'absolute',\r\n    top: 2,\r\n    height: 1,\r\n    width: '100%',\r\n    background: theme.pmt.colors.grey500,\r\n    border: 'none',\r\n    margin: theme.spacing(1, 0),\r\n  },\r\n  finalValue: {\r\n    float: 'left',\r\n  },\r\n  baseValue: {\r\n    float: 'left',\r\n    position: 'relative',\r\n    marginTop: theme.spacing(0.5),\r\n    marginLeft: theme.spacing(1),\r\n    fontSize: '0.8em',\r\n    fontWeight: 400,\r\n    color: theme.pmt.colors.grey500,\r\n  },\r\n  rowReverse: {\r\n    flexDirection: 'row-reverse',\r\n  },\r\n  hrColumn: {\r\n    top: 0,\r\n  },\r\n  column: {\r\n    flexDirection: 'column',\r\n  },\r\n  columnReverse: {\r\n    flexDirection: 'column-reverse',\r\n  },\r\n})\r\n\r\nclass Price extends React.Component {\r\n  // Render component.\r\n  render() {\r\n    const {\r\n      value,\r\n      hasCartModifier,\r\n      rowReverse,\r\n      column,\r\n      columnReverse,\r\n      baseValue,\r\n      className,\r\n      classes,\r\n    } = this.props\r\n\r\n    const values = value.split(',')\r\n    const baseValues = hasCartModifier ? baseValue.split(',') : null\r\n\r\n    if (values.length === 1) {\r\n      return (\r\n        <div className={clsx('u-overflowHidden', className, classes.root)}>\r\n          <span>{value}</span>\r\n          {hasCartModifier && <span className={classes.baseValue}>{baseValue}</span>}\r\n        </div>\r\n      )\r\n    } else {\r\n      return (\r\n        <div\r\n          className={clsx('u-overflowHidden', className, classes.root, {\r\n            [classes.rowReverse]: rowReverse,\r\n            [classes.column]: column,\r\n            [classes.columnReverse]: columnReverse,\r\n          })}\r\n        >\r\n          <div className={classes.finalValue}>\r\n            <span>{values[0]}</span>\r\n            <span className={clsx(classes.cents)}>,{values[1]}</span>\r\n          </div>\r\n          {hasCartModifier && (\r\n            <div className={classes.baseValue}>\r\n              <span>{baseValues[0]}</span>\r\n              <span className={clsx(classes.cents)}>,{baseValues[1]}</span>\r\n              <hr\r\n                className={clsx(classes.hr, {\r\n                  [classes.hrColumn]: column || columnReverse,\r\n                })}\r\n              />\r\n            </div>\r\n          )}\r\n        </div>\r\n      )\r\n    }\r\n  }\r\n}\r\n\r\nPrice.defaultProps = {\r\n  value: '0,00 €',\r\n  baseValue: '0,00 €',\r\n  hasCartModifier: false,\r\n  rowReverse: false,\r\n  column: false,\r\n  columnReverse: false,\r\n}\r\n\r\nPrice.propTypes = {\r\n  value: PropTypes.string.isRequired,\r\n  hasCartModifier: PropTypes.bool,\r\n  rowReverse: PropTypes.bool,\r\n  column: PropTypes.bool,\r\n  columnReverse: PropTypes.bool,\r\n}\r\n\r\nexport default withStyles(styles)(Price)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { addEntryToPayment, removeEntryFromPayment } from 'pmt-modules/payment'\r\nimport { displayChooseEntryDividerDialog } from 'pmt-modules/dialog'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Checkbox from 'pmt-ui/Checkbox'\r\nimport Price from 'pmt-ui/Price'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { existsOnArray } from 'pmt-utils/array'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    width: '100%',\r\n  },\r\n  entry: {\r\n    width: '100%',\r\n    paddingTop: theme.spacing(1),\r\n    paddingBottom: theme.spacing(1),\r\n    display: 'flex',\r\n  },\r\n  entrySELECTION: {\r\n    display: 'flex',\r\n    position: 'relative',\r\n    height: theme.spacing(6),\r\n    padding: 0,\r\n  },\r\n  quantity: {\r\n    float: 'left',\r\n    // not too large, to keep place for the (sometimes long) item labels\r\n    width: 30,\r\n    lineHeight: '16px',\r\n  },\r\n  checkbox: {\r\n    marginLeft: `-${theme.spacing(1.5)}px`,\r\n  },\r\n  nameContainer: {\r\n    flex: 1,\r\n    lineHeight: '16px',\r\n  },\r\n  name: {\r\n    lineHeight: '18px',\r\n  },\r\n  nameContainerLISTING: {\r\n    width: 'calc(100% - 73px)',\r\n  },\r\n  nameContainerPRICE: {\r\n    width: 'calc(100% - 118px)',\r\n  },\r\n  nameContainerSELECTION: {\r\n    width: 'calc(100% - 105px)',\r\n    height: theme.spacing(4.5),\r\n    marginTop: theme.spacing(2),\r\n\r\n    // in SELECTION mode, no need to see the full label of the item\r\n    // we put ellipsis after 2 lines\r\n    // /!\\ in SELECTION mode, when one item is selected, a link \"Divide the quantity\" appears\r\n    // the layout should be ok with this link displayed too\r\n    '& $name': {\r\n      overflow: 'hidden',\r\n      display: '-webkit-box',\r\n      textOverflow: 'ellipsis',\r\n      '-webkit-line-clamp': 2,\r\n      '-webkit-box-orient': 'vertical',\r\n    },\r\n  },\r\n  dividerLabel: {\r\n    position: 'relative',\r\n    top: -1 * theme.spacing(0.5),\r\n    color: theme.palette.primary.main,\r\n  },\r\n  entryLabel: {\r\n    cursor: 'pointer',\r\n  },\r\n  dividerButton: {\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    margin: 0,\r\n    font: 'inherit',\r\n    textAlign: 'left',\r\n    cursor: 'pointer',\r\n  },\r\n  modifyShareButton: {\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: 0,\r\n    margin: 0,\r\n    font: 'inherit',\r\n    textAlign: 'left',\r\n    cursor: 'pointer',\r\n    marginTop: theme.spacing(0.25),\r\n  },\r\n  price: {\r\n    // we should be ok with prices like \"CHF 23.50\" (\"CHF\" makes it longer than \"€\")\r\n    maxWidth: 90,\r\n  },\r\n  priceShared: {\r\n    // when shared, we display the price and base price, we need more space.\r\n    maxWidth: 110,\r\n  },\r\n  priceSELECTION: {\r\n    height: theme.spacing(4.5),\r\n    marginTop: theme.spacing(1.5),\r\n  },\r\n  grey: {\r\n    color: theme.pmt.colors.grey91,\r\n  },\r\n  modifyShareLabel: {\r\n    float: 'left',\r\n    marginLeft: theme.spacing(1.5),\r\n    color: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\nconst Entry = ({ entry, item, type, selected, addAction, removeAction, divideAction, classes }) => {\r\n  const isSelection = type === Type.SELECTION\r\n  const checkboxId = isSelection ? `check-list-entry-${entry.id}` : null\r\n\r\n  const handleToggle = () => (!selected ? addAction(entry) : removeAction(entry))\r\n\r\n  // divide/modify-quantity are rendered as real <button>s nested inside the\r\n  // <label> below: we must stop the click from also toggling the checkbox\r\n  // (a11y: keep them independently operable at the keyboard too, since\r\n  // buttons are natively focusable/activatable with Enter/Space)\r\n  const handleDivideClick = e => {\r\n    e.preventDefault()\r\n    e.stopPropagation()\r\n    divideAction(entry)\r\n  }\r\n\r\n  const content = (\r\n    <React.Fragment>\r\n      {type !== Type.SELECTION && (\r\n        <TypographyCustom type=\"144\" className={classes.quantity} aria-hidden=\"true\">\r\n          {entry.quantity}\r\n          &nbsp;\r\n          <span className={classes.grey}>x</span>\r\n        </TypographyCustom>\r\n      )}\r\n      {isSelection && (\r\n        <Checkbox\r\n          id={checkboxId}\r\n          className={classes.checkbox}\r\n          color=\"primary\"\r\n          checked={selected}\r\n          onChange={handleToggle}\r\n          inputProps={{\r\n            'aria-label': entry.name,\r\n          }}\r\n        />\r\n      )}\r\n      <div className={classNames(classes.nameContainer, classes[`nameContainer${type}`])}>\r\n        <TypographyCustom type=\"144\" className={classes.name}>\r\n          {entry.name}\r\n        </TypographyCustom>\r\n        {selected && item && !item.share.enabled ? (\r\n          <button type=\"button\" className={classes.dividerButton} onClick={handleDivideClick}>\r\n            <TypographyCustom type=\"124\" component=\"span\" className={classes.dividerLabel}>\r\n              {tr('web_customer.components.checklist.divide')}\r\n            </TypographyCustom>\r\n          </button>\r\n        ) : (\r\n          selected &&\r\n          item &&\r\n          item.share.enabled && (\r\n            <button type=\"button\" className={classes.modifyShareButton} onClick={handleDivideClick}>\r\n              <TypographyCustom type=\"127\" component=\"span\" className=\"u-floatLeft\">\r\n                x{item.share.multiplier}/{item.share.divider}\r\n              </TypographyCustom>\r\n              <TypographyCustom type=\"124\" component=\"span\" className={classes.modifyShareLabel}>\r\n                {tr('web_customer.components.checklist.modify_quantity')}\r\n              </TypographyCustom>\r\n            </button>\r\n          )\r\n        )}\r\n      </div>\r\n      {type !== Type.LISTING && (\r\n        <React.Fragment>\r\n          {selected && item && item.share.enabled ? (\r\n            <TypographyCustom\r\n              type=\"184\"\r\n              className={classNames(classes.price, classes[`price${type}`], classes.priceShared)}\r\n              align=\"right\"\r\n            >\r\n              <Price\r\n                hasCartModifier\r\n                columnReverse\r\n                baseValue={item.absoluteTotalFormattedWithCurrency}\r\n                value={item.totalFormattedWithCurrency}\r\n                classes={{\r\n                  root: 'u-floatRight',\r\n                  baseValue: classes.baseValue,\r\n                }}\r\n              />\r\n            </TypographyCustom>\r\n          ) : (\r\n            <TypographyCustom\r\n              type=\"184\"\r\n              className={classNames(classes.price, classes[`price${type}`])}\r\n              align=\"right\"\r\n            >\r\n              <Price value={entry.priceWithCurrencyFormatted} classes={{ root: 'u-floatRight' }} />\r\n            </TypographyCustom>\r\n          )}\r\n        </React.Fragment>\r\n      )}\r\n    </React.Fragment>\r\n  )\r\n\r\n  // in SELECTION mode, the whole row is a <label> bound to the checkbox\r\n  // (native, keyboard + screen-reader accessible: clicking/activating\r\n  // anywhere in the row toggles the checkbox, without a non-semantic\r\n  // onClick handler on a plain <div>)\r\n  return isSelection ? (\r\n    <label\r\n      htmlFor={checkboxId}\r\n      className={classNames(classes.entry, classes[`entry${type}`], classes.entryLabel)}\r\n    >\r\n      {content}\r\n    </label>\r\n  ) : (\r\n    <div className={classNames(classes.entry, classes[`entry${type}`])}>{content}</div>\r\n  )\r\n}\r\n\r\n/**\r\n * Generate a check list for different payment layouts\r\n */\r\n\r\nclass CheckList extends React.PureComponent {\r\n  addEntry = entry => {\r\n    this.props.addEntryToPayment(entry)\r\n  }\r\n\r\n  removeEntry = entry => {\r\n    this.props.removeEntryFromPayment(entry)\r\n  }\r\n\r\n  displayChooseEntryDividerDialog = entry => {\r\n    if (!isUndefined(this.props.payment.items[entry.id])) {\r\n      this.props.displayChooseEntryDividerDialog(entry, this.props.payment.items[entry.id])\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { check, payment, type, classes, ...otherProps } = this.props\r\n\r\n    return (\r\n      <div className={classes.root} {...otherProps}>\r\n        {check && (\r\n          <React.Fragment>\r\n            {check.entries.map((entry, index) => (\r\n              <Entry\r\n                key={index}\r\n                entry={entry}\r\n                selected={\r\n                  !isNil(payment) && existsOnArray(payment.items, item => item.id === entry.id)\r\n                }\r\n                item={(payment && payment.items[entry.id]) || null}\r\n                type={type}\r\n                addAction={this.addEntry}\r\n                removeAction={this.removeEntry}\r\n                divideAction={this.displayChooseEntryDividerDialog}\r\n                classes={classes}\r\n              />\r\n            ))}\r\n          </React.Fragment>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nCheckList.propTypes = {\r\n  payment: PropTypes.object,\r\n}\r\n\r\nCheckList.defaultProps = {\r\n  payment: null,\r\n}\r\n\r\nconst Type = {\r\n  LISTING: 'LISTING',\r\n  PRICE: 'PRICE',\r\n  SELECTION: 'SELECTION',\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nconst CheckListComponent = compose(\r\n  connect(mapStateToProps, {\r\n    addEntryToPayment,\r\n    removeEntryFromPayment,\r\n    displayChooseEntryDividerDialog,\r\n  }),\r\n  withStyles(styles)\r\n)(CheckList)\r\n\r\nCheckListComponent.Type = Type\r\n\r\nexport default CheckListComponent\r\n","import React, { Fragment } from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport compose from 'recompose/compose'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport classNames from 'classnames'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport IconButton from 'pmt-ui/IconButton'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport MessageBlock from 'pmt-ui/MessageBlock'\r\nimport CloseIcon from 'pmt-ui/svg-icons/navigation/close'\r\nimport Audit from 'pmt-ui/svg-icons/other/audit'\r\nimport ShoppingCart from 'pmt-ui/svg-icons/action/shopping-cart'\r\nimport CreditCard from 'pmt-ui/svg-icons/action/credit-card'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles, fade, darken } from 'pmt-ui/styles'\r\n\r\nimport { Button } from '../../../components/Button'\r\nimport CheckList from '../../../components/payment/CheckList'\r\nimport { ButtonLink } from '../../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    position: 'relative',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  rootFill: {\r\n    flex: 1,\r\n    minHeight: 0,\r\n  },\r\n  rootExpanded: {\r\n    position: 'fixed',\r\n    top: 0,\r\n    bottom: 0,\r\n    left: 0,\r\n    right: 0,\r\n    zIndex: theme.zIndex.modal,\r\n    background: theme.pmt.colors.white,\r\n    padding: theme.spacing(2),\r\n  },\r\n  card: {\r\n    position: 'relative',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flexGrow: 0,\r\n    flexShrink: 0,\r\n    background: theme.pmt.colors.white,\r\n    border: `1px solid ${fade(theme.palette.primary.main, 0.12)}`,\r\n    borderRadius: theme.spacing(2),\r\n    padding: theme.spacing(2),\r\n    boxShadow: '0 2px 10px rgba(0, 0, 0, 0.04)',\r\n  },\r\n  cardFill: {\r\n    flex: 1,\r\n    minHeight: 0,\r\n    flexShrink: 1,\r\n  },\r\n  cardExpanded: {\r\n    height: '100%',\r\n    border: 'none',\r\n    boxShadow: 'none',\r\n  },\r\n  cardHeader: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    flexShrink: 0,\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  expandButton: {\r\n    border: 0,\r\n    padding: 0,\r\n    background: 'none',\r\n    color: 'inherit',\r\n    font: 'inherit',\r\n    cursor: 'pointer',\r\n    '&:focus': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n    },\r\n  },\r\n  cardHeaderIcon: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    width: theme.spacing(4),\r\n    height: theme.spacing(4),\r\n    marginRight: theme.spacing(1),\r\n    borderRadius: '50%',\r\n    backgroundColor: fade(theme.palette.primary.main, 0.1),\r\n    color: theme.palette.primary.main,\r\n    '& svg': {\r\n      width: 18,\r\n      height: 18,\r\n    },\r\n  },\r\n  hasError: {\r\n    flex: 1,\r\n  },\r\n  checkErrorMessage: {\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  errorBlock: {\r\n    justifyContent: 'center',\r\n    textAlign: 'center',\r\n  },\r\n  buttonTryAgain: {\r\n    marginTop: theme.spacing(1),\r\n  },\r\n  checkContent: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    position: 'relative',\r\n  },\r\n  checkContentExpanded: {\r\n    flex: 1,\r\n    minHeight: 0,\r\n    overflow: 'hidden',\r\n  },\r\n  checkContentFill: {\r\n    flex: 1,\r\n    minHeight: 0,\r\n    justifyContent: 'center',\r\n  },\r\n  close: {\r\n    width: 'auto',\r\n    height: 'auto',\r\n    marginLeft: 'auto',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  entries: {\r\n    position: 'relative',\r\n    maxHeight: 'min(230px, 34vh)',\r\n    overflowY: 'auto',\r\n    '&:focus': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: -2,\r\n    },\r\n  },\r\n  entriesExpanded: {\r\n    flex: 1,\r\n    minHeight: 0,\r\n    maxHeight: 'none',\r\n    overflow: 'auto',\r\n  },\r\n  entriesFill: {\r\n    flex: 1,\r\n    minHeight: 0,\r\n    maxHeight: 'none',\r\n    overflowY: 'auto',\r\n  },\r\n  mask: {\r\n    position: 'absolute',\r\n    left: 0,\r\n    bottom: 0,\r\n    width: '100%',\r\n    height: 1,\r\n    boxShadow: `1px 1px 40px 20px ${theme.pmt.colors.white}`,\r\n    background: theme.pmt.colors.white,\r\n    opacity: 0.9,\r\n  },\r\n  buttons: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flexShrink: 0,\r\n    marginTop: theme.spacing(2.5),\r\n  },\r\n  buttonOrder: {\r\n    width: '100%',\r\n    marginBottom: theme.spacing(1.5),\r\n  },\r\n  buttonPay: {\r\n    width: '100%',\r\n  },\r\n  buttonPayActive: {\r\n    backgroundColor: `${theme.palette.primary.dark} !important`,\r\n    '&:hover': {\r\n      backgroundColor: `${darken(theme.palette.primary.dark, 0.1)} !important`,\r\n    },\r\n  },\r\n  buttonIcon: {\r\n    width: 20,\r\n    height: 20,\r\n    marginRight: theme.spacing(1),\r\n  },\r\n  emptyMessage: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    textAlign: 'center',\r\n    padding: `${theme.spacing(1)}px 0`,\r\n  },\r\n  checkList: {\r\n    paddingTop: theme.spacing(1),\r\n  },\r\n})\r\n\r\nconst OrderUnavailableBecauseClosedMessageBlock = ({ nextOpening, classes }) => {\r\n  return (\r\n    <>\r\n      <MessageBlock text={tr('web_customer.restaurant.currently_closed')} classes={classes} />\r\n\r\n      {nextOpening && (\r\n        <MessageBlock\r\n          text={\r\n            nextOpening.isCurrentDay\r\n              ? tr('web_customer.restaurant.closed_today_until', {\r\n                  hour: nextOpening.nextOpeningHour.formattedOpening,\r\n                })\r\n              : tr('web_customer.restaurant.closed_until', {\r\n                  day: nextOpening.dayName,\r\n                  hour: nextOpening.nextOpeningHour.formattedOpening,\r\n                })\r\n          }\r\n          classes={classes}\r\n        />\r\n      )}\r\n    </>\r\n  )\r\n}\r\n\r\nclass Check extends React.Component {\r\n  render() {\r\n    const {\r\n      classes,\r\n      restaurant,\r\n      canOrder,\r\n      canPay,\r\n      reloadCheck,\r\n      onRedirectToOrder,\r\n      onRedirectToPayment,\r\n      fillAvailableSpace,\r\n      ui,\r\n      updateUI,\r\n    } = this.props\r\n    const posCheckId = getQueryParam('posCheckId')\r\n\r\n    // TEMPORARY PREVIEW HELPER — safe to delete any time.\r\n    // Add `?previewFakeCheck=N` to the URL to visually preview the\r\n    // \"filled check\" layout with N fake placeholder entries (e.g.\r\n    // `previewFakeCheck=8`). Has zero effect otherwise, and does not touch\r\n    // any real data fetching / business logic.\r\n    const previewFakeCheckCount = parseInt(getQueryParam('previewFakeCheck'), 10)\r\n    const isPreviewingFakeCheck = previewFakeCheckCount > 0\r\n    const check = isPreviewingFakeCheck\r\n      ? {\r\n          id: this.props.check ? this.props.check.id : 'preview-fake-check',\r\n          entries: Array.from({ length: previewFakeCheckCount }, (_, index) => ({\r\n            name: `Article ${index + 1}`,\r\n            quantity: 1,\r\n            priceWithCurrencyFormatted: '5,00 €',\r\n          })),\r\n          totalWithoutTipsFormatted: `${(previewFakeCheckCount * 5).toFixed(2).replace('.', ',')} €`,\r\n        }\r\n      : this.props.check\r\n    // ignore any real fetch error/loading state while previewing so the\r\n    // fake entries are actually displayed instead of the error/empty message\r\n    const checkError = isPreviewingFakeCheck ? null : this.props.checkError\r\n    const isFetchingCheck = isPreviewingFakeCheck ? false : this.props.isFetchingCheck\r\n\r\n    const isEmptyCheck = check && isEmpty(check.entries)\r\n\r\n    const orderUnavailableBecauseClosed =\r\n      this.props.restaurant &&\r\n      this.props.restaurant.status === 'ENABLED' &&\r\n      this.props.restaurant.hasFeatureOrder &&\r\n      this.props.restaurant.orderSettings.onSiteSettings.enabled &&\r\n      !(\r\n        this.props.restaurant.orderSettings.isCurrentlyOpen ||\r\n        this.props.orderAppConfig?.bypassOpeningHours\r\n      )\r\n\r\n    const canExpand = check && !isEmpty(check.entries)\r\n\r\n    const isNoCheckYetOnTable =\r\n      isEmptyCheck || (checkError && checkError.code === '403' && canOrder)\r\n    const showCheckHeader = !isNoCheckYetOnTable\r\n\r\n    const orderDisabled = isEmptyCheck ? !canOrder : !canOrder || (posCheckId && !check)\r\n    const payDisabled = isEmptyCheck ? true : !canPay || !check\r\n    const shouldFill = fillAvailableSpace && !ui.expandCheck\r\n\r\n    const isExpandTrigger = canExpand && !ui.expandCheck\r\n    const handleExpand = () => isExpandTrigger && updateUI({ expandCheck: true })\r\n\r\n    return (\r\n      <div\r\n        className={classNames(classes.root, {\r\n          [classes.rootExpanded]: ui.expandCheck,\r\n          [classes.rootFill]: shouldFill,\r\n        })}\r\n      >\r\n        <LoadingBlockWrapper show={isFetchingCheck} />\r\n        {!isFetchingCheck && (\r\n          <Fragment>\r\n            <div\r\n              className={classNames(classes.card, {\r\n                [classes.cardExpanded]: ui.expandCheck,\r\n                [classes.cardFill]: shouldFill,\r\n              })}\r\n              onClick={handleExpand}\r\n            >\r\n              {showCheckHeader && (\r\n                <div className={classes.cardHeader}>\r\n                  <div className={classes.cardHeaderIcon}>\r\n                    <Audit aria-hidden=\"true\" />\r\n                  </div>\r\n                  {isExpandTrigger ? (\r\n                    <button\r\n                      type=\"button\"\r\n                      className={classes.expandButton}\r\n                      aria-label={tr('web_customer.restaurant.check.expand', {\r\n                        fr: \"Afficher le détail de l'addition\",\r\n                        context: '',\r\n                        desc: 'Accessible label for the expandable check card',\r\n                      })}\r\n                      onClick={e => {\r\n                        e.stopPropagation()\r\n                        handleExpand()\r\n                      }}\r\n                    >\r\n                      <TypographyCustom type=\"167\" component=\"span\">\r\n                        {tr('web_customer.restaurant.check.title')}\r\n                      </TypographyCustom>\r\n                    </button>\r\n                  ) : (\r\n                    <TypographyCustom type=\"167\">\r\n                      {tr('web_customer.restaurant.check.title')}\r\n                    </TypographyCustom>\r\n                  )}\r\n                  {ui.expandCheck && (\r\n                    <IconButton\r\n                      className={classes.close}\r\n                      aria-label={tr('global.a11y.close', {\r\n                        fr: 'Fermer',\r\n                        context: '',\r\n                        desc: 'Accessible label for the close button',\r\n                      })}\r\n                      onClick={e => {\r\n                        e.stopPropagation()\r\n                        e.preventDefault()\r\n                        updateUI({ expandCheck: false })\r\n                      }}\r\n                    >\r\n                      <CloseIcon aria-hidden=\"true\" />\r\n                    </IconButton>\r\n                  )}\r\n                </div>\r\n              )}\r\n\r\n              <div\r\n                className={classNames(classes.checkContent, {\r\n                  [classes.checkContentExpanded]: ui.expandCheck,\r\n                  [classes.checkContentFill]: shouldFill,\r\n                })}\r\n              >\r\n                {checkError && !isNoCheckYetOnTable ? (\r\n                  <div className={classes.hasError}>\r\n                    <TypographyCustom type=\"124\" className={classes.checkErrorMessage}>\r\n                      {orderUnavailableBecauseClosed ? (\r\n                        <OrderUnavailableBecauseClosedMessageBlock\r\n                          nextOpening={restaurant.orderSettings.nextOpening}\r\n                          classes={{ container: classes.errorBlock }}\r\n                        />\r\n                      ) : (\r\n                        <ErrorBlock\r\n                          error={checkError}\r\n                          mode={ErrorBlock.Mode.CUSTOM}\r\n                          customElement={\r\n                            <MessageBlock classes={{ container: classes.errorBlock }} />\r\n                          }\r\n                        />\r\n                      )}\r\n                    </TypographyCustom>\r\n                    <ButtonLink\r\n                      color=\"primary\"\r\n                      className={classes.buttonTryAgain}\r\n                      onClick={\r\n                        orderUnavailableBecauseClosed\r\n                          ? () => {\r\n                              window.location.reload()\r\n                            }\r\n                          : reloadCheck\r\n                      }\r\n                    >\r\n                      <TypographyCustom type=\"124\" skipColor>\r\n                        {orderUnavailableBecauseClosed\r\n                          ? tr('web_customer.check.refresh')\r\n                          : tr('web_customer.restaurant.try_again')}\r\n                      </TypographyCustom>\r\n                    </ButtonLink>\r\n                  </div>\r\n                ) : isNoCheckYetOnTable ? (\r\n                  <div className={classes.emptyMessage}>\r\n                    <MessageBlock\r\n                      classes={{ container: classes.errorBlock }}\r\n                      text={tr('web_customer.restaurant.no_current_check_please_order')}\r\n                    />\r\n                  </div>\r\n                ) : (\r\n                  check && (\r\n                    <div\r\n                      className={classNames(classes.entries, {\r\n                        [classes.entriesExpanded]: ui.expandCheck,\r\n                        [classes.entriesFill]: shouldFill,\r\n                      })}\r\n                      role=\"region\"\r\n                      aria-label={tr('web_customer.restaurant.check.title')}\r\n                      tabIndex={0}\r\n                    >\r\n                      <CheckList\r\n                        check={check}\r\n                        type={CheckList.Type.LISTING}\r\n                        classes={{ root: classes.checkList }}\r\n                      />\r\n                    </div>\r\n                  )\r\n                )}\r\n                {ui.expandCheck && <div className={classes.mask} />}\r\n              </div>\r\n            </div>\r\n\r\n            {!ui.expandCheck && (\r\n              <div className={classes.buttons}>\r\n                {restaurant.hasFeatureOrder && (\r\n                  <Button\r\n                    className={classes.buttonOrder}\r\n                    // when a posCheckId has been specified, but the check can't be retrieved,\r\n                    // we don't want to allow user to order\r\n                    disabled={orderDisabled}\r\n                    onClick={onRedirectToOrder}\r\n                  >\r\n                    <ShoppingCart className={classes.buttonIcon} aria-hidden=\"true\" />\r\n                    <TypographyCustom type=\"167\" skipColor align=\"center\">\r\n                      {check && !isEmpty(check.entries)\r\n                        ? tr('web_customer.restaurant.order_button_with_entries')\r\n                        : tr('web_customer.restaurant.order_button')}\r\n                    </TypographyCustom>\r\n                  </Button>\r\n                )}\r\n                {restaurant.hasFeaturePayment && (\r\n                  <Button\r\n                    className={classNames(classes.buttonPay, {\r\n                      [classes.buttonPayActive]: !payDisabled,\r\n                    })}\r\n                    disabled={payDisabled}\r\n                    onClick={e => onRedirectToPayment(e, check.id)}\r\n                  >\r\n                    <CreditCard className={classes.buttonIcon} aria-hidden=\"true\" />\r\n                    <TypographyCustom type=\"167\" skipColor align=\"center\">\r\n                      {tr('web_customer.restaurant.pay_button_small')}\r\n                    </TypographyCustom>\r\n                  </Button>\r\n                )}\r\n              </div>\r\n            )}\r\n          </Fragment>\r\n        )}\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      expandCheck: false,\r\n      expandCheckTop: null,\r\n    },\r\n  }),\r\n  withStyles(styles)\r\n)(Check)\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\nconst TNumber = ({ classes, tableNumber }) => (\r\n  <div className={classes.root}>\r\n    <TypographyCustom type={167} skipColor>\r\n      {tr('web_customer.restaurant.table', {\r\n        number: tableNumber,\r\n      })}\r\n    </TypographyCustom>\r\n  </div>\r\n)\r\n\r\nconst TableNumber = ({ classes, check, canPay }) => {\r\n  if (canPay && check?.tableNumber) {\r\n    return <TNumber classes={classes} tableNumber={check.tableNumber} />\r\n  }\r\n\r\n  const tableId = getQueryParam('tableId')\r\n\r\n  return tableId && <TNumber classes={classes} tableNumber={tableId} />\r\n}\r\n\r\nexport default withStyles(styles)(TableNumber)\r\n","import React, { Fragment } from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { CheckContainer } from 'pmt-modules/payment'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Table from 'pmt-ui/svg-icons/pmt/Table'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport { Button } from 'app/components/Button'\r\nimport BrandedCardLayout from 'app/components/BrandedCardLayout'\r\n\r\nimport { Check, TableNumber } from './components'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    background: theme.pmt.colors.greyBackground,\r\n    height: '100%',\r\n    width: '100%',\r\n  },\r\n  shopName: {\r\n    whiteSpace: 'pre-line',\r\n    fontFamily: \"Georgia, 'Times New Roman', serif\",\r\n  },\r\n  tableNumberWrapper: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    marginTop: theme.spacing(3),\r\n  },\r\n  content: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n  },\r\n  contentFull: {\r\n    flexGrow: 1,\r\n    minHeight: 0,\r\n  },\r\n  cantPayFooter: {\r\n    flexShrink: 0,\r\n    '& button': {\r\n      width: '100%',\r\n    },\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  canOrder,\r\n  canPay,\r\n  classes,\r\n  frontAppConfig,\r\n  orderAppConfig,\r\n  isFetchingRestaurant,\r\n  restaurant,\r\n  onRedirectToOrder,\r\n  onRedirectToPayment,\r\n}) => {\r\n  const posCheckId = getQueryParam('posCheckId')\r\n  const tableId = getQueryParam('tableId')\r\n  const logoPath = frontAppConfig.theme.logo.path || (restaurant && restaurant.logo)\r\n  const backgroundImagePath = frontAppConfig.theme.backgroundUrl\r\n  const hasBackgroundImage = Boolean(backgroundImagePath)\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <LoadingBlockWrapper show={isFetchingRestaurant || !restaurant} />\r\n\r\n      {restaurant && (posCheckId || tableId) && (\r\n        <CheckContainer\r\n          forceReload\r\n          restaurantId={restaurant.id}\r\n          posCheckId={posCheckId}\r\n          tableNumber={tableId}\r\n        >\r\n          {({ check, checkError, isFetchingCheck, reloadCheck }) => (\r\n            <BrandedCardLayout\r\n              backgroundImagePath={backgroundImagePath}\r\n              logoPath={logoPath}\r\n              fallbackIcon={<Table aria-hidden=\"true\" />}\r\n              growCardWhenNoImage\r\n              headerInfo={\r\n                <Fragment>\r\n                  <TypographyCustom type={267} component=\"h1\" className={classes.shopName}>\r\n                    {restaurant.name}\r\n                  </TypographyCustom>\r\n                  <div className={classes.tableNumberWrapper}>\r\n                    <TableNumber check={check} canPay={canPay} />\r\n                  </div>\r\n                </Fragment>\r\n              }\r\n            >\r\n              <div\r\n                className={classNames(classes.content, {\r\n                  [classes.contentFull]: !hasBackgroundImage,\r\n                })}\r\n              >\r\n                {!canPay ? (\r\n                  <div className={classes.cantPayFooter}>\r\n                    {restaurant.hasFeatureOrder && (\r\n                      <Button disabled={!canOrder} onClick={onRedirectToOrder}>\r\n                        <TypographyCustom type=\"187\" skipColor>\r\n                          {tr('web_customer.restaurant.order_button')}\r\n                        </TypographyCustom>\r\n                      </Button>\r\n                    )}\r\n                  </div>\r\n                ) : (\r\n                  <Check\r\n                    check={check}\r\n                    checkError={checkError}\r\n                    isFetchingCheck={isFetchingCheck}\r\n                    reloadCheck={reloadCheck}\r\n                    restaurant={restaurant}\r\n                    canOrder={canOrder}\r\n                    canPay={canPay}\r\n                    fillAvailableSpace={!hasBackgroundImage}\r\n                    onRedirectToOrder={onRedirectToOrder}\r\n                    onRedirectToPayment={onRedirectToPayment}\r\n                  />\r\n                )}\r\n              </div>\r\n            </BrandedCardLayout>\r\n          )}\r\n        </CheckContainer>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { withAppConfig, checkAccessSecurityModes } from 'pmt-modules/appConfig'\r\nimport { getApiConsumer } from 'pmt-modules/environment'\r\nimport { getCurrentLanguageWithoutRegionCode } from 'pmt-modules/i18n/utils'\r\nimport { resetPayment, resetPostPayment } from 'pmt-modules/payment'\r\nimport { withRestaurant } from 'pmt-modules/restaurant/components'\r\nimport { redirectTo, redirectToExternal, getRoute, getOrderPluginUrl } from 'pmt-modules/routing'\r\n\r\nimport { withTheme } from 'pmt-ui/styles'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport Page from '../../components/Page'\r\nimport View from './View'\r\n\r\n/**\r\n * https://paymytable.atlassian.net/browse/PP-711\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5b6162799035c6536167c2f1\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5b6162797d6f9ad50928862a\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5ba9ffe305c2eba0d2b5305b\r\n */\r\nclass RestaurantPage extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!this.hasDefinedTableId()) {\r\n      this.props.redirectTo(getRoute('PAYMENT_TABLE_NUMBER'), {\r\n        restaurantId: this.props.restaurantId,\r\n      })\r\n    }\r\n\r\n    // clean payment state when returning to home\r\n    this.props.resetPayment()\r\n    this.props.resetPostPayment()\r\n  }\r\n\r\n  canOrder = () =>\r\n    this.props.restaurant &&\r\n    this.props.restaurant.status === 'ENABLED' &&\r\n    this.props.restaurant.hasFeatureOrder &&\r\n    (this.props.restaurant.orderSettings.isCurrentlyOpen ||\r\n      this.props.orderAppConfig?.bypassOpeningHours) &&\r\n    this.props.restaurant.orderSettings.onSiteSettings.enabled &&\r\n    this.hasDefinedTableId()\r\n\r\n  canPay = () =>\r\n    this.props.restaurant && this.props.restaurant.hasFeaturePayment && this.hasDefinedTableId()\r\n\r\n  hasDefinedTableId = () => {\r\n    const posCheckId = getQueryParam('posCheckId')\r\n    const tableId = getQueryParam('tableId')\r\n\r\n    // when the app token is invalid, we don't have a securityAppConfig\r\n    return this.props.securityAppConfig && this.props.securityAppConfig.checkAccessSecurity\r\n      ? (this.props.securityAppConfig.checkAccessSecurity.mode ===\r\n          checkAccessSecurityModes.POS_CHECK_ID &&\r\n          posCheckId) ||\r\n          (this.props.securityAppConfig.checkAccessSecurity.mode ===\r\n            checkAccessSecurityModes.TABLE_NUMBER &&\r\n            tableId)\r\n      : tableId\r\n  }\r\n\r\n  handleRedirectToPayment = (e, checkId) => {\r\n    e.stopPropagation()\r\n\r\n    this.props.redirectTo(getRoute('PAYMENT_CHECK_VIEW'), {\r\n      restaurantId: this.props.restaurant.id,\r\n      checkId,\r\n    })\r\n  }\r\n\r\n  handleRedirectToOrder = e => {\r\n    e.stopPropagation()\r\n\r\n    let url = getOrderPluginUrl()\r\n    let queryParams = {\r\n      l: getCurrentLanguageWithoutRegionCode(),\r\n    }\r\n\r\n    const tableId = getQueryParam('tableId')\r\n    if (tableId) {\r\n      queryParams.tableNumber = tableId\r\n    }\r\n\r\n    const posCheckId = getQueryParam('posCheckId')\r\n    if (posCheckId) {\r\n      queryParams.posCheckId = posCheckId\r\n    }\r\n\r\n    // add app token to the order plugin url\r\n    const at = getQueryParam('at')\r\n    if (at) {\r\n      queryParams.at = at\r\n    }\r\n\r\n    if (!isNil(this.props.frontAppConfig) && !isNil(this.props.frontAppConfig.orderUrl)) {\r\n      url = this.props.frontAppConfig.orderUrl\r\n\r\n      if (url.indexOf(':restaurantId') > -1) {\r\n        url = url.replace(':restaurantId', this.props.restaurantId)\r\n      }\r\n    } else {\r\n      // keep these params for retro-compatibility\r\n      const loginMode = getQueryParam('loginMode')\r\n\r\n      queryParams = {\r\n        ...queryParams,\r\n        restaurantId: this.props.restaurantId,\r\n        apiConsumer: getApiConsumer(),\r\n        from: 'webapp',\r\n        skipLayout: '[5,1]',\r\n        modes: '[0]',\r\n        isAsap: 'true',\r\n        mainColor: this.props.theme.palette.primary.main.substring(1),\r\n        loginMode: loginMode ? loginMode : 'light',\r\n      }\r\n    }\r\n\r\n    this.props.redirectToExternal(url, queryParams)\r\n  }\r\n\r\n  render() {\r\n    const { isFetchingRestaurant, restaurant, frontAppConfig, orderAppConfig } = this.props\r\n\r\n    return (\r\n      <Page showHeader={false} padding=\"0\">\r\n        <View\r\n          canOrder={this.canOrder()}\r\n          canPay={this.canPay()}\r\n          frontAppConfig={frontAppConfig}\r\n          orderAppConfig={orderAppConfig}\r\n          isFetchingRestaurant={isFetchingRestaurant}\r\n          restaurant={restaurant}\r\n          onRedirectToOrder={this.handleRedirectToOrder}\r\n          onRedirectToPayment={this.handleRedirectToPayment}\r\n        />\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  withAppConfig,\r\nwithRestaurant,\r\n  connect(\r\n  () => ({}),\r\n  {\r\n    redirectTo,\r\n    redirectToExternal,\r\n    resetPayment,\r\n    resetPostPayment,\r\n  }\r\n))(withTheme(RestaurantPage))\r\n","import React from 'react'\r\n\r\nimport clsx from 'clsx'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport TextField from 'pmt-ui/TextField'\r\n\r\nconst styles = theme => ({\r\n  numberFieldContainer: {\r\n    display: 'inline-flex',\r\n    position: 'relative',\r\n  },\r\n  textFieldWithSymbol: {\r\n    '& > input': {\r\n      width: 'calc(100% - 10px)',\r\n    },\r\n  },\r\n  textField: {\r\n    display: 'block',\r\n  },\r\n  numberFieldSymbol: {\r\n    position: 'absolute',\r\n    top: 24,\r\n    right: 0,\r\n  },\r\n})\r\n\r\nconst NumberField = ({\r\n  value,\r\n  classes,\r\n  className,\r\n  symbol,\r\n  onChange,\r\n  min,\r\n  max,\r\n  pattern,\r\n  step,\r\n  withFixedDecimals = false,\r\n  autoComplete = null,\r\n  ...otherProps\r\n}) => (\r\n  <div\r\n    className={clsx(\r\n      classes.numberFieldContainer,\r\n      className,\r\n      otherProps.fullWidth && 'u-sizeFullWidth'\r\n    )}\r\n  >\r\n    <TextField\r\n      inputProps={{\r\n        autoComplete,\r\n        pattern: pattern || '\\\\d*',\r\n        step: step || '1',\r\n        className: clsx(classes.textField, symbol && classes.textFieldWithSymbol),\r\n      }}\r\n      value={value}\r\n      type=\"number\"\r\n      /* InputProps={{\r\n        inputProps: {\r\n          className: clsx(\r\n            classes.textField,\r\n            symbol && classes.textFieldWithSymbol\r\n          ),\r\n        },\r\n      }} */\r\n      onChange={event => {\r\n        let value = event.target.value ? parseFloat(event.target.value, 10) : ''\r\n        value = min !== null && min > value ? min : value\r\n        value = max !== null && max < value ? max : value\r\n        // if value has fixed decimals, render a fixed value, otherwise render it as is\r\n        // this is to be able to backspace on decimals\r\n        value =\r\n          withFixedDecimals && (value.toString().split('.')[1] || []).length > 2\r\n            ? value.toFixed(withFixedDecimals)\r\n            : value\r\n        onChange(event, value)\r\n      }}\r\n      {...otherProps}\r\n    />\r\n    {symbol && <span className={classes.numberFieldSymbol}>{symbol}</span>}\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(NumberField)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport ui from 'pmt-modules/reduxUi'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport MessageBlock from 'pmt-ui/MessageBlock'\r\nimport NumberField from 'pmt-ui/NumberField'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { Button } from '../../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    alignItems: 'center',\r\n  },\r\n  logo: {\r\n    marginTop: theme.spacing(6),\r\n    '&>img': {\r\n      maxWidth: 72,\r\n      maxHeight: 40,\r\n    },\r\n  },\r\n  title: {\r\n    marginTop: theme.spacing(2),\r\n    marginBottom: theme.spacing(5),\r\n    maxWidth: 260,\r\n    whiteSpace: 'pre-line',\r\n  },\r\n  numberField: {\r\n    textAlign: 'center',\r\n  },\r\n  caption: {\r\n    marginTop: theme.spacing(2),\r\n    color: theme.pmt.colors.grey91,\r\n    maxWidth: 280,\r\n  },\r\n  submit: {\r\n    width: '100%',\r\n    position: 'fixed',\r\n    bottom: 0,\r\n    borderRadius: 0,\r\n  },\r\n  checkErrorMessage: {\r\n    color: theme.pmt.status.error,\r\n    marginTop: theme.spacing(3),\r\n  },\r\n  errorBlock: {\r\n    justifyContent: 'center',\r\n    textAlign: 'center',\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  classes,\r\n  checkError,\r\n  frontAppConfig,\r\n  isFetchingCheck,\r\n  restaurant,\r\n  tableNumber,\r\n  onSubmit,\r\n  ui,\r\n  updateUI,\r\n}) => {\r\n  return (\r\n    <div className={classes.root}>\r\n      <LoadingBlockWrapper show={isFetchingCheck} />\r\n      <form\r\n        className={classes.root}\r\n        onSubmit={e => {\r\n          e.preventDefault()\r\n          onSubmit(ui.tableNumber || tableNumber)\r\n        }}\r\n      >\r\n        <div className={classes.logo}>\r\n          <img src={frontAppConfig.theme.logo.path || (restaurant && restaurant.logo)} alt=\"logo\" />\r\n        </div>\r\n\r\n        <TypographyCustom className={classes.title} type=\"207\" align=\"center\">\r\n          {tr('web_customer.table_number.title')}\r\n        </TypographyCustom>\r\n\r\n        <NumberField\r\n          autoFocus\r\n          inputProps={{\r\n            className: classes.numberField,\r\n          }}\r\n          value={ui.tableNumber || tableNumber}\r\n          placeholder={tr('web_customer.table_number.placeholder')}\r\n          onChange={(e, tableNumber) => updateUI({ tableNumber })}\r\n        />\r\n\r\n        <TypographyCustom className={classes.caption} type=\"124\">\r\n          {tr('web_customer.table_number.caption')}\r\n        </TypographyCustom>\r\n\r\n        <TypographyCustom type=\"124\" className={classes.checkErrorMessage}>\r\n          <ErrorBlock\r\n            error={checkError}\r\n            mode={ErrorBlock.Mode.CUSTOM}\r\n            customElement={<MessageBlock classes={{ container: classes.errorBlock }} />}\r\n          />\r\n        </TypographyCustom>\r\n\r\n        <Button type=\"submit\" className={classes.submit} disabled={!ui.tableNumber && !tableNumber}>\r\n          <TypographyCustom type=\"187\" skipColor>\r\n            {tr('web_customer.table_number.submit')}\r\n          </TypographyCustom>\r\n        </Button>\r\n      </form>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default compose(\r\n  ui({\r\n    state: {\r\n      tableNumber: null,\r\n    },\r\n  }),\r\n  withStyles(styles)\r\n)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { withRestaurant } from 'pmt-modules/restaurant/components'\r\nimport {\r\n  fetchCheckWithTableNumber,\r\n  getCheck,\r\n  isFetchingCheck,\r\n  getCheckError,\r\n} from 'pmt-modules/payment'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\n\r\nimport Page from '../../../components/Page'\r\nimport View from './View'\r\n\r\n/**\r\n * https://paymytable.atlassian.net/browse/PP-711\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5baca120fb8dcf563ffafee1\r\n */\r\nclass TableNumberPage extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!isEmpty(props.params.tableNumberId)) {\r\n      this.loadCheck(props.params.tableNumberId)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (this.props.params.tableNumberId) {\r\n      if (!this.props.check && nextProps.check) {\r\n        this.props.redirectTo(getRoute('PAYMENT_CHECK_VIEW'), {\r\n          restaurantId: nextProps.params.restaurantId,\r\n          checkId: nextProps.check.id,\r\n        })\r\n      }\r\n    } else if (\r\n      (!this.props.check && nextProps.check) ||\r\n      (!this.props.checkError && nextProps.checkError)\r\n    ) {\r\n      this.props.redirectTo(\r\n        getRoute('RESTAURANT'),\r\n        { restaurantId: nextProps.params.restaurantId },\r\n        { tableId: this.tableNumber }\r\n      )\r\n    }\r\n  }\r\n\r\n  handleSubmitTableNumber = tableNumber => this.loadCheck(tableNumber)\r\n\r\n  loadCheck = tableNumber => {\r\n    this.tableNumber = tableNumber\r\n    this.props.fetchCheckWithTableNumber(this.props.params.restaurantId, tableNumber)\r\n  }\r\n\r\n  render() {\r\n    return (\r\n      <Page>\r\n        <View\r\n          frontAppConfig={this.props.frontAppConfig}\r\n          isFetchingCheck={this.props.isFetchingCheck}\r\n          checkError={this.props.checkError}\r\n          restaurant={this.props.restaurant}\r\n          tableNumber={this.props.params.tableNumberId}\r\n          onSubmit={this.handleSubmitTableNumber}\r\n        />\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  check: getCheck(state),\r\n  checkError: getCheckError(state),\r\n  isFetchingCheck: isFetchingCheck(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withRestaurant,\r\nconnect(mapStateToProps, {\r\n  fetchCheckWithTableNumber,\r\n  redirectTo,\r\n}))(withRestaurant(TableNumberPage))\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Choose = props => (\r\n  <SvgIcon {...props}>\r\n    <path\r\n      d=\"M0.396825397,0 L17.3809524,5.55111512e-17 C17.600113,1.52519994e-17 17.7777778,0.177664782 17.7777778,0.396825397 L17.7777778,2.4156746 C17.7777778,2.63483522 17.600113,2.8125 17.3809524,2.8125 L0.396825397,2.8125 C0.177664782,2.8125 3.59906342e-16,2.63483522 3.33066907e-16,2.4156746 L-5.55111512e-17,0.396825397 C-8.23505858e-17,0.177664782 0.177664782,1.51281454e-16 0.396825397,1.11022302e-16 Z\"\r\n      id=\"Rectangle-2\"\r\n      opacity=\"0.501618304\"\r\n    />\r\n    <path\r\n      d=\"M2.61904762,5.0625 L19.6031746,5.0625 C19.8223352,5.0625 20,5.24016478 20,5.4593254 L20,7.4781746 C20,7.69733522 19.8223352,7.875 19.6031746,7.875 L2.61904762,7.875 C2.399887,7.875 2.22222222,7.69733522 2.22222222,7.4781746 L2.22222222,5.4593254 C2.22222222,5.24016478 2.399887,5.0625 2.61904762,5.0625 Z\"\r\n      id=\"Rectangle-2\"\r\n    />\r\n    <path\r\n      d=\"M0.396825397,10.125 L17.3809524,10.125 C17.600113,10.125 17.7777778,10.3026648 17.7777778,10.5218254 L17.7777778,12.5406746 C17.7777778,12.7598352 17.600113,12.9375 17.3809524,12.9375 L0.396825397,12.9375 C0.177664782,12.9375 3.59906342e-16,12.7598352 3.33066907e-16,12.5406746 L0,10.5218254 C-2.68394346e-17,10.3026648 0.177664782,10.125 0.396825397,10.125 Z\"\r\n      id=\"Rectangle-2\"\r\n      opacity=\"0.501618304\"\r\n    />\r\n    <path\r\n      d=\"M0.396825397,15.1875 L17.3809524,15.1875 C17.600113,15.1875 17.7777778,15.3651648 17.7777778,15.5843254 L17.7777778,17.6031746 C17.7777778,17.8223352 17.600113,18 17.3809524,18 L0.396825397,18 C0.177664782,18 3.59906342e-16,17.8223352 3.33066907e-16,17.6031746 L0,15.5843254 C-2.68394346e-17,15.3651648 0.177664782,15.1875 0.396825397,15.1875 Z\"\r\n      id=\"Rectangle-2\"\r\n      opacity=\"0.501618304\"\r\n    />\r\n  </SvgIcon>\r\n)\r\nChoose = pure(Choose)\r\nChoose.displayName = 'Choose'\r\nChoose.muiName = 'SvgIcon'\r\n\r\nexport default Choose\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Share = props => (\r\n  <SvgIcon {...props}>\r\n    <path\r\n      d=\"M18.1236747,11.094071 C18.1245571,11.0419865 18.125,10.989795 18.125,10.9375 C18.125,6.0370094 14.2353826,2.04498762 9.375,1.88028694 L9.375,11.25 L18.1197131,11.25 C18.1214706,11.198133 18.1227924,11.1461555 18.1236747,11.094071 C18.0401091,16.026925 14.0152853,20 9.0625,20 C4.05741945,20 0,15.9425805 0,10.9375 C0,5.93241945 4.05741945,1.875 9.0625,1.875 C14.0675805,1.875 18.125,5.93241945 18.125,10.9375 C18.125,10.9897953 18.1245571,11.0419871 18.1236747,11.0940719 Z\"\r\n      id=\"Combined-Shape\"\r\n      opacity=\"0.5\"\r\n    />\r\n    <path\r\n      d=\"M11.25,0.00528693677 C16.1103826,0.169987625 20,4.1620094 20,9.0625 C20,9.16708994 19.9982282,9.27126607 19.9947131,9.375 L11.25,9.375 L11.25,0.00528693677 Z\"\r\n      id=\"Combined-Shape\"\r\n    />\r\n  </SvgIcon>\r\n)\r\nShare = pure(Share)\r\nShare.displayName = 'Share'\r\nShare.muiName = 'SvgIcon'\r\n\r\nexport default Share\r\n","import React from 'react'\r\n\r\nimport { withStyles, fade } from 'pmt-ui/styles'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Price from 'pmt-ui/Price'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport Choose from 'pmt-ui/svg-icons/pmt/Choose'\r\nimport Share from 'pmt-ui/svg-icons/pmt/Share'\r\nimport CreditCard from 'pmt-ui/svg-icons/action/credit-card'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport CheckList from '../../../components/payment/CheckList'\r\nimport { Button } from '../../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    position: 'relative',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    minHeight: 0,\r\n    height: '100%',\r\n    background: theme.pmt.colors.greyBackground,\r\n    padding: theme.spacing(2),\r\n  },\r\n  listCard: {\r\n    position: 'relative',\r\n    flex: 1,\r\n    minHeight: 0,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    background: theme.pmt.colors.white,\r\n    border: `1px solid ${fade(theme.palette.primary.main, 0.12)}`,\r\n    borderRadius: theme.spacing(2),\r\n    boxShadow: '0 2px 10px rgba(0, 0, 0, 0.04)',\r\n    overflow: 'hidden',\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  checkList: {\r\n    flex: 1,\r\n    minHeight: 0,\r\n    overflowY: 'auto',\r\n    padding: theme.spacing(2),\r\n    '&:focus': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: -2,\r\n    },\r\n  },\r\n  checkListEntry: {\r\n    borderBottom: '1px solid rgba(0, 0, 0, 0.06)',\r\n    '&:last-child': {\r\n      borderBottom: 'none',\r\n    },\r\n  },\r\n  actionsCard: {\r\n    flexShrink: 0,\r\n    background: theme.pmt.colors.white,\r\n    border: `1px solid ${fade(theme.palette.primary.main, 0.12)}`,\r\n    borderRadius: theme.spacing(2),\r\n    boxShadow: '0 -2px 10px rgba(0, 0, 0, 0.04)',\r\n    padding: theme.spacing(2),\r\n  },\r\n  totalRow: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between',\r\n    paddingBottom: theme.spacing(1.5),\r\n    marginBottom: theme.spacing(1.5),\r\n    borderBottom: `1px solid ${theme.pmt.colors.grey91}`,\r\n  },\r\n  totalLabel: {\r\n    color: theme.pmt.colors.grey91,\r\n  },\r\n  totalPrice: {\r\n    color: theme.pmt.colors.grey91,\r\n  },\r\n  outstandingRow: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'space-between',\r\n    padding: `${theme.spacing(1.5)}px`,\r\n    borderRadius: theme.spacing(1.5),\r\n    background: fade(theme.palette.primary.main, 0.08),\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  outstandingLabel: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  outstandingPrice: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  button: {\r\n    width: '100%',\r\n    marginBottom: theme.spacing(1.5),\r\n    '&:last-child': {\r\n      marginBottom: 0,\r\n    },\r\n  },\r\n  buttonIcon: {\r\n    width: 20,\r\n    height: 20,\r\n    marginRight: theme.spacing(1),\r\n    color: theme.pmt.colors.white,\r\n  },\r\n})\r\n\r\n/**\r\n * @mockup N/A\r\n */\r\nconst View = ({\r\n  check,\r\n  isFetchingCheck,\r\n  onRedirectToTotality,\r\n  onRedirectToShare,\r\n  onRedirectToChoose,\r\n  classes,\r\n}) => {\r\n  return (\r\n    <div className={classes.root}>\r\n      <LoadingBlockWrapper show={isFetchingCheck} />\r\n\r\n\r\n      <div className={classes.listCard}>\r\n        <CheckList\r\n          check={check}\r\n          type={CheckList.Type.PRICE}\r\n          classes={{ root: classes.checkList, entry: classes.checkListEntry }}\r\n          role=\"region\"\r\n          aria-label={tr('web_customer.restaurant.check.title')}\r\n          tabIndex={0}\r\n        />\r\n      </div>\r\n\r\n      <div className={classes.actionsCard}>\r\n        <div className={classes.totalRow}>\r\n          <TypographyCustom type=\"147\" className={classes.totalLabel}>\r\n            {tr('web_customer.check.total_table')}\r\n          </TypographyCustom>\r\n          {check && (\r\n            <TypographyCustom type=\"187\" className={classes.totalPrice}>\r\n              <Price value={check.totalWithoutTipsFormatted} />\r\n            </TypographyCustom>\r\n          )}\r\n        </div>\r\n\r\n        <div className={classes.outstandingRow}>\r\n          <TypographyCustom type=\"187\" className={classes.outstandingLabel}>\r\n            {tr('web_customer.check.left_to_pay')}\r\n          </TypographyCustom>\r\n          {check && (\r\n            <TypographyCustom type=\"247\" className={classes.outstandingPrice}>\r\n              <Price value={check.outstandingBalanceFormatted} />\r\n            </TypographyCustom>\r\n          )}\r\n        </div>\r\n\r\n        {check && check.outstandingBalance > 0 && (\r\n          <React.Fragment>\r\n            <Button\r\n              onClick={onRedirectToTotality}\r\n              className={classes.button}\r\n              disabled={isFetchingCheck}\r\n            >\r\n              <CreditCard className={classes.buttonIcon} aria-hidden=\"true\" />\r\n              <TypographyCustom type=\"167\" skipColor align=\"center\">\r\n                {tr('web_customer.check.pay_rest')}\r\n              </TypographyCustom>\r\n            </Button>\r\n            <Grid container spacing={2}>\r\n              <Grid item xs={6}>\r\n                <Button\r\n                  onClick={onRedirectToShare}\r\n                  className={classes.button}\r\n                  disabled={isFetchingCheck}\r\n                >\r\n                  <Share className={classes.buttonIcon} aria-hidden=\"true\" />\r\n                  <TypographyCustom type=\"167\" skipColor align=\"center\">\r\n                    {tr('web_customer.check.mode.share')}\r\n                  </TypographyCustom>\r\n                </Button>\r\n              </Grid>\r\n              <Grid item xs={6}>\r\n                <Button\r\n                  onClick={onRedirectToChoose}\r\n                  className={classes.button}\r\n                  disabled={isFetchingCheck}\r\n                >\r\n                  <Choose className={classes.buttonIcon} aria-hidden=\"true\" />\r\n                  <TypographyCustom type=\"167\" skipColor align=\"center\">\r\n                    {tr('web_customer.check.mode.choose')}\r\n                  </TypographyCustom>\r\n                </Button>\r\n              </Grid>\r\n            </Grid>\r\n          </React.Fragment>\r\n        )}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { isRefreshingOauthToken } from 'pmt-modules/auth'\r\nimport CheckContainer from 'pmt-modules/payment/components/CheckContainer'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\nimport {\r\n  setPaymentTypeAll,\r\n  setPaymentTypeShare,\r\n  setPaymentTypeEntries,\r\n} from 'pmt-modules/payment'\r\n\r\nimport Page from '../../../components/Page'\r\n\r\nimport View from './View'\r\n\r\n/**\r\n * https://paymytable.atlassian.net/browse/PP-896\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5b61d7fb1b881f434d00e545\r\n */\r\nclass CheckPage extends React.Component {\r\n  handleRedirectToTotality = () => {\r\n    this.props.setPaymentTypeAll()\r\n    this.props.redirectTo(getRoute('PAYMENT_PAYMENT'), {\r\n      restaurantId: this.props.restaurant.id,\r\n      checkId: this.props.routeParams.checkId,\r\n    })\r\n  }\r\n\r\n  handleRedirectToShare = () => {\r\n    this.props.setPaymentTypeShare()\r\n    this.props.redirectTo(getRoute('PAYMENT_SHARE'), {\r\n      restaurantId: this.props.restaurant.id,\r\n      checkId: this.props.routeParams.checkId,\r\n    })\r\n  }\r\n\r\n  handleRedirectToChoose = () => {\r\n    this.props.setPaymentTypeEntries()\r\n    this.props.redirectTo(getRoute('PAYMENT_CHOOSE'), {\r\n      restaurantId: this.props.restaurant.id,\r\n      checkId: this.props.routeParams.checkId,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { restaurant, isRefreshingOauthToken, routeParams, restaurantId, redirectTo } = this.props\r\n\r\n    return (\r\n      <CheckContainer\r\n        restaurantId={routeParams.restaurantId}\r\n        checkId={routeParams.checkId}\r\n        forceReload\r\n      >\r\n        {({ check, isFetchingCheck }) => (\r\n          <Page\r\n            title={\r\n              !isNil(restaurant)\r\n                ? !isNil(check)\r\n                  ? `${restaurant.name} - ${check.tableNumberLabel}`\r\n                  : restaurant.name\r\n                : null\r\n            }\r\n            goBackRoute={() => redirectTo(getRoute('RESTAURANT'), { restaurantId })}\r\n          >\r\n            <View\r\n              check={check}\r\n              isFetchingCheck={isFetchingCheck || isRefreshingOauthToken}\r\n              onRedirectToTotality={this.handleRedirectToTotality}\r\n              onRedirectToShare={this.handleRedirectToShare}\r\n              onRedirectToChoose={this.handleRedirectToChoose}\r\n            />\r\n          </Page>\r\n        )}\r\n      </CheckContainer>\r\n    )\r\n  }\r\n}\r\n\r\nCheckPage.propTypes = {}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  isRefreshingOauthToken: isRefreshingOauthToken(state, props),\r\n})\r\n\r\nexport default compose(\r\n  withRestaurant,\r\n  connect(\r\n  mapStateToProps,\r\n  {\r\n    setPaymentTypeAll,\r\n    setPaymentTypeShare,\r\n    setPaymentTypeEntries,\r\n    redirectTo,\r\n  }\r\n))(CheckPage)\r\n","import React from 'react'\r\n\r\nimport CheckContainer from './CheckContainer'\r\n\r\n/**\r\n * Add the CheckContainer as HOC for the given component\r\n * Requirements\r\n * - checkId in props or routeParams\r\n * - restaurantId in props or routeParams\r\n */\r\nconst withCheck = CheckWrappedComponent => props => (\r\n  <CheckContainer\r\n    CheckWrappedComponent={CheckWrappedComponent}\r\n    restaurantId={props.routeParams ? props.routeParams.restaurantId : props.restaurantId}\r\n    checkId={props.routeParams ? props.routeParams.checkId : props.checkId}\r\n    tableNumber={props.routeParams ? props.routeParams.tableId : props.tableId}\r\n    code={props.routeParams ? props.routeParams.code : props.code}\r\n    {...props}\r\n  />\r\n)\r\n\r\nexport default withCheck\r\n","/** @license React v16.14.0\n * react-dom-server.browser.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\n'use strict';var k=require(\"object-assign\"),l=require(\"react\");function q(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar t=\"function\"===typeof Symbol&&Symbol.for,aa=t?Symbol.for(\"react.portal\"):60106,u=t?Symbol.for(\"react.fragment\"):60107,ba=t?Symbol.for(\"react.strict_mode\"):60108,ca=t?Symbol.for(\"react.profiler\"):60114,v=t?Symbol.for(\"react.provider\"):60109,da=t?Symbol.for(\"react.context\"):60110,ea=t?Symbol.for(\"react.concurrent_mode\"):60111,fa=t?Symbol.for(\"react.forward_ref\"):60112,B=t?Symbol.for(\"react.suspense\"):60113,ha=t?Symbol.for(\"react.suspense_list\"):60120,ia=t?Symbol.for(\"react.memo\"):60115,ja=t?Symbol.for(\"react.lazy\"):\n60116,ka=t?Symbol.for(\"react.block\"):60121,la=t?Symbol.for(\"react.fundamental\"):60117,ma=t?Symbol.for(\"react.scope\"):60119;function na(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(c){0===a._status&&(c=c.default,a._status=1,a._result=c)},function(c){0===a._status&&(a._status=2,a._result=c)})}}\nfunction C(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case u:return\"Fragment\";case aa:return\"Portal\";case ca:return\"Profiler\";case ba:return\"StrictMode\";case B:return\"Suspense\";case ha:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case da:return\"Context.Consumer\";case v:return\"Context.Provider\";case fa:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\"ForwardRef\");\ncase ia:return C(a.type);case ka:return C(a.render);case ja:if(a=1===a._status?a._result:null)return C(a)}return null}var D=l.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;D.hasOwnProperty(\"ReactCurrentDispatcher\")||(D.ReactCurrentDispatcher={current:null});D.hasOwnProperty(\"ReactCurrentBatchConfig\")||(D.ReactCurrentBatchConfig={suspense:null});var oa={};function E(a,b){for(var c=a._threadCount|0;c<=b;c++)a[c]=a._currentValue2,a._threadCount=c+1}\nfunction pa(a,b,c,d){if(d&&(d=a.contextType,\"object\"===typeof d&&null!==d))return E(d,c),d[c];if(a=a.contextTypes){c={};for(var f in a)c[f]=b[f];b=c}else b=oa;return b}for(var F=new Uint16Array(16),H=0;15>H;H++)F[H]=H+1;F[15]=0;\nvar qa=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,ra=Object.prototype.hasOwnProperty,sa={},ta={};\nfunction ua(a){if(ra.call(ta,a))return!0;if(ra.call(sa,a))return!1;if(qa.test(a))return ta[a]=!0;sa[a]=!0;return!1}function va(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction wa(a,b,c,d){if(null===b||\"undefined\"===typeof b||va(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function J(a,b,c,d,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=g}var K={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){K[a]=new J(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];K[b]=new J(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){K[a]=new J(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){K[a]=new J(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){K[a]=new J(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){K[a]=new J(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){K[a]=new J(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){K[a]=new J(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){K[a]=new J(a,5,!1,a.toLowerCase(),null,!1)});var L=/[\\-:]([a-z])/g;function M(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(L,\nM);K[b]=new J(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(L,M);K[b]=new J(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(L,M);K[b]=new J(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){K[a]=new J(a,1,!1,a.toLowerCase(),null,!1)});\nK.xlinkHref=new J(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){K[a]=new J(a,1,!1,a.toLowerCase(),null,!0)});var xa=/[\"'&<>]/;\nfunction N(a){if(\"boolean\"===typeof a||\"number\"===typeof a)return\"\"+a;a=\"\"+a;var b=xa.exec(a);if(b){var c=\"\",d,f=0;for(d=b.index;d<a.length;d++){switch(a.charCodeAt(d)){case 34:b=\"&quot;\";break;case 38:b=\"&amp;\";break;case 39:b=\"&#x27;\";break;case 60:b=\"&lt;\";break;case 62:b=\"&gt;\";break;default:continue}f!==d&&(c+=a.substring(f,d));f=d+1;c+=b}a=f!==d?c+a.substring(f,d):c}return a}\nfunction ya(a,b){var c=K.hasOwnProperty(a)?K[a]:null;var d;if(d=\"style\"!==a)d=null!==c?0===c.type:!(2<a.length)||\"o\"!==a[0]&&\"O\"!==a[0]||\"n\"!==a[1]&&\"N\"!==a[1]?!1:!0;if(d||wa(a,b,c,!1))return\"\";if(null!==c){a=c.attributeName;d=c.type;if(3===d||4===d&&!0===b)return a+'=\"\"';c.sanitizeURL&&(b=\"\"+b);return a+'=\"'+(N(b)+'\"')}return ua(a)?a+'=\"'+(N(b)+'\"'):\"\"}function za(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}\nvar Aa=\"function\"===typeof Object.is?Object.is:za,O=null,P=null,Q=null,R=!1,S=!1,U=null,V=0;function W(){if(null===O)throw Error(q(321));return O}function Ba(){if(0<V)throw Error(q(312));return{memoizedState:null,queue:null,next:null}}function Ca(){null===Q?null===P?(R=!1,P=Q=Ba()):(R=!0,Q=P):null===Q.next?(R=!1,Q=Q.next=Ba()):(R=!0,Q=Q.next);return Q}function Da(a,b,c,d){for(;S;)S=!1,V+=1,Q=null,c=a(b,d);P=O=null;V=0;Q=U=null;return c}function Ea(a,b){return\"function\"===typeof b?b(a):b}\nfunction Fa(a,b,c){O=W();Q=Ca();if(R){var d=Q.queue;b=d.dispatch;if(null!==U&&(c=U.get(d),void 0!==c)){U.delete(d);d=Q.memoizedState;do d=a(d,c.action),c=c.next;while(null!==c);Q.memoizedState=d;return[d,b]}return[Q.memoizedState,b]}a=a===Ea?\"function\"===typeof b?b():b:void 0!==c?c(b):b;Q.memoizedState=a;a=Q.queue={last:null,dispatch:null};a=a.dispatch=Ga.bind(null,O,a);return[Q.memoizedState,a]}\nfunction Ga(a,b,c){if(!(25>V))throw Error(q(301));if(a===O)if(S=!0,a={action:c,next:null},null===U&&(U=new Map),c=U.get(b),void 0===c)U.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}}function Ha(){}\nvar X=0,Ia={readContext:function(a){var b=X;E(a,b);return a[b]},useContext:function(a){W();var b=X;E(a,b);return a[b]},useMemo:function(a,b){O=W();Q=Ca();b=void 0===b?null:b;if(null!==Q){var c=Q.memoizedState;if(null!==c&&null!==b){a:{var d=c[1];if(null===d)d=!1;else{for(var f=0;f<d.length&&f<b.length;f++)if(!Aa(b[f],d[f])){d=!1;break a}d=!0}}if(d)return c[0]}}a=a();Q.memoizedState=[a,b];return a},useReducer:Fa,useRef:function(a){O=W();Q=Ca();var b=Q.memoizedState;return null===b?(a={current:a},Q.memoizedState=\na):b},useState:function(a){return Fa(Ea,a)},useLayoutEffect:function(){},useCallback:function(a){return a},useImperativeHandle:Ha,useEffect:Ha,useDebugValue:Ha,useResponder:function(a,b){return{props:b,responder:a}},useDeferredValue:function(a){W();return a},useTransition:function(){W();return[function(a){a()},!1]}},Ja={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Ka(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nvar La={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},Ma=k({menuitem:!0},La),Y={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,\ngridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Na=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(Y).forEach(function(a){Na.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Y[b]=Y[a]})});\nvar Oa=/([A-Z])/g,Pa=/^ms-/,Z=l.Children.toArray,Qa=D.ReactCurrentDispatcher,Ra={listing:!0,pre:!0,textarea:!0},Sa=/^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/,Ta={},Ua={};function Va(a){if(void 0===a||null===a)return a;var b=\"\";l.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}var Wa=Object.prototype.hasOwnProperty,Xa={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null,suppressHydrationWarning:null};function Ya(a,b){if(void 0===a)throw Error(q(152,C(b)||\"Component\"));}\nfunction Za(a,b,c){function d(d,g){var e=g.prototype&&g.prototype.isReactComponent,f=pa(g,b,c,e),x=[],h=!1,m={isMounted:function(){return!1},enqueueForceUpdate:function(){if(null===x)return null},enqueueReplaceState:function(a,c){h=!0;x=[c]},enqueueSetState:function(a,c){if(null===x)return null;x.push(c)}};if(e){if(e=new g(d.props,f,m),\"function\"===typeof g.getDerivedStateFromProps){var w=g.getDerivedStateFromProps.call(null,d.props,e.state);null!=w&&(e.state=k({},e.state,w))}}else if(O={},e=g(d.props,\nf,m),e=Da(g,d.props,e,f),null==e||null==e.render){a=e;Ya(a,g);return}e.props=d.props;e.context=f;e.updater=m;m=e.state;void 0===m&&(e.state=m=null);if(\"function\"===typeof e.UNSAFE_componentWillMount||\"function\"===typeof e.componentWillMount)if(\"function\"===typeof e.componentWillMount&&\"function\"!==typeof g.getDerivedStateFromProps&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof g.getDerivedStateFromProps&&e.UNSAFE_componentWillMount(),x.length){m=x;var r=\nh;x=null;h=!1;if(r&&1===m.length)e.state=m[0];else{w=r?m[0]:e.state;var y=!0;for(r=r?1:0;r<m.length;r++){var p=m[r];p=\"function\"===typeof p?p.call(e,w,d.props,f):p;null!=p&&(y?(y=!1,w=k({},w,p)):k(w,p))}e.state=w}}else x=null;a=e.render();Ya(a,g);if(\"function\"===typeof e.getChildContext&&(d=g.childContextTypes,\"object\"===typeof d)){var A=e.getChildContext();for(var T in A)if(!(T in d))throw Error(q(108,C(g)||\"Unknown\",T));}A&&(b=k({},b,A))}for(;l.isValidElement(a);){var f=a,g=f.type;if(\"function\"!==\ntypeof g)break;d(f,g)}return{child:a,context:b}}\nvar $a=function(){function a(a,b){l.isValidElement(a)?a.type!==u?a=[a]:(a=a.props.children,a=l.isValidElement(a)?[a]:Z(a)):a=Z(a);a={type:null,domNamespace:Ja.html,children:a,childIndex:0,context:oa,footer:\"\"};var c=F[0];if(0===c){var g=F;c=g.length;var d=2*c;if(!(65536>=d))throw Error(q(304));var h=new Uint16Array(d);h.set(g);F=h;F[0]=c+1;for(g=c;g<d-1;g++)F[g]=g+1;F[d-1]=0}else F[0]=F[c];this.threadID=c;this.stack=[a];this.exhausted=!1;this.currentSelectValue=null;this.previousWasTextNode=!1;this.makeStaticMarkup=\nb;this.suspenseDepth=0;this.contextIndex=-1;this.contextStack=[];this.contextValueStack=[]}var b=a.prototype;b.destroy=function(){if(!this.exhausted){this.exhausted=!0;this.clearProviders();var a=this.threadID;F[a]=F[0];F[0]=a}};b.pushProvider=function(a){var c=++this.contextIndex,b=a.type._context,g=this.threadID;E(b,g);var x=b[g];this.contextStack[c]=b;this.contextValueStack[c]=x;b[g]=a.props.value};b.popProvider=function(){var a=this.contextIndex,b=this.contextStack[a],f=this.contextValueStack[a];\nthis.contextStack[a]=null;this.contextValueStack[a]=null;this.contextIndex--;b[this.threadID]=f};b.clearProviders=function(){for(var a=this.contextIndex;0<=a;a--)this.contextStack[a][this.threadID]=this.contextValueStack[a]};b.read=function(a){if(this.exhausted)return null;var b=X;X=this.threadID;var c=Qa.current;Qa.current=Ia;try{for(var g=[\"\"],x=!1;g[0].length<a;){if(0===this.stack.length){this.exhausted=!0;var h=this.threadID;F[h]=F[0];F[0]=h;break}var e=this.stack[this.stack.length-1];if(x||e.childIndex>=\ne.children.length){var I=e.footer;\"\"!==I&&(this.previousWasTextNode=!1);this.stack.pop();if(\"select\"===e.type)this.currentSelectValue=null;else if(null!=e.type&&null!=e.type.type&&e.type.type.$$typeof===v)this.popProvider(e.type);else if(e.type===B){this.suspenseDepth--;var G=g.pop();if(x){x=!1;var n=e.fallbackFrame;if(!n)throw Error(q(303));this.stack.push(n);g[this.suspenseDepth]+=\"\\x3c!--$!--\\x3e\";continue}else g[this.suspenseDepth]+=G}g[this.suspenseDepth]+=I}else{var m=e.children[e.childIndex++],\nw=\"\";try{w+=this.render(m,e.context,e.domNamespace)}catch(r){if(null!=r&&\"function\"===typeof r.then)throw Error(q(294));throw r;}finally{}g.length<=this.suspenseDepth&&g.push(\"\");g[this.suspenseDepth]+=w}}return g[0]}finally{Qa.current=c,X=b}};b.render=function(a,b,f){if(\"string\"===typeof a||\"number\"===typeof a){f=\"\"+a;if(\"\"===f)return\"\";if(this.makeStaticMarkup)return N(f);if(this.previousWasTextNode)return\"\\x3c!-- --\\x3e\"+N(f);this.previousWasTextNode=!0;return N(f)}b=Za(a,b,this.threadID);a=b.child;\nb=b.context;if(null===a||!1===a)return\"\";if(!l.isValidElement(a)){if(null!=a&&null!=a.$$typeof){f=a.$$typeof;if(f===aa)throw Error(q(257));throw Error(q(258,f.toString()));}a=Z(a);this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:\"\"});return\"\"}var c=a.type;if(\"string\"===typeof c)return this.renderDOM(a,b,f);switch(c){case ba:case ea:case ca:case ha:case u:return a=Z(a.props.children),this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:\"\"}),\n\"\";case B:throw Error(q(294));}if(\"object\"===typeof c&&null!==c)switch(c.$$typeof){case fa:O={};var d=c.render(a.props,a.ref);d=Da(c.render,a.props,d,a.ref);d=Z(d);this.stack.push({type:null,domNamespace:f,children:d,childIndex:0,context:b,footer:\"\"});return\"\";case ia:return a=[l.createElement(c.type,k({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:\"\"}),\"\";case v:return c=Z(a.props.children),f={type:a,domNamespace:f,children:c,childIndex:0,\ncontext:b,footer:\"\"},this.pushProvider(a),this.stack.push(f),\"\";case da:c=a.type;d=a.props;var h=this.threadID;E(c,h);c=Z(d.children(c[h]));this.stack.push({type:a,domNamespace:f,children:c,childIndex:0,context:b,footer:\"\"});return\"\";case la:throw Error(q(338));case ja:switch(c=a.type,na(c),c._status){case 1:return a=[l.createElement(c._result,k({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:\"\"}),\"\";case 2:throw c._result;default:throw Error(q(295));\n}case ma:throw Error(q(343));}throw Error(q(130,null==c?c:typeof c,\"\"));};b.renderDOM=function(a,b,f){var c=a.type.toLowerCase();f===Ja.html&&Ka(c);if(!Ta.hasOwnProperty(c)){if(!Sa.test(c))throw Error(q(65,c));Ta[c]=!0}var d=a.props;if(\"input\"===c)d=k({type:void 0},d,{defaultChecked:void 0,defaultValue:void 0,value:null!=d.value?d.value:d.defaultValue,checked:null!=d.checked?d.checked:d.defaultChecked});else if(\"textarea\"===c){var h=d.value;if(null==h){h=d.defaultValue;var e=d.children;if(null!=e){if(null!=\nh)throw Error(q(92));if(Array.isArray(e)){if(!(1>=e.length))throw Error(q(93));e=e[0]}h=\"\"+e}null==h&&(h=\"\")}d=k({},d,{value:void 0,children:\"\"+h})}else if(\"select\"===c)this.currentSelectValue=null!=d.value?d.value:d.defaultValue,d=k({},d,{value:void 0});else if(\"option\"===c){e=this.currentSelectValue;var I=Va(d.children);if(null!=e){var G=null!=d.value?d.value+\"\":I;h=!1;if(Array.isArray(e))for(var n=0;n<e.length;n++){if(\"\"+e[n]===G){h=!0;break}}else h=\"\"+e===G;d=k({selected:void 0,children:void 0},\nd,{selected:h,children:I})}}if(h=d){if(Ma[c]&&(null!=h.children||null!=h.dangerouslySetInnerHTML))throw Error(q(137,c,\"\"));if(null!=h.dangerouslySetInnerHTML){if(null!=h.children)throw Error(q(60));if(!(\"object\"===typeof h.dangerouslySetInnerHTML&&\"__html\"in h.dangerouslySetInnerHTML))throw Error(q(61));}if(null!=h.style&&\"object\"!==typeof h.style)throw Error(q(62,\"\"));}h=d;e=this.makeStaticMarkup;I=1===this.stack.length;G=\"<\"+a.type;for(z in h)if(Wa.call(h,z)){var m=h[z];if(null!=m){if(\"style\"===\nz){n=void 0;var w=\"\",r=\"\";for(n in m)if(m.hasOwnProperty(n)){var y=0===n.indexOf(\"--\"),p=m[n];if(null!=p){if(y)var A=n;else if(A=n,Ua.hasOwnProperty(A))A=Ua[A];else{var T=A.replace(Oa,\"-$1\").toLowerCase().replace(Pa,\"-ms-\");A=Ua[A]=T}w+=r+A+\":\";r=n;y=null==p||\"boolean\"===typeof p||\"\"===p?\"\":y||\"number\"!==typeof p||0===p||Y.hasOwnProperty(r)&&Y[r]?(\"\"+p).trim():p+\"px\";w+=y;r=\";\"}}m=w||null}n=null;b:if(y=c,p=h,-1===y.indexOf(\"-\"))y=\"string\"===typeof p.is;else switch(y){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":y=\n!1;break b;default:y=!0}y?Xa.hasOwnProperty(z)||(n=z,n=ua(n)&&null!=m?n+'=\"'+(N(m)+'\"'):\"\"):n=ya(z,m);n&&(G+=\" \"+n)}}e||I&&(G+=' data-reactroot=\"\"');var z=G;h=\"\";La.hasOwnProperty(c)?z+=\"/>\":(z+=\">\",h=\"</\"+a.type+\">\");a:{e=d.dangerouslySetInnerHTML;if(null!=e){if(null!=e.__html){e=e.__html;break a}}else if(e=d.children,\"string\"===typeof e||\"number\"===typeof e){e=N(e);break a}e=null}null!=e?(d=[],Ra.hasOwnProperty(c)&&\"\\n\"===e.charAt(0)&&(z+=\"\\n\"),z+=e):d=Z(d.children);a=a.type;f=null==f||\"http://www.w3.org/1999/xhtml\"===\nf?Ka(a):\"http://www.w3.org/2000/svg\"===f&&\"foreignObject\"===a?\"http://www.w3.org/1999/xhtml\":f;this.stack.push({domNamespace:f,type:c,children:d,childIndex:0,context:b,footer:h});this.previousWasTextNode=!1;return z};return a}(),ab={renderToString:function(a){a=new $a(a,!1);try{return a.read(Infinity)}finally{a.destroy()}},renderToStaticMarkup:function(a){a=new $a(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(){throw Error(q(207));},renderToStaticNodeStream:function(){throw Error(q(208));\n},version:\"16.14.0\"};module.exports=ab.default||ab;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-dom-server.browser.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom-server.browser.development.js');\n}\n","import React from 'react';\r\nimport pure from 'recompose/pure';\r\nimport SvgIcon from '../../SvgIcon';\r\n\r\nlet AddCircleOutline = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\"/>\r\n  </SvgIcon>\r\n);\r\nAddCircleOutline = pure(AddCircleOutline);\r\nAddCircleOutline.displayName = 'AddCircleOutline';\r\nAddCircleOutline.muiName = 'SvgIcon';\r\n\r\nexport default AddCircleOutline;\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet RemoveCircleOutline = props => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\" />\r\n  </SvgIcon>\r\n)\r\nRemoveCircleOutline = pure(RemoveCircleOutline)\r\nRemoveCircleOutline.displayName = 'RemoveCircleOutline'\r\nRemoveCircleOutline.muiName = 'SvgIcon'\r\n\r\nexport default RemoveCircleOutline\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet ArrowTuto = props => (\r\n  <SvgIcon {...props}>\r\n    <g id=\"ic_tuto_arrow\" stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\r\n      <g\r\n        id=\"Group\"\r\n        transform=\"translate(12.000000, 13.000000) rotate(-5.000000) translate(-12.000000, -13.000000) translate(6.000000, 3.000000)\"\r\n        fillRule=\"nonzero\"\r\n        stroke=\"#979797\"\r\n        strokeWidth=\"0.891428571\"\r\n      >\r\n        <path\r\n          d=\"M3.4112216,0.344059247 C7.37486264,4.43914036 9.05750332,8.47397589 8.45914364,12.4485658 C7.86078396,16.4231558 6.18996466,18.8207992 3.44668574,19.6414962\"\r\n          id=\"Path-2\"\r\n          transform=\"translate(5.994044, 9.992778) rotate(20.000000) translate(-5.994044, -9.992778) \"\r\n        />\r\n        <path\r\n          d=\"M6.13200465,1.04683106 L5.47705205,4.97428495 C5.43655994,5.21710769 5.60058132,5.44677975 5.84340405,5.48727186 C5.91025216,5.49841918 5.97876202,5.49417669 6.04372407,5.474867 C7.98474292,4.89790746 9.28578994,4.39933637 9.94686512,3.97915371\"\r\n          id=\"Path-3\"\r\n          transform=\"translate(7.708888, 3.270063) rotate(122.000000) translate(-7.708888, -3.270063) \"\r\n        />\r\n      </g>\r\n    </g>\r\n  </SvgIcon>\r\n)\r\nArrowTuto = pure(ArrowTuto)\r\nArrowTuto.displayName = 'ArrowTuto'\r\nArrowTuto.pmtName = 'SvgIcon'\r\n\r\nexport default ArrowTuto\r\n","import React, { Fragment } from 'react'\r\nimport ReactDOMServer from 'react-dom/server'\r\nimport classNames from 'classnames'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport Divider from 'pmt-ui/Divider'\r\nimport { withTheme, ThemeProvider } from 'pmt-ui/styles'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Price from 'pmt-ui/Price'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport AddCircleOutline from 'pmt-ui/svg-icons/content/add-circle-outline'\r\nimport RemoveCircleOutline from 'pmt-ui/svg-icons/content/remove-circle-outline'\r\nimport ArrowTuto from 'pmt-ui/svg-icons/navigation/arrow-tuto'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { fade } from 'pmt-utils/theme/colorManipulator'\r\n\r\nimport { Button } from '../../../components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    padding: theme.spacing(2),\r\n    flex: 1,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    overflow: 'auto',\r\n  },\r\n  content: {\r\n    flex: 1,\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  total: {\r\n    position: 'relative',\r\n    height: 150,\r\n    width: 150,\r\n    borderRadius: '50%',\r\n    background: `${fade(theme.palette.primary.main, 0.3)}`,\r\n    margin: 'auto',\r\n\r\n    '& *, & *:before, & *:after': {\r\n      boxSizing: 'content-box',\r\n    },\r\n    '&:after': {\r\n      position: 'absolute',\r\n      top: 25,\r\n      left: 25,\r\n      width: 100,\r\n      height: 100,\r\n      display: 'block',\r\n      content: '\" \"',\r\n      borderRadius: '50%',\r\n      backgroundColor: theme.pmt.colors.white,\r\n    },\r\n  },\r\n  totalLabel: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    left: 0,\r\n    zIndex: 1,\r\n    width: 150,\r\n    height: 150,\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n  },\r\n  slice: {\r\n    position: 'absolute',\r\n    width: 150,\r\n    height: 150,\r\n    clip: 'rect(0, 150px, 150px, 75px)',\r\n  },\r\n  sliceUp: {\r\n    clip: 'rect(auto, auto, auto, auto)',\r\n  },\r\n  sliceCut: {\r\n    height: '50%',\r\n    background: theme.pmt.colors.white,\r\n    position: 'absolute',\r\n    left: '50%',\r\n    transformOrigin: 'bottom',\r\n    // we could do `width: 4` but this cleans border around each slice\r\n    width: 2,\r\n    marginLeft: -1,\r\n  },\r\n  bar: {\r\n    clip: 'rect(0, 75px, 150px, 0)',\r\n    borderRadius: '50%',\r\n    border: `25px solid ${theme.palette.primary.main}`,\r\n    width: 100,\r\n    height: 100,\r\n    position: 'absolute',\r\n    top: 0,\r\n    left: 0,\r\n  },\r\n  fill: {},\r\n  fillUp: {\r\n    borderRadius: '50%',\r\n    border: `25px solid ${theme.palette.primary.main}`,\r\n    width: 100,\r\n    height: 100,\r\n    position: 'absolute',\r\n    top: 0,\r\n    left: 0,\r\n    transform: 'rotate(180deg)',\r\n    clip: 'rect(0, 75px, 150px, 0)',\r\n  },\r\n  split: {\r\n    width: '100%',\r\n    paddingBottom: theme.spacing(4),\r\n    marginTop: theme.spacing(5),\r\n  },\r\n  shareBetween: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    marginTop: theme.spacing(2),\r\n    marginBottom: theme.spacing(3),\r\n  },\r\n  shareBetweenLabel: {\r\n    margin: `0 ${theme.spacing(3)}px`,\r\n  },\r\n  shareIcons: {\r\n    fontSize: 34,\r\n  },\r\n  disabled: {\r\n    color: theme.pmt.colors.grey91,\r\n  },\r\n  iconButton: {\r\n    background: 'none',\r\n    border: 'none',\r\n    padding: theme.spacing(0.5),\r\n    margin: -theme.spacing(0.5),\r\n    display: 'inline-flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n    cursor: 'pointer',\r\n    '&:disabled': {\r\n      cursor: 'not-allowed',\r\n    },\r\n  },\r\n  caption: {\r\n    position: 'relative',\r\n    color: theme.pmt.colors.grey91,\r\n    marginTop: theme.spacing(4),\r\n    marginLeft: 'auto',\r\n    marginRight: 'auto',\r\n    whiteSpace: 'pre-wrap',\r\n    fontStyle: 'italic',\r\n    width: 185,\r\n    height: 50,\r\n  },\r\n  captionLabel: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    left: -20,\r\n  },\r\n  arrowTuto: {\r\n    position: 'absolute',\r\n    right: 26,\r\n    top: -22,\r\n    fontSize: 34,\r\n  },\r\n  shareTotal: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'flex-end',\r\n    marginBottom: theme.spacing(4),\r\n  },\r\n  payFor: {\r\n    marginTop: theme.spacing(4),\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    '& > div:first-child': {\r\n      marginRight: theme.spacing(1),\r\n    },\r\n  },\r\n  payForLabel: {\r\n    margin: `0 ${theme.spacing(2)}px`,\r\n  },\r\n  payForIcons: {\r\n    fontSize: 24,\r\n  },\r\n  submit: {\r\n    width: '100%',\r\n  },\r\n  submitLabel: {\r\n    display: 'flex',\r\n  },\r\n})\r\n\r\nconst getRatio = ({ multiplier, divider }) => (multiplier / divider) * 100\r\n\r\nconst View = ({\r\n  classes,\r\n  payment,\r\n  isFetchingCheck,\r\n  check,\r\n  onDecreaseMultiplier,\r\n  onIncreaseMultiplier,\r\n  onDecreaseDivider,\r\n  onIncreaseDivider,\r\n  onSubmit,\r\n  theme,\r\n}) => (\r\n  <div className={classes.root}>\r\n    <LoadingBlockWrapper show={isFetchingCheck || !check || !payment} />\r\n    <div className={classes.content}>\r\n      <div className={classes.total}>\r\n        <div className={classes.totalLabel}>\r\n          <TypographyCustom type=\"124\">{tr('web_customer.payment.share.total')}</TypographyCustom>\r\n          <TypographyCustom type=\"167\">\r\n            {check && <Price value={check.totalWithoutTipsFormatted} />}\r\n          </TypographyCustom>\r\n        </div>\r\n\r\n        <div\r\n          className={classNames(classes.slice, {\r\n            [classes.sliceUp]: getRatio(payment.share) >= 50,\r\n          })}\r\n        >\r\n          <div\r\n            className={classNames(classes.bar, {\r\n              [classes.barUp]: getRatio(payment.share) >= 50,\r\n            })}\r\n            style={{\r\n              transform: `rotate(${Math.ceil((getRatio(payment.share) * 360) / 100)}deg)`,\r\n            }}\r\n          />\r\n          <div\r\n            className={classNames(classes.fill, {\r\n              [classes.fillUp]: getRatio(payment.share) >= 50,\r\n            })}\r\n          />\r\n        </div>\r\n        {payment.share.divider > 1 &&\r\n          Array.from(Array(payment.share.divider).keys()).map(i => (\r\n            <div\r\n              className={classes.sliceCut}\r\n              style={{\r\n                transform: `rotate(${Math.ceil((360 / payment.share.divider) * i)}deg)`,\r\n              }}\r\n            />\r\n          ))}\r\n      </div>\r\n\r\n      <div className={classes.split}>\r\n        <TypographyCustom type=\"164\" align=\"center\">\r\n          {tr('web_customer.payment.share.split')}\r\n        </TypographyCustom>\r\n        <div className={classes.shareBetween}>\r\n          <button\r\n            type=\"button\"\r\n            className={classes.iconButton}\r\n            onClick={onDecreaseDivider}\r\n            disabled={payment.share.dividerIsMinimum}\r\n            aria-label={tr('web_customer.payment.share.decrease_divider', {\r\n              fr: 'Diminuer le nombre de personnes',\r\n              context: '',\r\n              desc: 'Accessible label for the \"decrease divider\" stepper button',\r\n            })}\r\n          >\r\n            <RemoveCircleOutline\r\n              color=\"primary\"\r\n              className={classNames(classes.shareIcons, {\r\n                [classes.disabled]: payment.share.dividerIsMinimum,\r\n              })}\r\n              aria-hidden=\"true\"\r\n            />\r\n          </button>\r\n          <TypographyCustom type=\"267\" className={classes.shareBetweenLabel} aria-live=\"polite\">\r\n            {payment.share.divider}\r\n          </TypographyCustom>\r\n          <button\r\n            type=\"button\"\r\n            className={classes.iconButton}\r\n            onClick={onIncreaseDivider}\r\n            aria-label={tr('web_customer.payment.share.increase_divider', {\r\n              fr: 'Augmenter le nombre de personnes',\r\n              context: '',\r\n              desc: 'Accessible label for the \"increase divider\" stepper button',\r\n            })}\r\n          >\r\n            <AddCircleOutline color=\"primary\" className={classes.shareIcons} aria-hidden=\"true\" />\r\n          </button>\r\n        </div>\r\n        {payment.share.dividerIsMinimum ? (\r\n          <div className={classes.caption}>\r\n            <ArrowTuto className={classes.arrowTuto} aria-hidden=\"true\" />\r\n            <TypographyCustom type=\"144\" skipColor className={classes.captionLabel}>\r\n              {tr('web_customer.payment.share.share.caption')}\r\n            </TypographyCustom>\r\n          </div>\r\n        ) : (\r\n          <Fragment>\r\n            <TypographyCustom\r\n              className={classes.shareTotal}\r\n              align=\"center\"\r\n              type=\"144\"\r\n              dangerouslySetInnerHTML={{\r\n                __html: tr('web_customer.payment.share.share_total', {\r\n                  amount: ReactDOMServer.renderToStaticMarkup(\r\n                    <ThemeProvider theme={theme}>\r\n                      &nbsp;\r\n                      <TypographyCustom type=\"167\">\r\n                        {payment && <Price value={payment.share.amountPerPersonFormatted} />}\r\n                      </TypographyCustom>\r\n                      &nbsp;\r\n                    </ThemeProvider>\r\n                  ),\r\n                }),\r\n              }}\r\n            />\r\n            <Divider />\r\n            <div className={classes.payFor}>\r\n              <TypographyCustom type=\"164\">\r\n                {tr('web_customer.payment.share.pay_for')}\r\n              </TypographyCustom>\r\n              <button\r\n                type=\"button\"\r\n                className={classes.iconButton}\r\n                onClick={onDecreaseMultiplier}\r\n                disabled={payment.share.payForIsMinimum}\r\n                aria-label={tr('web_customer.payment.share.decrease_pay_for', {\r\n                  fr: 'Diminuer le nombre de parts à payer',\r\n                  context: '',\r\n                  desc: 'Accessible label for the \"decrease pay for\" stepper button',\r\n                })}\r\n              >\r\n                <RemoveCircleOutline\r\n                  color=\"primary\"\r\n                  className={classNames(classes.payForIcons, {\r\n                    [classes.disabled]: payment.share.payForIsMinimum,\r\n                  })}\r\n                  aria-hidden=\"true\"\r\n                />\r\n              </button>\r\n              <TypographyCustom type=\"207\" className={classes.payForLabel} aria-live=\"polite\">\r\n                {payment.share.multiplier}\r\n              </TypographyCustom>\r\n              <button\r\n                type=\"button\"\r\n                className={classes.iconButton}\r\n                onClick={onIncreaseMultiplier}\r\n                disabled={payment.share.payForIsMaximum}\r\n                aria-label={tr('web_customer.payment.share.increase_pay_for', {\r\n                  fr: 'Augmenter le nombre de parts à payer',\r\n                  context: '',\r\n                  desc: 'Accessible label for the \"increase pay for\" stepper button',\r\n                })}\r\n              >\r\n                <AddCircleOutline\r\n                  color=\"primary\"\r\n                  className={classNames(classes.payForIcons, {\r\n                    [classes.disabled]: payment.share.payForIsMaximum,\r\n                  })}\r\n                  aria-hidden=\"true\"\r\n                />\r\n              </button>\r\n            </div>\r\n          </Fragment>\r\n        )}\r\n      </div>\r\n    </div>\r\n    <Button\r\n      size=\"large\"\r\n      onClick={onSubmit}\r\n      className={classes.submit}\r\n      disabled={!payment || isFetchingCheck}\r\n    >\r\n      <TypographyCustom type=\"207\" skipColor className={classes.submitLabel}>\r\n        {tr('web_customer.payment.share.submit')}\r\n        &nbsp;\r\n        <Price value={payment.amountFormatted} />\r\n      </TypographyCustom>\r\n    </Button>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(withTheme(View))\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\n\r\nimport withCheck from 'pmt-modules/payment/components/withCheck'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport {\r\n  setPaymentTypeShare,\r\n  increaseDivider,\r\n  decreaseDivider,\r\n  increaseMultiplier,\r\n  decreaseMultiplier,\r\n  fetchRefreshCheck,\r\n} from 'pmt-modules/payment'\r\n\r\nimport Page from '../../../components/Page'\r\nimport View from './View'\r\n\r\n/**\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5b684e7f1e7df31acf9ad185\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5b684e7f1e7df31acf9ad1a0\r\n * https://paymytable.atlassian.net/browse/PP-899\r\n */\r\nclass Share extends React.Component {\r\n  componentDidMount() {\r\n    this.props.setPaymentTypeShare()\r\n  }\r\n\r\n  handleSubmit = () => {\r\n    const { restaurantId, checkId } = this.props\r\n    this.props.fetchRefreshCheck(restaurantId, checkId, true)\r\n  }\r\n\r\n  handleIncreaseDivider = () => {\r\n    this.props.increaseDivider()\r\n  }\r\n\r\n  handleDecreaseDivider = () => {\r\n    this.props.decreaseDivider()\r\n  }\r\n\r\n  handleIncreaseMultiplier = () => {\r\n    this.props.increaseMultiplier()\r\n  }\r\n  handleDecreaseMultiplier = () => {\r\n    this.props.decreaseMultiplier()\r\n  }\r\n\r\n  render() {\r\n    const { check, payment, isFetchingCheck, restaurantId, checkId, redirectTo } = this.props\r\n\r\n    return (\r\n      <Page\r\n        title={tr('web_customer.payment.share.title')}\r\n        goBackRoute={() => redirectTo(getRoute('PAYMENT_CHECK_VIEW'), { restaurantId, checkId })}\r\n      >\r\n        <View\r\n          isFetchingCheck={isFetchingCheck}\r\n          check={check}\r\n          payment={payment}\r\n          onSubmit={this.handleSubmit}\r\n          onIncreaseDivider={this.handleIncreaseDivider}\r\n          onDecreaseDivider={this.handleDecreaseDivider}\r\n          onIncreaseMultiplier={this.handleIncreaseMultiplier}\r\n          onDecreaseMultiplier={this.handleDecreaseMultiplier}\r\n        />\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nShare.propTypes = {}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nexport default compose(\r\n  withCheck,\r\n  withRestaurant,\r\n  connect(\r\n  mapStateToProps,\r\n  {\r\n    setPaymentTypeShare,\r\n    increaseDivider,\r\n    decreaseDivider,\r\n    increaseMultiplier,\r\n    decreaseMultiplier,\r\n    fetchRefreshCheck,\r\n    redirectTo,\r\n  }\r\n  ))(Share)\r\n","import React from 'react'\r\nimport isNil from 'lodash/isNil'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Price from 'pmt-ui/Price'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport CheckList from 'app/components/payment/CheckList'\r\nimport { Button } from 'app/components/Button'\r\n\r\nconst styles = theme => ({\r\n  introduction: {\r\n    padding: `0 ${theme.spacing(2)}px ${theme.spacing(1)}px`,\r\n  },\r\n  checkList: {\r\n    padding: theme.spacing(2),\r\n    paddingTop: 0,\r\n    paddingBottom: theme.spacing(1),\r\n    overflowY: 'scroll',\r\n    flexGrow: 1,\r\n  },\r\n  footer: {\r\n    padding: theme.spacing(2),\r\n    background: theme.pmt.colors.greyBackground,\r\n    zIndex: 5,\r\n  },\r\n  selectionTotalLabel: {\r\n    float: 'left',\r\n    lineHeight: '18px',\r\n  },\r\n  selectionTotalAmount: {\r\n    float: 'right',\r\n  },\r\n  button: {\r\n    width: '100%',\r\n    marginTop: theme.spacing(2),\r\n  },\r\n  totalAmountContainer: {\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  totalAmount: {\r\n    float: 'right',\r\n    marginLeft: theme.spacing(0.5),\r\n  },\r\n})\r\n\r\n/**\r\n * @mockup N/A\r\n */\r\nconst View = ({ isFetchingCheck, payment, check, onSubmit, classes }) => {\r\n  return (\r\n    <React.Fragment>\r\n      <LoadingBlockWrapper show={isFetchingCheck} />\r\n      {!isNil(check) && (\r\n        <React.Fragment>\r\n          <TypographyCustom type=\"167\" className={classes.introduction}>\r\n            {tr('web_customer.payment.choose.introduction')}\r\n          </TypographyCustom>\r\n          <CheckList\r\n            check={check}\r\n            payment={payment}\r\n            type={CheckList.Type.SELECTION}\r\n            classes={{ root: classes.checkList, entry: classes.entry }}\r\n          />\r\n          <div className={classes.footer}>\r\n            <div className=\"u-overflowHidden\">\r\n              <TypographyCustom type=\"147\" className={classes.selectionTotalLabel}>\r\n                {tr('web_customer.payment.choose.total_selection')}\r\n              </TypographyCustom>\r\n              <TypographyCustom type=\"187\" className={classes.selectionTotalAmount}>\r\n                <Price value={payment.amountFormatted} />\r\n              </TypographyCustom>\r\n            </div>\r\n            <Button\r\n              className={classes.button}\r\n              onClick={onSubmit}\r\n              disabled={isFetchingCheck || isEmpty(payment.items) || payment.amount < 0}\r\n            >\r\n              <TypographyCustom\r\n                type=\"187\"\r\n                component=\"span\"\r\n                className={classes.totalAmountContainer}\r\n              >\r\n                {tr('web_customer.payment.choose.submit')}\r\n                <Price value={payment.amountFormatted} className={classes.totalAmount} />\r\n              </TypographyCustom>\r\n            </Button>\r\n          </div>\r\n        </React.Fragment>\r\n      )}\r\n    </React.Fragment>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport withCheck from 'pmt-modules/payment/components/withCheck'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { setPaymentTypeEntries, fetchRefreshCheck } from 'pmt-modules/payment'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\n\r\nimport Page from '../../../components/Page'\r\n\r\nimport View from './View'\r\n\r\n/**\r\n * https://paymytable.atlassian.net/browse/PP-898\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5b684e7ea260407d83d690b9\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5bc4427cdf29ce0aa9aae070\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5bc4427c1d99c2190ca1fbd2\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5bc4427c13e0040a1a867e44\r\n */\r\nclass ChoosePage extends React.Component {\r\n  componentDidMount() {\r\n    this.props.setPaymentTypeEntries()\r\n  }\r\n\r\n  handleNext = () => {\r\n    this.props.fetchRefreshCheck(this.props.restaurantId, this.props.checkId, true)\r\n  }\r\n\r\n  render() {\r\n    const { check, payment, isFetchingCheck, restaurantId, checkId, redirectTo } = this.props\r\n\r\n    return (\r\n      <Page\r\n        title={tr('web_customer.payment.choose.title')}\r\n        goBackRoute={() => redirectTo(getRoute('PAYMENT_CHECK_VIEW'), { restaurantId, checkId })}\r\n      >\r\n        <View\r\n          isFetchingCheck={isFetchingCheck}\r\n          check={check}\r\n          payment={payment}\r\n          onSubmit={this.handleNext}\r\n        />\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nChoosePage.propTypes = {}\r\n\r\nconst mapStateToProps = (state, props) => ({})\r\n\r\nexport default compose(\r\n  withCheck,\r\n  withRestaurant,\r\n  connect(\r\n  mapStateToProps,\r\n  {\r\n    setPaymentTypeEntries,\r\n    fetchRefreshCheck,\r\n    redirectTo,\r\n  }\r\n))(ChoosePage)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nconst get = state => state.entities.authenticatedUser\r\n\r\nexport const getAuthenticatedUser = createSelector([get], authenticatedUser => {\r\n  if (isNil(authenticatedUser)) {\r\n    return null\r\n  }\r\n\r\n  return authenticatedUser.toJS()\r\n})\r\n","import { createAction } from '../redux'\r\n\r\nexport const WebCustomerAction = {\r\n  PROCESS_PAYMENT: 'WEB_CUSTOMER::PROCESS_PAYMENT',\r\n}\r\n\r\nexport const processPaymentv2 = (\r\n  restaurantId,\r\n  paymentMethod,\r\n  payment,\r\n  check,\r\n) =>\r\n  createAction(WebCustomerAction.PROCESS_PAYMENT, {\r\n    restaurantId,\r\n    paymentMethod,\r\n    payment,\r\n    check,\r\n  })\r\n","// TODO: I18n\r\n// TODO: list errors\r\nconst TopUpErrors = {\r\n  POST: {\r\n    119: 'global.top_up.errors.failed_too_many_times',\r\n    125: 'global.top_up.errors.failed_try_again',\r\n    126: 'global.top_up.errors.transaction_refused',\r\n    127: 'global.top_up.errors.transaction_refused',\r\n    128: 'global.top_up.errors.transaction_refused',\r\n    129: 'global.top_up.errors.transaction_refused',\r\n    130: 'global.top_up.errors.card_expired',\r\n    131: 'global.top_up.errors.card_inactive',\r\n    132: 'global.top_up.errors.card_inactive',\r\n    133: 'global.top_up.errors.max_attempts',\r\n    134: 'global.top_up.errors.max_amount',\r\n    135: 'global.top_up.errors.max_uses',\r\n    136: 'global.top_up.errors.debit_limit',\r\n    137: 'global.top_up.errors.amount',\r\n    138: 'global.top_up.errors.transaction_refused',\r\n    // default: 'Erreur inconnue',\r\n  },\r\n}\r\n\r\nexport default TopUpErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport TopUpErrors from '../errors/TopUpErrors'\r\n\r\nconst TopUpApi = {\r\n  postTopUpWithCreditCard: (userId, userAccountId, userCardId, topUp) => {\r\n    return {\r\n      endpoint: ApiEndpoints.DEPOSITS,\r\n      type: 'POST',\r\n      body: {\r\n        idempotencyKey: topUp.idempotencyKey,\r\n        userAccountId,\r\n        userCardId,\r\n        amount: topUp.amount,\r\n        type: topUp.type,\r\n        userId,\r\n        browserInfo: topUp.browserInfo,\r\n        asyncPaymentData: topUp.asyncPaymentData,\r\n      },\r\n      errorHandler: TopUpErrors.POST,\r\n    }\r\n  },\r\n\r\n  // this call is made as a restaurant so we need userId\r\n  postTopUp: (userAccountId, userId, topUp) => {\r\n    return {\r\n      endpoint: ApiEndpoints.DEPOSITS,\r\n      type: 'POST',\r\n      body: {\r\n        idempotencyKey: topUp.idempotencyKey,\r\n        userAccountId,\r\n        userId,\r\n        amount: topUp.amount,\r\n        type: topUp.type,\r\n      },\r\n      errorHandler: TopUpErrors.POST,\r\n    }\r\n  },\r\n}\r\n\r\nexport default TopUpApi\r\n","import { createAction } from '../../redux'\r\n\r\nimport { createApiCallAction, createApiEnumAction } from '../../api/utils'\r\n\r\nimport TopUpApi from '../../api/calls/TopUpApi'\r\n\r\nexport const PostTopUpAction = createApiEnumAction('PostTopUpAction')\r\n\r\nexport const postTopUpWithCreditCard = (userAccount, selectedCreditCard, topUp) =>\r\n  createApiCallAction(\r\n    PostTopUpAction,\r\n    TopUpApi.postTopUpWithCreditCard(\r\n      userAccount.userId,\r\n      userAccount.id,\r\n      selectedCreditCard.id,\r\n      topUp\r\n    ),\r\n    {\r\n      userAccount,\r\n      selectedCreditCard,\r\n      topUp,\r\n    }\r\n  )\r\n\r\nexport const postTopUp = (userAccount, userId, topUp, options) =>\r\n  createApiCallAction(PostTopUpAction, TopUpApi.postTopUp(userAccount.id, userId, topUp), {\r\n    userAccount,\r\n    userId,\r\n    topUp,\r\n    options,\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const TopUpAction = {\r\n  INIT_TOP_UP: 'TOP_UP::INIT_TOP_UP',\r\n  SELECT_AMOUNT: 'TOP_UP::SELECT_AMOUNT',\r\n  UNSELECT_AMOUNT: 'TOP_UP::UNSELECT_AMOUNT',\r\n  CLICK_OTHER_AMOUNT: 'TOP_UP::CLICK_OTHER_AMOUNT',\r\n  RESET: 'TOP_UP::RESET',\r\n}\r\n\r\nexport const topUpInit = userAccountId => createAction(TopUpAction.INIT_TOP_UP, { userAccountId })\r\n\r\nexport const topUpSelectAmount = (userAccountId, amount) =>\r\n  createAction(TopUpAction.SELECT_AMOUNT, { userAccountId, amount })\r\n\r\nexport const topUpUnselectAmount = (userAccountId, amount) =>\r\n  createAction(TopUpAction.UNSELECT_AMOUNT, { userAccountId, amount })\r\n\r\nexport const topUpClickOtherAmount = userAccountId =>\r\n  createAction(TopUpAction.CLICK_OTHER_AMOUNT, { userAccountId })\r\n\r\nexport const resetTopUp = userAccountId => createAction(TopUpAction.RESET, { userAccountId })\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport isNil from 'lodash/isNil'\r\nimport isUndefined from 'lodash/isUndefined'\r\nimport { isBo } from 'pmt-modules/environment'\r\n\r\nimport StatusChip from 'pmt-ui/StatusChip'\r\n\r\nimport { getAsyncPaymentBrowserInfo } from 'pmt-utils/browser'\r\nimport Logger from 'pmt-utils/logger'\r\nimport { createFormatter, createListFormatter } from 'pmt-utils/format'\r\nimport { formatDate } from 'pmt-utils/date'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { getRoute, generatePathWithParams } from 'pmt-modules/routing'\r\n\r\nimport { getAbsolutePath } from 'pmt-utils/url'\r\nimport { TOP_UP_TYPE, TOP_UP_STATUS } from '../constants'\r\n\r\nconst formatCreationDate = topUp => {\r\n  topUp.formattedCreationDate = formatDate(topUp.creationDate, 'DD/MM/YY HH:mm')\r\n\r\n  return topUp\r\n}\r\n\r\nconst formatSimpleCreationDate = topUp => {\r\n  topUp.formattedSimpleCreationDate = formatDate(topUp.creationDate, 'DD/MM/YY')\r\n\r\n  return topUp\r\n}\r\n\r\nconst formatPrices = topUp => {\r\n  topUp.amountPriceFormatted = formatPriceWithCurrency(topUp.amount)\r\n\r\n  return topUp\r\n}\r\n\r\nconst formatStatus = topUp => {\r\n  const label = {\r\n    [TOP_UP_STATUS.CREATED]: 'Créé',\r\n    [TOP_UP_STATUS.FAILED]: 'Échoué',\r\n    [TOP_UP_STATUS.SUCCEEDED]: 'Réussi',\r\n    [TOP_UP_STATUS.REFUNDED]: 'Remboursé',\r\n  }\r\n\r\n  const type = {\r\n    [TOP_UP_STATUS.CREATED]: StatusChip.Status.WARNING,\r\n    [TOP_UP_STATUS.FAILED]: StatusChip.Status.ERROR,\r\n    [TOP_UP_STATUS.SUCCEEDED]: StatusChip.Status.VALID,\r\n    [TOP_UP_STATUS.REFUNDED]: StatusChip.Status.INFO,\r\n  }\r\n\r\n  topUp.statusLabel = label[topUp.status] || tr('global.not_available')\r\n  topUp.statusType = type[topUp.status]\r\n\r\n  topUp.isStatusCreated = topUp.status === TOP_UP_STATUS.CREATED\r\n  topUp.isStatusFailed = topUp.status === TOP_UP_STATUS.FAILED\r\n  topUp.isStatusSucceeded = topUp.status === TOP_UP_STATUS.SUCCEEDED\r\n  topUp.isStatusRefunded = topUp.status === TOP_UP_STATUS.REFUNDED\r\n\r\n  return topUp\r\n}\r\n\r\nconst formatType = topUp => {\r\n  const label = {\r\n    [TOP_UP_TYPE.CASH]: tr('global.top_up.type.cash', {\r\n      fr: 'Espèces',\r\n      context: '',\r\n      desc: 'Top up type : cash',\r\n    }),\r\n    [TOP_UP_TYPE.CREDIT_CARD]: tr('global.top_up.type.credit_card', {\r\n      fr: 'Carte bancaire',\r\n      context: '',\r\n      desc: 'Top up type : credit card',\r\n    }),\r\n    [TOP_UP_TYPE.LUNCHEON_VOUCHER]: tr('global.top_up.type.luncheon_voucher', {\r\n      fr: 'Titres restaurant',\r\n      context: '',\r\n      desc: 'Top up type : luncheon voucher',\r\n    }),\r\n    [TOP_UP_TYPE.IMPORTED_INITIAL_BALANCE]: tr('global.top_up.type.initial_balance', {\r\n      fr: \"Reprise d'historique\",\r\n      context: '',\r\n      desc: 'Top up type : initial balance',\r\n    }),\r\n  }\r\n\r\n  topUp.typeLabel =\r\n    label[topUp.type] ||\r\n    tr('global.not_available', {\r\n      fr: 'N/D',\r\n      context: '',\r\n      desc: 'Not available label',\r\n    })\r\n\r\n  return topUp\r\n}\r\n\r\nconst formatSource = (topUp, props) => {\r\n  const defaultApiConsumer = { id: 0, name: 'Autre' }\r\n\r\n  if (!isUndefined(props.apiConsumers) && !isNil(topUp.source)) {\r\n    const apiConsumer = props.apiConsumers\r\n      .filter(apiConsumer => {\r\n        return apiConsumer.id === topUp.source.apiConsumerId\r\n      })\r\n      .shift()\r\n\r\n    if (!isUndefined(apiConsumer)) {\r\n      topUp.apiConsumer = apiConsumer\r\n    } else {\r\n      Logger.warn(\r\n        'formatTopUpSource',\r\n        `apiConsumer ${topUp.source.apiConsumerId} not found for topUp ${topUp.id}`\r\n      )\r\n      topUp.apiConsumer = defaultApiConsumer\r\n    }\r\n  } else {\r\n    topUp.apiConsumer = defaultApiConsumer\r\n  }\r\n\r\n  return topUp\r\n}\r\n\r\n/**\r\n * Data neeeded for 3DS v2\r\n *\r\n * https://www.notion.so/paymytable/Mangopay-3DS2-543d705dd4534a908b3dc1a64882e7a6.\r\n */\r\nconst formatBrowserInfo = data => {\r\n  if (isBo()) {\r\n    // on bo we do not have the TOPUP_VERIFICATION route, and no need of 3DS data.\r\n    return data\r\n  }\r\n\r\n  return {\r\n    ...data,\r\n    asyncPaymentData: {\r\n      redirectUrl: getAbsolutePath(generatePathWithParams(getRoute('TOPUP_VERIFICATION'))),\r\n    },\r\n    browserInfo: getAsyncPaymentBrowserInfo(),\r\n  }\r\n}\r\n\r\nexport const formatTopUp = createFormatter(\r\n  formatCreationDate,\r\n  formatSimpleCreationDate,\r\n  formatPrices,\r\n  formatStatus,\r\n  formatType,\r\n  formatSource,\r\n  formatBrowserInfo\r\n)\r\n\r\nexport const formatTopUps = createListFormatter(formatTopUp)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatTopUp } from '../format'\r\n\r\nconst getTopUpState = state => state.entities.topUp\r\nconst getUserAccountIdOnProps = (state, props) =>\r\n  props.userAccount ? props.userAccount.id : props.userAccountId\r\n\r\nexport const makeGetTopUpForAccount = () =>\r\n  createSelector([getUserAccountIdOnProps, getTopUpState], (userAccountId, topUpState) => {\r\n    if (isNil(topUpState)) {\r\n      return null\r\n    }\r\n    topUpState = topUpState.toJS()\r\n\r\n    const topUpData = topUpState[userAccountId]\r\n    if (isNil(topUpData)) {\r\n      return null\r\n    }\r\n\r\n    let topUp = topUpData.data\r\n\r\n    if (isNil(topUp)) {\r\n      return null\r\n    }\r\n\r\n    return formatTopUp(topUp)\r\n  })\r\n\r\nexport const makeGetTopUpErrorForAccount = () =>\r\n  createSelector([getUserAccountIdOnProps, getTopUpState], (userAccountId, topUpState) => {\r\n    const topUpData = topUpState.get(userAccountId)\r\n    if (isNil(topUpData)) {\r\n      return null\r\n    }\r\n\r\n    const error = topUpData.get('error')\r\n    if (isNil(error)) {\r\n      return null\r\n    }\r\n\r\n    return error.toJS()\r\n  })\r\n\r\nexport const makeIsPostingTopUp = () =>\r\n  createSelector([getUserAccountIdOnProps, getTopUpState], (userAccountId, topUpState) => {\r\n    const topUpData = topUpState.get(userAccountId)\r\n    if (isNil(topUpData)) {\r\n      return false\r\n    }\r\n\r\n    const isFetching = topUpData.get('isFetching')\r\n    if (isNil(isFetching)) {\r\n      return false\r\n    }\r\n\r\n    return isFetching\r\n  })\r\n\r\nexport const makeGetOtherAmountClicked = () =>\r\n  createSelector([getUserAccountIdOnProps, getTopUpState], (userAccountId, topUpState) => {\r\n    const topUpData = topUpState.get(userAccountId)\r\n    if (isNil(topUpData)) {\r\n      return null\r\n    }\r\n\r\n    let topUp = topUpData.get('data')\r\n\r\n    if (isNil(topUp)) {\r\n      return null\r\n    }\r\n\r\n    return topUpData.get('otherAmountClicked')\r\n  })\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport {\r\n  topUpSelectAmount,\r\n  topUpUnselectAmount,\r\n  topUpClickOtherAmount,\r\n  topUpInit,\r\n} from '../../makeTopUp/actions'\r\n\r\nimport {\r\n  makeGetTopUpForAccount,\r\n  makeGetTopUpErrorForAccount,\r\n  makeIsPostingTopUp,\r\n  makeGetOtherAmountClicked,\r\n} from '../../makeTopUp/selectors'\r\n\r\n/**\r\n * Container that fetch the credit cards for the given `userId` and pass it to the children.\r\n * The `children` must be a `Function as child component`.\r\n *\r\n * Requirements:\r\n * - userId, can be 'me'\r\n * - userAccount\r\n */\r\nclass TopUpContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (props.userAccount !== null && props.topUp === null) {\r\n      props.topUpInit(props.userAccount.id)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n\r\n    if (\r\n      nextProps.userAccount !== null && // we need a userAccount.id to init the top up\r\n      (nextProps.topUp === null || // the top up has not been init\r\n      props.userAccount === null || // we previously didn't have a userAccount, we have one now, so we can init the top up\r\n        props.userAccount.id !== nextProps.userAccount.id) // the user account has changed\r\n    ) {\r\n      nextProps.topUpInit(nextProps.userAccount.id)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      topUpSelectAmount,\r\n      topUpUnselectAmount,\r\n      topUpClickOtherAmount,\r\n      userAccount,\r\n      topUp,\r\n      topUpError,\r\n      isPostingTopUp,\r\n      otherAmountClicked,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    return children({\r\n      onSelectAmount: amount => topUpSelectAmount(userAccount.id, amount),\r\n      onUnselectAmount: amount => topUpUnselectAmount(userAccount.id, amount),\r\n      onClickOtherAmount: amount => topUpClickOtherAmount(userAccount.id),\r\n      topUpIsInit: topUp !== null,\r\n      topUp,\r\n      userAccount,\r\n      topUpError,\r\n      isPostingTopUp,\r\n      otherAmountClicked,\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nTopUpContainer.propTypes = {\r\n  //\r\n  // props to pass to the container\r\n  //\r\n  userId: PropTypes.string.isRequired,\r\n\r\n  userAccount: PropTypes.object.isRequired,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n\r\n  //\r\n  // props retrieve on the store (cf mapStateToProps)\r\n  //\r\n\r\n  topUp: PropTypes.object.isRequired,\r\n\r\n  topUpError: PropTypes.object,\r\n\r\n  otherAmountClicked: PropTypes.bool,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getTopUpForAccount = makeGetTopUpForAccount()\r\n  const getTopUpErrorForAccount = makeGetTopUpErrorForAccount()\r\n  const isPostingTopUp = makeIsPostingTopUp()\r\n  const getOtherAmountClicked = makeGetOtherAmountClicked()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      topUp: getTopUpForAccount(state, props),\r\n      topUpError: getTopUpErrorForAccount(state, props),\r\n      isPostingTopUp: isPostingTopUp(state, props),\r\n      otherAmountClicked: getOtherAmountClicked(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    topUpSelectAmount,\r\n    topUpUnselectAmount,\r\n    topUpClickOtherAmount,\r\n    topUpInit,\r\n  }\r\n)(TopUpContainer)\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\n\r\nimport './style.scss'\r\n\r\nconst AmountCircle = ({ value, isSelected, onClick, size = 70 }) => (\r\n  <div\r\n    onClick={onClick}\r\n    className={clsx(`amount__circle borderPrimary size${size}`, {\r\n      backgroundPrimary: isSelected,\r\n      'u-textColorWhite': isSelected,\r\n      colorPrimary: !isSelected,\r\n    })}\r\n  >\r\n    <div className=\"amount__circle__value\">\r\n      {value}\r\n      &euro;\r\n    </div>\r\n  </div>\r\n)\r\n\r\nexport default AmountCircle\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport NumberField from 'pmt-ui/NumberField'\r\nimport { InputAdornment } from 'pmt-ui/Input'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { isProd } from 'pmt-modules/environment'\r\n\r\nimport TopUpContainer from '../TopUpContainer'\r\nimport AmountCircle from '../amountCircle'\r\n\r\nconst styles = theme => ({\r\n  amounts: {\r\n    textAlign: 'center',\r\n    display: 'flex',\r\n  },\r\n  otherAmount: {\r\n    color: theme.palette.primary.main,\r\n    marginTop: theme.spacing(2),\r\n    textAlign: 'center',\r\n  },\r\n  otherAmountLink: {\r\n    display: 'block',\r\n    marginTop: theme.spacing(3),\r\n  },\r\n})\r\n\r\nconst defaultAmountsToPropose = [20, 30, 50, 70]\r\n\r\nconst TopUpChooseAmountView = ({\r\n  amountsToPropose = defaultAmountsToPropose,\r\n  amountSize = 70,\r\n  classes,\r\n  displayOtherAmount = true,\r\n  userId,\r\n  userAccount,\r\n}) => (\r\n  <TopUpContainer userId={userId} userAccount={userAccount}>\r\n    {({ topUp, topUpIsInit, onUnselectAmount, onSelectAmount, onClickOtherAmount }) => (\r\n      <div>\r\n        <div className={clsx('u-justifyContentSpaceAround', classes.amounts)}>\r\n          {amountsToPropose.map(amount => {\r\n            const isSelected = topUpIsInit ? topUp.amount === amount : 0\r\n            return (\r\n              <AmountCircle\r\n                key={amount}\r\n                value={amount}\r\n                size={amountSize}\r\n                isSelected={isSelected}\r\n                onClick={() => (isSelected ? onUnselectAmount(amount) : onSelectAmount(amount))}\r\n              />\r\n            )\r\n          })}\r\n        </div>\r\n        {displayOtherAmount && (\r\n          <div id=\"otherAmount\" className={classes.otherAmount}>\r\n            {!(topUpIsInit && topUp.otherAmountClicked) ? (\r\n              <span className={classes.otherAmountLink} onClick={onClickOtherAmount}>\r\n                {tr('global.top_up.other_amount', {\r\n                  fr: 'Autre montant',\r\n                  context: '',\r\n                  desc: 'Amount label for top up used for user to pick his own amount',\r\n                })}\r\n              </span>\r\n            ) : (\r\n              <div className=\"u-width60 u-inlineBlock u-textAlignCenter\">\r\n                <NumberField\r\n                  fullWidth\r\n                  pattern=\"\\d*\"\r\n                  min={0}\r\n                  // on other envs, we allow greater values, to be able to choose a specific amount\r\n                  // which lead to an error on mangopay side, allowing us to test some errors.\r\n                  max={isProd() ? 99 : 1000}\r\n                  value={parseInt(topUp.amount, 10)}\r\n                  onChange={(event, value) => onSelectAmount(value)}\r\n                  InputProps={{\r\n                    endAdornment: <InputAdornment position=\"end\">€</InputAdornment>,\r\n                  }}\r\n                />\r\n              </div>\r\n            )}\r\n          </div>\r\n        )}\r\n      </div>\r\n    )}\r\n  </TopUpContainer>\r\n)\r\n\r\nexport default withStyles(styles)(TopUpChooseAmountView)\r\n","import Immutable from 'immutable'\r\n\r\nimport { TopUpAction, PostTopUpAction } from './actions'\r\n\r\nimport { DEFAULT_TOP_UP } from '../constants'\r\n\r\nexport * from './actions'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\nexport const topUpReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case TopUpAction.INIT_TOP_UP:\r\n      return state.setIn(\r\n        [action.userAccountId],\r\n        Immutable.fromJS({\r\n          isFetching: false,\r\n          error: null,\r\n          data: DEFAULT_TOP_UP(),\r\n        })\r\n      )\r\n\r\n    case TopUpAction.RESET:\r\n      return state.setIn(\r\n        [action.userAccountId],\r\n        Immutable.fromJS({\r\n          isFetching: false,\r\n          error: null,\r\n          data: DEFAULT_TOP_UP(),\r\n        })\r\n      )\r\n\r\n    case PostTopUpAction.REQUEST:\r\n      return state.mergeIn([action.data.userAccount.id], {\r\n        isFetching: true,\r\n        error: null,\r\n        created: false,\r\n      })\r\n\r\n    case PostTopUpAction.SUCCESS:\r\n      return state\r\n        .mergeIn([action.data.userAccount.id], {\r\n          isFetching: false,\r\n          error: null,\r\n          created: true,\r\n        })\r\n        .mergeIn([action.data.userAccount.id, 'data'], {\r\n          ...action.response,\r\n          isUsingEmpotency: action.responseData.status === 200,\r\n        })\r\n\r\n    case PostTopUpAction.FAILURE:\r\n      state = state.mergeIn([action.data.userAccount.id], {\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n      if (action.error.body) {\r\n        state = state.mergeIn([action.data.userAccount.id], {\r\n          data: action.error.body,\r\n        })\r\n      }\r\n      return state\r\n\r\n    case TopUpAction.SELECT_AMOUNT:\r\n      return state.setIn([action.userAccountId, 'data', 'amount'], action.amount)\r\n\r\n    case TopUpAction.UNSELECT_AMOUNT:\r\n      return state.setIn([action.userAccountId, 'data', 'amount'], 0)\r\n\r\n    case TopUpAction.CLICK_OTHER_AMOUNT:\r\n      return state.setIn([action.userAccountId, 'data', 'otherAmountClicked'], true)\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","// TODO: i18n.\r\nconst UserAccountErrors = {\r\n  EDIT: {\r\n    144: 'global.api.user_account.edit.144',\r\n    501: 'global.api.user_account.edit.501',\r\n    default:\r\n      \"Une erreur est survenue lors de la mise à jour du compte de l'utilisateur.\",\r\n  },\r\n}\r\n\r\nexport default UserAccountErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport UserAccountErrors from '../errors/UserAccountErrors'\r\n\r\nconst UserAccountApi = {\r\n  getUserAccounts: userId => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ACCOUNTS,\r\n      type: 'GET',\r\n      params: {\r\n        userId,\r\n      },\r\n    }\r\n  },\r\n\r\n  getUserAccount: (userId, userAccountId, refreshToken = false) => {\r\n    return {\r\n      endpoint: ApiEndpoints.USER_ACCOUNT,\r\n      type: 'GET',\r\n      params: {\r\n        userId,\r\n        userAccountId,\r\n      },\r\n      query: {\r\n        refreshToken,\r\n      },\r\n    }\r\n  },\r\n\r\n  putUserAccount: (userId, userAccount) => ({\r\n    endpoint: ApiEndpoints.USER_ACCOUNT,\r\n    type: 'PUT',\r\n    params: {\r\n      userId,\r\n      userAccountId: userAccount.id,\r\n    },\r\n    body: userAccount,\r\n    errorHandler: UserAccountErrors.EDIT,\r\n  }),\r\n}\r\n\r\nexport default UserAccountApi\r\n","import createAction from '../redux/createAction'\r\n\r\nimport { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nimport UserAccountApi from '../api/calls/UserAccountApi'\r\n\r\nexport const UserAccountAction = {\r\n  RESET: 'USER_ACCOUNT::RESET',\r\n}\r\n\r\nexport const resetUserAccount = () => createAction(UserAccountAction.RESET)\r\n\r\nexport const FetchUserUserAccountsAction = createApiEnumAction('USER::USER_ACCOUNTS::GET')\r\n\r\nexport const fetchUserUserAccounts = userId =>\r\n  createApiCallAction(FetchUserUserAccountsAction, UserAccountApi.getUserAccounts(userId), {\r\n    userId,\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const FetchUserUserAccountAction = createApiEnumAction('USER::USER_ACCOUNT::GET')\r\n\r\nexport const fetchUserUserAccount = (userId, accountId, refreshToken = false) =>\r\n  createApiCallAction(\r\n    FetchUserUserAccountAction,\r\n    UserAccountApi.getUserAccount(userId, accountId, refreshToken),\r\n    {\r\n      userId,\r\n      accountId,\r\n      refreshToken,\r\n    }\r\n  )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const UpdateUserAccountAction = createApiEnumAction('USER::USER_ACCOUNT::PUT')\r\n\r\nexport const updateUserAccount = (userId, userAccount) =>\r\n  createApiCallAction(UpdateUserAccountAction, UserAccountApi.putUserAccount(userId, userAccount), {\r\n    userId,\r\n    userAccount,\r\n    accountId: userAccount.id,\r\n  })\r\n","import createMiddleware from '../redux/createMiddleware'\r\n\r\nimport { displayGenerousPaymentDialog } from 'pmt-modules/dialog'\r\nimport {\r\n  GetAsyncPaymentAction,\r\n  isAsyncPaymentRedirectToPspResponse,\r\n} from 'pmt-modules/asyncPayment'\r\nimport {\r\n  GetRefreshCheckAction,\r\n  GetCheckWithCodeAction,\r\n  GetCheckWithTableNumberAction,\r\n  GetCheckWithPosCheckIdAction,\r\n  GetCheckAction,\r\n  MergeCheckWithCodeAction,\r\n  PaymentStatus,\r\n  PostPaymentAction,\r\n  PostUserLightPaymentAction,\r\n  processPaymentv2,\r\n  resetPayment,\r\n  resetPostPayment,\r\n} from 'pmt-modules/payment'\r\nimport { getPayment } from 'pmt-modules/payment/payment/selectors'\r\nimport {\r\n  generatePathWithParams,\r\n  redirectTo,\r\n  redirectToExternal,\r\n  getRoute,\r\n} from 'pmt-modules/routing'\r\nimport { PostTopUpAction } from 'pmt-modules/topUp'\r\nimport { resetTopUp } from 'pmt-modules/topUp/makeTopUp/actions'\r\nimport { fetchUserUserAccounts } from 'pmt-modules/userAccount/actions'\r\nimport { GetRestaurantAction } from 'pmt-modules/restaurant'\r\n\r\nimport { getAbsolutePath } from 'pmt-utils/url'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { setCurrency } from 'pmt-utils/currency'\r\n\r\nimport { WebCustomerAction } from './actions'\r\n\r\nconst redirectToPostPaymentMiddleware = createMiddleware(\r\n  PostUserLightPaymentAction.SUCCESS,\r\n  ({ next, action, dispatch }) => {\r\n    const restaurantId = action.data.restaurantId\r\n    const checkId = action.data.check.id\r\n\r\n    next(action)\r\n\r\n    dispatch(resetPayment())\r\n    dispatch(resetPostPayment())\r\n\r\n    dispatch(redirectTo(getRoute('PAYMENT_CONFIRM'), { restaurantId, checkId }))\r\n    return createMiddleware.STOP_PROPAGATION\r\n  }\r\n)\r\n\r\nconst postPaymentSuccessMiddleware = createMiddleware(\r\n  PostPaymentAction.SUCCESS,\r\n  ({ next, action, dispatch }) => {\r\n    const restaurantId = action.data.restaurantId\r\n    const checkId = action.data.check.id\r\n\r\n    next(action)\r\n\r\n    dispatch(resetPayment())\r\n    dispatch(resetPostPayment())\r\n\r\n    dispatch(redirectTo(getRoute('PAYMENT_CONFIRM'), { restaurantId, checkId }))\r\n    return createMiddleware.STOP_PROPAGATION\r\n  }\r\n)\r\n\r\nconst postTopUpSuccessMiddleware = createMiddleware(\r\n  PostTopUpAction.SUCCESS,\r\n  ({ dispatch, next, action }) => {\r\n    dispatch(fetchUserUserAccounts('me'))\r\n\r\n    next(action)\r\n\r\n    dispatch(redirectTo(getRoute('USER_TOP_UP_CONFIRM')))\r\n    return createMiddleware.STOP_PROPAGATION\r\n  }\r\n)\r\n\r\nconst processPaymentMiddleware = createMiddleware(\r\n  WebCustomerAction.PROCESS_PAYMENT,\r\n  ({ action, dispatch }) => {\r\n    const { restaurantId, paymentMethod, check } = action\r\n    const payment = {\r\n      ...action.payment,\r\n      supportAsyncPayment: true,\r\n      asyncPaymentData: {\r\n        redirectUrl: getAbsolutePath(\r\n          generatePathWithParams(getRoute('PAYMENT_VERIFICATION'), {\r\n            checkId: check.id,\r\n            restaurantId: restaurantId,\r\n          })\r\n        ),\r\n      },\r\n    }\r\n\r\n    dispatch(\r\n      processPaymentv2(action.restaurantId, paymentMethod, payment, action.check)\r\n    )\r\n  }\r\n)\r\n\r\n/**\r\n * When in 3DSecure mode, API will return an http code 303 along with the payment information.\r\n * The payment information contains a property payIn3DSecureUrl indicating where to redirect the\r\n * user to process the 3DSecure verification.\r\n */\r\nconst postPaymentFailureMiddleware = createMiddleware(\r\n  [PostPaymentAction.FAILURE, PostUserLightPaymentAction.FAILURE],\r\n  ({ action, dispatch, next }) => {\r\n    if (isAsyncPaymentRedirectToPspResponse(action) && action.error.body.asyncPaymentData) {\r\n      next(action)\r\n      return dispatch(\r\n        redirectTo(getRoute('PAYMENT__ASYNC__FORM'), null, { flow: 'paymentAtTable' })\r\n      )\r\n    } else if (\r\n      isAsyncPaymentRedirectToPspResponse(action) &&\r\n      action.error.body.payment.asyncPaymentSecureUrl\r\n    ) {\r\n      dispatch(redirectToExternal(action.error.body.payment.asyncPaymentSecureUrl))\r\n    }\r\n  }\r\n)\r\n\r\n/**\r\n * When in 3DSecure mode, API will return an http code 303 along with the payment information.\r\n * The payment information contains a property payIn3DSecureUrl indicating where to redirect the\r\n * user to process the 3DSecure verification.\r\n */\r\nconst postTopUpFailureMiddleware = createMiddleware(\r\n  [PostTopUpAction.FAILURE],\r\n  ({ action, dispatch, next }) => {\r\n    if (isAsyncPaymentRedirectToPspResponse(action) && action.error.body.payment.asyncPaymentData) {\r\n      dispatch(redirectTo(getRoute('PAYMENT__ASYNC__FORM'), null, { flow: 'topUp' }))\r\n      return next(action)\r\n    } else if (\r\n      isAsyncPaymentRedirectToPspResponse(action) &&\r\n      action.error.body.payment.asyncPaymentSecureUrl\r\n    ) {\r\n      dispatch(redirectToExternal(action.error.body.payment.asyncPaymentSecureUrl))\r\n    }\r\n  }\r\n)\r\n\r\n/**\r\n * We get the payment after a 3DSecure transaction in order to verify its status\r\n * on success, we redirect to payment confirmation page\r\n */\r\nconst finalizeAsyncPaymentSuccess = createMiddleware(\r\n  GetAsyncPaymentAction.SUCCESS,\r\n  ({ action, dispatch, next }) => {\r\n    // on top-up we receive the top-up with the payment inside it.\r\n    // on payment we directly have the payment data\r\n    const isTopUp = action.response.payment?.paymentType === 7 // 7 is for DEPOSIT (top-up)\r\n    const isPayment = !isTopUp\r\n\r\n    if (isTopUp) {\r\n      // the API can gives us a success with an error model on it to avoid spamming error logs.\r\n      // But the real success is when we have the payment data\r\n      if (action.response.payment?.status === PaymentStatus.PAID) {\r\n        next(action)\r\n\r\n        dispatch(resetTopUp())\r\n\r\n        dispatch(redirectTo(getRoute('USER_TOP_UP_CONFIRM')))\r\n        return createMiddleware.STOP_PROPAGATION\r\n      }\r\n    }\r\n    if (isPayment) {\r\n      // the API can gives us a success with an error model on it to avoid spamming error logs.\r\n      // But the real success is when we have the payment data\r\n      if (action.response.payment?.status === PaymentStatus.PAID) {\r\n        next(action)\r\n\r\n        dispatch(resetPayment())\r\n        dispatch(resetPostPayment())\r\n\r\n        dispatch(\r\n          redirectTo(getRoute('PAYMENT_CONFIRM'), {\r\n            restaurantId: action.data.restaurantId,\r\n            checkId: action.data.checkId,\r\n          })\r\n        )\r\n        return createMiddleware.STOP_PROPAGATION\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nconst finalizeAsyncPaymentFailure = createMiddleware(\r\n  GetAsyncPaymentAction.FAILURE,\r\n  ({ action, dispatch }) => {\r\n    if (action.error) {\r\n      const isTopUp = !action.data?.checkId // trick to know if we are in payment or topup flow\r\n      const isPayment = !isTopUp\r\n\r\n      if (isTopUp) {\r\n        dispatch(redirectTo(getRoute('USER_TOP_UP')))\r\n      } else if (isPayment) {\r\n        dispatch(\r\n          redirectTo(getRoute('PAYMENT_PAYMENT'), {\r\n            restaurantId: action.data.restaurantId,\r\n            checkId: action.data.checkId,\r\n          })\r\n        )\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nconst updateCurrency = createMiddleware(\r\n  [\r\n    GetRefreshCheckAction.SUCCESS,\r\n    GetCheckWithCodeAction.SUCCESS,\r\n    GetCheckWithTableNumberAction.SUCCESS,\r\n    GetCheckWithPosCheckIdAction.SUCCESS,\r\n    GetCheckAction.SUCCESS,\r\n    MergeCheckWithCodeAction.SUCCESS,\r\n    GetRestaurantAction.SUCCESS,\r\n  ],\r\n  ({ action, getState, dispatch }) => {\r\n    setCurrency(action.response.currency)\r\n  }\r\n)\r\n\r\nconst refreshCheckSuccessFromCheck = createMiddleware(\r\n  GetRefreshCheckAction.SUCCESS,\r\n  ({ action, getState, dispatch }) => {\r\n    setCurrency(action.response.currency)\r\n\r\n    if (action.data.isFromCheck) {\r\n      const payment = getPayment(getState())\r\n      const paymentAmount = parseFloat(payment.amount)\r\n\r\n      if (action.response.outstandingBalance < paymentAmount) {\r\n        dispatch(\r\n          displayGenerousPaymentDialog({\r\n            restaurantId: action.data.restaurantId,\r\n            checkId: action.data.checkId,\r\n            amount: payment.amountFormatted,\r\n            outstandingBalance: formatPriceWithCurrency(action.response.outstandingBalance),\r\n          })\r\n        )\r\n      } else {\r\n        dispatch(\r\n          redirectTo(getRoute('PAYMENT_PAYMENT'), {\r\n            restaurantId: action.data.restaurantId,\r\n            checkId: action.data.checkId,\r\n          })\r\n        )\r\n      }\r\n    }\r\n  }\r\n)\r\n\r\nexport const webCustomerMiddlewares = [\r\n  finalizeAsyncPaymentFailure,\r\n  finalizeAsyncPaymentSuccess,\r\n  postPaymentSuccessMiddleware,\r\n  postPaymentFailureMiddleware,\r\n  postTopUpSuccessMiddleware,\r\n  postTopUpFailureMiddleware,\r\n  processPaymentMiddleware,\r\n  redirectToPostPaymentMiddleware,\r\n  updateCurrency,\r\n  refreshCheckSuccessFromCheck,\r\n]\r\n","import React from 'react'\r\n\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport Radio from '@material-ui/core/Radio'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nconst PaymentMethod = ({ checked, isOnlyMethodAllowed, label, value, children }) => (\r\n  <React.Fragment>\r\n    {!isOnlyMethodAllowed ? (\r\n      <FormControlLabel\r\n        fullWidth\r\n        value={value}\r\n        control={<Radio color=\"primary\" />}\r\n        label={<TypographyCustom type={checked ? '167' : '164'}>{label}</TypographyCustom>}\r\n      />\r\n    ) : (\r\n      <TypographyCustom type={checked ? '167' : '164'}>{label}</TypographyCustom>\r\n    )}\r\n    {children}\r\n  </React.Fragment>\r\n)\r\n\r\nexport default PaymentMethod","import React, { Fragment } from 'react'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { EventManager } from 'pmt-modules/event'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { PaymentMethodsAllowed } from 'pmt-modules/payment/constants'\r\n\r\nimport Divider from '@material-ui/core/Divider'\r\nimport RadioGroup from '@material-ui/core/RadioGroup'\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport Button from 'app/components/Button'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport PaymentMethod from './PaymentMethod'\r\n\r\nconst styles = theme => ({\r\n  container: {\r\n    flex: 1,\r\n  },\r\n  divider: {\r\n    margin: theme.spacing(2, 0),\r\n  },\r\n  explaination: {\r\n    margin: theme.spacing(2, 2),\r\n  },\r\n  tos: {\r\n    color: theme.pmt.colors.grey91,\r\n  },\r\n  link: {\r\n    textDecoration: 'underline',\r\n  }\r\n})\r\n\r\nclass PaymentMethods extends React.PureComponent {\r\n  state = {\r\n    // since TRD Payment is not setup yet, this is default\r\n    paymentMethod: PaymentMethodsAllowed.CREDIT_CARD,\r\n    showCreditCardForm: false,\r\n  }\r\n\r\n  handleSelect = e => {\r\n    const paymentMethod = parseInt(e.target.value, 10)\r\n    EventManager.dispatch(EventManager.Events.ON_PAYMENT_MODE_SELECT, {\r\n      paymentMode: paymentMethod,\r\n    })\r\n\r\n    this.setState({ paymentMethod })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      classes,\r\n      user,\r\n      restaurant,\r\n      restaurantsGroup,\r\n      isSubmitDisabled = false,\r\n      submitLabel,\r\n      onSubmit,\r\n    } = this.props\r\n\r\n    // TODO: Work in progress\r\n    const isTRDPaymentAllowed = false\r\n    const hasPaymentWithCardPrint = restaurant ? restaurant.hasPaymentWithCardPrint : true\r\n\r\n    let submitEnabled = false\r\n    switch (this.state.paymentMethod) {\r\n      case PaymentMethodsAllowed.CREDIT_CARD:\r\n        submitEnabled = !hasPaymentWithCardPrint\r\n        break\r\n      case PaymentMethodsAllowed.TRD:\r\n        submitEnabled = true\r\n        break\r\n      default:\r\n        break\r\n    }\r\n    submitEnabled = submitEnabled && !isSubmitDisabled\r\n\r\n    // we need to know the user type before displaying the form\r\n    // because some user types will load credit cards (like normal users), and some won't (like incognito or userLight users)\r\n    if (!user?.type) {\r\n      return <LoadingBlock show />\r\n    }\r\n\r\n    return (\r\n      <Fragment>\r\n        <div className={classes.container}>\r\n          <RadioGroup value={this.state.paymentMethod} onChange={this.handleSelect}>\r\n            <PaymentMethod\r\n              isOnlyMethodAllowed={!isTRDPaymentAllowed}\r\n              label={\r\n                restaurant.isPspSaferpay\r\n                  ? tr('web_customer.payment.online.title')\r\n                  : tr('web_customer.payment.credit_cards.title')\r\n              }\r\n              checked={this.state.paymentMethod === PaymentMethodsAllowed.CREDIT_CARD}\r\n              value={PaymentMethodsAllowed.CREDIT_CARD}\r\n            >\r\n              <p className={classes.explaination}>\r\n                {restaurant.isPspSaferpay\r\n                  ? tr('web_customer.payment.online.redirect.explaination')\r\n                  : tr('web_customer.payment.credit_cards.redirect.explaination')}\r\n              </p>\r\n            </PaymentMethod>\r\n\r\n            {isTRDPaymentAllowed && <Divider className={classes.divider} />}\r\n\r\n            {isTRDPaymentAllowed && (\r\n              <PaymentMethod\r\n                label={tr('global.payment.label.restaurant_ticket')}\r\n                value={PaymentMethodsAllowed.TRD}\r\n                checked={this.state.paymentMethod === PaymentMethodsAllowed.TRD}\r\n              />\r\n            )}\r\n\r\n            {isTRDPaymentAllowed && <Divider className={classes.divider} />}\r\n          </RadioGroup>\r\n        </div>\r\n\r\n        {(!this.state.showCreditCardForm ||\r\n          !hasPaymentWithCardPrint) /* is paygreen, no form to show */ && (\r\n            <React.Fragment>\r\n              {!isEmpty(restaurantsGroup?.userSettings?.tosUrl) && (\r\n                <TypographyCustom\r\n                  type=\"144\"\r\n                  className={classes.tos}\r\n                  dangerouslySetInnerHTML={{\r\n                    __html: tr('web_customer.payment.tos', {\r\n                      linkBegin: `<a class=\"${classes.link}\" href=\"${restaurantsGroup.userSettings.tosUrl}\" target=\"_blank\" rel=\"noopener noreferrer\">`,\r\n                      linkEnd: '</a>',\r\n                    }),\r\n                  }}\r\n                />\r\n              )}\r\n\r\n              <Button\r\n                size=\"large\"\r\n                className=\"u-marginTop30 u-sizeFullWidth\"\r\n                onClick={() => onSubmit(this.state.paymentMethod)}\r\n                disabled={!submitEnabled}\r\n              >\r\n                {submitLabel}\r\n              </Button>\r\n            </React.Fragment>\r\n          )}\r\n      </Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({})\r\n\r\nconst ComposedPaymentMethods = compose(\r\n  withStyles(styles),\r\n  connect(\r\n    mapStateToProps\r\n  )\r\n)(PaymentMethods)\r\n\r\nexport default props => (\r\n  <ComposedPaymentMethods\r\n    {...props}\r\n  />\r\n)\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport Button from 'pmt-ui/Button'\r\nimport Dialog, { DialogActions, DialogContent, DialogContentText, DialogTitle } from 'pmt-ui/Dialog'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\n\r\nconst ErrorWithRefundDialog = ({ paymentError, open, onClose }) => (\r\n  <Dialog\r\n    open={open}\r\n    onClose={onClose}\r\n    aria-labelledby=\"refund-error-dialog-title\"\r\n    aria-describedby=\"refund-error-dialog-description\"\r\n  >\r\n    <DialogTitle id=\"refund-error-dialog-title\">{paymentError.localizedMessage}</DialogTitle>\r\n    <DialogContent>\r\n      <DialogContentText id=\"refund-error-dialog-description\">\r\n        {tr('web_customer.payment.payment.refunded')}\r\n      </DialogContentText>\r\n    </DialogContent>\r\n    <DialogActions>\r\n      <Button onClick={onClose} autoFocus color=\"primary\">\r\n        OK\r\n      </Button>\r\n    </DialogActions>\r\n  </Dialog>\r\n)\r\n\r\nconst ErrorSnackBar = ({ paymentError, resetPostPayment }) => (\r\n  <ErrorBlock\r\n    mode={ErrorBlock.Mode.SNACKBAR}\r\n    error={paymentError}\r\n    options={{\r\n      onClose: () => resetPostPayment(),\r\n    }}\r\n  />\r\n)\r\n\r\nconst ErrorAlert = ({ paymentError, resetPostPayment }) => {\r\n  const [open, setOpen] = React.useState(true)\r\n\r\n  const resetAndClose = () => {\r\n    resetPostPayment()\r\n    setOpen(false)\r\n  }\r\n\r\n  if (!paymentError) {\r\n    return null\r\n  }\r\n  if (paymentError.refunded) {\r\n    return (\r\n      <ErrorWithRefundDialog\r\n        paymentError={paymentError}\r\n        resetPostPayment={resetPostPayment}\r\n        open={open}\r\n        onClose={resetAndClose}\r\n      />\r\n    )\r\n  } else {\r\n    return <ErrorSnackBar paymentError={paymentError} resetPostPayment={resetPostPayment} />\r\n  }\r\n}\r\n\r\nexport default ErrorAlert\r\n","import clsx from 'clsx'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport React from 'react'\r\n\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { isProd } from 'pmt-modules/environment'\r\n\r\nimport NumberField from 'pmt-ui/NumberField'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { formatPriceWithCurrency, getCurrencySymbol } from 'pmt-utils/currency'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    display: 'flex',\r\n     // using fixed values and not theme.spacing because used by Order Plugin and Web customer, which don't have the same theme.spacing\r\n     marginTop: '16px',\r\n  },\r\n  tip: {\r\n    padding: theme.spacing(1),\r\n    border: `1px solid ${theme.palette.primary.main}`,\r\n    borderRight: 0,\r\n    background: 'transparent',\r\n    color: theme.palette.text.primary,\r\n    cursor: 'pointer',\r\n    flex: 1,\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    alignItems: 'center',\r\n    '&:focus-visible': {\r\n      outline: `2px solid ${theme.palette.primary.main}`,\r\n      outlineOffset: 2,\r\n      zIndex: 1,\r\n    },\r\n  },\r\n  tipSelected: {\r\n    background: theme.palette.primary.main,\r\n    color: theme.pmt.colors.white,\r\n    fontWeight: 'bold',\r\n\r\n    '& .MuiInputBase-root': {\r\n      color: theme.pmt.colors.white,\r\n    },\r\n    '& .MuiInputAdornment-root p': {\r\n      color: theme.pmt.colors.white,\r\n    },\r\n  },\r\n  customTip: {\r\n    border: `1px solid ${theme.palette.primary.main}`,\r\n\r\n    '& .MuiInputBase-root::before, & .MuiInputBase-root::after': {\r\n      border: 'none!important',\r\n    },\r\n    '& .MuiInput-input': {\r\n      padding: 0,\r\n      textAlign: 'center',\r\n      minWidth: 40,\r\n    },\r\n    '& .MuiInputAdornment-root': {\r\n      margin: 0,\r\n    },\r\n  },\r\n}))\r\n\r\nconst CustomTip = ({ customValueSelected, onChange, classes, isPercentage, placeholder }) => (\r\n  <div className={clsx(classes.tip, classes.customTip, { [classes.tipSelected]: (customValueSelected) })}>\r\n    <NumberField\r\n      placeholder={placeholder}\r\n      min={0}\r\n      max={isPercentage ? 100 : isProd() ? 99 : 1000}\r\n      value={customValueSelected > 0 ? customValueSelected : ''} //  '' to reset field value\r\n      onChange={(e, value) => onChange(value)}\r\n      InputProps={{\r\n        endAdornment: <InputAdornment position=\"end\">{isPercentage ? '%' : getCurrencySymbol()}</InputAdornment>,\r\n      }}\r\n    />\r\n  </div>\r\n)\r\n\r\nconst Tip = ({ classes, label, selected, onClick }) => (\r\n  <button\r\n    type=\"button\"\r\n    onClick={onClick}\r\n    aria-pressed={selected}\r\n    className={clsx(classes.tip, { [classes.tipSelected]: selected })}\r\n  >\r\n    <TypographyCustom type=\"164\" component=\"span\" skipColor>{label}</TypographyCustom>\r\n  </button>\r\n)\r\n\r\n\r\nconst round = (exactValue, roundingValue) => {\r\n  return Math.round(exactValue / roundingValue) * roundingValue\r\n}\r\n\r\nconst TipBar = ({ tips, onChoseTip, tipsOptions, isPercentage, amountWithoutTips, roundValue }) => {\r\n  const classes = useStyles()\r\n  const [customValueSelected, setCustomValueSelected] = React.useState(0)\r\n  const [initialized, setInitialized] = React.useState(false)\r\n\r\n  const onTipSelection = React.useCallback((tipAmount, customValue) => {\r\n    onChoseTip(tipAmount)\r\n    setCustomValueSelected(customValue)\r\n  }, [onChoseTip])\r\n\r\n  const calculateAmountFromPercentage = React.useCallback((percentage, roundValue) => {\r\n    const exactAmount = amountWithoutTips * percentage / 100;\r\n    return round(exactAmount, roundValue)\r\n  }, [amountWithoutTips])\r\n\r\n  React.useEffect(\r\n    () => {\r\n      if (!initialized) {\r\n        // custom value (percentage or amount). 0 if no custom value\r\n        // initialized if there is no fixed value corresponding to the existing tips\r\n        let customValue = null\r\n        let matchingPossibleValue = tipsOptions.find(possibleValue => tips === (isPercentage ? calculateAmountFromPercentage(possibleValue.value, roundValue) : possibleValue.value))\r\n        if (tips > 0 && !matchingPossibleValue) {\r\n          customValue = { value: isPercentage ? Number((tips * 100 / amountWithoutTips).toFixed(2)) : tips }\r\n        }\r\n        const defaultValue = tipsOptions.find(possibleValue => possibleValue.selectedByDefault)\r\n        const currentValue = matchingPossibleValue ?? customValue ?? defaultValue ?? { value: 0 }\r\n        const tipAmount = isPercentage ? calculateAmountFromPercentage(currentValue.value, roundValue) : currentValue.value\r\n        setInitialized(true)\r\n        onTipSelection(tipAmount, customValue?.value)\r\n      }\r\n    },\r\n    [tipsOptions, amountWithoutTips, isPercentage, tips, calculateAmountFromPercentage, roundValue, onTipSelection, initialized]\r\n  )\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      {tipsOptions && tipsOptions.map(({ value }) => {\r\n\r\n        let selected = false\r\n        if (!customValueSelected) {\r\n          selected = isPercentage ? (tips === calculateAmountFromPercentage(value, roundValue)) : (value === tips)\r\n        }\r\n\r\n        return (\r\n          <Tip\r\n            classes={classes}\r\n            key={`tip-${value}`}\r\n            label={isPercentage ? `${value} %` : formatPriceWithCurrency(value)}\r\n            selected={selected}\r\n            // on click, toggle the tips\r\n            onClick={() => {\r\n              const tipAmount = selected ? 0 : isPercentage ? calculateAmountFromPercentage(value, roundValue) : value\r\n              const customValue = 0\r\n              onTipSelection(tipAmount, customValue)\r\n            }}\r\n          />\r\n        )\r\n      })}\r\n      <CustomTip\r\n        customValueSelected={customValueSelected}\r\n        onChange={value => {\r\n          const tipAmount = isPercentage ? calculateAmountFromPercentage(value, roundValue) : value\r\n          const customValue = value\r\n          onTipSelection(tipAmount, customValue)\r\n        }}\r\n        classes={classes}\r\n        isPercentage={isPercentage}\r\n        placeholder={tipsOptions && tipsOptions.length > 0 ? tr('global.payment.custom_tip') : ''}\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default TipBar\r\n","import React from 'react'\r\n\r\nimport Slider from '@material-ui/core/Slider'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  root: {\r\n    // using fixed values and not theme.spacing because used by Order Plugin and Web customer, which don't have the same theme.spacing\r\n    margin: '34px 16px 16px 16px',\r\n  },\r\n}))\r\n\r\n/**\r\n * To avoid imprecision such as x.000000000001 numbers after a calculation\r\n *\r\n * @return the rounded value after the 2nd floating digit (0.009 will be rounded to 0.01)\r\n */\r\nconst exact = x => {\r\n  return Math.round(x * 100.0) / 100.0\r\n}\r\n\r\nconst round = (exactValue, roundingValue) => {\r\n  return exact(Math.round(exactValue / roundingValue) * roundingValue)\r\n}\r\n\r\nconst TipSlider = ({\r\n  tips,\r\n  onChoseTip,\r\n  amountWithoutTips,\r\n  defaultSelectedPercentage,\r\n  roundValue,\r\n}) => {\r\n  const classes = useStyles()\r\n  const [initialized, setInitialized] = React.useState(false)\r\n\r\n  React.useEffect(\r\n    () => {\r\n      if (!initialized) {\r\n        if (tips > 0) {\r\n          // already some tips selected => we reselect them\r\n          onChoseTip(tips)\r\n        } else {\r\n          const defaultTipsValue = round(\r\n            ((defaultSelectedPercentage || 0) * amountWithoutTips) / 100,\r\n            roundValue\r\n          )\r\n          onChoseTip(defaultTipsValue)\r\n        }\r\n        setInitialized(true)\r\n      }\r\n    },\r\n    [amountWithoutTips, initialized, defaultSelectedPercentage, roundValue, onChoseTip, tips]\r\n  )\r\n\r\n  // 20 % max\r\n  const maxValue = round(0.2 * amountWithoutTips, roundValue)\r\n  const tipValueAsPercentage = Number(((tips * 100) / amountWithoutTips).toFixed())\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      <Slider\r\n        min={0}\r\n        max={maxValue}\r\n        value={tips}\r\n        onChange={(event, newValue) => {\r\n          onChoseTip(newValue)\r\n        }}\r\n        marks={true}\r\n        valueLabelDisplay=\"on\"\r\n        valueLabelFormat={value => `${tipValueAsPercentage} %`}\r\n        step={roundValue}\r\n        aria-label={tr('order.payment.tips.title')}\r\n        getAriaValueText={value => `${tipValueAsPercentage} %`}\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default TipSlider\r\n","import React from 'react'\r\n\r\nimport TipBar from './TipBar'\r\nimport TipSlider from './TipSlider'\r\n\r\nimport { TipsValueType } from 'pmt-modules/payment/constants'\r\n\r\nconst Tips = ({ tips, onChoseTip, tipsSettings, amountWithoutTips, roundingValue }) => {\r\n  if (!tipsSettings) {\r\n    return null\r\n  }\r\n  if (tipsSettings.slider) {\r\n    return (\r\n      <TipSlider\r\n        tips={tips}\r\n        onChoseTip={onChoseTip}\r\n        amountWithoutTips={amountWithoutTips}\r\n        defaultSelectedPercentage={tipsSettings.tipsSliderSettings?.defaultSelectedPercentage ?? 5}\r\n        roundValue={roundingValue || 0.01}\r\n      />\r\n    )\r\n  } else {\r\n    return (\r\n      <TipBar\r\n        tips={tips}\r\n        onChoseTip={onChoseTip}\r\n        amountWithoutTips={amountWithoutTips}\r\n        tipsOptions={tipsSettings.tipsFixedValuesSettings?.possibleValues}\r\n        isPercentage={tipsSettings.tipsFixedValuesSettings?.type === TipsValueType.PERCENTAGE}\r\n        roundValue={roundingValue || 0.01}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nexport default Tips\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport Divider from 'pmt-ui/Divider'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Price from 'pmt-ui/Price'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { TipsValueType } from 'pmt-modules/payment/constants'\r\n\r\n\r\nimport PaymentMethods from 'app/components/payment/PaymentMethods'\r\nimport ErrorAlert from './components/ErrorAlert'\r\nimport Tips from 'pmt-modules/payment/components/Tips'\r\n\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    padding: theme.spacing(2),\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    height: '100%',\r\n  },\r\n  outstandingBalance: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    padding: theme.spacing(1),\r\n  },\r\n  receipt: {\r\n    fontStyle: 'italic',\r\n    marginTop: theme.spacing(2),\r\n    paddingLeft: theme.spacing(1),\r\n    paddingRight: theme.spacing(1),\r\n  },\r\n  divider: {\r\n    marginTop: theme.spacing(2),\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  tipsTitle: {\r\n    display: 'flex',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n    padding: theme.spacing(1),\r\n  },\r\n  scrollContent: {\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    overflow: 'auto',\r\n  },\r\n  submitLabel: {\r\n    display: 'flex',\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  classes,\r\n  paymentError,\r\n  isFetching,\r\n  payment,\r\n  onPostPayment,\r\n  resetPostPayment,\r\n  restaurant,\r\n  restaurantsGroup,\r\n  selectTips,\r\n  user,\r\n  appConfig,\r\n}) => (\r\n  <div className={classes.root}>\r\n    <div className={classes.outstandingBalance}>\r\n      <TypographyCustom type=\"164\">\r\n        {tr('web_customer.payment.payment.outstanding_balance')}\r\n      </TypographyCustom>\r\n      <TypographyCustom type=\"247\">\r\n        <Price value={payment.totalWithTipFormatted} />\r\n      </TypographyCustom>\r\n    </div>\r\n\r\n    <TypographyCustom type=\"124\" className={classes.receipt}>\r\n      {tr('web_customer.payment.payment.receipt')}\r\n    </TypographyCustom>\r\n\r\n    <Divider className={classes.divider} />\r\n\r\n    <div className={classes.scrollContent}>\r\n      {appConfig?.front?.display?.tipsSettings?.activated && restaurant?.allowTips && (\r\n        <React.Fragment>\r\n          <div className={classes.tipsTitle}>\r\n            <TypographyCustom type=\"164\">\r\n              {tr('web_customer.payment.payment.tips')}\r\n            </TypographyCustom>\r\n            {(appConfig?.front?.display?.tipsSettings?.slider\r\n            || (appConfig?.front?.display?.tipsSettings?.tipsFixedValuesSettings?.type === TipsValueType.PERCENTAGE)\r\n            ) && (\r\n              <TypographyCustom type=\"164\">\r\n                {formatPriceWithCurrency(payment.tips)}\r\n              </TypographyCustom>\r\n            )}\r\n          </div>\r\n          <Tips\r\n              tips={payment.tips}\r\n              amountWithoutTips={payment.amount}\r\n              onChoseTip={tips => selectTips(tips)}\r\n              tipsSettings={appConfig?.front?.display?.tipsSettings}\r\n              roundingValue={appConfig?.front?.display?.roundingValue}/>\r\n          <Divider className={classes.divider} />\r\n        </React.Fragment>\r\n      )}\r\n\r\n      <ErrorAlert\r\n        paymentError={paymentError}\r\n        resetPostPayment={resetPostPayment}\r\n      />\r\n\r\n      <LoadingBlockWrapper show={isFetching} />\r\n\r\n      <PaymentMethods\r\n        isFetching={isFetching}\r\n        onSubmit={onPostPayment}\r\n        restaurant={restaurant}\r\n        restaurantsGroup={restaurantsGroup}\r\n        user={user}\r\n        submitLabel={\r\n          <TypographyCustom type=\"207\" skipColor className={classes.submitLabel}>\r\n            {tr('web_customer.payment.payment.pay')}\r\n            &nbsp;\r\n            <Price value={payment.totalWithTipFormatted} />\r\n          </TypographyCustom>\r\n        }\r\n      />\r\n    </div>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport {\r\n  AuthMode,\r\n  getAuthCookie,\r\n  getIncognitoCookie,\r\n  getUserLightCookie,\r\n  haveAuthCredentials,\r\n} from 'pmt-modules/auth'\r\nimport { getAuthenticatedUser } from 'pmt-modules/authenticatedUser/selectors'\r\nimport { PaymentType } from 'pmt-modules/global'\r\nimport {\r\n  getPaymentError,\r\n  isFetchingPostPaymentAtTable,\r\n  resetPostPayment,\r\n  selectTips,\r\n} from 'pmt-modules/payment'\r\nimport withCheck from 'pmt-modules/payment/components/withCheck'\r\nimport { isFetchingRegister, registerAsIncognito } from 'pmt-modules/registration'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { withRestaurantsGroupMine } from 'pmt-modules/restaurantsGroup/components'\r\nimport { getRoute, redirectTo, replaceWith } from 'pmt-modules/routing'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\nimport { processPaymentv2 } from 'pmt-modules/webCustomer'\r\nimport { LoadingBlock } from 'pmt-ui/LoadingBlock'\r\n\r\nimport Page from 'app/components/Page'\r\n\r\nimport View from './View'\r\n\r\n/**\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5b684e7fd64ef37e2f54bc2d\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5bfd651553c3184cb33011cb\r\n * https://paymytable.atlassian.net/browse/PP-897\r\n */\r\nclass Payment extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!this.isCorrectlyAuthenticated(props.appConfig.authentication)) {\r\n      // user is not authenticated, or not authenticated with the appropriate mode (normal/userLight/incognito) => make him authenticate\r\n      if (getUserLightCookie()) {\r\n        // user is light, but should be normal => force Registering\r\n        props.replaceWith(getRoute('REGISTER'), null, {\r\n          redirectTo: window.location.toString(),\r\n          restaurantId: props.restaurant?.id,\r\n        })\r\n      } else {\r\n        // user is totally unknown => login\r\n        props.replaceWith(getRoute('LOGIN'), null, {\r\n          redirectTo: window.location.toString(),\r\n          restaurantId: props.restaurant?.id,\r\n        })\r\n      }\r\n    }\r\n  }\r\n\r\n  componentWillUnmount() {\r\n  }\r\n\r\n  isCorrectlyAuthenticated = authenticationSettings => {\r\n    // cf. getAuthorizationFromModeAndCookies\r\n    if (authenticationSettings.mode === AuthMode.NORMAL) {\r\n      if (getAuthCookie() != null) {\r\n        return true // already authenticated as normal\r\n      } else if (authenticationSettings.allowIncognito && getIncognitoCookie()) {\r\n        return true // already authenticated as incognito\r\n      }\r\n    } else if (authenticationSettings.mode === AuthMode.LIGHT) {\r\n      if (getAuthCookie() != null) {\r\n        return true // already authenticated as normal\r\n      } else if (getUserLightCookie() != null) {\r\n        return true // already authenticated as userLight\r\n      } else if (authenticationSettings.allowIncognito && getIncognitoCookie()) {\r\n        return true // already authenticated as incognito\r\n      }\r\n    } else if (authenticationSettings.mode === AuthMode.INCOGNITO_ONLY) {\r\n      if (getAuthCookie() != null) {\r\n        // allow authenticated TEST user even on incognito_only apiConsumer\r\n        // so a user can use the login page to authenticate as TEST user, and access test restaurants\r\n        return true // already authenticated as normal (eg. test user)\r\n      } else if (getIncognitoCookie() != null) {\r\n        return true // already authenticated as incognito\r\n      }\r\n    }\r\n    return false\r\n  }\r\n\r\n  handlePostPayment = (paymentMethod) => {\r\n    const { restaurantId, payment, check } = this.props\r\n\r\n    this.props.processPaymentv2(restaurantId, paymentMethod, payment, check)\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      payment,\r\n      paymentError,\r\n      formsAreValid,\r\n      formsErrors,\r\n      formsData,\r\n      isFetchingPostPaymentAtTable,\r\n      resetPostPayment,\r\n      appConfig,\r\n      checkId,\r\n      restaurant,\r\n      restaurantsGroup,\r\n      restaurantId,\r\n      redirectTo,\r\n      selectTips,\r\n      authenticatedUser,\r\n      isFetchingRegister,\r\n    } = this.props\r\n\r\n    if (!this.isCorrectlyAuthenticated(appConfig.authentication) && !isFetchingRegister) {\r\n      return null\r\n    }\r\n\r\n    return (\r\n      <Page\r\n        title={tr(\r\n          (payment.type === PaymentType.ALL && 'web_customer.payment.all.title') ||\r\n            (payment.type === PaymentType.SHARE && 'web_customer.payment.share.title') ||\r\n            (payment.type === PaymentType.ENTRIES && 'web_customer.payment.choose.title')\r\n        )}\r\n        goBackRoute={() =>\r\n          redirectTo(\r\n            getRoute(\r\n              payment.type === PaymentType.ALL\r\n                ? 'PAYMENT_CHECK_VIEW'\r\n                : payment.type === PaymentType.SHARE\r\n                  ? 'PAYMENT_SHARE'\r\n                  : 'PAYMENT_CHOOSE'\r\n            ),\r\n            { restaurantId, checkId }\r\n          )\r\n        }\r\n      >\r\n        <LoadingBlock show={!restaurant || isFetchingRegister}>\r\n          {() => (\r\n            <View\r\n              appConfig={appConfig}\r\n              isFetching={isFetchingPostPaymentAtTable}\r\n              formsAreValid={formsAreValid}\r\n              formsErrors={formsErrors}\r\n              formsData={formsData}\r\n              paymentError={paymentError}\r\n              payment={payment}\r\n              onPostPayment={this.handlePostPayment}\r\n              resetPostPayment={resetPostPayment}\r\n              user={authenticatedUser}\r\n              restaurant={restaurant}\r\n              restaurantsGroup={restaurantsGroup}\r\n              selectTips={selectTips}\r\n            />\r\n          )}\r\n        </LoadingBlock>\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  haveAuthCredentials: haveAuthCredentials(state),\r\n  isFetchingPostPaymentAtTable: isFetchingPostPaymentAtTable(state),\r\n  paymentError: getPaymentError(state),\r\n  authenticatedUser: getAuthenticatedUser(state),\r\n  isFetchingRegister: isFetchingRegister(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withCheck,\r\n  withRestaurant,\r\n  withUserMe,\r\n  withRestaurantsGroupMine(),\r\n  connect(\r\n  mapStateToProps,\r\n  {\r\n    processPaymentv2,\r\n    replaceWith,\r\n    redirectTo,\r\n    selectTips,\r\n    resetPostPayment,\r\n    registerAsIncognito,\r\n  }\r\n))(Payment)\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport LoadingBlock from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    height: '100%',\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n    justifyContent: 'center',\r\n  },\r\n  loadingBlock: {\r\n    background: 'transparent',\r\n  },\r\n  wording: {\r\n    marginBottom: theme.spacing(4),\r\n  },\r\n})\r\n\r\nconst View = ({ classes }) => (\r\n  <div className={classes.root}>\r\n    <div>\r\n      <TypographyCustom type={167} align=\"center\" className={classes.wording}>\r\n        {tr('web_customer.payment.verification')}\r\n      </TypographyCustom>\r\n      <LoadingBlock show classes={{ loadingBlock: classes.loadingBlock }} />\r\n    </div>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { getAsyncPayment } from 'pmt-modules/asyncPayment'\r\nimport { createUserLightBasic } from 'pmt-modules/api/utils'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { getPostPayment } from 'pmt-modules/payment'\r\nimport withCheck from 'pmt-modules/payment/components/withCheck'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nimport Page from '../../../components/Page'\r\nimport View from './View'\r\n\r\n\r\nclass PaymentVerificationPage extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    const { restaurantId, checkId } = props\r\n    const options = { restaurantId, checkId }\r\n\r\n    const userLight = getQueryParam('userLight')\r\n    if (userLight) {\r\n      options.authorization = createUserLightBasic(decodeURIComponent(userLight))\r\n    }\r\n\r\n    if (!isNil(props.postPayment) && !isNil(props.postPayment.id)) {\r\n      props.getAsyncPayment(props.postPayment.id, options)\r\n    } else {\r\n      props.redirectTo(getRoute('PAYMENT_PAYMENT'), options)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { restaurant } = this.props\r\n\r\n    return (\r\n      <Page title={restaurant ? restaurant.name : ''} disableBack>\r\n        <View />\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  postPayment: getPostPayment(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\nwithCheck,\r\nwithRestaurant,\r\n  connect(mapStateToProps, {\r\n  redirectTo,\r\n  getAsyncPayment,\r\n}))(PaymentVerificationPage)\r\n","import isNil from 'lodash/isNil'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatUserAccount, formatUserAccounts } from './format'\r\n\r\nimport { createSimpleSelector } from '../redux'\r\n\r\nconst getUserAccounts = state => state.entities.userAccounts\r\nconst getUserIdOnProps = (state, props) => props.userId\r\nconst getUserAccountIdOnProps = (state, props) => props.userAccountId\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeIsFetchingUserUserAccount = () =>\r\n  createSelector(\r\n    [getUserIdOnProps, getUserAccountIdOnProps, getUserAccounts],\r\n    (userId, userAccountId, userAccountsState) => {\r\n      const userAccountsData = userAccountsState.get(userId, null)\r\n      if (!isNil(userAccountsData)) {\r\n        const userAccounts = userAccountsData.get('list', null)\r\n        if (!isNil(userAccounts)) {\r\n          const userAccount = userAccounts[userAccountId]\r\n          if (!isNil(userAccount)) {\r\n            return userAccount.isFetching\r\n          }\r\n        }\r\n      }\r\n\r\n      return false\r\n    }\r\n  )\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeIsFetchingUserUserAccounts = () =>\r\n  createSelector([getUserIdOnProps, getUserAccounts], (userId, userAccountsState) => {\r\n    const userAccountsData = userAccountsState.get(userId)\r\n    if (isNil(userAccountsData)) {\r\n      return false\r\n    }\r\n\r\n    return userAccountsData.get('isFetching', false)\r\n  })\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeGetUserUserAccountsData = () =>\r\n  createSelector([getUserIdOnProps, getUserAccounts], (userId, userAccountsState) => {\r\n    const userAccountsData = userAccountsState.get(userId)\r\n    if (isNil(userAccountsData)) {\r\n      return null\r\n    }\r\n    return userAccountsData.toJS()\r\n  })\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeGetUserUserAccounts = () =>\r\n  createSelector([getUserIdOnProps, getUserAccounts], (userId, userAccountsState) => {\r\n    const userAccountsData = userAccountsState.get(userId)\r\n    if (isNil(userAccountsData)) {\r\n      return null\r\n    }\r\n\r\n    let userAccounts = userAccountsData.get('list')\r\n\r\n    if (isNil(userAccounts)) {\r\n      return null\r\n    }\r\n\r\n    userAccounts = Object.keys(userAccounts).map(userAccountId => userAccounts[userAccountId].data)\r\n\r\n    return formatUserAccounts(userAccounts)\r\n  })\r\n\r\n/**\r\n * Required props:\r\n * - userId\r\n * - userAccountId\r\n */\r\nexport const makeGetUserUserAccount = () =>\r\n  createSelector(\r\n    [getUserIdOnProps, getUserAccountIdOnProps, getUserAccounts],\r\n    (userId, userAccountId, userAccountsState) => {\r\n      const userAccountsData = userAccountsState.get(userId)\r\n      if (isNil(userAccountsData)) {\r\n        return null\r\n      }\r\n\r\n      let userAccounts = userAccountsData.get('list')\r\n\r\n      if (isNil(userAccounts)) {\r\n        return null\r\n      }\r\n\r\n      let userAccount = userAccounts[userAccountId]\r\n\r\n      if (isNil(userAccount)) {\r\n        return null\r\n      }\r\n\r\n      userAccount = userAccount.data\r\n\r\n      return formatUserAccount(userAccount)\r\n    }\r\n  )\r\n\r\n/**\r\n * For convenience, for now, we consider that the user will have only 1 UserAccount\r\n *\r\n * Required props:\r\n * - userId\r\n */\r\nexport const makeGetDefaultUserUserAccount = () =>\r\n  createSelector([getUserIdOnProps, getUserAccounts], (userId, userAccountsState) => {\r\n    const userAccountsData = userAccountsState.get(userId)\r\n    if (isNil(userAccountsData)) {\r\n      return null\r\n    }\r\n\r\n    let userAccounts = userAccountsData.get('list')\r\n\r\n    if (isNil(userAccounts)) {\r\n      return null\r\n    }\r\n\r\n    let userAccount = userAccounts[Object.keys(userAccounts)[0]]\r\n\r\n    if (isNil(userAccount)) {\r\n      return null\r\n    }\r\n\r\n    userAccount = userAccount.data\r\n\r\n    return formatUserAccount(userAccount)\r\n  })\r\n\r\n//\r\n//\r\n//\r\n\r\nconst updateUserAccountSelectors = createSimpleSelector(state => state.entities.updateUserAccount)\r\n\r\nexport const getUpdateUserAccountError = updateUserAccountSelectors.getError\r\nexport const getUpdateUserAccountData = updateUserAccountSelectors.getData\r\nexport const isFetchingUpdateUserAccount = updateUserAccountSelectors.isFetching\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport isNull from 'lodash/isNull'\r\n\r\nimport { fetchUserUserAccounts } from '../../actions'\r\n\r\nimport {\r\n  makeGetUserUserAccounts,\r\n  makeIsFetchingUserUserAccounts,\r\n  makeGetDefaultUserUserAccount,\r\n} from '../../selectors'\r\n\r\nimport { redirectTo, getRoute } from '../../../routing'\r\n\r\n/**\r\n * Container that fetch the credit cards for the given `userId` and pass it to the children.\r\n * The `children` must be a `Function as child component`.\r\n *\r\n * Requirements:\r\n * - userId, can be 'me'\r\n *\r\n */\r\nclass UserAccountsContainer extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (\r\n      props.forceUpdate ||\r\n      ((isNull(props.userAccounts) || isNull(props.userAccounts[0])) &&\r\n        !props.isFetchingUserAccounts)\r\n    ) {\r\n      this.loadUserUserAccounts(props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    if (nextProps.userId !== props.userId && !props.isFetchingUserAccounts) {\r\n      this.loadUserUserAccounts(nextProps)\r\n    }\r\n  }\r\n\r\n  loadUserUserAccounts(props) {\r\n    props.fetchUserUserAccounts(props.userId)\r\n  }\r\n\r\n  render() {\r\n    const { isFetchingUserAccounts, userAccounts, userId, children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      isFetchingUserAccounts,\r\n      userAccounts,\r\n      // in most cases, a user only have one user account\r\n      userAccount: userAccounts && userAccounts.length > 0 ? userAccounts[0] : null,\r\n      userId,\r\n      onRedirectToTopUp: () => {\r\n        this.props.redirectTo(getRoute('USER_TOP_UP'))\r\n      },\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nUserAccountsContainer.propTypes = {\r\n  fetchUserUserAccounts: PropTypes.func.isRequired,\r\n  isFetchingUserAccounts: PropTypes.bool,\r\n  userAccounts: PropTypes.array,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getUserAccounts = makeGetUserUserAccounts()\r\n  const getDefaultUserUserAccount = makeGetDefaultUserUserAccount()\r\n  const isFetchingUserAccounts = makeIsFetchingUserUserAccounts()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    const defaultUserAccount = getDefaultUserUserAccount(state, props)\r\n\r\n    return {\r\n      defaultUserAccount,\r\n      // Note: For now we handle only one UserAccount, so the userAccount is the default one\r\n      userAccount: defaultUserAccount,\r\n      userAccounts: getUserAccounts(state, props),\r\n      isFetchingUserAccounts: isFetchingUserAccounts(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchUserUserAccounts,\r\n    redirectTo,\r\n  }\r\n)(UserAccountsContainer)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { fetchUserUserAccount } from '../../actions'\r\n\r\nimport { makeGetUserUserAccount, makeIsFetchingUserUserAccount } from '../../selectors'\r\n\r\nimport { redirectTo, getRoute } from '../../../routing'\r\n\r\n/**\r\n * The `children` must be a `Function as child component`.\r\n *\r\n * Requirements:\r\n * - userId, can be 'me'\r\n *\r\n */\r\nclass UserAccountContainer extends React.Component {\r\n  componentWillMount() {\r\n    if (this.props.userAccount === null || this.props.refreshToken) {\r\n      this.loadUserAccount(this.props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    if (nextProps.userAccountId !== this.props.userAccountId) {\r\n      this.loadUserAccount(nextProps)\r\n    }\r\n  }\r\n\r\n  loadUserAccount(props) {\r\n    props.fetchUserUserAccount(props.userId, props.userAccountId, props.refreshToken)\r\n  }\r\n\r\n  render() {\r\n    const { isFetchingUserAccount, userAccount, userId, children, ...otherProps } = this.props\r\n\r\n    return children({\r\n      isFetchingUserAccount,\r\n      userAccount,\r\n      userId,\r\n      onRedirectToTopUp: () => {\r\n        this.props.redirectTo(getRoute('USER_TOP_UP'))\r\n      },\r\n      onLoadUserAccount: () => {\r\n        this.loadUserAccount(this.props)\r\n      },\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nUserAccountContainer.propTypes = {\r\n  fetchUserUserAccount: PropTypes.func.isRequired,\r\n  isFetchingUserAccount: PropTypes.bool,\r\n  userAccount: PropTypes.object,\r\n  refreshToken: PropTypes.bool,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nUserAccountContainer.defaultProps = {\r\n  refreshToken: false,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const getUserAccount = makeGetUserUserAccount()\r\n  const isFetchingUserAccount = makeIsFetchingUserUserAccount()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      // Note: For now we handle only one UserAccount, so the userAccount is the default one\r\n      userAccount: getUserAccount(state, props),\r\n      isFetchingUserAccount: isFetchingUserAccount(state, props),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchUserUserAccount,\r\n    redirectTo,\r\n  }\r\n)(UserAccountContainer)\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport Typography from 'pmt-ui/Typography'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport Button from 'pmt-ui/Button'\r\n\r\nconst LinkToPopUp = ({ show, onRedirectToTopUp }) =>\r\n  !show ? null : (\r\n    <Button\r\n      color=\"primary\"\r\n      variant=\"contained\"\r\n      style={{\r\n        width: '100%',\r\n      }}\r\n      onClick={onRedirectToTopUp}\r\n    >\r\n      {tr('global.user_account.top_up', {\r\n        fr: 'Recharger',\r\n        context: '',\r\n        desc: 'Button to top up displayed on user account',\r\n      })}\r\n    </Button>\r\n  )\r\n\r\nconst View = ({\r\n  isFetchingUserAccounts,\r\n  userAccount,\r\n  dislayLinkToTopUp,\r\n  onRedirectToTopUp,\r\n  balanceLabel,\r\n  restaurantsGroup,\r\n}) => (\r\n  <div className=\"u-textAlignCenter u-marginTop15 u-marginBottom15 u-paddingLeft20 u-paddingRight20 u-flex0\">\r\n    {!isFetchingUserAccounts && isEmpty(userAccount) ? (\r\n      <ErrorBlock\r\n        mode={ErrorBlock.Mode.SNACKBAR}\r\n        error={{\r\n          message: tr('global.user_account.error', {\r\n            restaurantsGroupName: restaurantsGroup && restaurantsGroup.name,\r\n          }),\r\n        }}\r\n      />\r\n    ) : (\r\n      <React.Fragment>\r\n        <Typography variant=\"body2\" className=\"u-fontSize18 u-uiTextMedium\">\r\n          {balanceLabel}\r\n        </Typography>\r\n\r\n        <Typography variant=\"body2\" element=\"div\" className=\"u-fontSize32 u-marginBottom15\">\r\n          {userAccount && userAccount.amountFormatted}\r\n        </Typography>\r\n      </React.Fragment>\r\n    )}\r\n\r\n    <LinkToPopUp show={dislayLinkToTopUp} onRedirectToTopUp={onRedirectToTopUp} />\r\n  </div>\r\n)\r\n\r\nexport default View\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { withRestaurantsGroupMine } from 'pmt-modules/restaurantsGroup/components'\r\nimport UserAccountsContainer from '../UserAccountsContainer'\r\n\r\nimport View from './View'\r\n\r\nconst defaultBalanceLabel = 'global.user_account.my_credit'\r\n\r\nclass UserAccountRemainingView extends React.PureComponent {\r\n  render() {\r\n    const {\r\n      userId,\r\n      forceUpdate = false,\r\n      dislayLinkToTopUp = false,\r\n      balanceLabel = defaultBalanceLabel,\r\n      restaurantsGroup,\r\n    } = this.props\r\n\r\n    return (\r\n      <UserAccountsContainer userId={userId} forceUpdate={forceUpdate}>\r\n        {props => (\r\n          <View\r\n            restaurantsGroup={restaurantsGroup}\r\n            dislayLinkToTopUp={dislayLinkToTopUp}\r\n            balanceLabel={tr(balanceLabel)}\r\n            {...props}\r\n          />\r\n        )}\r\n      </UserAccountsContainer>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withRestaurantsGroupMine()(UserAccountRemainingView)\r\n","import {\r\n  createApiEnumAction,\r\n  createApiCallAction,\r\n  //  createTestApiCallAction,\r\n} from '../api/utils'\r\n\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport UserApi from '../api/calls/UserApi'\r\n\r\nimport { replaceWith, getRoute } from '../routing'\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const CreateUserPostUserAction = createApiEnumAction('CREATE_USER::POST_USER')\r\n\r\n/**\r\n *\r\n * @param  {[type]} rGroupId\r\n * @param  {[type]} user\r\n * @param  {Object} [props={}] can contains:\r\n *                             - companyId: default company for the user account\r\n */\r\nexport const postUser = (rGroupId, user, props = {}) => {\r\n  const userToSend = user\r\n\r\n  // the API allows a pro to create a user without an email, but it must be null, not empty\r\n  if (isEmpty(userToSend.email)) {\r\n    userToSend.email = null\r\n  }\r\n\r\n  return createApiCallAction(CreateUserPostUserAction, UserApi.postUser(rGroupId, userToSend), {\r\n    rGroupId,\r\n    userToSend,\r\n    props,\r\n  })\r\n}\r\n\r\n// export const postUser = (rGroupId, user) => createTestApiCallAction(\r\n// CreateUserPostUserAction,\r\n// // true,\r\n// false,\r\n// {\r\n//   data: {\r\n//     rGroupId,\r\n//     user,\r\n//   },\r\n//   response: {\r\n//     id: '5666904823824384',\r\n//     ...user\r\n//   },\r\n//   error: {\r\n//     code: '100',\r\n//     message: 'An error occurred',\r\n//   }\r\n// }\r\n// )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const redirectToUserPage = (rGroupId, userId, userAccount = null) => {\r\n  const companyId = userAccount ? userAccount.externalInfo.companyId : null\r\n\r\n  //\r\n  // if the use has a company we redirect to the card on the company, otherwise, we display the\r\n  // default user card\r\n  //\r\n  let route = null\r\n  if (!isEmpty(companyId)) {\r\n    route = replaceWith(getRoute('BO_COMPANY_USER_CARD'), {\r\n      companyId,\r\n      userId,\r\n    })\r\n  } else {\r\n    route = replaceWith(getRoute('BO_USER_CARD'), {\r\n      userId,\r\n    })\r\n  }\r\n\r\n  return route\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const StepActions = {\r\n  REDIRECT_THIRD_STEP: 'REDIRECT::STEP::THIRD',\r\n}\r\n\r\n/**\r\n * Redirect to the third step.\r\n *\r\n */\r\nexport const redirectToUserCreationThirdStep = (rGroupId, user) =>\r\n  redirectToUserPage(rGroupId, user.id)\r\n","import { createSimpleSelector } from '../redux'\r\n\r\n//\r\n//\r\n//\r\n\r\nconst createUserPostUserSelectors = createSimpleSelector(\r\n  state => state.entities.userCreation.user\r\n)\r\n\r\nexport const isFetchingPostUser = createUserPostUserSelectors.isFetching\r\nexport const getDataPostUser = createUserPostUserSelectors.getData\r\nexport const getErrorPostUser = createUserPostUserSelectors.getError\r\n","import { createSimpleReducer } from '../redux'\r\n\r\nimport { combineReducers } from 'redux'\r\n\r\nimport {\r\n  CreateUserPostUserAction,\r\n} from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport * from './middlewares'\r\nexport * from './selectors'\r\n\r\nconst userReducer = createSimpleReducer(CreateUserPostUserAction)\r\n\r\nexport const userCreationReducer = combineReducers({\r\n  user: userReducer,\r\n})\r\n","import {\r\n  FetchUserUserAccountAction,\r\n  fetchUserUserAccount,\r\n  UpdateUserAccountAction,\r\n} from './actions'\r\n\r\nimport {\r\n  redirectToUserPage,\r\n} from './../proCreateUser'\r\n\r\nimport {\r\n  createMiddleware,\r\n} from '../redux'\r\n\r\nconst TOKEN_EXPIRATION_DELAY = 840000 // 14 minutes\r\n\r\n/**\r\n* Intercepts FetchUserUserAccountAction.SUCCESS action.\r\n* The data received contains a user account\r\n*/\r\nconst fetchUserAccountMiddleware = createMiddleware(\r\n  FetchUserUserAccountAction.SUCCESS,\r\n  ({ dispatch, action }) => {\r\n    if (action.data.refreshToken) {\r\n      setTimeout(() => {\r\n        dispatch(fetchUserUserAccount(action.data.userId, action.data.accountId, action.data.refreshToken))\r\n      }, TOKEN_EXPIRATION_DELAY);\r\n    }\r\n  }\r\n)\r\n\r\nconst updatedUserAccountReducer = createMiddleware(\r\n  UpdateUserAccountAction.SUCCESS,\r\n  ({ action, dispatch }) => {\r\n    const { response } = action\r\n\r\n    const userId = response.userId\r\n\r\n    //\r\n    // if the use has a company we redirect to the card on the company, otherwise, we display the\r\n    // default user card\r\n    //\r\n    let route = redirectToUserPage(response.restaurantsGroupId, userId, response)\r\n\r\n    dispatch(route)\r\n  }\r\n)\r\n\r\nexport const userAccountMiddlewares = [\r\n  fetchUserAccountMiddleware,\r\n]\r\n\r\nexport const boUserAccountMiddlewares = [\r\n  updatedUserAccountReducer,\r\n]\r\n","import Immutable from 'immutable'\r\n\r\nimport {\r\n  FetchUserUserAccountAction,\r\n  FetchUserUserAccountsAction,\r\n  UpdateUserAccountAction,\r\n  UserAccountAction,\r\n} from './actions'\r\n\r\nimport { createSimpleReducer } from '../redux'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './components'\r\nexport * from './middlewares'\r\n\r\n// Example of restaurant data\r\n// {\r\n//   cards: null,\r\n//   isFetching: false,\r\n//   lastUpdated: null,\r\n//   error: null,\r\n// }\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\n// TODO: since this is persisted, we persist 'isFetching' to false in some cases, so we never\r\n// try to load the user accounts. The front display an infinite loading.\r\n// we must set isFetching to false when rehydrating the state.\r\n// I think this bug exists on some other reducers\r\n// solutions?\r\n// - do not persist the root reducer, but persist each reducer, this would allow us to configure each\r\n// reducer persistance independantly.\r\n// - we should make reducers config to be persisted on the reducer file not on entities, via a configuration\r\n// - if the front wants to disable the behaviour, it can disable the config from entities.\r\n// - For now: we force the loading of the user accounts data when we arrive on the payment page, to\r\n// avoid having the infinite loading\r\nexport const userUserAccountsReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case UserAccountAction.RESET:\r\n      return DEFAULT\r\n\r\n    case FetchUserUserAccountsAction.REQUEST:\r\n      return state.merge({\r\n        [action.data.userId]: {\r\n          list: null,\r\n          isFetching: true,\r\n          lastUpdated: null,\r\n          error: null,\r\n        },\r\n      })\r\n\r\n    case FetchUserUserAccountsAction.SUCCESS:\r\n      return state\r\n        .merge({\r\n          [action.data.userId]: {\r\n            isFetching: false,\r\n            lastUpdated: new Date(),\r\n            error: null,\r\n          },\r\n        })\r\n        .setIn(\r\n          [action.data.userId, 'list'],\r\n          (action.response || []).reduce((acc, userAccount) => {\r\n            acc[userAccount.id] = {\r\n              data: userAccount,\r\n              isFetching: false,\r\n              lastUpdated: new Date(),\r\n              error: null,\r\n            }\r\n            return acc\r\n          }, {})\r\n        )\r\n\r\n    case FetchUserUserAccountsAction.FAILURE:\r\n      return state.merge({\r\n        [action.data.userId]: {\r\n          list: null,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: action.error,\r\n        },\r\n      })\r\n\r\n    case FetchUserUserAccountAction.REQUEST:\r\n      return state.mergeIn([action.data.userId, 'list'], {\r\n        // we set data to its existing state because we don't want to lose data here\r\n        [action.data.accountId]: {\r\n          ...(state.get(action.data.userId).get('list', {})[action.data.accountId] || {}),\r\n          ...{\r\n            isFetching: true,\r\n            error: null,\r\n          },\r\n        },\r\n      })\r\n\r\n    case FetchUserUserAccountAction.SUCCESS:\r\n    case UpdateUserAccountAction.SUCCESS:\r\n      return state.setIn([action.data.userId, 'list'], {\r\n        [action.data.accountId]: {\r\n          data: action.response,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: null,\r\n        },\r\n      })\r\n\r\n    case FetchUserUserAccountAction.FAILURE:\r\n      return state.setIn([action.data.userId, 'list'], {\r\n        [action.data.accountId]: {\r\n          data: null,\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: action.error,\r\n        },\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const updateUserAccountReducer = createSimpleReducer(UpdateUserAccountAction)\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport isNil from 'lodash/isNil'\r\n\r\n// https://blog.logrocket.com/advanced-react-router-concepts-code-splitting-animated-transitions-scroll-restoration-recursive-17096c0cf9db\r\nclass ScrollToTop extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n    // scroll to top when arriving on a new page\r\n    window.scrollTo(0, 0)\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    // Note: we can't compare the location object, since it changes when the anchor change\r\n    if (\r\n      this.props.location.pathname !== prevProps.location.pathname &&\r\n      (isNil(this.props.isInactive) || !this.props.isInactive(prevProps, this.props))\r\n    ) {\r\n      window.scrollTo(0, 0)\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const { WrappedComponent, ...otherProps } = this.props\r\n    return <WrappedComponent {...otherProps} />\r\n  }\r\n}\r\n\r\nScrollToTop.defaultProps = {\r\n  isInactive: null,\r\n}\r\n\r\nScrollToTop.propTypes = {\r\n  isInactive: PropTypes.func,\r\n}\r\n\r\nexport default ScrollToTop\r\n","import React from 'react'\r\n\r\nimport ScrollToTop from './ScrollToTop'\r\n\r\nconst withScrollToTop = (options = {}) => WrappedComponent => {\r\n  return props => <ScrollToTop WrappedComponent={WrappedComponent} {...props} {...options} />\r\n}\r\n\r\nexport default withScrollToTop\r\n","import React from 'react'\r\n\r\nimport isNil from 'lodash/isNil'\r\nimport isFunction from 'lodash/isFunction'\r\nimport Dialog, { DialogContent, DialogTitle, DialogActions } from 'pmt-ui/Dialog'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  dialogActions: {},\r\n  dialogContent: {},\r\n  dialogTitle: {\r\n    textAlign: 'center',\r\n  },\r\n}))\r\n\r\nconst DialogView = ({ classes, title, content, actions, dialogProps = {}, onClose }) => (\r\n  <Dialog open fullWidth onClose={onClose} {...dialogProps}>\r\n    {title && (\r\n      <DialogTitle className={classes.dialogTitle}>\r\n        {isFunction(title) ? title({ onClose }) : title}\r\n      </DialogTitle>\r\n    )}\r\n    <DialogContent className={classes.dialogContent}>\r\n      {isFunction(content) ? content({ onClose }) : content}\r\n    </DialogContent>\r\n    {!isNil(actions) && (\r\n      <DialogActions className={classes.dialogActions}>\r\n        {isFunction(actions) ? actions({ onClose }) : actions}\r\n      </DialogActions>\r\n    )}\r\n  </Dialog>\r\n)\r\n\r\nconst DialogContainer = ({\r\n  classes = {},\r\n  children,\r\n  title,\r\n  button,\r\n  actions,\r\n  dialogProps,\r\n  defaultOpen = false,\r\n  disableDefaultOnClose = false,\r\n  onClose,\r\n}) => {\r\n  classes = { ...useStyles(), ...classes }\r\n\r\n  const [showView, setShowView] = React.useState(defaultOpen || false)\r\n\r\n  return (\r\n    <React.Fragment>\r\n      {showView && (\r\n        <DialogView\r\n          classes={classes}\r\n          title={title}\r\n          content={children}\r\n          actions={actions}\r\n          dialogProps={dialogProps}\r\n          onClose={e => {\r\n            if (!disableDefaultOnClose) {\r\n              if (e) {\r\n                // can have no event when submitted from actions\r\n                e.stopPropagation() // otherwise it uses the parent onClick that setShowView(true)\r\n              }\r\n              setShowView(false)\r\n            }\r\n            onClose && onClose(e)\r\n          }}\r\n        />\r\n      )}\r\n\r\n      {!isNil(button)\r\n        ? !isFunction(button)\r\n          ? React.cloneElement(button, {\r\n              onClick: () => {\r\n                setShowView(true)\r\n              },\r\n            })\r\n          : button({\r\n              onShow: () => setShowView(true),\r\n            })\r\n        : null}\r\n    </React.Fragment>\r\n  )\r\n}\r\n\r\nexport default DialogContainer\r\n","import React from 'react'\r\n\r\nconst LockerIcon = props => (\r\n  <svg viewBox=\"0 0 810 810\" {...props}>\r\n    <defs>\r\n      <clipPath id=\"a\">\r\n        <path d=\"M83 69.008h623V741H83Zm0 0\" />\r\n      </clipPath>\r\n    </defs>\r\n    <path fill=\"#FFF\" d=\"M-81-81h972v972H-81z\" />\r\n    <path fill=\"#FFF\" d=\"M-81-81h972v972H-81z\" />\r\n    <path fill=\"#FFF\" d=\"M-81-81h972v972H-81z\" />\r\n    <path fill=\"#FFF\" d=\"M-81-81h972v972H-81z\" />\r\n    <g clipPath=\"url(#a)\">\r\n      <path\r\n        fill=\"#18212B\"\r\n        d=\"M702.574 131.258c-2.785-3.051-8.797-2.457-8.797-2.457h-146.53l-2.345-.059c-108.757-2.55-87.308-59.597-145.465-59.691-64.347-.102-55.46 61.172-116.222 62.62l-42.102 1.9c-5.687.296-11.465.296-17.449 0h-120.52s-11.433-1.305-16.44 4.62c-4.802 5.66-3.29 11.528-3.29 16.918V488h.176c-.086 2.52-.176 5.066-.176 7.645 0 89.867 251.379 245.304 311.047 245.304 55.61 0 311.02-155.437 311.02-245.304 0-2.579-.063-5.125-.18-7.645h.18V142.727s.234-8-2.907-11.47\"\r\n      />\r\n    </g>\r\n    <path\r\n      fill=\"#ECEAF7\"\r\n      d=\"M636.094 190.313c-2.192-2.403-6.903-1.926-6.903-1.926H514.242l-1.808-.063c-85.293-1.984-68.47-46.722-114.09-46.812-50.485-.09-43.492 48-91.16 49.125l-33.036 1.48c-4.414.238-8.976.238-13.656 0h-94.539s-8.95-1.008-12.887 3.645c-3.761 4.445-2.578 9.039-2.578 13.246v261.094h.149c-.09 1.988-.149 3.972-.149 5.988 0 70.488 197.164 192.414 243.942 192.414 43.613 0 243.945-121.926 243.945-192.414 0-2.016-.059-4-.148-5.988h.148V199.316s.18-6.308-2.281-9.004\"\r\n    />\r\n    <path\r\n      fill=\"#18212B\"\r\n      d=\"m477.18 328.563-.032-.563c-.68-14.46-3.109-27.32-7.257-38.191-4.329-11.29-10.52-20.801-18.489-28.297-14.101-13.246-33.3-19.973-57.058-19.973-23.29 0-43.317 7.23-57.89 20.918-8.177 7.645-14.458 17.188-18.638 28.297-4.175 11.023-6.308 23.676-6.308 37.601v.118c0 .18.117 17.66 0 26.343-.149 11.524 9.094 21.067 20.648 21.215a20.97 20.97 0 0 0 14.961-6.015c3.942-3.914 6.133-9.098 6.223-14.637.117-9.04 0-26.074 0-27.113.031-17.094 4.473-29.422 13.242-36.621 6.668-5.48 16-8.266 27.762-8.266 12.914 0 22.219 2.812 28.379 8.621 7.468 6.992 11.703 19.586 12.62 37.422-.027 3.32-.116 17.808 0 25.957.063 5.539 2.282 10.723 6.223 14.637 3.942 3.851 9.157 6.015 14.696 6.015h.265c11.528-.148 20.797-9.691 20.653-21.215-.121-8.18-.032-23.882 0-25.66v-.594\"\r\n    />\r\n    <path\r\n      fill=\"#EBA116\"\r\n      d=\"M499.781 493.246c0 15.582-12.351 28.356-27.433 28.356H316.336c-15.078 0-27.434-12.774-27.434-28.356V386.457c0-15.582 12.356-28.355 27.434-28.355h156.012c15.082 0 27.433 12.773 27.433 28.355v106.79\"\r\n    />\r\n    <path\r\n      fill=\"#18212B\"\r\n      d=\"M412.621 485.453c10.133 0 14.281-7.172 9.215-15.941l-3.762-6.551c-5.097-8.797-3.406-21.863 3.73-29.066 0 0 .891-.918.891-11.29 0-15.671-12.68-28.382-28.351-28.382-15.672 0-28.383 12.71-28.383 28.382 0 10.372.918 11.29.918 11.29 7.11 7.203 8.8 20.27 3.734 29.066l-3.793 6.55c-5.039 8.77-.918 15.942 9.243 15.942h36.558\"\r\n    />\r\n  </svg>\r\n)\r\n\r\nexport default LockerIcon\r\n","import React, { useState } from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport DialogContainer from 'pmt-ui/DialogContainer'\r\nimport Button from '@material-ui/core/Button'\r\nimport { makeStyles } from '@material-ui/core/styles'\r\nimport LockerIcon from './LockerIcon'\r\nimport { getPublicUrl } from 'pmt-modules/environment'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { getHistory } from 'pmt-modules/routing'\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n  icons: {\r\n    display: 'flex',\r\n    flexDirection: 'row',\r\n    justifyContent: 'space-between',\r\n    alignItems: 'center',\r\n  },\r\n  text: {\r\n    marginTop: theme.spacing(4),\r\n    fontSize: 18,\r\n    lineHeight: '26px',\r\n\r\n    '& p': {\r\n      marginBottom: theme.spacing(1),\r\n    },\r\n  },\r\n  btn: {\r\n    marginTop: theme.spacing(4),\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n}))\r\n\r\nfunction PaymentAsyncRedirectTutorialDialog({ onSubmit, label1, label2 }) {\r\n  const classes = useStyles()\r\n\r\n  const [redirecting, setRedirecting] = useState(false)\r\n\r\n  return (\r\n    <DialogContainer defaultOpen title={''} disableDefaultOnClose>\r\n      <LoadingBlockWrapper show={redirecting} />\r\n      <div className={classes.icons}>\r\n        <LockerIcon width={66} height={66} />\r\n        <img\r\n          src={`${getPublicUrl()}/img/CreditCardsIcon.png`}\r\n          width={90}\r\n          height={60}\r\n          alt=\"credit cards\"\r\n        />\r\n      </div>\r\n      <div className={classes.text}>\r\n        <p>{label1}</p>\r\n        <p>{label2}</p>\r\n      </div>\r\n\r\n      <Button\r\n        disabled={redirecting}\r\n        className={classes.btn}\r\n        variant=\"contained\"\r\n        color=\"primary\"\r\n        fullWidth\r\n        onClick={() => {\r\n          setRedirecting(true)\r\n          // indicate in the browser history that we displayed the dialog once\r\n          // so if the user's use the \"back\" browser's button to go back here, he will be redirected to the previous page (payment page)\r\n          // (skipping this dialog page)\r\n\r\n          // payment page -> asyncDialog -> psp payment page -> (hit \"back\") -> payment page\r\n\r\n          let history = getHistory()\r\n          if (history) {\r\n            let currentPath = history.location.pathname + history.location.search\r\n            // keeping the url, just adding a state\r\n            history.replace(currentPath, { popupAlreadyDisplayed: true })\r\n          }\r\n\r\n          onSubmit()\r\n        }}\r\n      >\r\n        {tr('PaymentAsyncRedirectTutorialDialog.confirm')}\r\n      </Button>\r\n    </DialogContainer>\r\n  )\r\n}\r\n\r\nexport default PaymentAsyncRedirectTutorialDialog\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { getQueryParam } from 'pmt-utils/url'\r\nimport { TopUpContainer } from 'pmt-modules/topUp'\r\nimport { UserAccountsContainer } from 'pmt-modules/userAccount'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport withRestaurant from 'pmt-modules/restaurant/components/withRestaurant'\r\nimport {\r\n  redirectTo,\r\n  redirectToExternal,\r\n  getHistory,\r\n  goBack,\r\n} from 'pmt-modules/routing'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\nimport { resetPayment } from 'pmt-modules/payment/payment/actions'\r\nimport {\r\n  getPostPaymentAtTableData,\r\n} from 'pmt-modules/payment/payment/selectors'\r\nimport withScrollToTop from 'pmt-ui/Layout/withScrollToTop'\r\nimport PaymentAsyncRedirectTutorialDialog\r\n  from 'pmt-ui/PaymentAsyncRedirectTutorialDialog'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass ForPaymentAtTable extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    let history = getHistory()\r\n    if (history?.location?.state?.popupAlreadyDisplayed) {\r\n      // we are here a second time because the user has been redirected from here to the Psp payment page, and hit \"back\"\r\n      // in order to prevent him to go to the Psp payment page again (problematic with Saferpay)\r\n      // we put him back on the Order plugin payment page\r\n      // so he can try to resend the order&payment if needed (but the payment won't be considered the same as the first try)\r\n      //props.redirectTo(getRoute('ORDER__PAYMENT'))\r\n      props.goBack()\r\n    }\r\n\r\n    this.form = React.createRef()\r\n  }\r\n\r\n  render() {\r\n    const { paymentAtTableData, redirectToExternal } = this.props\r\n\r\n    if (!paymentAtTableData) {\r\n      return null\r\n    }\r\n\r\n    return (\r\n      <div style={{ minHeight: '100%', height: '100%' }}>\r\n        {paymentAtTableData.asyncPaymentData.httpMethod === 'POST' && (\r\n          <form\r\n            method=\"POST\"\r\n            action={paymentAtTableData.asyncPaymentData.pspRedirectUrl}\r\n            ref={this.form}\r\n          >\r\n            {Object.keys(paymentAtTableData.asyncPaymentData.fields || []).map(\r\n              key => (\r\n                <input\r\n                  key={key}\r\n                  type=\"hidden\"\r\n                  name={key}\r\n                  value={paymentAtTableData.asyncPaymentData.fields[key]}\r\n                />\r\n              ))}\r\n          </form>\r\n        )}\r\n\r\n        <PaymentAsyncRedirectTutorialDialog\r\n          onSubmit={() => {\r\n            switch (paymentAtTableData.asyncPaymentData.httpMethod) {\r\n              case 'GET':\r\n                redirectToExternal(\r\n                  paymentAtTableData.asyncPaymentData.pspRedirectUrl)\r\n                break\r\n\r\n              case 'POST':\r\n                this.form.current.submit()\r\n                break\r\n\r\n              default:\r\n            }\r\n          }}\r\n          label1={tr(\r\n            'PaymentAsyncRedirectTutorialDialog.explain.redirection.1')}\r\n          label2={tr(\r\n            'PaymentAsyncRedirectTutorialDialog.explain.redirection.2')}\r\n        />\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  paymentAtTableData: getPostPaymentAtTableData(state),\r\n})\r\n\r\nconst ForPaymentAtTableImpl = compose(\r\n  // only here, we want color for payment at table, but not for top-up, which is not linked to a restaurant\r\n  withRestaurant,\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      resetPayment,\r\n      redirectTo,\r\n      redirectToExternal,\r\n      getHistory,\r\n      goBack,\r\n    },\r\n  ))(ForPaymentAtTable)\r\n\r\nclass ForTopUp extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    let history = getHistory()\r\n    if (history?.location?.state?.popupAlreadyDisplayed) {\r\n      // we are here a second time because the user has been redirected from here to the Psp payment page, and hit \"back\"\r\n      // in order to prevent him to go to the Psp payment page again (problematic with Saferpay)\r\n      // we put him back on the Order plugin payment page\r\n      // so he can try to resend the order&payment if needed (but the payment won't be considered the same as the first try)\r\n      //props.redirectTo(getRoute('ORDER__PAYMENT'))\r\n      props.goBack()\r\n    }\r\n\r\n    this.form = React.createRef()\r\n  }\r\n\r\n  render() {\r\n    const { userId, redirectToExternal } = this.props\r\n\r\n    return (\r\n      <UserAccountsContainer userId={userId}>\r\n        {({ userAccount, isFetchingUserAccounts }) =>\r\n          isFetchingUserAccounts || !userAccount ? (\r\n            <LoadingBlockWrapper show />\r\n          ) : (\r\n            <TopUpContainer userId={userId} userAccount={userAccount}>\r\n              {({ topUp }) =>\r\n                !topUp.payment ? null : ( // topUp has not been updated yet on our store\r\n                  <div style={{ minHeight: '100%', height: '100%' }}>\r\n                    {topUp.payment.asyncPaymentData.httpMethod === 'POST' && (\r\n                      <form\r\n                        method=\"POST\"\r\n                        action={topUp.payment.asyncPaymentData.pspRedirectUrl}\r\n                        ref={this.form}\r\n                      >\r\n                        {Object.keys(\r\n                          topUp.payment.asyncPaymentData.fields || []).map(\r\n                          key => (\r\n                            <input\r\n                              key={key}\r\n                              type=\"hidden\"\r\n                              name={key}\r\n                              value={topUp.payment.asyncPaymentData.fields[key]}\r\n                            />\r\n                          ))}\r\n                      </form>\r\n                    )}\r\n\r\n                    <PaymentAsyncRedirectTutorialDialog\r\n                      onSubmit={() => {\r\n                        switch (topUp.payment.asyncPaymentData.httpMethod) {\r\n                          case 'GET':\r\n                            redirectToExternal(\r\n                              topUp.payment.asyncPaymentData.pspRedirectUrl)\r\n                            break\r\n\r\n                          case 'POST':\r\n                            this.form.current.submit()\r\n                            break\r\n\r\n                          default:\r\n                        }\r\n                      }}\r\n                      label1={tr(\r\n                        'PaymentAsyncRedirectTutorialDialog.explain.3ds.1')}\r\n                      label2={tr(\r\n                        'PaymentAsyncRedirectTutorialDialog.explain.3ds.2')}\r\n                    />\r\n                  </div>\r\n                )\r\n              }\r\n            </TopUpContainer>\r\n          )\r\n        }\r\n      </UserAccountsContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst ForTopUpImpl = connect(\r\n  state => ({}),\r\n  {\r\n    resetPayment,\r\n    redirectTo,\r\n    redirectToExternal,\r\n    getHistory,\r\n    goBack,\r\n  },\r\n)(ForTopUp)\r\n\r\nclass AsyncPaymentFormPage extends React.Component {\r\n  render() {\r\n    const flow = getQueryParam('flow')\r\n\r\n    switch (flow) {\r\n      case 'paymentAtTable':\r\n        return <ForPaymentAtTableImpl {...this.props} />\r\n\r\n      case 'topUp':\r\n        return <ForTopUpImpl {...this.props} />\r\n\r\n      default:\r\n        throw new Error(`Missing flow`)\r\n    }\r\n  }\r\n}\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withUserMe,\r\n  withScrollToTop()\r\n)(AsyncPaymentFormPage)\r\n","import PaymentApi from 'pmt-modules/api/calls/PaymentApi'\r\nimport { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\nimport { createAction } from 'pmt-modules/redux'\r\n\r\nexport const FetchPaymentPdfLinkAction = createApiEnumAction('PAYMENT::FETCH::PDF_LINK')\r\n\r\nexport const fetchPaymentPdfLink = paymentId =>\r\n  createApiCallAction(FetchPaymentPdfLinkAction, PaymentApi.getPaymentPdfLink(paymentId), {\r\n    paymentId,\r\n  })\r\n\r\nexport const ResetPaymentPdfLinkAction = 'PAYMENT::RESET::PDF_LINK'\r\n\r\nexport const resetPaymentPdfLink = () => createAction(ResetPaymentPdfLinkAction)\r\n","import { createSimpleSelector } from 'pmt-modules/redux'\r\n\r\nconst fetchPaymentPdfLinkSelectors = createSimpleSelector(\r\n  state => state.entities.fetchPaymentPdfLink\r\n)\r\n\r\nexport const isFetchingPaymentPdfLink = fetchPaymentPdfLinkSelectors.isFetching\r\nexport const getDataPaymentPdfLink = fetchPaymentPdfLinkSelectors.getData\r\nexport const getErrorPaymentPdfLink = fetchPaymentPdfLinkSelectors.getError\r\n","import { createSimpleReducer } from 'pmt-modules/redux'\r\nimport { FetchPaymentPdfLinkAction, ResetPaymentPdfLinkAction } from './actions'\r\nimport Immutable from 'immutable'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\n\r\nconst resetData = (state, action) => {\r\n  return Immutable.fromJS({})\r\n}\r\n\r\nexport const fetchPaymentPdfLinkReducer = createSimpleReducer(FetchPaymentPdfLinkAction, {\r\n  [ResetPaymentPdfLinkAction]: resetData,\r\n})\r\n","import React from 'react'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { LoadingBlock } from 'pmt-ui/LoadingBlock'\r\nimport Price from 'pmt-ui/Price'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { formatDate, formatHour } from 'pmt-utils/date'\r\n\r\nimport { Button } from '../../../components/Button'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport PictureAsPdfIcon from '@material-ui/icons/PictureAsPdf'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    minHeight: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    padding: theme.spacing(3),\r\n  },\r\n  content: {\r\n    flex: 1,\r\n    paddingBottom: theme.spacing(3),\r\n  },\r\n  logo: {\r\n    maxWidth: 113,\r\n    maxHeight: 65,\r\n  },\r\n  amount: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  paymentDone: {\r\n    marginTop: theme.spacing(2),\r\n    color: theme.pmt.colors.grey91,\r\n  },\r\n  leftToPayContainer: {\r\n    marginTop: theme.spacing(18),\r\n  },\r\n  hr: {\r\n    width: '100%',\r\n    height: 0,\r\n    marginTop: theme.spacing(2),\r\n    border: 'none',\r\n    borderTop: `1px solid ${theme.pmt.colors.grey91}`,\r\n  },\r\n  backLink: {\r\n    marginTop: theme.spacing(2),\r\n    color: theme.palette.primary.main,\r\n  },\r\n  buttonBack: {\r\n    width: '100%',\r\n  },\r\n  downloadBtn: {\r\n    marginTop: theme.spacing(3),\r\n    textAlign: 'center',\r\n  },\r\n})\r\n\r\nconst View = ({\r\n  frontAppConfig,\r\n  restaurant,\r\n  check,\r\n  paymentMade,\r\n  isFetching,\r\n  handleBackToCheck,\r\n  handleBackToHome,\r\n  classes,\r\n  isIncognito,\r\n  paymentPdfLink,\r\n  errorPaymentPdfLink,\r\n}) => {\r\n  const leftToPay = check?.outstandingBalance - paymentMade.amount\r\n  // doing the format here so the currency is good even if we refresh the page\r\n  const totalWithTipFormatted = formatPriceWithCurrency(paymentMade.amount + paymentMade.tips)\r\n\r\n  return (\r\n    <div className={classes.root}>\r\n      {isFetching ? (\r\n        <LoadingBlock show />\r\n      ) : (\r\n        restaurant &&\r\n        paymentMade &&\r\n        check && (\r\n          <React.Fragment>\r\n            <div className={classes.content}>\r\n              {frontAppConfig.theme.logo.display &&\r\n                (frontAppConfig.theme.logo.path || restaurant.logo) && (\r\n                  <img\r\n                    src={frontAppConfig.theme.logo.path || restaurant.logo}\r\n                    className={classes.logo}\r\n                    alt=\"logo\"\r\n                  />\r\n                )}\r\n              <TypographyCustom type=\"207\" className=\"u-marginTop40\">\r\n                {tr('web_customer.payment.confirm.thank_you')}\r\n              </TypographyCustom>\r\n              <TypographyCustom\r\n                type=\"204\"\r\n                className=\"u-marginTop10\"\r\n                dangerouslySetInnerHTML={{\r\n                  __html: tr('web_customer.payment.confirm.payment_confirmed', {\r\n                    spanBegin: `<span class=\"${classes.amount}\">`,\r\n                    amountFormatted: totalWithTipFormatted,\r\n                    spanEnd: '</span>',\r\n                  }),\r\n                }}\r\n              />\r\n              <TypographyCustom type=\"124\" className={classes.paymentDone}>\r\n                {tr('web_customer.payment.confirm.payment_date', {\r\n                  day: formatDate(null, 'DD/MM/YY'),\r\n                  hour: formatHour(null, ':'),\r\n                })}\r\n              </TypographyCustom>\r\n\r\n              {isIncognito ? (\r\n                <React.Fragment>\r\n                  {paymentPdfLink && (\r\n                    <div className={classes.downloadBtn}>\r\n                      <Button icon={<PictureAsPdfIcon />} href={paymentPdfLink} target=\"_blank\">\r\n                        {tr('web_customer.payment.confirm.payment_receipt.download')}\r\n                      </Button>\r\n                    </div>\r\n                  )}\r\n                  <ErrorBlock error={errorPaymentPdfLink} />\r\n                </React.Fragment>\r\n              ) : (\r\n                <TypographyCustom type=\"124\" className={classes.paymentDone}>\r\n                  {tr('web_customer.payment.confirm.payment_receipt')}\r\n                </TypographyCustom>\r\n              )}\r\n\r\n              {leftToPay > 0 ? (\r\n                <React.Fragment>\r\n                  <Grid container className={classes.leftToPayContainer}>\r\n                    <Grid item xs={5}>\r\n                      <TypographyCustom type=\"164\">\r\n                        {tr('web_customer.payment.confirm.left_to_pay')}\r\n                      </TypographyCustom>\r\n                    </Grid>\r\n                    <Grid item xs={7}>\r\n                      <TypographyCustom type=\"247\">\r\n                        <Price\r\n                          value={formatPriceWithCurrency(leftToPay)}\r\n                          className=\"u-floatRight\"\r\n                        />\r\n                      </TypographyCustom>\r\n                    </Grid>\r\n                  </Grid>\r\n                  <hr className={classes.hr} />\r\n                  <TypographyCustom\r\n                    type=\"144\"\r\n                    align=\"center\"\r\n                    onClick={handleBackToCheck}\r\n                    className={classes.backLink}\r\n                  >\r\n                    {tr('web_customer.payment.confirm.see_bill')}\r\n                  </TypographyCustom>\r\n                </React.Fragment>\r\n              ) : (\r\n                <Grid container className={classes.leftToPayContainer}>\r\n                  <Grid item xs={9}>\r\n                    <TypographyCustom type=\"164\">\r\n                      {tr('web_customer.payment.confirm.nothing_to_pay')}\r\n                    </TypographyCustom>\r\n                  </Grid>\r\n                </Grid>\r\n              )}\r\n            </div>\r\n            <Button\r\n              variant=\"outlined\"\r\n              size=\"large\"\r\n              className={classes.buttonBack}\r\n              onClick={handleBackToHome}\r\n            >\r\n              <TypographyCustom type=\"164\" skipColor>\r\n                {tr('web_customer.payment.confirm.back_home')}\r\n              </TypographyCustom>\r\n            </Button>\r\n          </React.Fragment>\r\n        )\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\nimport withCheck from 'pmt-modules/payment/components/withCheck'\r\nimport { withAppConfig } from 'pmt-modules/appConfig'\r\nimport { withRestaurant } from 'pmt-modules/restaurant/components'\r\nimport { getAuthenticatedUser } from 'pmt-modules/authenticatedUser/selectors'\r\nimport {\r\n  isFetchingPaymentPdfLink,\r\n  fetchPaymentPdfLink,\r\n  getDataPaymentPdfLink,\r\n  resetPaymentPdfLink,\r\n  getErrorPaymentPdfLink,\r\n} from 'pmt-modules/payment/pdf'\r\n\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { getPostPayment, getPaymentMade } from 'pmt-modules/payment'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\n\r\nimport Page from '../../../components/Page'\r\nimport View from './View'\r\n\r\n/**\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5bc07139c1de410a38c7ed1e\r\n * https://app.zeplin.io/project/5b616247d86fcf41520410cc/screen/5bc0713a29495f5fbbe1e771\r\n * https://paymytable.atlassian.net/browse/PP-900\r\n */\r\nclass ConfirmPage extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.props.resetPaymentPdfLink()\r\n    if (\r\n      props.authenticatedUser &&\r\n      props.authenticatedUser.type === UserType.INCOGNITO &&\r\n      props.postPayment?.id\r\n    ) {\r\n      this.props.fetchPaymentPdfLink(props.postPayment.id)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps = nextProps => {\r\n    if (\r\n      nextProps.authenticatedUser &&\r\n      nextProps.authenticatedUser.type === UserType.INCOGNITO &&\r\n      nextProps.postPayment?.id &&\r\n      (this.props.postPayment?.id !== nextProps.postPayment?.id ||\r\n        isNil(this.props.paymentPdfLink)) &&\r\n      !this.props.isFetchingPaymentPdfLink &&\r\n      !nextProps.isFetchingPaymentPdfLink &&\r\n      !nextProps.errorPaymentPdfLink\r\n    ) {\r\n      this.props.fetchPaymentPdfLink(nextProps.postPayment.id)\r\n    }\r\n  }\r\n\r\n  handleBackToCheck = () => {\r\n    this.props.redirectTo(getRoute('PAYMENT_CHECK_VIEW'), {\r\n      restaurantId: this.props.restaurantId,\r\n      checkId: this.props.checkId,\r\n    })\r\n  }\r\n\r\n  handleBackToHome = () => {\r\n    this.props.redirectTo(getRoute('RESTAURANT'), {\r\n      restaurantId: this.props.restaurantId,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      frontAppConfig,\r\n      check,\r\n      isFetchingCheck,\r\n      restaurant,\r\n      isFetchingRestaurant,\r\n      authenticatedUser,\r\n      paymentPdfLink,\r\n      errorPaymentPdfLink,\r\n      paymentMade,\r\n    } = this.props\r\n\r\n    return (\r\n      <Page showHeader={false}>\r\n        <View\r\n          frontAppConfig={frontAppConfig}\r\n          isFetching={isFetchingRestaurant || isFetchingCheck}\r\n          restaurant={restaurant}\r\n          check={check}\r\n          paymentMade={paymentMade}\r\n          handleBackToCheck={this.handleBackToCheck}\r\n          handleBackToHome={this.handleBackToHome}\r\n          isIncognito={authenticatedUser && authenticatedUser.type === UserType.INCOGNITO}\r\n          paymentPdfLink={paymentPdfLink}\r\n          errorPaymentPdfLink={errorPaymentPdfLink}\r\n        />\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nConfirmPage.propTypes = {}\r\n\r\nconst mapStateToProps = (state, props) => ({\r\n  authenticatedUser: getAuthenticatedUser(state),\r\n  isFetchingPaymentPdfLink: isFetchingPaymentPdfLink(state),\r\n  errorPaymentPdfLink: getErrorPaymentPdfLink(state),\r\n  paymentPdfLink: getDataPaymentPdfLink(state)?.signedUrl,\r\n  postPayment: getPostPayment(state),\r\n  paymentMade: getPaymentMade(state),\r\n})\r\n\r\nexport default compose(\r\n  withAppConfig,\r\n  withCheck,\r\n  withRestaurant,\r\n  connect(\r\n  mapStateToProps,\r\n  {\r\n    redirectTo,\r\n    fetchPaymentPdfLink,\r\n    resetPaymentPdfLink,\r\n  }\r\n))(ConfirmPage)\r\n","import React from 'react'\r\nimport pure from 'recompose/pure'\r\nimport SvgIcon from '../../SvgIcon'\r\n\r\nlet Refresh = (props) => (\r\n  <SvgIcon {...props}>\r\n    <path d=\"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"/>\r\n    <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n  </SvgIcon>\r\n)\r\nRefresh = pure(Refresh)\r\nRefresh.displayName = 'Refresh'\r\nRefresh.pmtName = 'SvgIcon'\r\n\r\nexport default Refresh\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isEqual from 'lodash/isEqual'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\nimport isString from 'lodash/isString'\r\nimport isArray from 'lodash/isArray'\r\nimport isNil from 'lodash/isNil'\r\nimport forEach from 'lodash/forEach'\r\nimport get from 'lodash/get'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport MessageBlock from 'app/components/MessageBlock'\r\nimport LoadingBlock from '../LoadingBlock'\r\nimport LoadingBlockWrapper from '../LoadingBlock/LoadingBlockWrapper'\r\n\r\nclass LoadingContainerView extends React.Component {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!this.props.dontUpdateOnMount) {\r\n      this.props.onUpdate && this.props.onUpdate(this.props.data)\r\n    }\r\n  }\r\n\r\n  getSnapshotBeforeUpdate(prevProps) {\r\n    if (!isEqual(prevProps.data, this.props.data)) {\r\n      this.props.onUpdate && this.props.onUpdate(this.props.data)\r\n    }\r\n\r\n    return null\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      children,\r\n      data,\r\n      errorData,\r\n      manualRunView,\r\n      size,\r\n      shouldShow,\r\n      shouldShowManualRunView,\r\n      delegateErrorHandlingToChildrenResult,\r\n      withWrapper,\r\n    } = this.props\r\n\r\n    if (errorData && !delegateErrorHandlingToChildrenResult) {\r\n      if (process.env.FEATURE_BO) {\r\n        return <MessageBlock.Error error={errorData} />\r\n      }\r\n      return <ErrorBlock error={errorData} />\r\n    }\r\n\r\n    if (manualRunView && shouldShowManualRunView(data)) {\r\n      return withWrapper ? (\r\n        <React.Fragment>\r\n          <LoadingBlockWrapper show={shouldShow} size={size} />\r\n          {manualRunView(data)}\r\n        </React.Fragment>\r\n      ) : (\r\n        manualRunView(data)\r\n      )\r\n    }\r\n\r\n    return withWrapper ? (\r\n      <React.Fragment>\r\n        <LoadingBlockWrapper show={shouldShow} size={size} />\r\n        {children(data)}\r\n      </React.Fragment>\r\n    ) : (\r\n      <LoadingBlock size={size} show={shouldShow}>\r\n        {() => children(data)}\r\n      </LoadingBlock>\r\n    )\r\n  }\r\n}\r\n\r\n/**\r\n * Shortcut for container that needs to display a LoadingBlock.\r\n *\r\n * Note: we could add prop to use a LoadingBlockWrapper instead of LoadingBlock.\r\n *\r\n * If a props 'error' is given, we automatically display the api error given by the props if it is a\r\n * function. It can be a string that gives the variable name to retrieve on the data as an error.\r\n *\r\n * Example\r\n *\r\n * ```\r\n * <LoadingContainer\r\n *   container={\r\n *     <MyEntityContainer entityId={1} />\r\n *   }\r\n *   error={({ myEntityError }) => myEntityError)}\r\n *   error=\"myEntityError\"\r\n *   show={({ myEntity, isFetchingMyEntity }) =>\r\n *     isFetchingMyEntity || !myEntity\r\n *   }\r\n * >\r\n *   {({ myEntity }) => (\r\n *      // rest of the code\r\n *   )}\r\n * </LoadingContainer>\r\n * ```\r\n */\r\nconst LoadingContainer = ({\r\n  container,\r\n  size,\r\n  show = false,\r\n  withWrapper = false,\r\n  error,\r\n  manualRunView,\r\n  shouldShowManualRunView,\r\n  onUpdate,\r\n  children,\r\n  dontUpdateOnMount = false,\r\n  delegateErrorHandlingToChildren,\r\n}) => {\r\n  return React.cloneElement(container, {}, data => {\r\n    let errorData\r\n    if (isFunction(error)) {\r\n      errorData = error(data)\r\n    } else if (isString(error)) {\r\n      // variable name\r\n      errorData = get(data, error)\r\n    } else if (isArray(error)) {\r\n      forEach(error, errorName => {\r\n        errorData = get(data, errorName)\r\n        if (errorData) {\r\n          return false\r\n        }\r\n      })\r\n    }\r\n\r\n    const delegateErrorHandlingToChildrenResult =\r\n      delegateErrorHandlingToChildren && errorData && delegateErrorHandlingToChildren(errorData)\r\n\r\n    const shouldShow =\r\n      show && (show(data) || !isNil(errorData)) && !delegateErrorHandlingToChildrenResult\r\n\r\n    return (\r\n      <LoadingContainerView\r\n        children={children}\r\n        data={data}\r\n        errorData={errorData}\r\n        manualRunView={manualRunView}\r\n        onUpdate={onUpdate}\r\n        size={size}\r\n        shouldShow={shouldShow}\r\n        shouldShowManualRunView={shouldShowManualRunView}\r\n        withWrapper={withWrapper}\r\n        dontUpdateOnMount={dontUpdateOnMount}\r\n        delegateErrorHandlingToChildrenResult={delegateErrorHandlingToChildrenResult}\r\n      />\r\n    )\r\n  })\r\n}\r\n\r\nLoadingContainer.propTypes = {\r\n  show: PropTypes.func,\r\n  onUpdate: PropTypes.func,\r\n  shouldShowManualRunView: PropTypes.func,\r\n  container: PropTypes.node.isRequired,\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default LoadingContainer\r\n","const ApiConsumerErrors = {\r\n  PATCH: (requestOptions, json, response) => {\r\n    if (json?.extra) {\r\n      return json?.extra?.details?.errors?.map(e => e.message).join(', ')\r\n    } else {\r\n      return json?.message\r\n    }\r\n  },\r\n}\r\n\r\nexport default ApiConsumerErrors\r\n","import ApiEndpoints from '../config/ApiEndpoints'\r\nimport ApiConsumerErrors from '../errors/ApiConsumerErrors'\r\n\r\nconst ApiConsumerApi = {\r\n  getApiConsumerList: (rGroupId, query) => ({\r\n    endpoint: ApiEndpoints.API_CONSUMERS,\r\n    type: 'GET',\r\n    params: {\r\n      restaurantsGroupId: rGroupId,\r\n    },\r\n    query: query,\r\n  }),\r\n\r\n  getApiConsumerListFromRestaurant: restaurantId => ({\r\n    endpoint: ApiEndpoints.API_CONSUMERS_RESTAURANT,\r\n    type: 'GET',\r\n    params: {\r\n      restaurantId,\r\n    },\r\n  }),\r\n\r\n  getApiConsumer: (apiConsumerId, loadSettings = false) => ({\r\n    endpoint: ApiEndpoints.API_CONSUMER,\r\n    type: 'GET',\r\n    params: {\r\n      apiConsumerId,\r\n    },\r\n    query: {\r\n      loadSettings,\r\n    },\r\n  }),\r\n\r\n  getApiKey: apiConsumerId => ({\r\n    endpoint: ApiEndpoints.API_KEY,\r\n    type: 'GET',\r\n    params: {\r\n      apiConsumerId,\r\n    },\r\n  }),\r\n\r\n  generateApiKey: apiConsumerId => ({\r\n    endpoint: ApiEndpoints.API_KEY,\r\n    type: 'POST',\r\n    params: {\r\n      apiConsumerId,\r\n    },\r\n  }),\r\n\r\n  getSettings: apiConsumerId => ({\r\n    endpoint: ApiEndpoints.API_CONSUMER,\r\n    type: 'GET',\r\n    params: {\r\n      apiConsumerId,\r\n    },\r\n    query: {\r\n      loadSettings: true,\r\n    },\r\n  }),\r\n\r\n  getValidation: apiConsumerId => ({\r\n    endpoint: ApiEndpoints.API_CONSUMER_VALIDATION,\r\n    type: 'GET',\r\n    params: {\r\n      apiConsumerId,\r\n    },\r\n  }),\r\n\r\n  patchSettings: (apiConsumerId, body) => ({\r\n    endpoint: ApiEndpoints.API_CONSUMER,\r\n    type: 'PATCH',\r\n    params: {\r\n      apiConsumerId,\r\n    },\r\n    body,\r\n    errorHandler: ApiConsumerErrors.PATCH,\r\n  }),\r\n\r\n  post: apiConsumer => ({\r\n    endpoint: ApiEndpoints.CREATE_API_CONSUMER,\r\n    type: 'POST',\r\n    body: apiConsumer,\r\n    query: {\r\n      // TODO: remove\r\n      // debugMode: true,\r\n    },\r\n  }),\r\n}\r\n\r\nexport default ApiConsumerApi\r\n","import { createApiCallAction, createApiEnumAction } from '../api/utils'\r\n\r\nimport ApiConsumerApi from 'pmt-modules/api/calls/ApiConsumerApi'\r\n\r\nexport const GetApiConsumerListAction = createApiEnumAction('API_CONSUMER_LIST::GET')\r\n\r\nexport const fetchApiConsumerList = (rGroupId, query) =>\r\n  createApiCallAction(\r\n    GetApiConsumerListAction,\r\n    ApiConsumerApi.getApiConsumerList(rGroupId, query),\r\n    query\r\n  )\r\n\r\nexport const fetchApiConsumerListFromRestaurant = restaurantId =>\r\n  createApiCallAction(\r\n    GetApiConsumerListAction,\r\n    ApiConsumerApi.getApiConsumerListFromRestaurant(restaurantId)\r\n  )\r\n\r\n//\r\n//\r\n//\r\n\r\nexport const GetApiConsumerAction = createApiEnumAction('API_CONSUMER::GET')\r\n\r\nexport const fetchApiConsumer = apiConsumerId =>\r\n  createApiCallAction(GetApiConsumerAction, ApiConsumerApi.getApiConsumer(apiConsumerId))\r\n\r\n// export const fetchApiConsumer = apiConsumerId =>\r\n//   createTestApiCallAction(GetApiConsumerAction, true, {\r\n//     response: {\r\n//       id: apiConsumerId,\r\n//       name: 'Test api consumer',\r\n//       description: 'An api consumer for tests',\r\n//     },\r\n//   })\r\n","import { createListFormatter, createFormatter } from 'pmt-utils/format'\r\nimport { formatDate } from 'pmt-utils/date'\r\n\r\nimport {\r\n  ApiConsumerStatus,\r\n  getApiConsumerStatusLabel,\r\n  getApiConsumerStatusType,\r\n  getApiConsumerPresetLabel,\r\n  getApiConsumerPresetExplaination,\r\n} from './constants'\r\n\r\nconst formatData = apiConsumer => {\r\n  if (apiConsumer.creationDate) {\r\n    apiConsumer.creationDateFormatted = formatDate(apiConsumer.creationDate)\r\n  } else {\r\n    apiConsumer.creationDateFormatted = 'N/A'\r\n  }\r\n\r\n  apiConsumer.statusLabel = getApiConsumerStatusLabel(apiConsumer.status)\r\n  apiConsumer.statusType = getApiConsumerStatusType(apiConsumer.status)\r\n\r\n  apiConsumer.isStatusCreated = apiConsumer.status === ApiConsumerStatus.CREATED\r\n  apiConsumer.isStatusEnabled = apiConsumer.status === ApiConsumerStatus.ENABLED\r\n  apiConsumer.isStatusDisabled = apiConsumer.status === ApiConsumerStatus.DISABLED\r\n  apiConsumer.isStatusArchived = apiConsumer.status === ApiConsumerStatus.ARCHIVED\r\n\r\n  apiConsumer.isInactive = apiConsumer.isStatusArchived || apiConsumer.isStatusDisabled\r\n\r\n  apiConsumer.presetLabel = getApiConsumerPresetLabel(apiConsumer.preset)\r\n  apiConsumer.presetExplaination = getApiConsumerPresetExplaination(apiConsumer.preset)\r\n\r\n  return apiConsumer\r\n}\r\n\r\nexport const formatApiConsumer = createFormatter(formatData)\r\n\r\nexport const formatApiConsumers = createListFormatter(formatApiConsumer)\r\n","import { createSelector } from 'reselect'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { createSimpleSelector } from '../redux'\r\nimport { formatApiConsumer, formatApiConsumers } from './format'\r\nimport isFunction from 'lodash/isFunction.js'\r\nimport Logger from 'pmt-utils/logger/index.js'\r\nimport { getApiConsumerListStateKey } from 'pmt-modules/apiConsumer/constants.js'\r\n\r\nconst getApiConsumerListState = state => (isNil(state) ? null : state.entities.apiConsumerList)\r\n\r\nconst getWithParentsOnProps = (state, props) => {\r\n  return isNil(props) ? null : props.withParents\r\n}\r\n\r\nconst getApiConsumerListSelectors = createSelector(\r\n  [getWithParentsOnProps, getApiConsumerListState],\r\n  (withParents, state) => {\r\n    if (isNil(state)) {\r\n      return null\r\n    }\r\n\r\n    const key = getApiConsumerListStateKey(withParents)\r\n    const data = state.get(key)\r\n    if (isNil(data)) {\r\n      return null\r\n    }\r\n    return data\r\n  }\r\n)\r\n\r\nexport const isFetchingApiConsumerList = createSelector(\r\n  [getApiConsumerListSelectors],\r\n  dataState => {\r\n    return isNil(dataState) ? false : dataState.get('isFetching') || false\r\n  }\r\n)\r\nexport const getApiConsumerListData = createSelector([getApiConsumerListSelectors], dataState => {\r\n  if (isNil(dataState)) {\r\n    return null\r\n  }\r\n\r\n  const data = dataState.get('data')\r\n\r\n  if (isNil(data)) {\r\n    return null\r\n  }\r\n\r\n  if (!data.toJS) {\r\n    // Can happen when the API did not sent back a JSON object.\r\n    throw new Error('Invalid data on createSimpleSelector, toJS does not exists: ' + data)\r\n  }\r\n\r\n  const dataJs = data.toJS()\r\n\r\n  // add action payload data if exists\r\n  const actionData = dataState.get('actionData', null)\r\n\r\n  return dataJs\r\n})\r\n\r\nexport const getErrorsApiConsumerList = createSelector([getApiConsumerListSelectors], dataState => {\r\n  if (isNil(dataState)) {\r\n    return null\r\n  }\r\n\r\n  const error = dataState.get('error')\r\n\r\n  if (isNil(error)) {\r\n    return null\r\n  }\r\n\r\n  if (!isFunction(error.toJS)) {\r\n    Logger.warn('Create Simple Selector', 'data is not immutable', { error })\r\n  }\r\n\r\n  return error.toJS ? error.toJS() : error\r\n})\r\n\r\nexport const getApiConsumerList = createSelector([getApiConsumerListData], apiConsumerList => {\r\n  if (isNil(apiConsumerList)) {\r\n    return null\r\n  }\r\n  apiConsumerList.apiConsumers = formatApiConsumers(apiConsumerList.apiConsumers)\r\n  return apiConsumerList\r\n})\r\n\r\nexport const getApiConsumerListWithDefault = createSelector(\r\n  [getApiConsumerList],\r\n  apiConsumerList => {\r\n    if (isNil(apiConsumerList)) {\r\n      return null\r\n    }\r\n\r\n    apiConsumerList.apiConsumers = formatApiConsumers(apiConsumerList.apiConsumers)\r\n\r\n    // add default apiConsumers for retro-compatibility\r\n    apiConsumerList.apiConsumers.push({\r\n      id: 0,\r\n      name: 'Autre',\r\n    })\r\n\r\n    return apiConsumerList\r\n  }\r\n)\r\n\r\n//\r\n//\r\n//\r\n\r\nconst getApiConsumerSelectors = createSimpleSelector(\r\n  state => state.entities.apiConsumer,\r\n  formatApiConsumer\r\n)\r\n\r\nexport const isFetchingApiConsumer = getApiConsumerSelectors.isFetching\r\nexport const getApiConsumer = getApiConsumerSelectors.getData\r\nexport const getApiConsumerError = getApiConsumerSelectors.getError\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { fetchApiConsumerList, fetchApiConsumerListFromRestaurant } from '../actions'\r\n\r\nimport {\r\n  getApiConsumerList,\r\n  getApiConsumerListWithDefault,\r\n  isFetchingApiConsumerList,\r\n} from '../selectors'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A HOC that give fetch the restaurant group's api consumer and pass it to the children\r\n *\r\n * Requirements:\r\n * - rGroupId\r\n *\r\n */\r\nclass ApiConsumerListContainer extends React.Component {\r\n  componentWillMount() {\r\n    if (isNil(this.props.apiConsumerList)) {\r\n      this.loadApiConsumerList(this.props)\r\n    }\r\n  }\r\n\r\n  componentWillReceiveProps(nextProps) {\r\n    const props = this.props\r\n    if (nextProps.rGroupId !== props.rGroupId || nextProps.withParents !== props.withParents) {\r\n      this.loadApiConsumerList(nextProps)\r\n    }\r\n  }\r\n\r\n  loadApiConsumerList(props) {\r\n    if (!isNil(props.restaurantId)) {\r\n      props.fetchApiConsumerListFromRestaurant(props.restaurantId)\r\n    } else {\r\n      props.fetchApiConsumerList(props.rGroupId, {\r\n        withParents: props.withParents,\r\n        withOther: props.withOther,\r\n      })\r\n    }\r\n  }\r\n\r\n  render() {\r\n    const {\r\n      isFetchingApiConsumerList,\r\n      rGroupId,\r\n      apiConsumerList,\r\n      children,\r\n      withOther,\r\n      ...otherProps\r\n    } = this.props\r\n\r\n    let apiConsumerListToUse = null\r\n    if (apiConsumerList) {\r\n      if (!withOther) {\r\n        apiConsumerListToUse = {\r\n          apiConsumers: apiConsumerList.apiConsumers.filter(apiConsumer => apiConsumer.id !== 0),\r\n        }\r\n      } else {\r\n        apiConsumerListToUse = apiConsumerList\r\n      }\r\n    }\r\n\r\n    return children({\r\n      isFetchingApiConsumerList,\r\n      rGroupId,\r\n      apiConsumerList: apiConsumerListToUse,\r\n      ...otherProps,\r\n    })\r\n  }\r\n}\r\n\r\nApiConsumerListContainer.defaultProps = {\r\n  withParents: false,\r\n  restaurantId: null,\r\n  withOther: true,\r\n}\r\n\r\nApiConsumerListContainer.propTypes = {\r\n  apiConsumerList: PropTypes.object,\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n  isFetchingApiConsumerList: PropTypes.bool,\r\n  rGroupId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n  restaurantId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n  // retrieve api consumer with its parents\r\n  withParents: PropTypes.bool,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n  return {\r\n    apiConsumerList: getApiConsumerList(state, props),\r\n    apiConsumerListWithDefault: isNil(props.restaurantId)\r\n      ? getApiConsumerListWithDefault(state, props)\r\n      : null,\r\n    isFetchingApiConsumerList: isFetchingApiConsumerList(state, props),\r\n  }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n  fetchApiConsumerList,\r\n  fetchApiConsumerListFromRestaurant,\r\n})(ApiConsumerListContainer)\r\n","import Immutable from 'immutable'\r\nimport createSimpleReducer from '../redux/createSimpleReducer'\r\nimport { GetApiConsumerAction, GetApiConsumerListAction } from './actions'\r\nimport { PatchApiConsumerConfigurationAction, PostApiConsumerAction } from './configuration/actions'\r\nimport { getApiConsumerListStateKey } from 'pmt-modules/apiConsumer/constants.js'\r\n\r\nexport * from './actions'\r\nexport * from './components'\r\nexport * from './selectors'\r\n\r\nconst DEFAULT = Immutable.fromJS({})\r\n\r\nexport const apiConsumerListReducer = (state = DEFAULT, action) => {\r\n  // one key for withParents=true, and one key for withParents=false\r\n  const key = getApiConsumerListStateKey(action.data?.withParents)\r\n  switch (action.type) {\r\n    case GetApiConsumerListAction.REQUEST:\r\n      return state\r\n        .mergeIn([key], {\r\n          actionData: action.data,\r\n          isFetching: true,\r\n          error: null,\r\n        })\r\n        .mergeIn(\r\n          [key],\r\n          (action?.data?.resetDataOnRequest ?? true)\r\n            ? {\r\n                data: null,\r\n              }\r\n            : {}\r\n        )\r\n\r\n    case GetApiConsumerListAction.SUCCESS:\r\n      return state.mergeIn([key], {\r\n        data: action.response,\r\n        isFetching: false,\r\n        error: null,\r\n      })\r\n\r\n    case GetApiConsumerListAction.FAILURE:\r\n      return state.mergeIn([key], {\r\n        data: null,\r\n        isFetching: false,\r\n        error: action.error,\r\n      })\r\n\r\n    // reset apiconsumer list after apiconsumer creation\r\n    case PostApiConsumerAction.SUCCESS:\r\n      // reset state for both withParents true and false to be sure to reset all the possible list\r\n      return state\r\n        .mergeIn([getApiConsumerListStateKey(true)], {\r\n          data: null,\r\n          isFetching: false,\r\n          error: null,\r\n        })\r\n        .mergeIn([getApiConsumerListStateKey(false)], {\r\n          data: null,\r\n          isFetching: false,\r\n          error: null,\r\n        })\r\n\r\n    // reset apiconsumer list after apiconsumer update\r\n    case PatchApiConsumerConfigurationAction.SUCCESS:\r\n      // reset state for both withParents true and false to be sure to reset all the possible list\r\n      return state\r\n        .mergeIn([getApiConsumerListStateKey(true)], {\r\n          data: null,\r\n          isFetching: false,\r\n          error: null,\r\n        })\r\n        .mergeIn([getApiConsumerListStateKey(false)], {\r\n          data: null,\r\n          isFetching: false,\r\n          error: null,\r\n        })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n\r\nexport const apiConsumerReducer = createSimpleReducer(GetApiConsumerAction)\r\n","export const UserTransactionType = {\r\n  CREDIT: 0,\r\n  DEBIT: 1,\r\n}\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport invariant from 'invariant'\r\nimport { createListFormatter, createFormatter } from 'pmt-utils/format'\r\nimport { formatDate } from 'pmt-utils/date'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { UserTransactionType } from './constants'\r\n\r\nconst formatTypeLabel = transaction => {\r\n  transaction.isDebitType = transaction.type === UserTransactionType.DEBIT\r\n  transaction.isCreditType = transaction.type === UserTransactionType.CREDIT\r\n\r\n  switch (transaction.type) {\r\n    case UserTransactionType.CREDIT:\r\n      transaction.typeLabel = tr('global.transaction.type_label.CREDIT')\r\n      break\r\n    case UserTransactionType.DEBIT:\r\n      transaction.typeLabel = tr('global.transaction.type_label.DEBIT')\r\n      break\r\n    default:\r\n      invariant(false, 'transaction type not handled')\r\n  }\r\n  return transaction\r\n}\r\n\r\nconst formatTransactionData = transaction => {\r\n  transaction.formattedSimpleCreationDate = formatDate(transaction.date, 'DD/MM/YY')\r\n  transaction.formattedSimpleCreationDateHour = formatDate(transaction.date, 'HH:mm')\r\n\r\n  transaction.amountPriceFormatted = formatPriceWithCurrency(transaction.amount)\r\n\r\n  if (transaction.isCreditType) {\r\n    transaction.amountPriceFormatted = `+${transaction.amountPriceFormatted}`\r\n  }\r\n\r\n  return transaction\r\n}\r\n\r\nexport const formatTransaction = createFormatter(formatTypeLabel, formatTransactionData)\r\n\r\nexport const formatTransactionsList = createListFormatter(formatTransaction)\r\n","import { tr } from 'pmt-modules/i18n'\r\nimport { createListFormatter, createFormatter } from 'pmt-utils/format'\r\nimport { formatPriceWithCurrency } from 'pmt-utils/currency'\r\nimport { formatDate } from 'pmt-utils/date'\r\nimport { getPaymentStatusLabel, getPaymentStatusType } from 'pmt-modules/payment/constants'\r\n\r\nconst PaymentType = {\r\n  OTHER: 0,\r\n  ALL: 1,\r\n  DIVIDE: 2,\r\n  SPECIFIC_AMOUNT: 3,\r\n  SPECIFIC_ITEMS: 4,\r\n  PAYMENT_REQUEST: 5,\r\n  ORDER: 6,\r\n  DEPOSIT: 7,\r\n  IRL_CREDIT_CARD: 8,\r\n}\r\n\r\nconst getPaymentTypeLabel = method => {\r\n  switch (method) {\r\n    case PaymentType.OTHER:\r\n      return tr('global.payment.Methd.OTHER')\r\n    case PaymentType.ALL:\r\n      return tr('global.payment.Methd.ALL')\r\n    case PaymentType.DIVIDE:\r\n      return tr('global.payment.Methd.DIVIDE')\r\n    case PaymentType.SPECIFIC_AMOUNT:\r\n      return tr('global.payment.Methd.SPECIFIC_AMOUNT')\r\n    case PaymentType.SPECIFIC_ITEMS:\r\n      return tr('global.payment.Methd.SPECIFIC_ITEMS')\r\n    case PaymentType.PAYMENT_REQUEST:\r\n      return tr('global.payment.Methd.PAYMENT_REQUEST')\r\n    case PaymentType.ORDER:\r\n      return tr('global.payment.Methd.ORDER')\r\n    case PaymentType.DEPOSIT:\r\n      return tr('global.payment.Methd.DEPOSIT')\r\n    case PaymentType.IRL_CREDIT_CARD:\r\n      return tr('global.payment.Methd.IRL_CREDIT_CARD')\r\n    default:\r\n      return method\r\n  }\r\n}\r\n\r\nconst formatUserTransaction = createFormatter(transaction => {\r\n  transaction.formattedCreationDate = formatDate(transaction.date, 'DD/MM/YYYY HH:mm')\r\n  transaction.methodLabel = getPaymentTypeLabel(transaction.paymentType)\r\n  transaction.restaurantId = transaction.restId\r\n  transaction.amountFormatted = formatPriceWithCurrency(transaction.amount, transaction.currency)\r\n  transaction.statusLabel = getPaymentStatusLabel(transaction.status)\r\n  transaction.statusType = getPaymentStatusType(transaction.status)\r\n  transaction.totalAmountFormatted = formatPriceWithCurrency(\r\n    transaction.totalAmount,\r\n    transaction.currency\r\n  )\r\n\r\n  return transaction\r\n})\r\n\r\nexport const formatUserTransactionsList = createListFormatter(formatUserTransaction)\r\n","import isNull from 'lodash/isNull'\r\nimport invariant from 'invariant'\r\nimport { findOnArray } from 'pmt-utils/array'\r\nimport { createSelector } from 'reselect'\r\n\r\nimport { formatOrders } from '../order'\r\n\r\nimport { getApiConsumerListWithDefault } from '../apiConsumer'\r\n\r\nimport { formatTopUps } from '../topUp'\r\n\r\nimport { HistoryType } from './constants'\r\n\r\nimport { getRestaurantMap } from '../restaurant'\r\n\r\nimport { formatTransaction, formatTransactionsList } from '../userTransaction/format'\r\nimport { formatUserTransactionsList } from '../userCheck/format'\r\n\r\nconst getUserHistoryData = state => state.entities.userHistory\r\nconst getUserIdOnProps = (state, props) => props.userId\r\nconst getHistoryTypeOnProps = (state, props) => props.historyType\r\nconst getCheckPosIdOnProps = (state, props) => props.checkPosId\r\n\r\nexport const getUserHistoryTypeData = createSelector(\r\n  [getUserHistoryData, getUserIdOnProps, getHistoryTypeOnProps],\r\n  (data, userId, historyType) => {\r\n    if (!data) {\r\n      return null\r\n    }\r\n\r\n    const userHistory = data.get(userId)\r\n\r\n    if (!userHistory) {\r\n      return null\r\n    }\r\n\r\n    const userHistoryType = userHistory.get(historyType)\r\n\r\n    if (!userHistoryType) {\r\n      return null\r\n    }\r\n\r\n    return userHistoryType.toJS()\r\n  }\r\n)\r\n\r\nexport const makeIsFetchingHistory = () => {\r\n  return createSelector([getUserHistoryTypeData], historyTypeData => {\r\n    if (isNull(historyTypeData)) {\r\n      return true\r\n    }\r\n\r\n    return historyTypeData.isFetching\r\n  })\r\n}\r\n\r\nexport const makeGetUserHistoryTypeList = () => {\r\n  return createSelector(\r\n    [\r\n      getUserHistoryTypeData,\r\n      getHistoryTypeOnProps,\r\n      getRestaurantMap,\r\n      getApiConsumerListWithDefault,\r\n    ],\r\n    (historyTypeData, historyType, formattedRestaurantsMap, apiConsumerList) => {\r\n      if (isNull(historyTypeData)) {\r\n        return null\r\n      }\r\n\r\n      const data = historyTypeData.data\r\n\r\n      if (!data) {\r\n        return null\r\n      }\r\n\r\n      //\r\n      // For better performances, we get formatted restaurants list here and pass it to the order\r\n      // format, instead of formatting the restaurant on each order formatter\r\n      //\r\n      const props = { formattedRestaurantsMap }\r\n\r\n      switch (historyType) {\r\n        case HistoryType.ORDER:\r\n          const orders = formatOrders(data, props)\r\n          // sort by date\r\n          return orders.sort((a, b) => b.dueDate - a.dueDate)\r\n\r\n        case HistoryType.TOP_UP:\r\n          const topUps = !isNull(apiConsumerList)\r\n            ? formatTopUps(data, { ...props, ...apiConsumerList })\r\n            : formatTopUps(data, props)\r\n\r\n          // sort by date\r\n          return topUps.sort((a, b) => b.creationDate - a.creationDate)\r\n\r\n        case HistoryType.USER_TRANSACTIONS:\r\n          return formatUserTransactionsList(data)\r\n\r\n        case HistoryType.TRANSACTIONS:\r\n          return formatTransactionsList(data, props)\r\n\r\n        default:\r\n          invariant(false, `Invalid HistoryType ${historyType}`)\r\n      }\r\n    }\r\n  )\r\n}\r\n\r\nexport const makeGetUserHistoryTypePagination = () => {\r\n  return createSelector([getUserHistoryTypeData], historyTypeData => {\r\n    if (isNull(historyTypeData)) {\r\n      return null\r\n    }\r\n\r\n    const pagination = historyTypeData.pagination\r\n\r\n    if (!pagination) {\r\n      return null\r\n    }\r\n\r\n    return pagination\r\n  })\r\n}\r\n\r\nexport const makeGetUserHistoryTransaction = () =>\r\n  createSelector([getUserHistoryTypeData, getCheckPosIdOnProps], (data, checkPosId) => {\r\n    if (!data) {\r\n      return null\r\n    }\r\n\r\n    const transaction = findOnArray(data.data, a => a.checkPosId === checkPosId)\r\n\r\n    if (!transaction) {\r\n      return null\r\n    }\r\n\r\n    return formatTransaction(transaction)\r\n  })\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\n\r\nimport isNil from 'lodash/isNil'\r\nimport { fetchUserHistory } from '../actions'\r\nimport {\r\n  makeIsFetchingHistory,\r\n  makeGetUserHistoryTypeList,\r\n  makeGetUserHistoryTypePagination,\r\n} from '../selectors'\r\n\r\nimport { getLoadedRestaurantsIds } from '../../restaurant'\r\n\r\n/**\r\n * @specs N/A\r\n *\r\n * A container that take a `Function as child component`.\r\n * It fetch the given HistoryType data for the given user.\r\n *\r\n * Requirements:\r\n * - historyType\r\n * - userId (can be 'me')\r\n *\r\n * see `withHistoryType`\r\n *\r\n */\r\nclass HistoryTypeContainer extends React.Component {\r\n  get data() {\r\n    return {\r\n      restaurantIds: this.props.loadedRestaurantsIds,\r\n      userAccountId: this.props.userAccountId,\r\n    }\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.props.fetchUserHistory(\r\n      this.props.userId,\r\n      this.props.historyType,\r\n      this.data,\r\n      '',\r\n      this.props.limit\r\n    )\r\n  }\r\n\r\n  loadMore = () => {\r\n    // This is done to be sure we are not already fetching content\r\n    if (!this.props.isFetchingHistory && !isNil(this.props.pagination.cursors.after)) {\r\n      this.props.fetchUserHistory(\r\n        this.props.userId,\r\n        this.props.historyType,\r\n        this.data,\r\n        this.props.pagination.cursors.after,\r\n        this.props.limit\r\n      )\r\n    }\r\n  }\r\n\r\n  render() {\r\n    return this.props.children({\r\n      isFetchingHistory: this.props.isFetchingHistory,\r\n      list: this.props.historyData,\r\n      pagination: this.props.pagination,\r\n      onLoadMore: () => {\r\n        this.loadMore()\r\n      },\r\n    })\r\n  }\r\n}\r\n\r\nHistoryTypeContainer.defaultProps = {\r\n  // web customer is using this value.\r\n  // if you change it, don't forget to set limit in web customer container\r\n  limit: 10,\r\n}\r\n\r\nHistoryTypeContainer.propTypes = {\r\n  fetchUserHistory: PropTypes.func.isRequired,\r\n  isFetchingHistory: PropTypes.bool,\r\n  me: PropTypes.object,\r\n  limit: PropTypes.number,\r\n\r\n  // children MUST be a function\r\n  children: PropTypes.func.isRequired,\r\n}\r\n\r\nconst makeMapStateToProps = () => {\r\n  const isFetchingHistory = makeIsFetchingHistory()\r\n  const getUserHistoryTypeList = makeGetUserHistoryTypeList()\r\n  const getUserHistoryTypePagination = makeGetUserHistoryTypePagination()\r\n\r\n  const mapStateToProps = (state, props) => {\r\n    return {\r\n      // history: getHistory(state, props),\r\n      isFetchingHistory: isFetchingHistory(state, props),\r\n      historyData: getUserHistoryTypeList(state, props),\r\n      pagination: getUserHistoryTypePagination(state, props),\r\n      loadedRestaurantsIds: getLoadedRestaurantsIds(state),\r\n    }\r\n  }\r\n  return mapStateToProps\r\n}\r\n\r\nexport default connect(\r\n  makeMapStateToProps,\r\n  {\r\n    fetchUserHistory,\r\n  }\r\n)(HistoryTypeContainer)\r\n","import Immutable from 'immutable'\r\nimport concat from 'lodash/concat'\r\nimport uniqWith from 'lodash/uniqWith'\r\nimport { HistoryType } from './constants'\r\n\r\nimport { GetHistoryAction } from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './selectors'\r\nexport * from './constants'\r\nexport * from './components'\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  // Example:\r\n  // [userId]: {\r\n  //  [HistoryType]:\r\n  //    data: null,\r\n  //    pagination: [],\r\n  //    isFetching: false,\r\n  //    lastUpdated: null,\r\n  //    error: null\r\n  //  }\r\n  // }\r\n  //\r\n})\r\n\r\nexport const userHistoryReducer = (state = DEFAULT, action) => {\r\n  switch (action.type) {\r\n    case GetHistoryAction.REQUEST:\r\n      return state.mergeIn([action.data.userId, action.data.historyType], {\r\n        isFetching: true,\r\n        lastUpdated: null,\r\n        error: null,\r\n      })\r\n\r\n    case GetHistoryAction.SUCCESS:\r\n      let newHistory = []\r\n\r\n      /**\r\n       * A null before cursor means we ran the action to load the first\r\n       * data page. In this case, we don't merge the data,\r\n       * we reset it.\r\n       */\r\n      if (action.response.paging.cursors.before === null) {\r\n        newHistory = action.response.data\r\n      } else {\r\n        let actualHistory = state.getIn([action.data.userId, action.data.historyType, 'data'])\r\n\r\n        let getIdentifier\r\n        if (action.data.historyType === HistoryType.TRANSACTIONS) {\r\n          // there is no id on the transaction, but a checkPosId\r\n          getIdentifier = a => a.checkPosId\r\n        } else {\r\n          getIdentifier = a => a.id\r\n        }\r\n\r\n        if (typeof actualHistory !== 'undefined') {\r\n          actualHistory = actualHistory\r\n            .valueSeq()\r\n            .toArray()\r\n            .map(item => {\r\n              return item.toJS()\r\n            })\r\n        } else {\r\n          actualHistory = []\r\n        }\r\n\r\n        newHistory = concat(actualHistory, action.response.data)\r\n        newHistory = uniqWith(newHistory, (a, b) => getIdentifier(a) === getIdentifier(b))\r\n      }\r\n\r\n      return state\r\n        .mergeIn([action.data.userId, action.data.historyType], {\r\n          isFetching: false,\r\n          lastUpdated: new Date(),\r\n          error: null,\r\n        })\r\n        .mergeIn(\r\n          [action.data.userId, action.data.historyType, 'pagination'],\r\n          action.response.paging\r\n        )\r\n        .setIn([action.data.userId, action.data.historyType, 'data'], Immutable.fromJS(newHistory))\r\n\r\n    case GetHistoryAction.FAILURE:\r\n      return state.mergeIn([action.data.userId, action.data.historyType], {\r\n        isFetching: false,\r\n        lastUpdated: new Date(),\r\n        error: action.error,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nexport default class InfiniteScroll extends Component {\n  static propTypes = {\n    children: PropTypes.node.isRequired,\n    element: PropTypes.node,\n    hasMore: PropTypes.bool,\n    initialLoad: PropTypes.bool,\n    isReverse: PropTypes.bool,\n    loader: PropTypes.node,\n    loadMore: PropTypes.func.isRequired,\n    pageStart: PropTypes.number,\n    ref: PropTypes.func,\n    getScrollParent: PropTypes.func,\n    threshold: PropTypes.number,\n    useCapture: PropTypes.bool,\n    useWindow: PropTypes.bool\n  };\n\n  static defaultProps = {\n    element: 'div',\n    hasMore: false,\n    initialLoad: true,\n    pageStart: 0,\n    ref: null,\n    threshold: 250,\n    useWindow: true,\n    isReverse: false,\n    useCapture: false,\n    loader: null,\n    getScrollParent: null\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.scrollListener = this.scrollListener.bind(this);\n    this.eventListenerOptions = this.eventListenerOptions.bind(this);\n    this.mousewheelListener = this.mousewheelListener.bind(this);\n  }\n\n  componentDidMount() {\n    this.pageLoaded = this.props.pageStart;\n    this.options = this.eventListenerOptions();\n    this.attachScrollListener();\n  }\n\n  componentDidUpdate() {\n    if (this.props.isReverse && this.loadMore) {\n      const parentElement = this.getParentElement(this.scrollComponent);\n      parentElement.scrollTop =\n        parentElement.scrollHeight -\n        this.beforeScrollHeight +\n        this.beforeScrollTop;\n      this.loadMore = false;\n    }\n    this.attachScrollListener();\n  }\n\n  componentWillUnmount() {\n    this.detachScrollListener();\n    this.detachMousewheelListener();\n  }\n\n  isPassiveSupported() {\n    let passive = false;\n\n    const testOptions = {\n      get passive() {\n        passive = true;\n      }\n    };\n\n    try {\n      document.addEventListener('test', null, testOptions);\n      document.removeEventListener('test', null, testOptions);\n    } catch (e) {\n      // ignore\n    }\n    return passive;\n  }\n\n  eventListenerOptions() {\n    let options = this.props.useCapture;\n\n    if (this.isPassiveSupported()) {\n      options = {\n        useCapture: this.props.useCapture,\n        passive: true\n      };\n    } else {\n      options = {\n        passive: false\n      };\n    }\n    return options;\n  }\n\n  // Set a defaut loader for all your `InfiniteScroll` components\n  setDefaultLoader(loader) {\n    this.defaultLoader = loader;\n  }\n\n  detachMousewheelListener() {\n    let scrollEl = window;\n    if (this.props.useWindow === false) {\n      scrollEl = this.scrollComponent.parentNode;\n    }\n\n    scrollEl.removeEventListener(\n      'mousewheel',\n      this.mousewheelListener,\n      this.options ? this.options : this.props.useCapture\n    );\n  }\n\n  detachScrollListener() {\n    let scrollEl = window;\n    if (this.props.useWindow === false) {\n      scrollEl = this.getParentElement(this.scrollComponent);\n    }\n\n    scrollEl.removeEventListener(\n      'scroll',\n      this.scrollListener,\n      this.options ? this.options : this.props.useCapture\n    );\n    scrollEl.removeEventListener(\n      'resize',\n      this.scrollListener,\n      this.options ? this.options : this.props.useCapture\n    );\n  }\n\n  getParentElement(el) {\n    const scrollParent =\n      this.props.getScrollParent && this.props.getScrollParent();\n    if (scrollParent != null) {\n      return scrollParent;\n    }\n    return el && el.parentNode;\n  }\n\n  filterProps(props) {\n    return props;\n  }\n\n  attachScrollListener() {\n    const parentElement = this.getParentElement(this.scrollComponent);\n\n    if (!this.props.hasMore || !parentElement) {\n      return;\n    }\n\n    let scrollEl = window;\n    if (this.props.useWindow === false) {\n      scrollEl = parentElement;\n    }\n\n    scrollEl.addEventListener(\n      'mousewheel',\n      this.mousewheelListener,\n      this.options ? this.options : this.props.useCapture\n    );\n    scrollEl.addEventListener(\n      'scroll',\n      this.scrollListener,\n      this.options ? this.options : this.props.useCapture\n    );\n    scrollEl.addEventListener(\n      'resize',\n      this.scrollListener,\n      this.options ? this.options : this.props.useCapture\n    );\n\n    if (this.props.initialLoad) {\n      this.scrollListener();\n    }\n  }\n\n  mousewheelListener(e) {\n    // Prevents Chrome hangups\n    // See: https://stackoverflow.com/questions/47524205/random-high-content-download-time-in-chrome/47684257#47684257\n    if (e.deltaY === 1 && !this.isPassiveSupported()) {\n      e.preventDefault();\n    }\n  }\n\n  scrollListener() {\n    const el = this.scrollComponent;\n    const scrollEl = window;\n    const parentNode = this.getParentElement(el);\n\n    let offset;\n    if (this.props.useWindow) {\n      const doc =\n        document.documentElement || document.body.parentNode || document.body;\n      const scrollTop =\n        scrollEl.pageYOffset !== undefined\n          ? scrollEl.pageYOffset\n          : doc.scrollTop;\n      if (this.props.isReverse) {\n        offset = scrollTop;\n      } else {\n        offset = this.calculateOffset(el, scrollTop);\n      }\n    } else if (this.props.isReverse) {\n      offset = parentNode.scrollTop;\n    } else {\n      offset = el.scrollHeight - parentNode.scrollTop - parentNode.clientHeight;\n    }\n\n    // Here we make sure the element is visible as well as checking the offset\n    if (\n      offset < Number(this.props.threshold) &&\n      (el && el.offsetParent !== null)\n    ) {\n      this.detachScrollListener();\n      this.beforeScrollHeight = parentNode.scrollHeight;\n      this.beforeScrollTop = parentNode.scrollTop;\n      // Call loadMore after detachScrollListener to allow for non-async loadMore functions\n      if (typeof this.props.loadMore === 'function') {\n        this.props.loadMore((this.pageLoaded += 1));\n        this.loadMore = true;\n      }\n    }\n  }\n\n  calculateOffset(el, scrollTop) {\n    if (!el) {\n      return 0;\n    }\n\n    return (\n      this.calculateTopPosition(el) +\n      (el.offsetHeight - scrollTop - window.innerHeight)\n    );\n  }\n\n  calculateTopPosition(el) {\n    if (!el) {\n      return 0;\n    }\n    return el.offsetTop + this.calculateTopPosition(el.offsetParent);\n  }\n\n  render() {\n    const renderProps = this.filterProps(this.props);\n    const {\n      children,\n      element,\n      hasMore,\n      initialLoad,\n      isReverse,\n      loader,\n      loadMore,\n      pageStart,\n      ref,\n      threshold,\n      useCapture,\n      useWindow,\n      getScrollParent,\n      ...props\n    } = renderProps;\n\n    props.ref = node => {\n      this.scrollComponent = node;\n      if (ref) {\n        ref(node);\n      }\n    };\n\n    const childrenArray = [children];\n    if (hasMore) {\n      if (loader) {\n        isReverse ? childrenArray.unshift(loader) : childrenArray.push(loader);\n      } else if (this.defaultLoader) {\n        isReverse\n          ? childrenArray.unshift(this.defaultLoader)\n          : childrenArray.push(this.defaultLoader);\n      }\n    }\n    return React.createElement(element, props, childrenArray);\n  }\n}\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport isEmpty from 'lodash/isEmpty'\r\nimport InfiniteScroll from 'react-infinite-scroller'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport Table, { TableBody } from 'pmt-ui/Table'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { Button } from '../../../../components/Button'\r\n\r\nconst Pagination = ({ pagination, onLoadMore }) =>\r\n  !pagination || isEmpty(pagination.cursors.after) ? null : (\r\n    <div className=\"u-textAlignCenter u-marginTop20 u-marginBottom20\">\r\n      <Button onClick={onLoadMore}>\r\n        <TypographyCustom type=\"187\">{tr('global.load_more')}</TypographyCustom>\r\n      </Button>\r\n    </div>\r\n  )\r\n\r\n/**\r\n * Infinite scroller : https://github.com/CassetteRocks/react-infinite-scroller\r\n */\r\nconst HistoryList = ({\r\n  list = [],\r\n  pagination,\r\n  onLoadMore,\r\n  rowRenderer,\r\n  emptyList,\r\n  infiniteScroll,\r\n}) => (\r\n  <InfiniteScroll\r\n    loadMore={onLoadMore}\r\n    hasMore={!infiniteScroll.disabled && pagination && !isEmpty(pagination.cursors.after)}\r\n    {...infiniteScroll}\r\n  >\r\n    {!isEmpty(list) ? (\r\n      <Table selectable=\"false\">\r\n        <TableBody>{list.map(object => rowRenderer(object))}</TableBody>\r\n      </Table>\r\n    ) : (\r\n      <p className=\"u-contentSlabItalic u-textAlignCenter u-marginTop20\">{emptyList}</p>\r\n    )}\r\n    {infiniteScroll.disabled && <Pagination pagination={pagination} onLoadMore={onLoadMore} />}\r\n  </InfiniteScroll>\r\n)\r\n\r\nHistoryList.defaultProps = {\r\n  infiniteScroll: {\r\n    disabled: false, // Disable infinite scroll by default\r\n    initialLoad: false, // Whether the component should load the first set of items.\r\n    pageStart: 0, // The number of the first page to load, With the default of 0, the first page is 1.\r\n    threshold: 50, // The distance in pixels before the end of the items that will trigger a call to loadMore.\r\n    useWindow: false, // Add scroll listeners to the window, or else, the component's parentNode.\r\n  },\r\n}\r\n\r\nHistoryList.propTypes = {\r\n  list: PropTypes.array,\r\n  pagination: PropTypes.object,\r\n  rowRenderer: PropTypes.func.isRequired,\r\n  onLoadMore: PropTypes.func.isRequired,\r\n  infiniteScroll: PropTypes.object,\r\n}\r\n\r\nexport default HistoryList\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\nimport { UserAccountsContainer } from 'pmt-modules/userAccount'\r\nimport LoadingContainer from 'pmt-ui/LoadingContainer'\r\nimport { HistoryType, HistoryTypeContainer } from 'pmt-modules/userHistory'\r\n\r\nimport { RoutingContainer } from 'pmt-modules/routing'\r\nimport Divider from 'pmt-ui/Divider'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TableRow, TableCell } from 'pmt-ui/Table'\r\nimport Typography from 'pmt-ui/Typography'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\nimport HistoryList from '../components/HistoryList'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    padding: `0 ${theme.spacing(2)}px`,\r\n    marginTop: theme.spacing(4),\r\n    marginBottom: theme.spacing(2),\r\n  },\r\n  title: {\r\n    textAlign: 'center',\r\n    fontSize: 14,\r\n    textTransform: 'uppercase',\r\n  },\r\n  divider: {\r\n    backgroundColor: theme.palette.primary.main,\r\n    margin: `${theme.spacing(1)}px 0`,\r\n  },\r\n  historyListContainer: {\r\n    // height: 300,\r\n    overflow: 'scroll',\r\n  },\r\n  cell: {\r\n    padding: `${theme.spacing(2)}px 0!important`,\r\n  },\r\n  date: {\r\n    color: theme.pmt.colors.grey91,\r\n    fontSize: 12,\r\n  },\r\n  typeLabel: {\r\n    fontSize: 16,\r\n  },\r\n  price: {\r\n    fontSize: 20,\r\n  },\r\n  price_DEBIT: {},\r\n  price_CREDIT: {\r\n    color: theme.pmt.colors.green4ca,\r\n  },\r\n})\r\n\r\nconst TransactionsHistoryContent = ({\r\n  isFetchingHistory,\r\n  list,\r\n  pagination,\r\n  onLoadMore,\r\n  classes,\r\n}) => (\r\n  <RoutingContainer>\r\n    {({ getRoute, redirectTo }) => (\r\n      <div className={classes.historyListContainer}>\r\n        <HistoryList\r\n          key={'history-transactions-list'}\r\n          list={list}\r\n          pagination={pagination}\r\n          onLoadMore={onLoadMore}\r\n          emptyList={\r\n            !isFetchingHistory &&\r\n            tr('web_customer.history.transactions.no_transaction', {\r\n              fr: 'Aucune transaction',\r\n              context: '',\r\n              desc: 'Label when no transactions has been returned on transactions history',\r\n            })\r\n          }\r\n          rowRenderer={transaction => (\r\n            <TableRow\r\n              key={`history-transactions-${transaction.checkPosId}`}\r\n              onClick={() =>\r\n                redirectTo(getRoute('USER_HISTORY_TRANSACTION'), {\r\n                  checkPosId: transaction.checkPosId,\r\n                })\r\n              }\r\n            >\r\n              <TableCell className={classes.cell} width={100}>\r\n                <Typography component=\"span\" className={classes.date}>\r\n                  {tr('global.date_at', {\r\n                    date: transaction.formattedSimpleCreationDate,\r\n                    hour: transaction.formattedSimpleCreationDateHour,\r\n                  })}\r\n                </Typography>\r\n              </TableCell>\r\n              <TableCell className={classes.cell} width={100}>\r\n                <Typography component=\"span\" className={classes.typeLabel}>\r\n                  {transaction.typeLabel}\r\n                </Typography>\r\n              </TableCell>\r\n              <TableCell className={classes.cell} width={80} align=\"right\">\r\n                <Typography\r\n                  component=\"span\"\r\n                  className={classNames(classes.price, {\r\n                    [classes.price_DEBIT]: transaction.isDebitType,\r\n                    [classes.price_CREDIT]: transaction.isCreditType,\r\n                  })}\r\n                >\r\n                  {transaction.amountPriceFormatted}\r\n                </Typography>\r\n              </TableCell>\r\n            </TableRow>\r\n          )}\r\n        />\r\n      </div>\r\n    )}\r\n  </RoutingContainer>\r\n)\r\n\r\nconst HistoryTransactionsModeView = ({ className, classes, userId }) => (\r\n  <LoadingContainer\r\n    withWrapper\r\n    container={<UserAccountsContainer userId={userId} />}\r\n    show={({ isFetchingUserAccounts, userAccount }) => isFetchingUserAccounts || !userAccount}\r\n  >\r\n    {({ userAccount }) =>\r\n      userAccount && (\r\n        <HistoryTypeContainer\r\n          userId={userId}\r\n          userAccountId={userAccount.id}\r\n          historyType={HistoryType.TRANSACTIONS}\r\n        >\r\n          {props => (\r\n            <div className={classNames(className, classes.root, 'u-flexColumnTop u-flexGrow1')}>\r\n              <h3 className={classes.title}>{tr('web_customer.history.transactions.title')}</h3>\r\n\r\n              <Divider className={classes.divider} />\r\n\r\n              <LoadingBlockWrapper show={props.isFetchingHistory} />\r\n              <TransactionsHistoryContent classes={classes} {...props} />\r\n            </div>\r\n          )}\r\n        </HistoryTypeContainer>\r\n      )\r\n    }\r\n  </LoadingContainer>\r\n)\r\n\r\nexport default withStyles(styles)(HistoryTransactionsModeView)\r\n","import React from 'react'\r\n// import PropTypes from 'prop-types'\r\n\r\nimport { HistoryType, HistoryTypeContainer } from 'pmt-modules/userHistory'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TableRow, TableCell } from 'pmt-ui/Table'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\nimport HistoryList from '../components/HistoryList'\r\n\r\nimport { formatDate } from 'pmt-utils/date'\r\n\r\nconst styles = theme => ({\r\n  row: {\r\n    height: 48,\r\n  },\r\n  cell: {\r\n    padding: '0 5px !important',\r\n  },\r\n})\r\n\r\nconst OrderHistoryContent = ({ isFetchingHistory, list, pagination, onLoadMore, classes }) => (\r\n  <HistoryList\r\n    key={'order-history-list'}\r\n    list={list}\r\n    pagination={pagination}\r\n    onLoadMore={onLoadMore}\r\n    emptyList={\r\n      !isFetchingHistory &&\r\n      tr('web_customer.history.order.no_transaction', {\r\n        fr: 'Aucune transaction',\r\n        context: '',\r\n        desc: 'Label when no transaction has been returned on order history',\r\n      })\r\n    }\r\n    rowRenderer={order => (\r\n      <TableRow key={`order-history-${order.id}`} className={classes.row}>\r\n        <TableCell className={classes.cell} width={70}>\r\n          <TypographyCustom type=\"144\">{formatDate(order.dueDate, 'DD/MM/YY')}</TypographyCustom>\r\n        </TableCell>\r\n        <TableCell className={classes.cell}>\r\n          <TypographyCustom type=\"144\">{order.restaurant.name}</TypographyCustom>\r\n        </TableCell>\r\n        <TableCell className={classes.cell}>\r\n          <TypographyCustom type=\"144\" align=\"right\">\r\n            {order.totalPaidPrice > 0\r\n              ? `-${order.totalPaidPriceFormatted}`\r\n              : order.totalPaidPriceFormatted}\r\n          </TypographyCustom>\r\n        </TableCell>\r\n      </TableRow>\r\n    )}\r\n  />\r\n)\r\n\r\nconst OrderHistory = ({ className, classes, userId }) => (\r\n  <HistoryTypeContainer userId={userId} historyType={HistoryType.ORDER}>\r\n    {props => (\r\n      <div className={className}>\r\n        <LoadingBlockWrapper show={props.isFetchingHistory} />\r\n        <OrderHistoryContent classes={classes} {...props} />\r\n      </div>\r\n    )}\r\n  </HistoryTypeContainer>\r\n)\r\n\r\nexport default withStyles(styles)(OrderHistory)\r\n","import React from 'react'\r\n// import PropTypes from 'prop-types'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport { HistoryType, HistoryTypeContainer } from 'pmt-modules/userHistory'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TableRow, TableCell } from 'pmt-ui/Table'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\nimport HistoryList from '../components/HistoryList'\r\n\r\nconst styles = theme => ({\r\n  row: {\r\n    height: 48,\r\n  },\r\n  cell: {\r\n    padding: '0 5px !important',\r\n  },\r\n})\r\n\r\nconst TopUpHistoryContent = ({ isFetchingHistory, list, pagination, onLoadMore, classes }) => {\r\n  let finalList = []\r\n\r\n  if (!isNil(list)) {\r\n    finalList = list.filter(topUp => topUp.isStatusSucceeded)\r\n  }\r\n\r\n  return (\r\n    <HistoryList\r\n      key={'topup-history-list'}\r\n      list={finalList}\r\n      pagination={pagination}\r\n      onLoadMore={onLoadMore}\r\n      emptyList={\r\n        !isFetchingHistory &&\r\n        tr('web_customer.history.top_up.no_transaction', {\r\n          fr: 'Aucune transaction',\r\n          context: '',\r\n          desc: 'Label when no transaction has been returned on top up history',\r\n        })\r\n      }\r\n      rowRenderer={topUp => (\r\n        <TableRow key={`topup-history-${topUp.id}`} className={classes.row}>\r\n          <TableCell className={classes.cell} width={70}>\r\n            <TypographyCustom type=\"144\">{topUp.formattedSimpleCreationDate}</TypographyCustom>\r\n          </TableCell>\r\n          <TableCell className={classes.cell}>\r\n            <TypographyCustom type=\"144\">{topUp.typeLabel}</TypographyCustom>\r\n          </TableCell>\r\n          <TableCell className={classes.cell} width={80}>\r\n            <TypographyCustom type=\"144\" align=\"right\">\r\n              +{topUp.amountPriceFormatted}\r\n            </TypographyCustom>\r\n          </TableCell>\r\n        </TableRow>\r\n      )}\r\n    />\r\n  )\r\n}\r\n\r\nconst TopUpHistory = ({ className, classes, userId }) => (\r\n  <HistoryTypeContainer userId={userId} historyType={HistoryType.TOP_UP}>\r\n    {props => (\r\n      <div className={className}>\r\n        <LoadingBlockWrapper show={props.isFetchingHistory} />\r\n        <TopUpHistoryContent classes={classes} {...props} />\r\n      </div>\r\n    )}\r\n  </HistoryTypeContainer>\r\n)\r\n\r\nexport default withStyles(styles)(TopUpHistory)\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport OrderHistory from '../OrderHistory'\r\nimport TopUpHistory from '../TopUpHistory'\r\nimport Tabs, { Tab } from 'pmt-ui/Tabs'\r\nimport AppBar from 'pmt-ui/AppBar'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = () => ({\r\n  tabsAppBar: {\r\n    boxShadow: 'none',\r\n  },\r\n})\r\n\r\nconst TabContainer = ({ children, selected, style }) => {\r\n  const tabTemplateStyles = {\r\n    width: '100%',\r\n    position: 'relative',\r\n    textAlign: 'initial',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    flexGrow: 1,\r\n    overflow: 'auto',\r\n  }\r\n\r\n  const templateStyle = Object.assign({}, tabTemplateStyles, style)\r\n  if (!selected) {\r\n    templateStyle.display = 'none'\r\n    templateStyle.height = 0\r\n    templateStyle.overflow = 'hidden'\r\n  }\r\n\r\n  return <div style={templateStyle}>{children}</div>\r\n}\r\n\r\n/**\r\n * TODO: booking.\r\n */\r\nclass HistoryNormalModeView extends React.Component {\r\n  static Tabs = {\r\n    ORDER: 'order',\r\n    TOP_UP: 'top-up',\r\n  }\r\n\r\n  state = {\r\n    tabValue: HistoryNormalModeView.Tabs.TOP_UP,\r\n  }\r\n\r\n  handleTabChange = (event, value) => {\r\n    this.setState({\r\n      tabValue: value,\r\n    })\r\n  }\r\n\r\n  render() {\r\n    const { classes } = this.props\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <AppBar\r\n          position=\"static\"\r\n          color=\"inherit\"\r\n          classes={{\r\n            root: classes.tabsAppBar,\r\n          }}\r\n        >\r\n          <Tabs\r\n            value={this.state.tabValue}\r\n            onChange={this.handleTabChange}\r\n            indicatorColor=\"primary\"\r\n            textColor=\"primary\"\r\n            variant=\"fullWidth\"\r\n          >\r\n            <Tab\r\n              label={tr('web_customer.history.top_up', {\r\n                fr: 'Rechargements',\r\n                context: '',\r\n                desc: 'History top up tab label',\r\n              })}\r\n              value={HistoryNormalModeView.Tabs.TOP_UP}\r\n            />\r\n\r\n            <Tab\r\n              label={tr('web_customer.history.orders', {\r\n                fr: 'Paiements',\r\n                context: '',\r\n                desc: 'History orders tab label',\r\n              })}\r\n              value={HistoryNormalModeView.Tabs.ORDER}\r\n            />\r\n          </Tabs>\r\n        </AppBar>\r\n\r\n        <TabContainer selected={this.state.tabValue === HistoryNormalModeView.Tabs.TOP_UP}>\r\n          <TopUpHistory\r\n            className=\"u-flexColumnTop u-flexGrow1 u-padding20 u-paddingTop7 u-overflowAuto\"\r\n            userId={this.props.userId}\r\n          />\r\n        </TabContainer>\r\n\r\n        <TabContainer selected={this.state.tabValue === HistoryNormalModeView.Tabs.ORDER}>\r\n          <OrderHistory\r\n            className=\"u-flexColumnTop u-flexGrow1 u-padding20 u-paddingTop7 u-overflowAuto\"\r\n            userId={this.props.userId}\r\n          />\r\n        </TabContainer>\r\n      </React.Fragment>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(HistoryNormalModeView)\r\n","import React from 'react'\r\n\r\nimport HistoryTransactionsModeView from './HistoryTransactionsModeView'\r\nimport HistoryNormalModeView from './HistoryNormalModeView'\r\n\r\nconst HistoryView = ({ userId, restaurantsGroup }) => {\r\n  if (restaurantsGroup.frontSettings.catering.isHistoryTypeThirdParty) {\r\n    return <HistoryTransactionsModeView userId={userId} />\r\n  }\r\n\r\n  return <HistoryNormalModeView userId={userId} />\r\n}\r\n\r\nexport default HistoryView\r\n","import React from 'react'\r\n\r\nimport { UserAccountRemainingView } from 'pmt-modules/userAccount'\r\n\r\nimport IconButton from 'pmt-ui/IconButton'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport Refresh from 'pmt-ui/svg-icons/navigation/refresh'\r\n\r\nimport HistoryView from './components/HistoryView'\r\n\r\nconst styles = theme => ({\r\n  refresh: {\r\n    position: 'absolute',\r\n    top: 2,\r\n    right: 2,\r\n    color: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\n/**\r\n * @mockup https://drive.google.com/open?id=0B_LROLHK6BeTSHBaRjNrdFNuSDA\r\n *\r\n */\r\nconst UserHistoryView = ({ classes, userId, restaurantsGroup, onRefresh }) => (\r\n  <div className=\"u-flexColumnTop u-flexGrow1 u-sizeFullHeight\">\r\n    <IconButton onClick={onRefresh} className={classes.refresh}>\r\n      <Refresh />\r\n    </IconButton>\r\n    <UserAccountRemainingView userId={userId} dislayLinkToTopUp />\r\n\r\n    <div className=\"u-flexColumnTop u-flexGrow1 u-overflowHidden\">\r\n      {restaurantsGroup && <HistoryView userId={userId} restaurantsGroup={restaurantsGroup} />}\r\n    </div>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(UserHistoryView)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { fetchUserUserAccounts } from 'pmt-modules/userAccount'\r\nimport UserAccountsContainer from 'pmt-modules/userAccount/components/UserAccountsContainer'\r\nimport { withRestaurantsGroupMine } from 'pmt-modules/restaurantsGroup/components'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\nimport Page from '../../../components/Page'\r\n\r\nimport View from './View'\r\n\r\nclass UserHistoryPage extends React.PureComponent {\r\n  loadUserAccount = () => {\r\n    this.props.fetchUserUserAccounts(this.props.userId)\r\n  }\r\n\r\n  render() {\r\n    const { isFetchingRestaurantsGroup, restaurantsGroup, userId } = this.props\r\n\r\n    return (\r\n      <Page title={tr('web_customer.history.title')}>\r\n        <UserAccountsContainer userId={userId}>\r\n          {({ isFetchingUserAccounts }) => (\r\n            <React.Fragment>\r\n              <LoadingBlockWrapper\r\n                show={isFetchingRestaurantsGroup || !restaurantsGroup || isFetchingUserAccounts}\r\n              />\r\n              <View\r\n                userId={userId}\r\n                restaurantsGroup={restaurantsGroup}\r\n                onRefresh={this.loadUserAccount}\r\n              />\r\n            </React.Fragment>\r\n          )}\r\n        </UserAccountsContainer>\r\n      </Page>\r\n    )\r\n  }\r\n}\r\n\r\nUserHistoryPage.defaultProps = {\r\n  userId: 'me',\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nexport default compose(\r\n  withRestaurantsGroupMine(),\r\n  connect(\r\n  mapStateToProps,\r\n  {\r\n    fetchUserUserAccounts,\r\n  }\r\n))(UserHistoryPage)\r\n","module.exports = {\n\tMODE_NUMBER :\t\t1 << 0,\n\tMODE_ALPHA_NUM : \t1 << 1,\n\tMODE_8BIT_BYTE : \t1 << 2,\n\tMODE_KANJI :\t\t1 << 3\n};\n","var mode = require('./mode');\n\nfunction QR8bitByte(data) {\n\tthis.mode = mode.MODE_8BIT_BYTE;\n\tthis.data = data;\n}\n\nQR8bitByte.prototype = {\n\n\tgetLength : function(buffer) {\n\t\treturn this.data.length;\n\t},\n\t\n\twrite : function(buffer) {\n\t\tfor (var i = 0; i < this.data.length; i++) {\n\t\t\t// not JIS ...\n\t\t\tbuffer.put(this.data.charCodeAt(i), 8);\n\t\t}\n\t}\n};\n\nmodule.exports = QR8bitByte;\n\n","module.exports = {\n\tL : 1,\n\tM : 0,\n\tQ : 3,\n\tH : 2\n};\n\n","// ErrorCorrectLevel\nvar ECL = require('./ErrorCorrectLevel');\n\nfunction QRRSBlock(totalCount, dataCount) {\n\tthis.totalCount = totalCount;\n\tthis.dataCount  = dataCount;\n}\n\nQRRSBlock.RS_BLOCK_TABLE = [\n\n\t// L\n\t// M\n\t// Q\n\t// H\n\n\t// 1\n\t[1, 26, 19],\n\t[1, 26, 16],\n\t[1, 26, 13],\n\t[1, 26, 9],\n\t\n\t// 2\n\t[1, 44, 34],\n\t[1, 44, 28],\n\t[1, 44, 22],\n\t[1, 44, 16],\n\n\t// 3\n\t[1, 70, 55],\n\t[1, 70, 44],\n\t[2, 35, 17],\n\t[2, 35, 13],\n\n\t// 4\t\t\n\t[1, 100, 80],\n\t[2, 50, 32],\n\t[2, 50, 24],\n\t[4, 25, 9],\n\t\n\t// 5\n\t[1, 134, 108],\n\t[2, 67, 43],\n\t[2, 33, 15, 2, 34, 16],\n\t[2, 33, 11, 2, 34, 12],\n\t\n\t// 6\n\t[2, 86, 68],\n\t[4, 43, 27],\n\t[4, 43, 19],\n\t[4, 43, 15],\n\t\n\t// 7\t\t\n\t[2, 98, 78],\n\t[4, 49, 31],\n\t[2, 32, 14, 4, 33, 15],\n\t[4, 39, 13, 1, 40, 14],\n\t\n\t// 8\n\t[2, 121, 97],\n\t[2, 60, 38, 2, 61, 39],\n\t[4, 40, 18, 2, 41, 19],\n\t[4, 40, 14, 2, 41, 15],\n\t\n\t// 9\n\t[2, 146, 116],\n\t[3, 58, 36, 2, 59, 37],\n\t[4, 36, 16, 4, 37, 17],\n\t[4, 36, 12, 4, 37, 13],\n\t\n\t// 10\t\t\n\t[2, 86, 68, 2, 87, 69],\n\t[4, 69, 43, 1, 70, 44],\n\t[6, 43, 19, 2, 44, 20],\n\t[6, 43, 15, 2, 44, 16],\n\n\t// 11\n\t[4, 101, 81],\n\t[1, 80, 50, 4, 81, 51],\n\t[4, 50, 22, 4, 51, 23],\n\t[3, 36, 12, 8, 37, 13],\n\n\t// 12\n\t[2, 116, 92, 2, 117, 93],\n\t[6, 58, 36, 2, 59, 37],\n\t[4, 46, 20, 6, 47, 21],\n\t[7, 42, 14, 4, 43, 15],\n\n\t// 13\n\t[4, 133, 107],\n\t[8, 59, 37, 1, 60, 38],\n\t[8, 44, 20, 4, 45, 21],\n\t[12, 33, 11, 4, 34, 12],\n\n\t// 14\n\t[3, 145, 115, 1, 146, 116],\n\t[4, 64, 40, 5, 65, 41],\n\t[11, 36, 16, 5, 37, 17],\n\t[11, 36, 12, 5, 37, 13],\n\n\t// 15\n\t[5, 109, 87, 1, 110, 88],\n\t[5, 65, 41, 5, 66, 42],\n\t[5, 54, 24, 7, 55, 25],\n\t[11, 36, 12],\n\n\t// 16\n\t[5, 122, 98, 1, 123, 99],\n\t[7, 73, 45, 3, 74, 46],\n\t[15, 43, 19, 2, 44, 20],\n\t[3, 45, 15, 13, 46, 16],\n\n\t// 17\n\t[1, 135, 107, 5, 136, 108],\n\t[10, 74, 46, 1, 75, 47],\n\t[1, 50, 22, 15, 51, 23],\n\t[2, 42, 14, 17, 43, 15],\n\n\t// 18\n\t[5, 150, 120, 1, 151, 121],\n\t[9, 69, 43, 4, 70, 44],\n\t[17, 50, 22, 1, 51, 23],\n\t[2, 42, 14, 19, 43, 15],\n\n\t// 19\n\t[3, 141, 113, 4, 142, 114],\n\t[3, 70, 44, 11, 71, 45],\n\t[17, 47, 21, 4, 48, 22],\n\t[9, 39, 13, 16, 40, 14],\n\n\t// 20\n\t[3, 135, 107, 5, 136, 108],\n\t[3, 67, 41, 13, 68, 42],\n\t[15, 54, 24, 5, 55, 25],\n\t[15, 43, 15, 10, 44, 16],\n\n\t// 21\n\t[4, 144, 116, 4, 145, 117],\n\t[17, 68, 42],\n\t[17, 50, 22, 6, 51, 23],\n\t[19, 46, 16, 6, 47, 17],\n\n\t// 22\n\t[2, 139, 111, 7, 140, 112],\n\t[17, 74, 46],\n\t[7, 54, 24, 16, 55, 25],\n\t[34, 37, 13],\n\n\t// 23\n\t[4, 151, 121, 5, 152, 122],\n\t[4, 75, 47, 14, 76, 48],\n\t[11, 54, 24, 14, 55, 25],\n\t[16, 45, 15, 14, 46, 16],\n\n\t// 24\n\t[6, 147, 117, 4, 148, 118],\n\t[6, 73, 45, 14, 74, 46],\n\t[11, 54, 24, 16, 55, 25],\n\t[30, 46, 16, 2, 47, 17],\n\n\t// 25\n\t[8, 132, 106, 4, 133, 107],\n\t[8, 75, 47, 13, 76, 48],\n\t[7, 54, 24, 22, 55, 25],\n\t[22, 45, 15, 13, 46, 16],\n\n\t// 26\n\t[10, 142, 114, 2, 143, 115],\n\t[19, 74, 46, 4, 75, 47],\n\t[28, 50, 22, 6, 51, 23],\n\t[33, 46, 16, 4, 47, 17],\n\n\t// 27\n\t[8, 152, 122, 4, 153, 123],\n\t[22, 73, 45, 3, 74, 46],\n\t[8, 53, 23, 26, 54, 24],\n\t[12, 45, 15, 28, 46, 16],\n\n\t// 28\n\t[3, 147, 117, 10, 148, 118],\n\t[3, 73, 45, 23, 74, 46],\n\t[4, 54, 24, 31, 55, 25],\n\t[11, 45, 15, 31, 46, 16],\n\n\t// 29\n\t[7, 146, 116, 7, 147, 117],\n\t[21, 73, 45, 7, 74, 46],\n\t[1, 53, 23, 37, 54, 24],\n\t[19, 45, 15, 26, 46, 16],\n\n\t// 30\n\t[5, 145, 115, 10, 146, 116],\n\t[19, 75, 47, 10, 76, 48],\n\t[15, 54, 24, 25, 55, 25],\n\t[23, 45, 15, 25, 46, 16],\n\n\t// 31\n\t[13, 145, 115, 3, 146, 116],\n\t[2, 74, 46, 29, 75, 47],\n\t[42, 54, 24, 1, 55, 25],\n\t[23, 45, 15, 28, 46, 16],\n\n\t// 32\n\t[17, 145, 115],\n\t[10, 74, 46, 23, 75, 47],\n\t[10, 54, 24, 35, 55, 25],\n\t[19, 45, 15, 35, 46, 16],\n\n\t// 33\n\t[17, 145, 115, 1, 146, 116],\n\t[14, 74, 46, 21, 75, 47],\n\t[29, 54, 24, 19, 55, 25],\n\t[11, 45, 15, 46, 46, 16],\n\n\t// 34\n\t[13, 145, 115, 6, 146, 116],\n\t[14, 74, 46, 23, 75, 47],\n\t[44, 54, 24, 7, 55, 25],\n\t[59, 46, 16, 1, 47, 17],\n\n\t// 35\n\t[12, 151, 121, 7, 152, 122],\n\t[12, 75, 47, 26, 76, 48],\n\t[39, 54, 24, 14, 55, 25],\n\t[22, 45, 15, 41, 46, 16],\n\n\t// 36\n\t[6, 151, 121, 14, 152, 122],\n\t[6, 75, 47, 34, 76, 48],\n\t[46, 54, 24, 10, 55, 25],\n\t[2, 45, 15, 64, 46, 16],\n\n\t// 37\n\t[17, 152, 122, 4, 153, 123],\n\t[29, 74, 46, 14, 75, 47],\n\t[49, 54, 24, 10, 55, 25],\n\t[24, 45, 15, 46, 46, 16],\n\n\t// 38\n\t[4, 152, 122, 18, 153, 123],\n\t[13, 74, 46, 32, 75, 47],\n\t[48, 54, 24, 14, 55, 25],\n\t[42, 45, 15, 32, 46, 16],\n\n\t// 39\n\t[20, 147, 117, 4, 148, 118],\n\t[40, 75, 47, 7, 76, 48],\n\t[43, 54, 24, 22, 55, 25],\n\t[10, 45, 15, 67, 46, 16],\n\n\t// 40\n\t[19, 148, 118, 6, 149, 119],\n\t[18, 75, 47, 31, 76, 48],\n\t[34, 54, 24, 34, 55, 25],\n\t[20, 45, 15, 61, 46, 16]\n];\n\nQRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {\n\t\n\tvar rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\t\n\tif (rsBlock == undefined) {\n\t\tthrow new Error(\"bad rs block @ typeNumber:\" + typeNumber + \"/errorCorrectLevel:\" + errorCorrectLevel);\n\t}\n\n\tvar length = rsBlock.length / 3;\n\t\n\tvar list = new Array();\n\t\n\tfor (var i = 0; i < length; i++) {\n\n\t\tvar count = rsBlock[i * 3 + 0];\n\t\tvar totalCount = rsBlock[i * 3 + 1];\n\t\tvar dataCount  = rsBlock[i * 3 + 2];\n\n\t\tfor (var j = 0; j < count; j++) {\n\t\t\tlist.push(new QRRSBlock(totalCount, dataCount) );\t\n\t\t}\n\t}\n\t\n\treturn list;\n}\n\nQRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {\n\n\tswitch(errorCorrectLevel) {\n\tcase ECL.L :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n\tcase ECL.M :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n\tcase ECL.Q :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n\tcase ECL.H :\n\t\treturn QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n\tdefault :\n\t\treturn undefined;\n\t}\n}\n\nmodule.exports = QRRSBlock;\n","function QRBitBuffer() {\n\tthis.buffer = new Array();\n\tthis.length = 0;\n}\n\nQRBitBuffer.prototype = {\n\n\tget : function(index) {\n\t\tvar bufIndex = Math.floor(index / 8);\n\t\treturn ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n\t},\n\t\n\tput : function(num, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tthis.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n\t\t}\n\t},\n\t\n\tgetLengthInBits : function() {\n\t\treturn this.length;\n\t},\n\t\n\tputBit : function(bit) {\n\t\n\t\tvar bufIndex = Math.floor(this.length / 8);\n\t\tif (this.buffer.length <= bufIndex) {\n\t\t\tthis.buffer.push(0);\n\t\t}\n\t\n\t\tif (bit) {\n\t\t\tthis.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );\n\t\t}\n\t\n\t\tthis.length++;\n\t}\n};\n\nmodule.exports = QRBitBuffer;\n","var QRMath = {\n\n\tglog : function(n) {\n\t\n\t\tif (n < 1) {\n\t\t\tthrow new Error(\"glog(\" + n + \")\");\n\t\t}\n\t\t\n\t\treturn QRMath.LOG_TABLE[n];\n\t},\n\t\n\tgexp : function(n) {\n\t\n\t\twhile (n < 0) {\n\t\t\tn += 255;\n\t\t}\n\t\n\t\twhile (n >= 256) {\n\t\t\tn -= 255;\n\t\t}\n\t\n\t\treturn QRMath.EXP_TABLE[n];\n\t},\n\t\n\tEXP_TABLE : new Array(256),\n\t\n\tLOG_TABLE : new Array(256)\n\n};\n\t\nfor (var i = 0; i < 8; i++) {\n\tQRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (var i = 8; i < 256; i++) {\n\tQRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]\n\t\t^ QRMath.EXP_TABLE[i - 5]\n\t\t^ QRMath.EXP_TABLE[i - 6]\n\t\t^ QRMath.EXP_TABLE[i - 8];\n}\nfor (var i = 0; i < 255; i++) {\n\tQRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;\n}\n\nmodule.exports = QRMath;\n","var math = require('./math');\n\nfunction QRPolynomial(num, shift) {\n\n\tif (num.length == undefined) {\n\t\tthrow new Error(num.length + \"/\" + shift);\n\t}\n\n\tvar offset = 0;\n\n\twhile (offset < num.length && num[offset] == 0) {\n\t\toffset++;\n\t}\n\n\tthis.num = new Array(num.length - offset + shift);\n\tfor (var i = 0; i < num.length - offset; i++) {\n\t\tthis.num[i] = num[i + offset];\n\t}\n}\n\nQRPolynomial.prototype = {\n\n\tget : function(index) {\n\t\treturn this.num[index];\n\t},\n\t\n\tgetLength : function() {\n\t\treturn this.num.length;\n\t},\n\t\n\tmultiply : function(e) {\n\t\n\t\tvar num = new Array(this.getLength() + e.getLength() - 1);\n\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tfor (var j = 0; j < e.getLength(); j++) {\n\t\t\t\tnum[i + j] ^= math.gexp(math.glog(this.get(i) ) + math.glog(e.get(j) ) );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new QRPolynomial(num, 0);\n\t},\n\t\n\tmod : function(e) {\n\t\n\t\tif (this.getLength() - e.getLength() < 0) {\n\t\t\treturn this;\n\t\t}\n\t\n\t\tvar ratio = math.glog(this.get(0) ) - math.glog(e.get(0) );\n\t\n\t\tvar num = new Array(this.getLength() );\n\t\t\n\t\tfor (var i = 0; i < this.getLength(); i++) {\n\t\t\tnum[i] = this.get(i);\n\t\t}\n\t\t\n\t\tfor (var i = 0; i < e.getLength(); i++) {\n\t\t\tnum[i] ^= math.gexp(math.glog(e.get(i) ) + ratio);\n\t\t}\n\t\n\t\t// recursive call\n\t\treturn new QRPolynomial(num, 0).mod(e);\n\t}\n};\n\nmodule.exports = QRPolynomial;\n","var Mode = require('./mode');\nvar Polynomial = require('./Polynomial');\nvar math = require('./math');\n\nvar QRMaskPattern = {\n\tPATTERN000 : 0,\n\tPATTERN001 : 1,\n\tPATTERN010 : 2,\n\tPATTERN011 : 3,\n\tPATTERN100 : 4,\n\tPATTERN101 : 5,\n\tPATTERN110 : 6,\n\tPATTERN111 : 7\n};\n\nvar QRUtil = {\n\n    PATTERN_POSITION_TABLE : [\n\t    [],\n\t    [6, 18],\n\t    [6, 22],\n\t    [6, 26],\n\t    [6, 30],\n\t    [6, 34],\n\t    [6, 22, 38],\n\t    [6, 24, 42],\n\t    [6, 26, 46],\n\t    [6, 28, 50],\n\t    [6, 30, 54],\t\t\n\t    [6, 32, 58],\n\t    [6, 34, 62],\n\t    [6, 26, 46, 66],\n\t    [6, 26, 48, 70],\n\t    [6, 26, 50, 74],\n\t    [6, 30, 54, 78],\n\t    [6, 30, 56, 82],\n\t    [6, 30, 58, 86],\n\t    [6, 34, 62, 90],\n\t    [6, 28, 50, 72, 94],\n\t    [6, 26, 50, 74, 98],\n\t    [6, 30, 54, 78, 102],\n\t    [6, 28, 54, 80, 106],\n\t    [6, 32, 58, 84, 110],\n\t    [6, 30, 58, 86, 114],\n\t    [6, 34, 62, 90, 118],\n\t    [6, 26, 50, 74, 98, 122],\n\t    [6, 30, 54, 78, 102, 126],\n\t    [6, 26, 52, 78, 104, 130],\n\t    [6, 30, 56, 82, 108, 134],\n\t    [6, 34, 60, 86, 112, 138],\n\t    [6, 30, 58, 86, 114, 142],\n\t    [6, 34, 62, 90, 118, 146],\n\t    [6, 30, 54, 78, 102, 126, 150],\n\t    [6, 24, 50, 76, 102, 128, 154],\n\t    [6, 28, 54, 80, 106, 132, 158],\n\t    [6, 32, 58, 84, 110, 136, 162],\n\t    [6, 26, 54, 82, 110, 138, 166],\n\t    [6, 30, 58, 86, 114, 142, 170]\n    ],\n\n    G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n    G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),\n    G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)\t| (1 << 4) | (1 << 1),\n\n    getBCHTypeInfo : function(data) {\n\t    var d = data << 10;\n\t    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n\t\t    d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); \t\n\t    }\n\t    return ( (data << 10) | d) ^ QRUtil.G15_MASK;\n    },\n\n    getBCHTypeNumber : function(data) {\n\t    var d = data << 12;\n\t    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n\t\t    d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); \t\n\t    }\n\t    return (data << 12) | d;\n    },\n\n    getBCHDigit : function(data) {\n\n\t    var digit = 0;\n\n\t    while (data != 0) {\n\t\t    digit++;\n\t\t    data >>>= 1;\n\t    }\n\n\t    return digit;\n    },\n\n    getPatternPosition : function(typeNumber) {\n\t    return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n    },\n\n    getMask : function(maskPattern, i, j) {\n\t    \n\t    switch (maskPattern) {\n\t\t    \n\t    case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0;\n\t    case QRMaskPattern.PATTERN001 : return i % 2 == 0;\n\t    case QRMaskPattern.PATTERN010 : return j % 3 == 0;\n\t    case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0;\n\t    case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0;\n\t    case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0;\n\t    case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0;\n\t    case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0;\n\n\t    default :\n\t\t    throw new Error(\"bad maskPattern:\" + maskPattern);\n\t    }\n    },\n\n    getErrorCorrectPolynomial : function(errorCorrectLength) {\n\n\t    var a = new Polynomial([1], 0);\n\n\t    for (var i = 0; i < errorCorrectLength; i++) {\n\t\t    a = a.multiply(new Polynomial([1, math.gexp(i)], 0) );\n\t    }\n\n\t    return a;\n    },\n\n    getLengthInBits : function(mode, type) {\n\n\t    if (1 <= type && type < 10) {\n\n\t\t    // 1 - 9\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 10;\n\t\t    case Mode.MODE_ALPHA_NUM \t: return 9;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 8;\n\t\t    case Mode.MODE_KANJI  \t: return 8;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else if (type < 27) {\n\n\t\t    // 10 - 26\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 12;\n\t\t    case Mode.MODE_ALPHA_NUM \t: return 11;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t    case Mode.MODE_KANJI  \t: return 10;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else if (type < 41) {\n\n\t\t    // 27 - 40\n\n\t\t    switch(mode) {\n\t\t    case Mode.MODE_NUMBER \t: return 14;\n\t\t    case Mode.MODE_ALPHA_NUM\t: return 13;\n\t\t    case Mode.MODE_8BIT_BYTE\t: return 16;\n\t\t    case Mode.MODE_KANJI  \t: return 12;\n\t\t    default :\n\t\t\t    throw new Error(\"mode:\" + mode);\n\t\t    }\n\n\t    } else {\n\t\t    throw new Error(\"type:\" + type);\n\t    }\n    },\n\n    getLostPoint : function(qrCode) {\n\t    \n\t    var moduleCount = qrCode.getModuleCount();\n\t    \n\t    var lostPoint = 0;\n\t    \n\t    // LEVEL1\n\t    \n\t    for (var row = 0; row < moduleCount; row++) {\n\n\t\t    for (var col = 0; col < moduleCount; col++) {\n\n\t\t\t    var sameCount = 0;\n\t\t\t    var dark = qrCode.isDark(row, col);\n\n\t\t\t\tfor (var r = -1; r <= 1; r++) {\n\n\t\t\t\t    if (row + r < 0 || moduleCount <= row + r) {\n\t\t\t\t\t    continue;\n\t\t\t\t    }\n\n\t\t\t\t    for (var c = -1; c <= 1; c++) {\n\n\t\t\t\t\t    if (col + c < 0 || moduleCount <= col + c) {\n\t\t\t\t\t\t    continue;\n\t\t\t\t\t    }\n\n\t\t\t\t\t    if (r == 0 && c == 0) {\n\t\t\t\t\t\t    continue;\n\t\t\t\t\t    }\n\n\t\t\t\t\t    if (dark == qrCode.isDark(row + r, col + c) ) {\n\t\t\t\t\t\t    sameCount++;\n\t\t\t\t\t    }\n\t\t\t\t    }\n\t\t\t    }\n\n\t\t\t    if (sameCount > 5) {\n\t\t\t\t    lostPoint += (3 + sameCount - 5);\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL2\n\n\t    for (var row = 0; row < moduleCount - 1; row++) {\n\t\t    for (var col = 0; col < moduleCount - 1; col++) {\n\t\t\t    var count = 0;\n\t\t\t    if (qrCode.isDark(row,     col    ) ) count++;\n\t\t\t    if (qrCode.isDark(row + 1, col    ) ) count++;\n\t\t\t    if (qrCode.isDark(row,     col + 1) ) count++;\n\t\t\t    if (qrCode.isDark(row + 1, col + 1) ) count++;\n\t\t\t    if (count == 0 || count == 4) {\n\t\t\t\t    lostPoint += 3;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL3\n\n\t    for (var row = 0; row < moduleCount; row++) {\n\t\t    for (var col = 0; col < moduleCount - 6; col++) {\n\t\t\t    if (qrCode.isDark(row, col)\n\t\t\t\t\t    && !qrCode.isDark(row, col + 1)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 2)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 3)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 4)\n\t\t\t\t\t    && !qrCode.isDark(row, col + 5)\n\t\t\t\t\t    &&  qrCode.isDark(row, col + 6) ) {\n\t\t\t\t    lostPoint += 40;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    for (var col = 0; col < moduleCount; col++) {\n\t\t    for (var row = 0; row < moduleCount - 6; row++) {\n\t\t\t    if (qrCode.isDark(row, col)\n\t\t\t\t\t    && !qrCode.isDark(row + 1, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 2, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 3, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 4, col)\n\t\t\t\t\t    && !qrCode.isDark(row + 5, col)\n\t\t\t\t\t    &&  qrCode.isDark(row + 6, col) ) {\n\t\t\t\t    lostPoint += 40;\n\t\t\t    }\n\t\t    }\n\t    }\n\n\t    // LEVEL4\n\t    \n\t    var darkCount = 0;\n\n\t    for (var col = 0; col < moduleCount; col++) {\n\t\t    for (var row = 0; row < moduleCount; row++) {\n\t\t\t    if (qrCode.isDark(row, col) ) {\n\t\t\t\t    darkCount++;\n\t\t\t    }\n\t\t    }\n\t    }\n\t    \n\t    var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n\t    lostPoint += ratio * 10;\n\n\t    return lostPoint;\t\t\n    }\n};\n\nmodule.exports = QRUtil;\n","var BitByte = require('./8BitByte');\nvar RSBlock = require('./RSBlock');\nvar BitBuffer = require('./BitBuffer');\nvar util = require('./util');\nvar Polynomial = require('./Polynomial');\n\nfunction QRCode(typeNumber, errorCorrectLevel) {\n\tthis.typeNumber = typeNumber;\n\tthis.errorCorrectLevel = errorCorrectLevel;\n\tthis.modules = null;\n\tthis.moduleCount = 0;\n\tthis.dataCache = null;\n\tthis.dataList = [];\n}\n\n// for client side minification\nvar proto = QRCode.prototype;\n\nproto.addData = function(data) {\n\tvar newData = new BitByte(data);\n\tthis.dataList.push(newData);\n\tthis.dataCache = null;\n};\n\nproto.isDark = function(row, col) {\n\tif (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {\n\t\tthrow new Error(row + \",\" + col);\n\t}\n\treturn this.modules[row][col];\n};\n\nproto.getModuleCount = function() {\n\treturn this.moduleCount;\n};\n\nproto.make = function() {\n\t// Calculate automatically typeNumber if provided is < 1\n\tif (this.typeNumber < 1 ){\n\t\tvar typeNumber = 1;\n\t\tfor (typeNumber = 1; typeNumber < 40; typeNumber++) {\n\t\t\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);\n\n\t\t\tvar buffer = new BitBuffer();\n\t\t\tvar totalDataCount = 0;\n\t\t\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\t\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < this.dataList.length; i++) {\n\t\t\t\tvar data = this.dataList[i];\n\t\t\t\tbuffer.put(data.mode, 4);\n\t\t\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\t\t\tdata.write(buffer);\n\t\t\t}\n\t\t\tif (buffer.getLengthInBits() <= totalDataCount * 8)\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.typeNumber = typeNumber;\n\t}\n\tthis.makeImpl(false, this.getBestMaskPattern() );\n};\n\nproto.makeImpl = function(test, maskPattern) {\n\t\n\tthis.moduleCount = this.typeNumber * 4 + 17;\n\tthis.modules = new Array(this.moduleCount);\n\t\n\tfor (var row = 0; row < this.moduleCount; row++) {\n\t\t\n\t\tthis.modules[row] = new Array(this.moduleCount);\n\t\t\n\t\tfor (var col = 0; col < this.moduleCount; col++) {\n\t\t\tthis.modules[row][col] = null;//(col + row) % 3;\n\t\t}\n\t}\n\n\tthis.setupPositionProbePattern(0, 0);\n\tthis.setupPositionProbePattern(this.moduleCount - 7, 0);\n\tthis.setupPositionProbePattern(0, this.moduleCount - 7);\n\tthis.setupPositionAdjustPattern();\n\tthis.setupTimingPattern();\n\tthis.setupTypeInfo(test, maskPattern);\n\t\n\tif (this.typeNumber >= 7) {\n\t\tthis.setupTypeNumber(test);\n\t}\n\n\tif (this.dataCache == null) {\n\t\tthis.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);\n\t}\n\n\tthis.mapData(this.dataCache, maskPattern);\n};\n\nproto.setupPositionProbePattern = function(row, col)  {\n\t\n\tfor (var r = -1; r <= 7; r++) {\n\t\t\n\t\tif (row + r <= -1 || this.moduleCount <= row + r) continue;\n\t\t\n\t\tfor (var c = -1; c <= 7; c++) {\n\t\t\t\n\t\t\tif (col + c <= -1 || this.moduleCount <= col + c) continue;\n\t\t\t\n\t\t\tif ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n\t\t\t\t\t|| (0 <= c && c <= 6 && (r == 0 || r == 6) )\n\t\t\t\t\t|| (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t} else {\n\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t}\n\t\t}\t\t\n\t}\t\t\n};\n\nproto.getBestMaskPattern = function() {\n\n\tvar minLostPoint = 0;\n\tvar pattern = 0;\n\n\tfor (var i = 0; i < 8; i++) {\n\t\t\n\t\tthis.makeImpl(true, i);\n\n\t\tvar lostPoint = util.getLostPoint(this);\n\n\t\tif (i == 0 || minLostPoint >  lostPoint) {\n\t\t\tminLostPoint = lostPoint;\n\t\t\tpattern = i;\n\t\t}\n\t}\n\n\treturn pattern;\n};\n\nproto.createMovieClip = function(target_mc, instance_name, depth) {\n\n\tvar qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n\tvar cs = 1;\n\n\tthis.make();\n\n\tfor (var row = 0; row < this.modules.length; row++) {\n\t\t\n\t\tvar y = row * cs;\n\t\t\n\t\tfor (var col = 0; col < this.modules[row].length; col++) {\n\n\t\t\tvar x = col * cs;\n\t\t\tvar dark = this.modules[row][col];\n\t\t\n\t\t\tif (dark) {\n\t\t\t\tqr_mc.beginFill(0, 100);\n\t\t\t\tqr_mc.moveTo(x, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y);\n\t\t\t\tqr_mc.lineTo(x + cs, y + cs);\n\t\t\t\tqr_mc.lineTo(x, y + cs);\n\t\t\t\tqr_mc.endFill();\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn qr_mc;\n};\n\nproto.setupTimingPattern = function() {\n\t\n\tfor (var r = 8; r < this.moduleCount - 8; r++) {\n\t\tif (this.modules[r][6] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[r][6] = (r % 2 == 0);\n\t}\n\n\tfor (var c = 8; c < this.moduleCount - 8; c++) {\n\t\tif (this.modules[6][c] != null) {\n\t\t\tcontinue;\n\t\t}\n\t\tthis.modules[6][c] = (c % 2 == 0);\n\t}\n};\n\nproto.setupPositionAdjustPattern = function() {\n\n\tvar pos = util.getPatternPosition(this.typeNumber);\n\t\n\tfor (var i = 0; i < pos.length; i++) {\n\t\n\t\tfor (var j = 0; j < pos.length; j++) {\n\t\t\n\t\t\tvar row = pos[i];\n\t\t\tvar col = pos[j];\n\t\t\t\n\t\t\tif (this.modules[row][col] != null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t\n\t\t\tfor (var r = -2; r <= 2; r++) {\n\t\t\t\n\t\t\t\tfor (var c = -2; c <= 2; c++) {\n\t\t\t\t\n\t\t\t\t\tif (r == -2 || r == 2 || c == -2 || c == 2\n\t\t\t\t\t\t\t|| (r == 0 && c == 0) ) {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.modules[row + r][col + c] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nproto.setupTypeNumber = function(test) {\n\n\tvar bits = util.getBCHTypeNumber(this.typeNumber);\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;\n\t}\n\n\tfor (var i = 0; i < 18; i++) {\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\tthis.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n\t}\n};\n\nproto.setupTypeInfo = function(test, maskPattern) {\n\n\tvar data = (this.errorCorrectLevel << 3) | maskPattern;\n\tvar bits = util.getBCHTypeInfo(data);\n\n\t// vertical\t\t\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\n\t\tif (i < 6) {\n\t\t\tthis.modules[i][8] = mod;\n\t\t} else if (i < 8) {\n\t\t\tthis.modules[i + 1][8] = mod;\n\t\t} else {\n\t\t\tthis.modules[this.moduleCount - 15 + i][8] = mod;\n\t\t}\n\t}\n\n\t// horizontal\n\tfor (var i = 0; i < 15; i++) {\n\n\t\tvar mod = (!test && ( (bits >> i) & 1) == 1);\n\t\t\n\t\tif (i < 8) {\n\t\t\tthis.modules[8][this.moduleCount - i - 1] = mod;\n\t\t} else if (i < 9) {\n\t\t\tthis.modules[8][15 - i - 1 + 1] = mod;\n\t\t} else {\n\t\t\tthis.modules[8][15 - i - 1] = mod;\n\t\t}\n\t}\n\n\t// fixed module\n\tthis.modules[this.moduleCount - 8][8] = (!test);\n};\n\nproto.mapData = function(data, maskPattern) {\n\t\n\tvar inc = -1;\n\tvar row = this.moduleCount - 1;\n\tvar bitIndex = 7;\n\tvar byteIndex = 0;\n\t\n\tfor (var col = this.moduleCount - 1; col > 0; col -= 2) {\n\n\t\tif (col == 6) col--;\n\n\t\twhile (true) {\n\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\t\n\t\t\t\tif (this.modules[row][col - c] == null) {\n\t\t\t\t\t\n\t\t\t\t\tvar dark = false;\n\n\t\t\t\t\tif (byteIndex < data.length) {\n\t\t\t\t\t\tdark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar mask = util.getMask(maskPattern, row, col - c);\n\n\t\t\t\t\tif (mask) {\n\t\t\t\t\t\tdark = !dark;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.modules[row][col - c] = dark;\n\t\t\t\t\tbitIndex--;\n\n\t\t\t\t\tif (bitIndex == -1) {\n\t\t\t\t\t\tbyteIndex++;\n\t\t\t\t\t\tbitIndex = 7;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\trow += inc;\n\n\t\t\tif (row < 0 || this.moduleCount <= row) {\n\t\t\t\trow -= inc;\n\t\t\t\tinc = -inc;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n};\n\nQRCode.PAD0 = 0xEC;\nQRCode.PAD1 = 0x11;\n\nQRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {\n\t\n\tvar rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\t\n\tvar buffer = new BitBuffer();\n\t\n\tfor (var i = 0; i < dataList.length; i++) {\n\t\tvar data = dataList[i];\n\t\tbuffer.put(data.mode, 4);\n\t\tbuffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber) );\n\t\tdata.write(buffer);\n\t}\n\n\t// calc num max data.\n\tvar totalDataCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalDataCount += rsBlocks[i].dataCount;\n\t}\n\n\tif (buffer.getLengthInBits() > totalDataCount * 8) {\n\t\tthrow new Error(\"code length overflow. (\"\n\t\t\t+ buffer.getLengthInBits()\n\t\t\t+ \">\"\n\t\t\t+  totalDataCount * 8\n\t\t\t+ \")\");\n\t}\n\n\t// end code\n\tif (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n\t\tbuffer.put(0, 4);\n\t}\n\n\t// padding\n\twhile (buffer.getLengthInBits() % 8 != 0) {\n\t\tbuffer.putBit(false);\n\t}\n\n\t// padding\n\twhile (true) {\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD0, 8);\n\t\t\n\t\tif (buffer.getLengthInBits() >= totalDataCount * 8) {\n\t\t\tbreak;\n\t\t}\n\t\tbuffer.put(QRCode.PAD1, 8);\n\t}\n\n\treturn QRCode.createBytes(buffer, rsBlocks);\n};\n\nQRCode.createBytes = function(buffer, rsBlocks) {\n\n\tvar offset = 0;\n\t\n\tvar maxDcCount = 0;\n\tvar maxEcCount = 0;\n\t\n\tvar dcdata = new Array(rsBlocks.length);\n\tvar ecdata = new Array(rsBlocks.length);\n\t\n\tfor (var r = 0; r < rsBlocks.length; r++) {\n\n\t\tvar dcCount = rsBlocks[r].dataCount;\n\t\tvar ecCount = rsBlocks[r].totalCount - dcCount;\n\n\t\tmaxDcCount = Math.max(maxDcCount, dcCount);\n\t\tmaxEcCount = Math.max(maxEcCount, ecCount);\n\t\t\n\t\tdcdata[r] = new Array(dcCount);\n\t\t\n\t\tfor (var i = 0; i < dcdata[r].length; i++) {\n\t\t\tdcdata[r][i] = 0xff & buffer.buffer[i + offset];\n\t\t}\n\t\toffset += dcCount;\n\t\t\n\t\tvar rsPoly = util.getErrorCorrectPolynomial(ecCount);\n\t\tvar rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);\n\n\t\tvar modPoly = rawPoly.mod(rsPoly);\n\t\tecdata[r] = new Array(rsPoly.getLength() - 1);\n\t\tfor (var i = 0; i < ecdata[r].length; i++) {\n            var modIndex = i + modPoly.getLength() - ecdata[r].length;\n\t\t\tecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0;\n\t\t}\n\n\t}\n\t\n\tvar totalCodeCount = 0;\n\tfor (var i = 0; i < rsBlocks.length; i++) {\n\t\ttotalCodeCount += rsBlocks[i].totalCount;\n\t}\n\n\tvar data = new Array(totalCodeCount);\n\tvar index = 0;\n\n\tfor (var i = 0; i < maxDcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < dcdata[r].length) {\n\t\t\t\tdata[index++] = dcdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < maxEcCount; i++) {\n\t\tfor (var r = 0; r < rsBlocks.length; r++) {\n\t\t\tif (i < ecdata[r].length) {\n\t\t\t\tdata[index++] = ecdata[r][i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn data;\n};\n\nmodule.exports = QRCode;\n\n","'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nvar React = require('react');\n\nvar PropTypes = require('prop-types'); // qr.js doesn't handle error level of zero (M) so we need to do it right,\n// thus the deep require.\n\n\nvar QRCodeImpl = require('qr.js/lib/QRCode');\n\nvar ErrorCorrectLevel = require('qr.js/lib/ErrorCorrectLevel');\n\nfunction getBackingStorePixelRatio(ctx) {\n  return (// $FlowFixMe\n    ctx.webkitBackingStorePixelRatio || // $FlowFixMe\n    ctx.mozBackingStorePixelRatio || // $FlowFixMe\n    ctx.msBackingStorePixelRatio || // $FlowFixMe\n    ctx.oBackingStorePixelRatio || // $FlowFixMe\n    ctx.backingStorePixelRatio || 1\n  );\n} // Convert from UTF-16, forcing the use of byte-mode encoding in our QR Code.\n// This allows us to encode Hanji, Kanji, emoji, etc. Ideally we'd do more\n// detection and not resort to byte-mode if possible, but we're trading off\n// a smaller library for a smaller amount of data we can potentially encode.\n// Based on http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/\n\n\nfunction convertStr(str) {\n  var out = '';\n\n  for (var i = 0; i < str.length; i++) {\n    var charcode = str.charCodeAt(i);\n\n    if (charcode < 0x0080) {\n      out += String.fromCharCode(charcode);\n    } else if (charcode < 0x0800) {\n      out += String.fromCharCode(0xc0 | charcode >> 6);\n      out += String.fromCharCode(0x80 | charcode & 0x3f);\n    } else if (charcode < 0xd800 || charcode >= 0xe000) {\n      out += String.fromCharCode(0xe0 | charcode >> 12);\n      out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f);\n      out += String.fromCharCode(0x80 | charcode & 0x3f);\n    } else {\n      // This is a surrogate pair, so we'll reconsitute the pieces and work\n      // from that\n      i++;\n      charcode = 0x10000 + ((charcode & 0x3ff) << 10 | str.charCodeAt(i) & 0x3ff);\n      out += String.fromCharCode(0xf0 | charcode >> 18);\n      out += String.fromCharCode(0x80 | charcode >> 12 & 0x3f);\n      out += String.fromCharCode(0x80 | charcode >> 6 & 0x3f);\n      out += String.fromCharCode(0x80 | charcode & 0x3f);\n    }\n  }\n\n  return out;\n}\n\nvar DEFAULT_PROPS = {\n  size: 128,\n  level: 'L',\n  bgColor: '#FFFFFF',\n  fgColor: '#000000'\n};\nvar PROP_TYPES = {\n  value: PropTypes.string.isRequired,\n  size: PropTypes.number,\n  level: PropTypes.oneOf(['L', 'M', 'Q', 'H']),\n  bgColor: PropTypes.string,\n  fgColor: PropTypes.string\n};\n\nvar QRCodeCanvas =\n/*#__PURE__*/\nfunction (_React$Component) {\n  _inherits(QRCodeCanvas, _React$Component);\n\n  function QRCodeCanvas() {\n    var _ref;\n\n    var _temp, _this;\n\n    _classCallCheck(this, QRCodeCanvas);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _possibleConstructorReturn(_this, (_temp = _this = _possibleConstructorReturn(this, (_ref = QRCodeCanvas.__proto__ || Object.getPrototypeOf(QRCodeCanvas)).call.apply(_ref, [this].concat(args))), Object.defineProperty(_assertThisInitialized(_this), \"_canvas\", {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: void 0\n    }), _temp));\n  }\n\n  _createClass(QRCodeCanvas, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps) {\n      var _this2 = this;\n\n      return Object.keys(QRCodeCanvas.propTypes).some(function (k) {\n        return _this2.props[k] !== nextProps[k];\n      });\n    }\n  }, {\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.update();\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate() {\n      this.update();\n    }\n  }, {\n    key: \"update\",\n    value: function update() {\n      var _props = this.props,\n          value = _props.value,\n          size = _props.size,\n          level = _props.level,\n          bgColor = _props.bgColor,\n          fgColor = _props.fgColor; // We'll use type===-1 to force QRCode to automatically pick the best type\n\n      var qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n      qrcode.addData(convertStr(value));\n      qrcode.make();\n\n      if (this._canvas != null) {\n        var canvas = this._canvas;\n        var ctx = canvas.getContext('2d');\n\n        if (!ctx) {\n          return;\n        }\n\n        var cells = qrcode.modules;\n\n        if (cells === null) {\n          return;\n        }\n\n        var tileW = size / cells.length;\n        var tileH = size / cells.length;\n        var scale = (window.devicePixelRatio || 1) / getBackingStorePixelRatio(ctx);\n        canvas.height = canvas.width = size * scale;\n        ctx.scale(scale, scale);\n        cells.forEach(function (row, rdx) {\n          row.forEach(function (cell, cdx) {\n            ctx && (ctx.fillStyle = cell ? fgColor : bgColor);\n            var w = Math.ceil((cdx + 1) * tileW) - Math.floor(cdx * tileW);\n            var h = Math.ceil((rdx + 1) * tileH) - Math.floor(rdx * tileH);\n            ctx && ctx.fillRect(Math.round(cdx * tileW), Math.round(rdx * tileH), w, h);\n          });\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this3 = this;\n\n      var _props2 = this.props,\n          value = _props2.value,\n          size = _props2.size,\n          level = _props2.level,\n          bgColor = _props2.bgColor,\n          fgColor = _props2.fgColor,\n          style = _props2.style,\n          otherProps = _objectWithoutProperties(_props2, [\"value\", \"size\", \"level\", \"bgColor\", \"fgColor\", \"style\"]);\n\n      var canvasStyle = _extends({\n        height: size,\n        width: size\n      }, style);\n\n      return React.createElement(\"canvas\", _extends({\n        style: canvasStyle,\n        height: size,\n        width: size,\n        ref: function ref(_ref2) {\n          return _this3._canvas = _ref2;\n        }\n      }, otherProps));\n    }\n  }]);\n\n  return QRCodeCanvas;\n}(React.Component);\n\nObject.defineProperty(QRCodeCanvas, \"defaultProps\", {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  value: DEFAULT_PROPS\n});\nObject.defineProperty(QRCodeCanvas, \"propTypes\", {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  value: PROP_TYPES\n});\n\nvar QRCodeSVG =\n/*#__PURE__*/\nfunction (_React$Component2) {\n  _inherits(QRCodeSVG, _React$Component2);\n\n  function QRCodeSVG() {\n    _classCallCheck(this, QRCodeSVG);\n\n    return _possibleConstructorReturn(this, (QRCodeSVG.__proto__ || Object.getPrototypeOf(QRCodeSVG)).apply(this, arguments));\n  }\n\n  _createClass(QRCodeSVG, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps) {\n      var _this4 = this;\n\n      return Object.keys(QRCodeCanvas.propTypes).some(function (k) {\n        return _this4.props[k] !== nextProps[k];\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _props3 = this.props,\n          value = _props3.value,\n          size = _props3.size,\n          level = _props3.level,\n          bgColor = _props3.bgColor,\n          fgColor = _props3.fgColor,\n          otherProps = _objectWithoutProperties(_props3, [\"value\", \"size\", \"level\", \"bgColor\", \"fgColor\"]); // We'll use type===-1 to force QRCode to automatically pick the best type\n\n\n      var qrcode = new QRCodeImpl(-1, ErrorCorrectLevel[level]);\n      qrcode.addData(convertStr(value));\n      qrcode.make();\n      var cells = qrcode.modules;\n\n      if (cells === null) {\n        return;\n      } // Drawing strategy: instead of a rect per module, we're going to create a\n      // single path for the dark modules and layer that on top of a light rect,\n      // for a total of 2 DOM nodes. We pay a bit more in string concat but that's\n      // way faster than DOM ops.\n      // For level 1, 441 nodes -> 2\n      // For level 40, 31329 -> 2\n\n\n      var ops = [];\n      cells.forEach(function (row, y) {\n        var lastIsDark = false;\n        var start = null;\n        row.forEach(function (cell, x) {\n          if (!cell && start !== null) {\n            // M0 0h7v1H0z injects the space with the move and dropd the comma,\n            // saving a char per operation\n            ops.push(\"M\".concat(start, \" \").concat(y, \"h\").concat(x - start, \"v1H\").concat(start, \"z\"));\n            start = null;\n            return;\n          } // end of row, clean up or skip\n\n\n          if (x === row.length - 1) {\n            if (!cell) {\n              // We would have closed the op above already so this can only mean\n              // 2+ light modules in a row.\n              return;\n            }\n\n            if (start === null) {\n              // Just a single dark module.\n              ops.push(\"M\".concat(x, \",\").concat(y, \" h1v1H\").concat(x, \"z\"));\n            } else {\n              // Otherwise finish the current line.\n              ops.push(\"M\".concat(start, \",\").concat(y, \" h\").concat(x + 1 - start, \"v1H\").concat(start, \"z\"));\n            }\n\n            return;\n          }\n\n          if (cell && start === null) {\n            start = x;\n          }\n        });\n      });\n      return React.createElement(\"svg\", _extends({\n        shapeRendering: \"crispEdges\",\n        height: size,\n        width: size,\n        viewBox: \"0 0 \".concat(cells.length, \" \").concat(cells.length)\n      }, otherProps), React.createElement(\"path\", {\n        fill: bgColor,\n        d: \"M0,0 h\".concat(cells.length, \"v\").concat(cells.length, \"H0z\")\n      }), React.createElement(\"path\", {\n        fill: fgColor,\n        d: ops.join('')\n      }));\n    }\n  }]);\n\n  return QRCodeSVG;\n}(React.Component);\n\nObject.defineProperty(QRCodeSVG, \"defaultProps\", {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  value: DEFAULT_PROPS\n});\nObject.defineProperty(QRCodeSVG, \"propTypes\", {\n  configurable: true,\n  enumerable: true,\n  writable: true,\n  value: PROP_TYPES\n});\n\nvar QRCode = function QRCode(props) {\n  var renderAs = props.renderAs,\n      otherProps = _objectWithoutProperties(props, [\"renderAs\"]);\n\n  var Component = renderAs === 'svg' ? QRCodeSVG : QRCodeCanvas;\n  return React.createElement(Component, otherProps);\n};\n\nQRCode.defaultProps = _extends({\n  renderAs: 'canvas'\n}, DEFAULT_PROPS);\nmodule.exports = QRCode;","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport QRCode from 'qrcode.react'\r\n\r\nclass QrCode extends React.Component {\r\n  static propTypes = {\r\n    value: PropTypes.string.isRequired,\r\n    size: PropTypes.number,\r\n    backgroundgColor: PropTypes.string,\r\n    foregroundColor: PropTypes.string,\r\n    level: PropTypes.string,\r\n  }\r\n\r\n  static defaultProps = {\r\n    size: 128,\r\n    backgroundgColor: '#FFFFFF',\r\n    foregroundColor: '#000000',\r\n    level: 'L',\r\n  }\r\n\r\n  render() {\r\n    const { value, size, backgroundgColor, foregroundColor, level } = this.props\r\n\r\n    return (\r\n      <QRCode\r\n        value={value}\r\n        size={size}\r\n        bgColor={backgroundgColor}\r\n        fgColor={foregroundColor}\r\n        level={level}\r\n      />\r\n    )\r\n  }\r\n}\r\n\r\nexport default QrCode\r\n","import React from 'react'\r\nimport QrCode from 'pmt-ui/QrCode'\r\n\r\nconst QrCodeView = ({ value, size, backgroundgColor, foregroundColor, level }) => (\r\n  <QrCode\r\n    value={value}\r\n    size={size}\r\n    backgroundgColor={backgroundgColor}\r\n    foregroundColor={foregroundColor}\r\n    level={level}\r\n  />\r\n)\r\n\r\nexport default QrCodeView\r\n","import React from 'react'\r\n\r\nimport IconButton from 'pmt-ui/IconButton'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Refresh from 'pmt-ui/svg-icons/navigation/refresh'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { UserAccountRemainingView } from 'pmt-modules/userAccount'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport QrCodeView from './components/QrCodeView'\r\n\r\nconst styles = theme => ({\r\n  refresh: {\r\n    position: 'absolute',\r\n    top: 2,\r\n    right: 2,\r\n    color: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\n/**\r\n * @mockup N/A\r\n */\r\nconst View = ({ classes, isFetchingUserAccount, onLoadUserAccount, userId, userAccount }) => (\r\n  <div className=\"u-flexColumn u-flex1\">\r\n    <IconButton onClick={onLoadUserAccount} className={classes.refresh}>\r\n      <Refresh />\r\n    </IconButton>\r\n    <UserAccountRemainingView userId={userId} />\r\n    <hr className=\"separation borderPrimary\" />\r\n    <div className=\"u-flexGrow1 u-flexColumnTop\">\r\n      {isFetchingUserAccount ? (\r\n        <LoadingBlockWrapper show />\r\n      ) : (\r\n        <div className=\"u-textAlignCenter u-flexGrow1 u-flexColumnTop\">\r\n          <TypographyCustom\r\n            type=\"144\"\r\n            align=\"center\"\r\n            className=\"u-padding20 u-contentSerifItalic u-absolute u-sizeFullWidth\"\r\n          >\r\n            {tr('web_customer.qr_code.expiration_warning', {\r\n              fr: 'Attention, ce QR Code expirera à %{tokenExpirationDateAsHour}',\r\n              context: '',\r\n              desc: 'Warning message displayed for qr code expiration',\r\n              tokenExpirationDateAsHour: userAccount.tokenExpirationDateAsHour,\r\n            })}\r\n          </TypographyCustom>\r\n\r\n          <div className=\"u-flexGrow1 u-flexCenter u-justifyContentCenter\">\r\n            <QrCodeView value={userAccount.token} size={167} />\r\n          </div>\r\n        </div>\r\n      )}\r\n    </div>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(View)\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport PropTypes from 'prop-types'\r\nimport { connect } from 'react-redux'\r\nimport isEmpty from 'lodash/isEmpty'\r\n\r\nimport { UserAccountContainer, UserAccountsContainer } from 'pmt-modules/userAccount'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport Page from '../../../components/Page'\r\nimport { Button } from '../../../components/Button'\r\n\r\nimport View from './View'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass UserQrCodePage extends React.Component {\r\n  render() {\r\n    const { userId, isFetchingMe } = this.props\r\n\r\n    return (\r\n      <UserAccountsContainer userId={userId}>\r\n        {({ userAccounts, isFetchingUserAccounts }) =>\r\n          isFetchingUserAccounts || isFetchingMe || isEmpty(userAccounts) || !userAccounts[0] ? (\r\n            <LoadingBlockWrapper show />\r\n          ) : (\r\n            <UserAccountContainer\r\n              userId={userId}\r\n              userAccountId={userAccounts[0].id}\r\n              refreshToken={true}\r\n            >\r\n              {({ userAccount, isFetchingUserAccount, onRedirectToTopUp, onLoadUserAccount }) => (\r\n                <Page\r\n                  title={tr('web_customer.qr_code.title', {\r\n                    fr: 'Badge',\r\n                    context: '',\r\n                    desc: 'Header title for qr code page',\r\n                  })}\r\n                >\r\n                  <View\r\n                    // after signin, user account has a null token\r\n                    // and succeeded user accounts request set user account isFetching to false\r\n                    isFetchingUserAccount={isFetchingUserAccount || userAccount.token === null}\r\n                    onLoadUserAccount={onLoadUserAccount}\r\n                    userId={userId}\r\n                    userAccount={userAccount}\r\n                  />\r\n                  <div className=\"u-paddingBottom20 u-paddingLeft20 u-paddingRight20\">\r\n                    <Button size=\"large\" className=\"u-sizeFull\" onClick={onRedirectToTopUp}>\r\n                      <TypographyCustom type=\"187\" skipColor>\r\n                        {tr('web_customer.qr_code.top_up.action')}\r\n                      </TypographyCustom>\r\n                    </Button>\r\n                  </div>\r\n                </Page>\r\n              )}\r\n            </UserAccountContainer>\r\n          )\r\n        }\r\n      </UserAccountsContainer>\r\n    )\r\n  }\r\n}\r\n\r\nUserQrCodePage.propTypes = {\r\n  me: PropTypes.object,\r\n  userId: PropTypes.string,\r\n}\r\n\r\nconst mapStateToProps = () => ({})\r\n\r\nexport default compose(\r\n  withUserMe,\r\n  connect(\r\n  mapStateToProps,\r\n  {}\r\n))(UserQrCodePage)\r\n","import React from 'react'\r\n\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withStyles } from 'pmt-ui/styles'\r\n\r\nconst styles = theme => ({\r\n  section: {\r\n    padding: `0 ${theme.spacing(3)}px`,\r\n  },\r\n  title: {\r\n    paddingBottom: theme.spacing(1),\r\n    borderBottom: `3px solid ${theme.palette.primary.main}`,\r\n  },\r\n  content: {\r\n    marginTop: theme.spacing(3),\r\n  },\r\n})\r\n\r\nconst Section = ({ classes, title, children }) => (\r\n  <div className={classes.section}>\r\n    <TypographyCustom className={classes.title} type=\"204\">\r\n      {title}\r\n    </TypographyCustom>\r\n\r\n    <div className={classes.content}>{children}</div>\r\n  </div>\r\n)\r\n\r\nexport default withStyles(styles)(Section)\r\n","import React from 'react'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { TopUpChooseAmountView } from 'pmt-modules/topUp'\r\nimport { UserAccountRemainingView } from 'pmt-modules/userAccount'\r\n\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport Price from 'pmt-ui/Price'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport PaymentMethods from 'app/components/payment/PaymentMethods'\r\nimport Section from 'app/components/Section'\r\n\r\n/**\r\n * @mockup N/A\r\n */\r\nconst View = ({\r\n  isFetching,\r\n  isSubmitDisabled,\r\n  onSubmit,\r\n  topUp,\r\n  topUpError,\r\n  userAccount,\r\n  userId,\r\n  user,\r\n}) => (\r\n  <div\r\n    className=\"u-overflowAuto u-sizeFullWidth u-paddingBottom50 u-flex1\" // huge padding on prupose for iOS < 10\r\n  >\r\n    <LoadingBlockWrapper show={isFetching} />\r\n\r\n    <ErrorBlock mode={ErrorBlock.Mode.SNACKBAR} error={topUpError} />\r\n\r\n    <UserAccountRemainingView userId={userId} dislayLinkToTopUp={false} />\r\n\r\n    <div className=\"u-marginBottom30\">\r\n      <Section\r\n        title={tr('web_customer.top_up.selectable_amount', {\r\n          fr: 'Montant du rechargement',\r\n          context: '',\r\n          desc: 'List of amounts available for top up',\r\n        })}\r\n      >\r\n        <TopUpChooseAmountView userId={userId} userAccount={userAccount} />\r\n      </Section>\r\n    </div>\r\n\r\n    <Section\r\n      title={tr('web_customer.top_up.payment_method', {\r\n        fr: 'Moyens de paiement',\r\n        context: '',\r\n        desc: 'Payment methods used for top up',\r\n      })}\r\n    >\r\n      {user && (\r\n        <PaymentMethods\r\n          isFetching={isFetching}\r\n          isSubmitDisabled={isSubmitDisabled}\r\n          onSubmit={onSubmit}\r\n          submitLabel={\r\n            <TypographyCustom type=\"207\" skipColor className=\"u-flex\">\r\n              {tr('web_customer.top_up.action')}\r\n              &nbsp;\r\n              {topUp && topUp.amount > 0 && <Price value={topUp.amountPriceFormatted} />}\r\n            </TypographyCustom>\r\n          }\r\n          user={user}\r\n        />\r\n      )}\r\n    </Section>\r\n  </div>\r\n)\r\n\r\nexport default View\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport ErrorBlock from 'pmt-ui/ErrorBlock'\r\nimport { TopUpContainer, postTopUpWithCreditCard } from 'pmt-modules/topUp'\r\nimport { UserAccountsContainer } from 'pmt-modules/userAccount'\r\nimport { withUserMe } from 'pmt-modules/userMe'\r\nimport { getPaymentError, resetPostPayment } from 'pmt-modules/payment'\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport Page from 'app/components/Page'\r\nimport View from './View'\r\nimport { getAuthenticatedUser } from 'pmt-modules/authenticatedUser/selectors'\r\n\r\n/**\r\n * @specs N/A\r\n */\r\nclass TopUpPage extends React.PureComponent {\r\n  handleSubmit = (userAccount, selectedCreditCard, topUp) => {\r\n    this.props.postTopUpWithCreditCard(userAccount, selectedCreditCard, topUp)\r\n  }\r\n\r\n  render() {\r\n    const { authenticatedUser, userId, paymentError, resetPostPayment } = this.props\r\n    //\r\n    // Our page requires many containers:\r\n    // - UserAccountsContainer: we top up a specific user account\r\n    // - TopUpContainer: to retrieve the data of the topUp\r\n    // - CreditCardsContainer: the user have to chose a credit card to use\r\n    //\r\n    return (\r\n      <UserAccountsContainer userId={userId}>\r\n        {({ userAccount, isFetchingUserAccounts }) =>\r\n          isFetchingUserAccounts ? (\r\n            <LoadingBlockWrapper show />\r\n          ) : (\r\n            <TopUpContainer userId={userId} userAccount={userAccount}>\r\n              {({ topUp, topUpIsInit, isPostingTopUp, topUpError }) => (\r\n                <Page title={tr('web_customer.top_up.title')}>\r\n                  <View\r\n                    userAccount={userAccount}\r\n                    isFetching={isPostingTopUp}\r\n                    isSubmitDisabled={!topUpIsInit || isPostingTopUp || !topUp.amount}\r\n                    onSubmit={(paymentMethod, { selectedCreditCard }) =>\r\n                      this.handleSubmit(userAccount, selectedCreditCard, topUp)\r\n                    }\r\n                    topUp={topUp}\r\n                    topUpError={topUpError}\r\n                    user={authenticatedUser}\r\n                    userId={userId}\r\n                  />\r\n\r\n                  <ErrorBlock\r\n                    mode={ErrorBlock.Mode.SNACKBAR}\r\n                    error={paymentError}\r\n                    options={{\r\n                      onClose: () => resetPostPayment(),\r\n                    }}\r\n                  />\r\n                </Page>\r\n              )}\r\n            </TopUpContainer>\r\n          )\r\n        }\r\n      </UserAccountsContainer>\r\n    )\r\n  }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n  paymentError: getPaymentError(state),\r\n  authenticatedUser: getAuthenticatedUser(state),\r\n})\r\n\r\nconst mapDispatchToProps = {\r\n  postTopUpWithCreditCard,\r\n  resetPostPayment,\r\n}\r\n\r\nexport default compose(\r\n  withUserMe,\r\n  connect(\r\n  mapStateToProps,\r\n  mapDispatchToProps\r\n))(TopUpPage)\r\n","import React from 'react'\r\nimport ReactDOMServer from 'react-dom/server'\r\nimport isNil from 'lodash/isNil'\r\nimport { tr, trOptional } from 'pmt-modules/i18n'\r\n\r\nimport Grid from 'pmt-ui/Grid'\r\nimport Price from 'pmt-ui/Price'\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\nimport { withTheme, ThemeProvider } from 'pmt-ui/styles'\r\n\r\nimport { formatDate, formatHour } from 'pmt-utils/date'\r\n\r\nimport { Button } from 'app/components/Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    minHeight: '100%',\r\n    display: 'flex',\r\n    flexDirection: 'column',\r\n    padding: theme.spacing(3),\r\n  },\r\n  content: {\r\n    display: 'flex',\r\n    justifyContent: 'center',\r\n    flexDirection: 'column',\r\n    flex: 1,\r\n    paddingBottom: theme.spacing(3),\r\n  },\r\n  amount: {\r\n    display: 'inline-flex',\r\n    color: theme.palette.primary.main,\r\n  },\r\n  paymentDone: {\r\n    marginTop: theme.spacing(2),\r\n    color: theme.pmt.colors.grey91,\r\n  },\r\n  buttonBack: {\r\n    width: '80%',\r\n    marginTop: theme.spacing(1),\r\n  },\r\n})\r\n\r\nclass View extends React.PureComponent {\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    if (!props.topUp || props.topUp.amount === 0) {\r\n      props.handleGoToHistory()\r\n    }\r\n  }\r\n\r\n  // TODO: display a warning / information message if isUsingEmpotency === true\r\n  render() {\r\n    const { classes, handleGoToHistory, handleGoToTopUp, topUp, theme } = this.props\r\n\r\n    return (\r\n      <Grid container className={classes.root}>\r\n        <Grid item xs={12} className={classes.content}>\r\n          <TypographyCustom type=\"207\" className=\"u-marginTop40\">\r\n            {tr('web_customer.top_up.confirm.thank_you')}\r\n          </TypographyCustom>\r\n          <TypographyCustom\r\n            type=\"204\"\r\n            className=\"u-marginTop10\"\r\n            dangerouslySetInnerHTML={{\r\n              __html: tr('web_customer.top_up.confirm.top_up_confirmed', {\r\n                spanBegin: `<span class=\"${classes.amount}\">`,\r\n                amountFormatted: ReactDOMServer.renderToStaticMarkup(\r\n                  <ThemeProvider theme={theme}>\r\n                    <TypographyCustom type=\"204\" skipColor className={classes.amount}>\r\n                      <Price value={topUp.amountPriceFormatted} />\r\n                    </TypographyCustom>\r\n                  </ThemeProvider>\r\n                ),\r\n                spanEnd: '</span>',\r\n              }),\r\n            }}\r\n          />\r\n          <TypographyCustom type=\"124\" className={classes.paymentDone}>\r\n            {tr('web_customer.top_up.confirm.payment_date', {\r\n              day: formatDate(topUp.creationDate, 'DD/MM/YY'),\r\n              hour: formatHour(topUp.creationDate, ':'),\r\n            })}\r\n          </TypographyCustom>\r\n        </Grid>\r\n        <Grid item className={classes.content}>\r\n          {!isNil(trOptional('TOP_UP_CONFIRM')) && (\r\n            <TypographyCustom type=\"184\">{trOptional('TOP_UP_CONFIRM')}</TypographyCustom>\r\n          )}\r\n        </Grid>\r\n        <Grid item container justify=\"center\" alignItems=\"center\">\r\n          <Button variant=\"outlined\" className={classes.buttonBack} onClick={handleGoToTopUp}>\r\n            <TypographyCustom type=\"164\" skipColor>\r\n              {tr('web_customer.top_up.confirm.back_topup')}\r\n            </TypographyCustom>\r\n          </Button>\r\n          <Button className={classes.buttonBack} onClick={handleGoToHistory}>\r\n            <TypographyCustom type=\"164\" skipColor>\r\n              {tr('web_customer.top_up.confirm.back_history')}\r\n            </TypographyCustom>\r\n          </Button>\r\n        </Grid>\r\n      </Grid>\r\n    )\r\n  }\r\n}\r\n\r\nexport default withStyles(styles)(withTheme(View))\r\n","import React from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { TopUpContainer } from 'pmt-modules/topUp'\r\nimport { UserAccountsContainer } from 'pmt-modules/userAccount'\r\nimport { getRoute, redirectTo } from 'pmt-modules/routing'\r\nimport { resetTopUp } from 'pmt-modules/topUp'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { LoadingBlockWrapper } from 'pmt-ui/LoadingBlock'\r\n\r\nimport Page from 'app/components/Page'\r\nimport View from './View'\r\n\r\nclass TopUpConfirmPage extends React.PureComponent {\r\n  handleGoToHistory = userAccountId => {\r\n    this.props.resetTopUp(userAccountId)\r\n    this.props.redirectTo(getRoute('USER_HISTORY'))\r\n  }\r\n\r\n  handleGoToTopUp = userAccountId => {\r\n    this.props.resetTopUp(userAccountId)\r\n    this.props.redirectTo(getRoute('USER_TOP_UP'))\r\n  }\r\n\r\n  render() {\r\n    const { userId, resetTopUp } = this.props\r\n\r\n    return (\r\n      <UserAccountsContainer userId={userId}>\r\n        {({ userAccount, isFetchingUserAccounts }) =>\r\n          isFetchingUserAccounts || !userAccount ? (\r\n            <LoadingBlockWrapper show />\r\n          ) : (\r\n            <TopUpContainer userId={userId} userAccount={userAccount}>\r\n              {({ topUp }) => (\r\n                <Page\r\n                  title={tr('web_customer.top_up.confirm.title')}\r\n                  // we must reset the top up data on back, otherwise the idempotency is the same\r\n                  // and while the user can make a new top-up, it will be taken as the previous one,\r\n                  // but the user is not notified about this.\r\n                  onBack={() => {\r\n                    resetTopUp()\r\n                  }}\r\n                >\r\n                  <View\r\n                    handleGoToHistory={() => this.handleGoToHistory(userAccount.id)}\r\n                    handleGoToTopUp={() => this.handleGoToTopUp(userAccount.id)}\r\n                    topUp={topUp}\r\n                  />\r\n                </Page>\r\n              )}\r\n            </TopUpContainer>\r\n          )\r\n        }\r\n      </UserAccountsContainer>\r\n    )\r\n  }\r\n}\r\n\r\nTopUpConfirmPage.defaultProps = {\r\n  userId: 'me',\r\n}\r\n\r\nconst mapStateToProps = () => {}\r\n\r\nconst mapDispatchToProps = {\r\n  resetTopUp,\r\n  redirectTo,\r\n}\r\n\r\nexport default connect(\r\n  mapStateToProps,\r\n  mapDispatchToProps\r\n)(TopUpConfirmPage)\r\n","import { SdkRoutingEnum, Route } from 'pmt-modules/routing'\r\n\r\nconst RoutingEnum = {\r\n  ...SdkRoutingEnum,\r\n\r\n  /**\r\n   * TOP UP\r\n   */\r\n  // TODO: change /me/ by /:userId\r\n  USER_HISTORY: new Route('USER::ME::HISTORY', '/users/me/history'),\r\n\r\n  USER_HISTORY_TRANSACTION: new Route(\r\n    'USER::ME::HISTORY_TRANSACTION',\r\n    '/users/me/history/transactions/:checkPosId'\r\n  ),\r\n\r\n  // TODO: change /me/ by /:userId\r\n  USER_TOP_UP: new Route('USER::ME::TOP_UP', '/users/me/top-up'),\r\n\r\n  USER_TOP_UP_CONFIRM: new Route('USER::ME::TOP_UP::CONFIRM', '/users/me/top-up/confirm'),\r\n\r\n  TOPUP_VERIFICATION: new Route(\r\n    'TOPUP_VERIFICATION::VERIFICATION',\r\n    '/users/me/top-up/verification'\r\n  ),\r\n\r\n  AUTHORIZE_APP: new Route('OAUTH::AUTHORIZE', '/authorize'),\r\n\r\n  // TODO: change /me/ by /:userId\r\n  USER_QR_CODE: new Route('USER::ME::QR_CODE', '/users/me/qr-code'),\r\n\r\n  /**\r\n   * Check and Payment\r\n   */\r\n  RESTAURANT: new Route('RESTAURANT', '/restaurants/:restaurantId', false),\r\n\r\n  PAYMENT_TABLE_NUMBER: new Route(\r\n    'PAYMENT::TABLE_NUMBER',\r\n    '/restaurants/:restaurantId/payment/table-number'\r\n  ),\r\n\r\n  PAYMENT_TABLE_NUMBER_VIEW: new Route(\r\n    'PAYMENT::TABLE_NUMBER::VIEW',\r\n    '/restaurants/:restaurantId/payment/table-number/:tableNumberId'\r\n  ),\r\n\r\n  PAYMENT_CHECK_VIEW: new Route(\r\n    'PAYMENT::CHECK_VIEW',\r\n    '/restaurants/:restaurantId/payment/check/:checkId'\r\n  ),\r\n\r\n  PAYMENT_SHARE: new Route(\r\n    'PAYMENT::PAYMENT_SHARE',\r\n    '/restaurants/:restaurantId/payment/check/:checkId/share'\r\n  ),\r\n\r\n  PAYMENT_CHOOSE: new Route(\r\n    'PAYMENT::PAYMENT_CHOOSE',\r\n    '/restaurants/:restaurantId/payment/check/:checkId/choose'\r\n  ),\r\n\r\n  PAYMENT_PAYMENT: new Route(\r\n    'PAYMENT::PAYMENT',\r\n    '/restaurants/:restaurantId/payment/check/:checkId/payment'\r\n  ),\r\n\r\n  PAYMENT_VERIFICATION: new Route(\r\n    'PAYMENT::VERIFICATION',\r\n    '/restaurants/:restaurantId/payment/check/:checkId/verification'\r\n  ),\r\n\r\n  PAYMENT__ASYNC__FORM: new Route('PAYMENT__ASYNC__FORM', '/payment/async/form'),\r\n\r\n  PAYMENT_CONFIRM: new Route(\r\n    'PAYMENT::PAYMENT_CONFIRM',\r\n    '/restaurants/:restaurantId/payment/check/:checkId/confirm'\r\n  ),\r\n}\r\n\r\nexport default RoutingEnum\r\n","import React from 'react'\r\nimport { createLoadable } from 'pmt-utils/react-loadable'\r\n\r\n// -- app\r\nimport AuthAppPage from '../pages/authApp'\r\n// -- user\r\nimport LoginPage from '../pages/login'\r\nimport ForgotPasswordPage from '../pages/forgotpassword'\r\nimport RegisterPage from '../pages/register'\r\n// -- restaurant\r\nimport RestaurantPage from '../pages/restaurant'\r\n// -- payment\r\nimport TableNumberPage from '../pages/payment/tableNumber'\r\nimport CheckPage from '../pages/payment/check'\r\nimport PaymentSharePage from '../pages/payment/share'\r\nimport PaymentChoosePage from '../pages/payment/choose'\r\nimport PaymentPaymentPage from '../pages/payment/payment'\r\nimport PaymentVerificationPage from '../pages/payment/verification'\r\nimport AsyncPaymentFormPage from '../pages/payment/asyncForm'\r\nimport PaymentConfirmPage from '../pages/payment/confirm'\r\n// -- user account\r\nimport UserHistoryPage from '../pages/user/history'\r\nimport UserQrCodePage from '../pages/user/qrCode'\r\nimport TopUpPage from '../pages/topUp/topUp'\r\nimport TopUpConfirmPage from '../pages/topUp/confirm'\r\n\r\nimport { APP_TOKEN_QUERY_PARAM } from 'pmt-modules/appSecurity'\r\nimport RoutingEnum from './routingEnum'\r\n\r\n// list of the queries that are global to all our urls, and should be kept\r\nconst globalQueries = [\r\n  // app token\r\n  APP_TOKEN_QUERY_PARAM,\r\n  'apiVersion',\r\n  'simulate',\r\n]\r\n\r\n// merge our globalQueries with the specific queries of the route\r\nconst getQueries = (queries = []) => [...globalQueries, ...queries]\r\n\r\nconst createAsyncPage = loader => createLoadable(loader, () => <div />)\r\n\r\n/**\r\n * We define  the `handler` for each route of our RoutingEnum.\r\n * The `handler` is the React Component to display for the route.\r\n * It should be a container in most cases.\r\n */\r\nconst routes = [\r\n  {\r\n    definition: RoutingEnum.HOME,\r\n    handler: () => null,\r\n  },\r\n  //\r\n  // OAuth\r\n  //\r\n  {\r\n    definition: RoutingEnum.AUTHORIZE_APP,\r\n    handler: AuthAppPage,\r\n  },\r\n  //\r\n  // User\r\n  //\r\n  {\r\n    definition: RoutingEnum.LOGIN,\r\n    handler: LoginPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.REGISTER,\r\n    handler: RegisterPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.FORGOT_PASSWORD,\r\n    handler: ForgotPasswordPage,\r\n  },\r\n  //\r\n  // restaurant\r\n  //\r\n  {\r\n    definition: RoutingEnum.RESTAURANT,\r\n    handler: RestaurantPage,\r\n  },\r\n  //\r\n  // Payment\r\n  //\r\n  {\r\n    definition: RoutingEnum.PAYMENT_TABLE_NUMBER,\r\n    handler: TableNumberPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.PAYMENT_TABLE_NUMBER_VIEW,\r\n    handler: TableNumberPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.PAYMENT_CHECK_VIEW,\r\n    handler: CheckPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.PAYMENT_SHARE,\r\n    handler: PaymentSharePage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.PAYMENT_CHOOSE,\r\n    handler: PaymentChoosePage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.PAYMENT_PAYMENT,\r\n    handler: PaymentPaymentPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.PAYMENT_VERIFICATION,\r\n    handler: PaymentVerificationPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.PAYMENT_CONFIRM,\r\n    handler: PaymentConfirmPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.PAYMENT__ASYNC__FORM,\r\n    handler: AsyncPaymentFormPage,\r\n    props: {\r\n      authRequired: true,\r\n    },\r\n  },\r\n  //\r\n  // user account\r\n  //\r\n  {\r\n    definition: RoutingEnum.USER_HISTORY,\r\n    handler: UserHistoryPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.USER_HISTORY_TRANSACTION,\r\n    handler: createAsyncPage(() =>\r\n      import(/*  webpackChunkName: \"UserHistoryTransactionPage\" */ '../pages/user/historyTransactionDetail')\r\n    ),\r\n  },\r\n  {\r\n    definition: RoutingEnum.USER_TOP_UP,\r\n    handler: TopUpPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.TOPUP_VERIFICATION,\r\n    handler: createAsyncPage(() =>\r\n      import(/*  webpackChunkName: \"TopUpVBPage\" */ '../pages/topUp/verification')\r\n    ),\r\n  },\r\n  {\r\n    definition: RoutingEnum.USER_TOP_UP_CONFIRM,\r\n    handler: TopUpConfirmPage,\r\n  },\r\n  {\r\n    definition: RoutingEnum.USER_QR_CODE,\r\n    handler: UserQrCodePage,\r\n  },\r\n\r\n  //\r\n  // 404\r\n  //\r\n\r\n  {\r\n    definition: RoutingEnum.PAGE_NOT_FOUND,\r\n    handler: createAsyncPage(() =>\r\n      import(/*  webpackChunkName: \"PageNotFound\" */ '../pages/pageNotFound')\r\n    ),\r\n  },\r\n]\r\n\r\nexport default routes.map(route => {\r\n  if (!route.props) {\r\n    route.props = {}\r\n  }\r\n  // handle props.query to set global queries\r\n  if (!route.props.query) {\r\n    route.props.query = getQueries([])\r\n  }\r\n\r\n  return route\r\n})\r\n","//\r\n// Entry point of any PayMyTable app.\r\n// The front application is configured via the `appOptions` with\r\n// * -> required\r\n//\r\n// - *middlewares: middlewares to use\r\n// - devMiddlewares: middlewares to use only on devlopment\r\n// - prodMiddlewares: middlewares to use only on production\r\n// - *entities: entities to use on the store\r\n// - *routes: routes to use (array of definitions)\r\n// - environment: configuration of the current environment. Must contains:\r\n//  - Logger\r\n//    - SENTRY_URL\r\n// - forms (TODO)\r\n// - theme (TODO)\r\n// - dialogs (TODO)\r\n//\r\n\r\nimport React from 'react'\r\n\r\nimport Immutable from 'immutable'\r\nimport invariant from 'invariant'\r\n\r\nimport isFunction from 'lodash/isFunction'\r\nimport isNil from 'lodash/isNil'\r\n\r\nimport createBrowserHistory from 'history/createBrowserHistory'\r\n\r\nimport ApiManager from 'pmt-modules/api/ApiManager'\r\nimport { Events, EventManager } from 'pmt-modules/event'\r\nimport { initializeAnalytics } from 'pmt-modules/analytics'\r\n\r\nimport configureRootReducer from './utils/configureRootReducer'\r\n\r\nimport {\r\n  setCurrentEnv,\r\n  __VERSION__,\r\n  __APP_GIT_COMMIT__,\r\n  __SDK_GIT_COMMIT__,\r\n  __APP_GIT_BRANCH__,\r\n  __SDK_GIT_BRANCH__,\r\n} from '../environment'\r\n\r\nimport configureStore from './store/configureStore'\r\n\r\nimport Logger from 'pmt-utils/logger'\r\nimport { handleChunkError, CHUNK_ERROR_RELOAD_KEY } from 'pmt-utils/errorHandlers'\r\nimport { getFromSession, removeFromSession } from 'pmt-modules/storage'\r\n\r\nimport { unregisterServiceWorker } from './registerServiceWorker'\r\nimport App from './App'\r\n\r\nimport { initFrontSessionId } from 'pmt-modules/frontSession'\r\nimport { setDefaultAppConfig } from 'pmt-modules/appConfig'\r\nimport { registerStore } from 'pmt-modules/store'\r\nimport { registerForms, getFormsDefaultState } from 'pmt-modules/form'\r\nimport { registerSearches } from 'pmt-modules/search'\r\nimport { registerStatisticsConfig } from 'pmt-modules/statistics'\r\nimport { registerDialogs } from 'pmt-modules/dialog'\r\nimport { registerTheme, getRegisteredMuiTheme } from 'pmt-modules/theme'\r\nimport { setDataCatcherSettings } from 'pmt-modules/dataCatcher/config'\r\nimport { verifyDataCatcherConfiguration } from 'pmt-modules/dataCatcher/verifications'\r\nimport { registerHistory, registerRoutes, registerRoutingEnum } from 'pmt-modules/routing'\r\nimport { registerEntities } from 'pmt-modules/reducers'\r\n\r\nimport { configureI18n } from 'pmt-modules/i18n'\r\n\r\nimport configRoutes from 'app/config/routes'\r\n\r\n// import css\r\nimport './styles/index.scss'\r\n\r\nlet store = null\r\nlet initialized = false\r\n\r\n// IMPORTANT — this initialization must run only once.\r\n// In React, when <StrictMode> is enabled (DEV only), React intentionally\r\n// mounts, unmounts, then re‑mounts components to detect side-effects.\r\n// As a result, ApplicationView is constructed twice in development,\r\n// which would otherwise recreate singletons (history, store, routes, events, etc.)\r\n// and break the app’s routing and global registries.\r\n//\r\n// The `initialized` flag ensures that all global setup (store, history,\r\n// event listeners, registries…) runs only once, even if ApplicationView\r\n// is rendered multiple times under StrictMode. This keeps the app stable\r\n// and prevents duplicated listeners or multiple history instances.\r\nfunction initApp(appOptions) {\r\n  if (initialized) {\r\n    return store\r\n  }\r\n\r\n  initialized = true\r\n\r\n  // Register a global listener for unhandled promise rejections caused by failed dynamic\r\n  // imports (e.g. Firebase chunk) that live outside the React tree and are therefore not\r\n  // caught by ErrorBoundary. On successful page load the sessionStorage flag is cleared so\r\n  // a future chunk error can still trigger a reload.\r\n  window.addEventListener('unhandledrejection', event =>\r\n    handleChunkError(event?.reason, 'unhandledrejection')\r\n  )\r\n  window.addEventListener('load', () => {\r\n    const hasReloaded = getFromSession(CHUNK_ERROR_RELOAD_KEY)\r\n    if (hasReloaded) {\r\n      console.info('Page is fully loaded after chunk load error detected. Clear session flag.')\r\n      removeFromSession(CHUNK_ERROR_RELOAD_KEY)\r\n    }\r\n  })\r\n\r\n  initFrontSessionId()\r\n\r\n  appOptions.routes = configRoutes\r\n\r\n  //\r\n  // environment\r\n  // must be handle in first\r\n  //\r\n  const environment = appOptions.environment\r\n  setCurrentEnv(environment)\r\n\r\n  setDefaultAppConfig(appOptions.appConfig)\r\n\r\n  //\r\n  // events\r\n  //\r\n  if (!isNil(appOptions.events)) {\r\n    invariant(\r\n      !isNil(appOptions.events.events) && !isNil(appOptions.events.listeners),\r\n      'missing events or listners on appOptions events'\r\n    )\r\n\r\n    EventManager.registerEvents(appOptions.events.events)\r\n    EventManager.addListeners(appOptions.events.listeners)\r\n  }\r\n\r\n  //\r\n  // Firebase\r\n  // must be before the `configureRootReducer`\r\n  //\r\n  if (process.env.FEATURE_FIREBASE) {\r\n    if (!isNil(appOptions.firebase)) {\r\n      // we took the whole config and keep only the one for the current ENV\r\n      appOptions.firebase = appOptions.firebase[appOptions.environment.ENV]\r\n\r\n      import('pmt-modules/firebase')\r\n        .then(({ initializeFirebase }) => {\r\n          initializeFirebase(appOptions)\r\n        })\r\n        .catch(error => {\r\n          Logger.error('Failed to load Firebase module', error)\r\n          handleChunkError(error, 'Firebase')\r\n        })\r\n    }\r\n  }\r\n\r\n  //\r\n  // configure history\r\n  //\r\n\r\n  const history = createBrowserHistory()\r\n\r\n  registerHistory(history)\r\n\r\n  history.listen(location =>\r\n    EventManager.dispatch(Events.ON_HISTORY_CHANGE, {\r\n      location,\r\n    })\r\n  )\r\n\r\n  //\r\n  //\r\n  //\r\n\r\n  appOptions.rootReducer = configureRootReducer(appOptions)\r\n\r\n  //\r\n  // forms\r\n  //\r\n\r\n  const forms = appOptions.forms\r\n  registerForms(forms)\r\n\r\n  //\r\n  // searches\r\n  //\r\n\r\n  const searches = appOptions.searches\r\n  registerSearches(searches)\r\n\r\n  //\r\n  // statistics\r\n  //\r\n\r\n  const statistics = appOptions.statistics\r\n  registerStatisticsConfig(statistics)\r\n\r\n  //\r\n  // dialogs\r\n  //\r\n\r\n  const dialogs = appOptions.dialogs\r\n  registerDialogs(dialogs)\r\n\r\n  //\r\n  // Configure theme\r\n  //\r\n\r\n  registerTheme(appOptions.theme)\r\n\r\n  //\r\n  // Configure data catcher module\r\n  //\r\n\r\n  if (!isNil(appOptions.dataCatcher)) {\r\n    verifyDataCatcherConfiguration(appOptions)\r\n    setDataCatcherSettings(appOptions.dataCatcher)\r\n  }\r\n\r\n  //\r\n  // configure store\r\n  //\r\n\r\n  // -- calculate preloadedState\r\n  const preloadedState = appOptions.preloadedState || {}\r\n\r\n  // get forms default state\r\n  preloadedState.form = getFormsDefaultState()\r\n\r\n  // set theme\r\n  preloadedState.ux = {\r\n    ...preloadedState.ux,\r\n    theme: {\r\n      current: Immutable.fromJS(getRegisteredMuiTheme()),\r\n    },\r\n  }\r\n\r\n  registerEntities(appOptions.entities)\r\n\r\n  // set on appOptions\r\n  appOptions.preloadedState = preloadedState\r\n\r\n  store = configureStore(appOptions)\r\n  registerStore(store)\r\n\r\n  //\r\n  // routes\r\n  //\r\n  registerRoutes(appOptions.routes)\r\n  registerRoutingEnum(appOptions.routingEnum)\r\n\r\n  //\r\n  // I18n\r\n  //\r\n\r\n  configureI18n(appOptions.i18n)\r\n\r\n  //\r\n  // Analytics\r\n  //\r\n  if (!isNil(appOptions.analytics)) {\r\n    appOptions.analytics = appOptions.analytics[appOptions.environment.ENV]\r\n    initializeAnalytics(appOptions)\r\n  }\r\n\r\n  //\r\n  // configure api manager\r\n  //\r\n\r\n  const getApiManagerOptions = appOptions.getApiManagerOptions\r\n  invariant(isFunction(getApiManagerOptions), 'appOptions getApiManagerOptions is required')\r\n  ApiManager.setGetApiManagerOptions(getApiManagerOptions)\r\n\r\n  //\r\n  // Configure logger\r\n  //\r\n\r\n  const loggerConfig = environment.Logger\r\n\r\n  // add app version to have more info\r\n  loggerConfig.APP_VERSION = __VERSION__\r\n  loggerConfig.ENV = appOptions.environment.ENV\r\n  loggerConfig.__APP_GIT_COMMIT__ = __APP_GIT_COMMIT__\r\n  loggerConfig.__SDK_GIT_COMMIT__ = __SDK_GIT_COMMIT__\r\n  loggerConfig.__APP_GIT_BRANCH__ = __APP_GIT_BRANCH__\r\n  loggerConfig.__SDK_GIT_BRANCH__ = __SDK_GIT_BRANCH__\r\n\r\n  Logger.configure(loggerConfig)\r\n  environment.logger = loggerConfig\r\n\r\n  // Dispatch app init event with appOptions\r\n  EventManager.dispatch(Events.ON_APP_INIT, { appOptions })\r\n\r\n  //\r\n  // Unregister service worker for now since it causes white pages due to\r\n  // an 'Uncaught SyntaxError: Unexpected token <' error\r\n  //\r\n  unregisterServiceWorker()\r\n\r\n  return store\r\n}\r\n\r\nclass ApplicationView extends React.Component {\r\n  // IMPORTANT - this constructor is called twice in DEV mode, due to the <StrictMode>\r\n  // it must be idempotent\r\n  constructor(props) {\r\n    super(props)\r\n    const appOptions = props.appOptions\r\n    this.i18nOptions = appOptions.i18n\r\n    this.store = initApp(appOptions)\r\n  }\r\n\r\n  componentDidMount() {\r\n    // Initialize i18n AFTER the component is mounted\r\n    configureI18n(this.i18nOptions)\r\n  }\r\n\r\n  render() {\r\n    return <App store={this.store} />\r\n  }\r\n}\r\n\r\nexport default ApplicationView\r\n","import React, { StrictMode } from 'react'\r\nimport ReactDOM from 'react-dom'\r\n\r\nimport ApplicationView from './ApplicationView'\r\n\r\n//\r\n// get the rootElement\r\n//\r\nconst Application = appOptions => {\r\n  const rootElement = appOptions.rootElement || document.getElementById('root')\r\n\r\n  ReactDOM.render(\r\n    <StrictMode>\r\n      <ApplicationView appOptions={appOptions} />\r\n    </StrictMode>,\r\n    rootElement\r\n  )\r\n}\r\n\r\nexport default Application\r\n","export default {\r\n  authentication: {\r\n    mode: 1,\r\n    oauth2: {\r\n      clientId: null,\r\n      clientSecret: null,\r\n    },\r\n  },\r\n  front: {\r\n    theme: {\r\n      logo: {\r\n        path: null,\r\n        display: true,\r\n      },\r\n      background: {\r\n        path: null,\r\n        display: false,\r\n      },\r\n      backgroundUrl: null,\r\n    },\r\n  },\r\n  order: {\r\n    bypassOpeningHours: false,\r\n  },\r\n  security: {\r\n    checkAccessSecurity: {\r\n      mode: 'TABLE_NUMBER',\r\n    },\r\n  },\r\n  user: {\r\n    login: null,\r\n    registration: {\r\n      form: {\r\n        fields: [\r\n          {\r\n            type: 'FIRST_NAME',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'LAST_NAME',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'EMAIL',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'PHONE',\r\n            required: false,\r\n          },\r\n          {\r\n            type: 'PASSWORD',\r\n            required: true,\r\n          },\r\n          {\r\n            type: 'MARKETING_ALLOW_CONTACT',\r\n            required: false,\r\n          },\r\n        ],\r\n      },\r\n    },\r\n  },\r\n}\r\n","import { AuthUserAction } from 'pmt-modules/auth'\r\nimport { ForgotPasswordAction } from 'pmt-modules/forgotPassword'\r\n\r\nimport { DataCatcherType } from 'pmt-modules/dataCatcher'\r\n\r\nexport default [\r\n  //\r\n  // Catch user email\r\n  // It allow us to update the forms with the user email (login form / recovery password form)\r\n  //\r\n  {\r\n    actionType: AuthUserAction.REQUEST,\r\n    getObject: action => action.data.username,\r\n    dataCatcherType: DataCatcherType.USER_FORM_EMAIL,\r\n  },\r\n  {\r\n    actionType: ForgotPasswordAction.REQUEST,\r\n    getObject: action => action.data.username,\r\n    dataCatcherType: DataCatcherType.USER_FORM_EMAIL,\r\n  },\r\n]\r\n","export default []\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport {\r\n  addEntryToPayment,\r\n  shareEntryToPaymentUpdate,\r\n  getEntryWithId,\r\n  getItemWithId,\r\n  getDefaultChoose,\r\n} from 'pmt-modules/payment'\r\nimport { hideDialogAction, ModalType } from 'pmt-modules/dialog'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { DialogActions, DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport NumberField from 'pmt-ui/NumberField'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { Button } from '../../Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    width: '100%',\r\n  },\r\n  title: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  content: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  input: {\r\n    float: 'left',\r\n    width: 50,\r\n  },\r\n  inputTheme: {\r\n    textAlign: 'center',\r\n  },\r\n  divider: {\r\n    float: 'left',\r\n    height: 32,\r\n    marginLeft: theme.spacing(1),\r\n    marginRight: theme.spacing(1),\r\n    lineHeight: '32px',\r\n  },\r\n  multiplier: {\r\n    float: 'left',\r\n    height: 32,\r\n    marginLeft: theme.spacing(1),\r\n    marginRight: theme.spacing(1),\r\n    lineHeight: '32px',\r\n  },\r\n  entryName: {\r\n    float: 'left',\r\n    width: 'calc(100% - 147px)',\r\n    minHeight: 18,\r\n    maxHeight: 29,\r\n    overflow: 'hidden',\r\n    display: '-webkit-box',\r\n    textOverflow: 'ellipsis',\r\n    '-webkit-line-clamp': 2,\r\n    '-webkit-box-orient': 'vertical',\r\n    lineHeight: '14px',\r\n  },\r\n  actionsContainer: {\r\n    padding: `0 ${theme.spacing(2)}px`,\r\n  },\r\n  button: {\r\n    width: '100%',\r\n  },\r\n  buttonSubmitLabel: {\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  buttonCancelLabel: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\nclass ChooseEntryDividerDialog extends React.Component {\r\n  state = {\r\n    share: this.props.share,\r\n  }\r\n\r\n  constructor(props) {\r\n    super(props)\r\n\r\n    this.state.share = {\r\n      ...this.state.share,\r\n      // if already a share: use existing value. Otherwise, use the quantity as divider (except if quantity = 1, then the default divider is 2)\r\n      divider: props.item.share.enabled\r\n        ? props.item.share.divider\r\n        : Math.max(props.entry.quantity, 2),\r\n      multiplier: props.item.share.multiplier,\r\n    }\r\n  }\r\n\r\n  onCancel = () => this.props.hideDialogAction(ModalType.PAYMENT_CHOOSE_ENTRY_DIVIDER)\r\n\r\n  onSubmit = () => {\r\n    const {\r\n      entry,\r\n      item,\r\n      addEntryToPayment,\r\n      shareEntryToPaymentUpdate,\r\n      hideDialogAction,\r\n    } = this.props\r\n\r\n    if (this.state.share.multiplier >= this.state.share.divider) {\r\n      addEntryToPayment(entry)\r\n    } else {\r\n      shareEntryToPaymentUpdate(entry, item, this.state.share)\r\n    }\r\n    hideDialogAction(ModalType.PAYMENT_CHOOSE_ENTRY_DIVIDER)\r\n  }\r\n\r\n  isDisabled = () =>\r\n    this.state.share.divider <= 0 ||\r\n    this.state.share.multiplier <= 0 ||\r\n    this.state.share.multiplier > this.state.share.divider\r\n\r\n  render() {\r\n    const { entry, classes } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <DialogTitle id=\"choose-entry-divider-dialog-title\">\r\n          <TypographyCustom type=\"167\" className={classes.title}>\r\n            {tr('web_customer.payment.popin.choose_divider.title')}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n        <DialogContent className={classes.content}>\r\n          <NumberField\r\n            id=\"multiplier\"\r\n            className={classes.input}\r\n            classes={{ textField: classes.inputTheme }}\r\n            value={this.state.share.multiplier ?? ''}\r\n            min={0}\r\n            max={100}\r\n            onChange={(e, value) => {\r\n              this.setState({\r\n                share: {\r\n                  ...this.state.share,\r\n                  multiplier: value,\r\n                },\r\n              })\r\n            }}\r\n          />\r\n          <TypographyCustom type=\"144\" className={classes.divider}>\r\n            /\r\n          </TypographyCustom>\r\n          <NumberField\r\n            id=\"divider\"\r\n            className={classes.input}\r\n            classes={{ textField: classes.inputTheme }}\r\n            value={this.state.share.divider ?? ''}\r\n            min={0}\r\n            max={100}\r\n            onChange={(e, value) => {\r\n              this.setState({\r\n                share: {\r\n                  ...this.state.share,\r\n                  divider: value,\r\n                },\r\n              })\r\n            }}\r\n          />\r\n          <TypographyCustom type=\"144\" className={classes.multiplier}>\r\n            x\r\n          </TypographyCustom>\r\n          <TypographyCustom type=\"144\" className={classes.entryName}>\r\n            {entry.name}\r\n          </TypographyCustom>\r\n        </DialogContent>\r\n        <DialogActions>\r\n          <Grid container className={classes.actionsContainer}>\r\n            <Grid item xs={12}>\r\n              <Button\r\n                className={classes.button}\r\n                onClick={this.onSubmit}\r\n                disabled={this.isDisabled()}\r\n              >\r\n                <TypographyCustom type=\"167\" className={classes.buttonSubmitLabel}>\r\n                  {tr('web_customer.payment.popin.choose_divider.take')}{' '}\r\n                  {this.state.share.multiplier}\r\n                  &nbsp;/&nbsp;\r\n                  {this.state.share.divider}\r\n                </TypographyCustom>\r\n              </Button>\r\n            </Grid>\r\n            <Grid item xs={12}>\r\n              <Button variant=\"text\" className={classes.button} onClick={this.onCancel}>\r\n                <TypographyCustom type=\"167\" className={classes.buttonCancelLabel}>\r\n                  {tr('global.cancel')}\r\n                </TypographyCustom>\r\n              </Button>\r\n            </Grid>\r\n          </Grid>\r\n        </DialogActions>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nChooseEntryDividerDialog.DialogRootProps = {\r\n  disableBackdropClick: true,\r\n  'aria-labelledby': 'choose-entry-divider-dialog-title',\r\n}\r\n\r\nChooseEntryDividerDialog.defaultProps = {\r\n  share: getDefaultChoose(),\r\n}\r\n\r\nChooseEntryDividerDialog.DialogStyles = theme => ({\r\n  paper: {\r\n    maxWidth: 'none',\r\n    margin: theme.spacing(3),\r\n  },\r\n})\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n  return {\r\n    entry: getEntryWithId(state, ownProps),\r\n    item: getItemWithId(state, ownProps),\r\n  }\r\n}\r\n\r\nconst EnhancedChooseEntryDividerDialog = compose(\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      hideDialogAction,\r\n      addEntryToPayment,\r\n      shareEntryToPaymentUpdate,\r\n    }\r\n  ),\r\n  withStyles(styles)\r\n)(ChooseEntryDividerDialog)\r\n\r\n// After applying HOCs (withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access static properties\r\n// from the exported component, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedChooseEntryDividerDialog.DialogRootProps = ChooseEntryDividerDialog.DialogRootProps\r\nEnhancedChooseEntryDividerDialog.DialogStyles = ChooseEntryDividerDialog.DialogStyles\r\n\r\nexport default EnhancedChooseEntryDividerDialog\r\n","import React from 'react'\r\nimport compose from 'recompose/compose'\r\nimport { connect } from 'react-redux'\r\nimport classNames from 'classnames'\r\n\r\nimport { hideDialogAction, ModalType } from 'pmt-modules/dialog'\r\nimport { redirectTo, getRoute } from 'pmt-modules/routing'\r\nimport { setPaymentTypeAll } from 'pmt-modules/payment'\r\nimport { tr } from 'pmt-modules/i18n'\r\n\r\nimport { withStyles } from 'pmt-ui/styles'\r\nimport { DialogActions, DialogContent, DialogTitle } from 'pmt-ui/Dialog'\r\nimport Grid from 'pmt-ui/Grid'\r\nimport { TypographyCustom } from 'pmt-ui/Typography'\r\n\r\nimport { Button } from '../../Button'\r\n\r\nconst styles = theme => ({\r\n  root: {\r\n    width: '100%',\r\n  },\r\n  title: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n  content: {\r\n    display: 'flex',\r\n    alignItems: 'center',\r\n  },\r\n  actions: {\r\n    margin: 0,\r\n    padding: `0 ${theme.spacing(2.5)}px ${theme.spacing(1)}px`,\r\n  },\r\n  button: {\r\n    width: '100%',\r\n  },\r\n  buttonSubmitLabel: {\r\n    color: theme.pmt.colors.white,\r\n  },\r\n  buttonCancelLabel: {\r\n    color: theme.palette.primary.main,\r\n  },\r\n})\r\n\r\nclass GenerousPaymentDialog extends React.Component {\r\n  onCancel = () => this.props.hideDialogAction(ModalType.PAYMENT_GENEROUS_PAYMENT)\r\n\r\n  onSubmit = () => {\r\n    const { restaurantId, checkId, setPaymentTypeAll, redirectTo, hideDialogAction } = this.props\r\n\r\n    setPaymentTypeAll()\r\n    redirectTo(getRoute('PAYMENT_PAYMENT'), {\r\n      restaurantId,\r\n      checkId,\r\n    })\r\n    hideDialogAction(ModalType.PAYMENT_GENEROUS_PAYMENT)\r\n  }\r\n\r\n  render() {\r\n    const { amount, outstandingBalance, classes } = this.props\r\n\r\n    return (\r\n      <div className={classes.root}>\r\n        <DialogTitle id=\"generous-payment-dialog-title\">\r\n          <TypographyCustom type=\"167\" className={classes.title}>\r\n            {tr('web_customer.payment.popin.generous_payment.title')}\r\n          </TypographyCustom>\r\n        </DialogTitle>\r\n        <DialogContent className={classes.content}>\r\n          <TypographyCustom type=\"144\">\r\n            {tr('web_customer.payment.popin.generous_payment.content', {\r\n              amount,\r\n              outstandingBalance,\r\n            })}\r\n          </TypographyCustom>\r\n        </DialogContent>\r\n        <DialogActions className={classes.actions}>\r\n          <Grid container>\r\n            <Grid item xs={12}>\r\n              <Button className={classes.button} onClick={this.onSubmit}>\r\n                <TypographyCustom type=\"167\" className={classes.buttonSubmitLabel}>\r\n                  {tr('web_customer.payment.popin.generous_payment.pay', {\r\n                    outstandingBalance,\r\n                  })}\r\n                </TypographyCustom>\r\n              </Button>\r\n            </Grid>\r\n            <Grid item xs={12}>\r\n              <Button\r\n                variant=\"text\"\r\n                className={classNames(classes.button, 'u-marginTop5')}\r\n                onClick={this.onCancel}\r\n              >\r\n                <TypographyCustom type=\"167\" className={classes.buttonCancelLabel}>\r\n                  {tr('web_customer.payment.popin.generous_payment.no_cancel')}\r\n                </TypographyCustom>\r\n              </Button>\r\n            </Grid>\r\n          </Grid>\r\n        </DialogActions>\r\n      </div>\r\n    )\r\n  }\r\n}\r\n\r\nGenerousPaymentDialog.DialogRootProps = {\r\n  disableBackdropClick: true,\r\n  'aria-labelledby': 'generous-payment-dialog-title',\r\n}\r\n\r\nGenerousPaymentDialog.DialogStyles = theme => ({\r\n  paper: {\r\n    maxWidth: 'none',\r\n    margin: theme.spacing(3),\r\n  },\r\n})\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n  return {}\r\n}\r\n\r\nconst EnhancedGenerousPaymentDialog =  compose(\r\n  connect(\r\n    mapStateToProps,\r\n    {\r\n      setPaymentTypeAll,\r\n      redirectTo,\r\n      hideDialogAction,\r\n    }\r\n  ),\r\n  withStyles(styles)\r\n)(GenerousPaymentDialog)\r\n\r\n// After applying HOCs (withStyles, connect, etc.), the enhanced component\r\n// loses reference to the static properties defined on the original class.\r\n// This reassignment ensures that consumers can still access static properties\r\n// from the exported component, maintaining backward compatibility with Vite's\r\n// module system which handles static properties differently than Webpack.\r\nEnhancedGenerousPaymentDialog.DialogRootProps = GenerousPaymentDialog.DialogRootProps\r\nEnhancedGenerousPaymentDialog.DialogStyles = GenerousPaymentDialog.DialogStyles\r\n\r\nexport default EnhancedGenerousPaymentDialog\r\n","import { ModalType } from 'pmt-modules/dialog'\r\n\r\nimport ChooseEntryDividerDialog from '../components/payment/CheckList/ChooseEntryDividerDialog'\r\nimport GenerousPaymentDialog from '../components/payment/GenerousPaymentDialog'\r\n\r\nconst dialogs = [\r\n  {\r\n    type: ModalType.PAYMENT_CHOOSE_ENTRY_DIVIDER,\r\n    view: ChooseEntryDividerDialog,\r\n  },\r\n  {\r\n    type: ModalType.PAYMENT_GENEROUS_PAYMENT,\r\n    view: GenerousPaymentDialog,\r\n  },\r\n]\r\n\r\nexport default dialogs\r\n","import Immutable from 'immutable'\r\nimport {\r\n  RegisterUserLightAction,\r\n  RegisterUserAction,\r\n  RegisterIncognitoUserAction,\r\n} from '../registration'\r\nimport {\r\n  LOGOUT_ACTION,\r\n  getAuthCookie,\r\n  getUserLightCookie,\r\n  getIncognitoCookie,\r\n} from 'pmt-modules/auth'\r\nimport { GetAppConfigAction } from 'pmt-modules/appConfig'\r\nimport { GetUserMeAction } from 'pmt-modules/userMe'\r\nimport UserType from 'pmt-modules/user/constants/UserType'\r\n\r\nconst getDefaultState = () => {\r\n  if (getAuthCookie() != null) {\r\n    // this will be replaced by real data when fetching userMe\r\n    return Immutable.fromJS({\r\n      id: null,\r\n      email: null,\r\n      lastName: null,\r\n      firstName: null,\r\n      type: null,\r\n    })\r\n  } else if (getUserLightCookie() != null) {\r\n    return Immutable.fromJS({\r\n      id: null,\r\n      email: getUserLightCookie().email,\r\n      lastName: getUserLightCookie().lastName,\r\n      firstName: getUserLightCookie().firstName,\r\n      type: UserType.LIGHT,\r\n    })\r\n  } else if (getIncognitoCookie() != null) {\r\n    return Immutable.fromJS({\r\n      id: getIncognitoCookie(),\r\n      email: null,\r\n      lastName: null,\r\n      firstName: null,\r\n      type: UserType.INCOGNITO,\r\n    })\r\n  }\r\n  return Immutable.fromJS({\r\n    id: null,\r\n    email: null,\r\n    lastName: null,\r\n    firstName: null,\r\n    type: null,\r\n  })\r\n}\r\n\r\nexport const authenticatedUserReducer = (state = getDefaultState(), action) => {\r\n  switch (action.type) {\r\n    case RegisterUserAction.SUCCESS:\r\n    case RegisterUserLightAction.SUCCESS:\r\n    case RegisterIncognitoUserAction.SUCCESS:\r\n    case GetUserMeAction.SUCCESS:\r\n      return state.merge({\r\n        id: action.response.id,\r\n        email: action.response.email,\r\n        lastName: action.response.lastName,\r\n        firstName: action.response.firstName,\r\n        type: action.response.userType,\r\n      })\r\n\r\n    // reload from cookies, as cookies depend from appConfig.restaurantsGroupId\r\n    case GetAppConfigAction.SUCCESS:\r\n      return getDefaultState()\r\n\r\n    case LOGOUT_ACTION:\r\n      return state.merge({\r\n        id: null,\r\n        email: null,\r\n        lastName: null,\r\n        firstName: null,\r\n        type: null,\r\n      })\r\n\r\n    default:\r\n      return state\r\n  }\r\n}\r\n","import isNil from 'lodash/isNil'\r\nimport Logger from 'pmt-utils/logger'\r\n\r\nimport { createMiddleware } from '../redux'\r\n\r\nimport { createMuiThemeWithPmtRGroupColors } from 'pmt-utils/theme/theme'\r\n\r\nimport { GetRestaurantsGroupAction } from './actions'\r\nimport { getCurrentTheme, changeCurrentTheme } from '../theme'\r\n\r\n/**\r\n* Intercepts GET restaurantsGroup and update theme if succeeded\r\n* Otherwise just sends action to next middleware\r\n*\r\n* @returns {Function}\r\n*/\r\nexport const restaurantsGroupThemeMiddleware = createMiddleware(\r\n  GetRestaurantsGroupAction.SUCCESS,\r\n  ({ getState, dispatch, next, action }) => {\r\n\r\n    if (!isNil(action.response.theme)) {\r\n      const currentTheme = getCurrentTheme(getState())\r\n      const newTheme = createMuiThemeWithPmtRGroupColors(currentTheme, action.response.theme)\r\n\r\n      next(changeCurrentTheme(newTheme))\r\n    } else {\r\n      Logger.warn(\r\n        'RGroup theme',\r\n        `no theme found for rgroup ${action.response.name} ${action.response.id}`\r\n      )\r\n    }\r\n  }\r\n)\r\n","import Immutable from 'immutable'\r\nimport { createReducer, createSimpleReducer } from 'pmt-modules/redux'\r\n\r\nimport {\r\n  GetRestaurantsGroupAction,\r\n  PostRestaurantsGroupAction,\r\n  PutGroupStoreListAction,\r\n  PutGroupGroupListAction,\r\n  PatchGroupAction,\r\n} from './actions'\r\n\r\nexport * from './actions'\r\nexport * from './constants'\r\nexport * from './selectors'\r\nexport * from './format'\r\nexport * from './middlewares'\r\nexport * from './components'\r\n\r\n// Example of restaurantsGroup data\r\n// {\r\n//   restaurantsGroup: null,\r\n//   isFetching: false,\r\n//   lastUpdated: null,\r\n//   error: null,\r\n// }\r\n\r\nconst DEFAULT = Immutable.fromJS({\r\n  list: {},\r\n  putStoreList: {\r\n    data: null,\r\n    isFetching: false,\r\n    lastUpdated: null,\r\n    error: null,\r\n  },\r\n  putGroupList: {\r\n    data: null,\r\n    isFetching: false,\r\n    lastUpdated: null,\r\n    error: null,\r\n  },\r\n  customTexts: {\r\n    data: null,\r\n    isFetching: false,\r\n    lastUpdated: null,\r\n    error: null,\r\n  },\r\n})\r\n\r\n// force id to be a string, avoid errors while retrieve the data where the id is pass as a int\r\n// immutable objects use keys as string, not int\r\nconst getRestaurantsGroupIdOnAction = action => String(action.data.restaurantsGroupId)\r\n\r\nconst onRequest = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.setIn(\r\n    ['list', restaurantsGroupId],\r\n    Immutable.fromJS({\r\n      restaurantsGroup: null,\r\n      isFetching: true,\r\n      lastUpdated: null,\r\n      error: null,\r\n    })\r\n  )\r\n}\r\n\r\nconst onSuccess = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.setIn(\r\n    ['list', restaurantsGroupId],\r\n    Immutable.fromJS({\r\n      restaurantsGroup: action.response,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: null,\r\n    })\r\n  )\r\n}\r\n\r\nconst onFailure = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.setIn(\r\n    ['list', restaurantsGroupId],\r\n    Immutable.fromJS({\r\n      restaurantsGroup: null,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: action.error,\r\n    })\r\n  )\r\n}\r\n\r\n//\r\n//\r\n//\r\n\r\nconst onPatchRequest = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.mergeIn(['list', restaurantsGroupId], {\r\n    isFetching: true,\r\n    error: null,\r\n  })\r\n}\r\n\r\nconst onPatchFailure = (state, action) => {\r\n  const restaurantsGroupId = getRestaurantsGroupIdOnAction(action)\r\n\r\n  return state.mergeIn(['list', restaurantsGroupId], {\r\n    isFetching: false,\r\n    lastUpdated: new Date(),\r\n    error: action.error,\r\n  })\r\n}\r\n\r\nconst onRequestPutGroupStoreList = (state, action) => {\r\n  return state.merge({\r\n    putStoreList: {\r\n      data: null,\r\n      isFetching: true,\r\n      lastUpdated: null,\r\n      error: null,\r\n    },\r\n  })\r\n}\r\n\r\nconst onSuccessPutGroupStoreList = (state, action) => {\r\n  return state.merge({\r\n    putStoreList: {\r\n      data: action.response,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: null,\r\n    },\r\n  })\r\n}\r\n\r\nconst onFailurePutGroupStoreList = (state, action) => {\r\n  return state.merge({\r\n    putStoreList: {\r\n      data: null,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: action.error,\r\n    },\r\n  })\r\n}\r\n\r\nconst onRequestPutGroupGroupList = (state, action) => {\r\n  return state.merge({\r\n    putGroupList: {\r\n      data: null,\r\n      isFetching: true,\r\n      lastUpdated: null,\r\n      error: null,\r\n    },\r\n  })\r\n}\r\n\r\nconst onSuccessPutGroupGroupList = (state, action) => {\r\n  return state.merge({\r\n    putGroupList: {\r\n      data: action.response,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: null,\r\n    },\r\n  })\r\n}\r\n\r\nconst onFailurePutGroupGroupList = (state, action) => {\r\n  return state.merge({\r\n    putGroupList: {\r\n      data: null,\r\n      isFetching: false,\r\n      lastUpdated: new Date(),\r\n      error: action.error,\r\n    },\r\n  })\r\n}\r\n\r\nexport const restaurantsGroupReducer = createReducer(DEFAULT, {\r\n  [GetRestaurantsGroupAction.REQUEST]: onRequest,\r\n  [GetRestaurantsGroupAction.SUCCESS]: onSuccess,\r\n  [GetRestaurantsGroupAction.FAILURE]: onFailure,\r\n  [PutGroupStoreListAction.REQUEST]: onRequestPutGroupStoreList,\r\n  [PutGroupStoreListAction.SUCCESS]: onSuccessPutGroupStoreList,\r\n  [PutGroupStoreListAction.FAILURE]: onFailurePutGroupStoreList,\r\n  [PutGroupGroupListAction.REQUEST]: onRequestPutGroupGroupList,\r\n  [PutGroupGroupListAction.SUCCESS]: onSuccessPutGroupGroupList,\r\n  [PutGroupGroupListAction.FAILURE]: onFailurePutGroupGroupList,\r\n  [PatchGroupAction.REQUEST]: onPatchRequest,\r\n  [PatchGroupAction.FAILURE]: onPatchFailure,\r\n  [PatchGroupAction.SUCCESS]: onSuccess,\r\n})\r\n\r\nexport const postRestaurantsGroupReducer = createSimpleReducer(PostRestaurantsGroupAction)\r\n","import moment from 'moment'\r\n\r\nimport { appConfigReducer } from 'pmt-modules/appConfig'\r\nimport { appSecurityReducer } from 'pmt-modules/appSecurity'\r\nimport { authReducer } from 'pmt-modules/auth'\r\nimport { authenticatedUserReducer } from 'pmt-modules/authenticatedUser'\r\nimport { authAppReducer } from 'pmt-modules/authApp'\r\nimport { forgotPasswordReducer } from 'pmt-modules/forgotPassword'\r\nimport { restaurantReducer } from 'pmt-modules/restaurant'\r\nimport { restaurantsGroupReducer } from 'pmt-modules/restaurantsGroup'\r\nimport { registrationReducer } from 'pmt-modules/registration'\r\nimport { checkReducer, paymentReducer, postPaymentReducer } from 'pmt-modules/payment'\r\nimport { fetchPaymentPdfLinkReducer} from 'pmt-modules/payment/pdf'\r\nimport { topUpReducer } from 'pmt-modules/topUp'\r\nimport { userUserAccountsReducer } from 'pmt-modules/userAccount'\r\nimport { userHistoryReducer } from 'pmt-modules/userHistory'\r\nimport { meReducer } from 'pmt-modules/userMe'\r\n\r\n// Rolling expiration: this is a *duration* (in ms), not an absolute date.\r\n// The actual expiry timestamp is computed at write time by the expiration\r\n// transform (see reduxPersistTransformExpire `inbound`), so the delay always\r\n// starts from the last write instead of from app start time.\r\n// delay size = a long meal = 3 hours\r\nconst persistExpireDelay = moment.duration(3, 'hours').asMilliseconds()\r\n\r\nconst persistOptions = { persist: true, persistExpireDelay }\r\n\r\n// for 3DSecure we need to persist the postPayment data\r\ncheckReducer.options = { ...persistOptions }\r\npaymentReducer.options = { ...persistOptions }\r\npostPaymentReducer.options = { ...persistOptions }\r\ntopUpReducer.options = { ...persistOptions }\r\n\r\nexport default {\r\n  appConfig: appConfigReducer,\r\n  appSecurity: appSecurityReducer,\r\n  auth: authReducer,\r\n  authenticatedUser: authenticatedUserReducer,\r\n  authApp: authAppReducer,\r\n  check: checkReducer,\r\n  fetchPaymentPdfLink: fetchPaymentPdfLinkReducer,\r\n  forgotPassword: forgotPasswordReducer,\r\n  payment: paymentReducer,\r\n  postPayment: postPaymentReducer,\r\n  registration: registrationReducer,\r\n  restaurant: restaurantReducer,\r\n  restaurantsGroup: restaurantsGroupReducer,\r\n  topUp: topUpReducer,\r\n  userMe: meReducer,\r\n  userHistory: userHistoryReducer,\r\n  userAccounts: userUserAccountsReducer,\r\n}\r\n","import register from 'pmt-modules/registration/forms/register'\r\nimport login from 'pmt-modules/auth/forms/login'\r\nimport forgotPassword from 'pmt-modules/forgotPassword/forms/forgotPassword'\r\nimport userLight from 'pmt-modules/registration/forms/userLight'\r\nimport incognito from 'pmt-modules/registration/forms/incognito'\r\n\r\nconst forms = [register, login, forgotPassword, userLight, incognito, ]\r\n\r\nexport default forms\r\n","import isEmpty from 'lodash/isEmpty'\r\nimport { getApiUrl, getApiConsumer } from 'pmt-modules/environment'\r\nimport { getAuthorization } from 'pmt-modules/auth/utils'\r\nimport { getAppTokenCodeOnUrl } from 'pmt-modules/appSecurity'\r\n\r\nconst getApiManagerOptions = () => ({\r\n  apiUrl: getApiUrl(),\r\n\r\n  headersMiddleware: () => {\r\n    const headers = {\r\n      'api-consumer': getApiConsumer(),\r\n    }\r\n\r\n    const authorization = getAuthorization()\r\n    if (authorization !== null) {\r\n      headers.authorization = authorization\r\n    }\r\n\r\n    //\r\n    // Add the `at` header that contains the app token code if exists\r\n    //\r\n    const appTokenCode = getAppTokenCodeOnUrl()\r\n    if (!isEmpty(appTokenCode)) {\r\n      headers.at = appTokenCode\r\n    }\r\n\r\n    return headers\r\n  },\r\n})\r\n\r\nexport default getApiManagerOptions\r\n","export default {\r\n  defaultLocale: 'en',\r\n  locales: ['fr', 'en', 'de', 'it', 'es'],\r\n  calendar: true,\r\n}\r\n","import { createApiCallAction, createApiEnumAction } from 'pmt-modules/api/utils'\r\n\r\nimport TemplateApi from 'pmt-modules/api/calls/TemplateApi'\r\n\r\nexport const GetCustomTextsAction = createApiEnumAction('CUSTOM_TEXTS::GET')\r\n\r\nexport const getCustomTexts = customTextsContainerId =>\r\n  createApiCallAction(\r\n    GetCustomTextsAction,\r\n    TemplateApi.getCustomTextsContainer(customTextsContainerId),\r\n    {\r\n      customTextsContainerId,\r\n    }\r\n  )\r\n","import createMiddleware from 'pmt-modules/redux/createMiddleware'\r\n\r\n// noinspection ES6PreferShortImport (otherwise circular dependency)\r\nimport { getAppTexts } from '../appConfig/selectors'\r\nimport { setTexts } from '../i18n'\r\nimport { getCustomTextsData } from './selectors'\r\nimport { GetCustomTextsAction } from './actions'\r\n\r\nconst getCustomTextsSuccess = createMiddleware(\r\n  GetCustomTextsAction.SUCCESS,\r\n  ({ action, getState, next }) => {\r\n    // finalize action in order to wait it has fully ended (i.e: data is in reducer)\r\n    // so we can use the selectors after that\r\n    next(action)\r\n\r\n    // we set the texts after the action has been processed\r\n    // so we can access them from anywhere (especially in \"tr\" i18n function)\r\n    setTexts(getAppTexts(getState()), getCustomTextsData(getState()))\r\n  }\r\n)\r\n\r\nexport const customTextsMiddlewares = [getCustomTextsSuccess]\r\n","import { AsyncPaymentMiddlewares } from 'pmt-modules/asyncPayment'\r\nimport { appConfigMiddlewares } from 'pmt-modules/appConfig'\r\nimport { customTextsMiddlewares } from 'pmt-modules/customTexts'\r\nimport { authMiddlewares } from 'pmt-modules/auth'\r\nimport { dataCatcherMiddlewares } from 'pmt-modules/dataCatcher'\r\nimport { forgotPasswordMiddlewares } from 'pmt-modules/forgotPassword'\r\nimport { restaurantThemeMiddleware } from 'pmt-modules/restaurant'\r\nimport { restaurantsGroupThemeMiddleware } from 'pmt-modules/restaurantsGroup'\r\nimport { registrationMiddlewares } from 'pmt-modules/registration'\r\nimport { authorizeAppMiddlewares, getAppMiddlewares } from 'pmt-modules/authApp'\r\nimport { userAccountMiddlewares } from 'pmt-modules/userAccount'\r\nimport { appSecurityMiddlewares } from 'pmt-modules/appSecurity'\r\nimport { webCustomerMiddlewares } from 'pmt-modules/webCustomer'\r\n\r\nexport default [\r\n  ...AsyncPaymentMiddlewares,\r\n  ...appConfigMiddlewares,\r\n  ...authMiddlewares,\r\n  ...appSecurityMiddlewares,\r\n  ...customTextsMiddlewares,\r\n  ...dataCatcherMiddlewares,\r\n  ...forgotPasswordMiddlewares,\r\n  restaurantThemeMiddleware,\r\n  restaurantsGroupThemeMiddleware,\r\n  ...registrationMiddlewares,\r\n  ...authorizeAppMiddlewares,\r\n  ...getAppMiddlewares,\r\n  ...userAccountMiddlewares,\r\n  ...webCustomerMiddlewares,\r\n]\r\n","const texts = () => ({})\r\n\r\nexport default texts\r\n","import blue from 'pmt-ui/colors/blue'\r\nimport orange from 'pmt-ui/colors/orange'\r\nimport red from 'pmt-ui/colors/red'\r\nimport grey from 'pmt-ui/colors/grey'\r\nimport lightGreen from 'pmt-ui/colors/lightGreen'\r\n\r\nimport { createMuiTheme, dark, light, getLuminance } from 'pmt-ui/styles'\r\n\r\nimport { getQueryParam } from 'pmt-utils/url'\r\n\r\nconst PMTColors = {\r\n  red400: red['A400'],\r\n  orange300: orange[300],\r\n  lightGreen400: lightGreen[400],\r\n  blue800: blue[800],\r\n  grey500: grey[500],\r\n  greyBackground: '#efeff4',\r\n  white: '#fff',\r\n  greyCD: '#cdcdcd',\r\n  grey91: '#919ca7',\r\n  darkGrey: '#262626',\r\n  green4ca: '#4caf50',\r\n}\r\n\r\nconst getPMTColor = color => PMTColors[color]\r\n\r\nconst getPMTColors = () => PMTColors\r\n\r\nconst muiTheme = createMuiTheme({\r\n  palette: {\r\n    type: getQueryParam('theme', window.location.uri) || 'light', // Switching the dark mode on is a single property value change.\r\n    primary: {\r\n      main: '#387651',\r\n    },\r\n    secondary: {\r\n      main: '#387651',\r\n    },\r\n    contrastThreshold: 0.5,\r\n  },\r\n  pmt: {\r\n    appConfig: {}, // can be overwritten by api consumer theme settings\r\n    colors: getPMTColors(),\r\n    status: {\r\n      info: getPMTColor('blue800'),\r\n      error: getPMTColor('red400'),\r\n      warning: getPMTColor('orange300'),\r\n      inactive: getPMTColor('grey500'),\r\n      valid: getPMTColor('lightGreen400'),\r\n    },\r\n    header: {\r\n      height: 48,\r\n      titleFontSize: 24,\r\n    },\r\n    subHeader: {\r\n      height: 27,\r\n\r\n      /**\r\n       * The subHeader has the same background color as the header, but with a different opacity\r\n       */\r\n      opacity: 0.8,\r\n      fontSize: 20,\r\n    },\r\n    bottomButtonBar: {\r\n      height: 50,\r\n    },\r\n    pageContent: {\r\n      paddingLeft: 0, // must be 0\r\n      paddingRight: 0, // must be 0\r\n      paddingTop: 48, // must be 0\r\n      paddingBottom: 0,\r\n    },\r\n    loading: {\r\n      color: grey[400],\r\n    },\r\n    textEllipsis: {\r\n      whiteSpace: 'nowrap',\r\n      overflow: 'hidden',\r\n      textOverflow: 'ellipsis',\r\n    },\r\n    typography: {\r\n      fonts: {\r\n        '117': {\r\n          style: {\r\n            fontSize: 11,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '124': {\r\n          style: {\r\n            fontSize: 12,\r\n            fontWeight: 400,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '127': {\r\n          style: {\r\n            fontSize: 12,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '144': {\r\n          style: {\r\n            fontSize: 14,\r\n            fontWeight: 400,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '147': {\r\n          style: {\r\n            fontSize: 14,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '164': {\r\n          style: {\r\n            fontSize: 16,\r\n            fontWeight: 400,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '167': {\r\n          style: {\r\n            fontSize: 16,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '184': {\r\n          style: {\r\n            fontSize: 18,\r\n            fontWeight: 400,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '187': {\r\n          style: {\r\n            fontSize: 18,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '204': {\r\n          style: {\r\n            fontSize: 20,\r\n            fontWeight: 400,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '207': {\r\n          style: {\r\n            fontSize: 20,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '247': {\r\n          style: {\r\n            fontSize: 24,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '267': {\r\n          style: {\r\n            fontSize: 26,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n        '307': {\r\n          style: {\r\n            fontSize: 30,\r\n            fontWeight: 700,\r\n            lineHeight: 1,\r\n          },\r\n        },\r\n      },\r\n    },\r\n  },\r\n  typography: {\r\n    fontFamily: \"'Lato', sans-serif\",\r\n  },\r\n  zIndex: {\r\n    loader: 1600,\r\n    stickyButton: 1200, // used by CookieConsentBanner, should be above most content\r\n  },\r\n})\r\n\r\nconst theme = {\r\n  muiTheme,\r\n}\r\n\r\n// https://github.com/callemall/material-ui/issues/8183\r\n// override getContrastText function to have a white color on green buttons\r\n// TODO : check the evolution of the issue above\r\ntheme.muiTheme.palette.getContrastText = color => {\r\n  if (getLuminance(color) <= theme.muiTheme.palette.contrastThreshold) {\r\n    return dark.text.primary\r\n  } else {\r\n    return light.text.primary\r\n  }\r\n}\r\n\r\nexport default theme\r\n","//\r\n// https://github.com/prescottprue/react-redux-firebase/\r\n//\r\n// Warning: we use the v2, be carefull with the version of the doc:\r\n// http://docs.react-redux-firebase.com/history/v2.0.0/docs/recipes/upload.html\r\n//\r\n\r\nconst rrfConfig = {\r\n  // http://docs.react-redux-firebase.com/history/v1.5.0/docs/recipes/upload.html\r\n  fileMetadataFactory: uploadRes => {\r\n    // upload response from Firebase's storage upload\r\n    const {\r\n      metadata: { name, fullPath },\r\n    } = uploadRes\r\n    // default factory includes name, fullPath, downloadURL\r\n    return {\r\n      name,\r\n      fullPath,\r\n    }\r\n  },\r\n}\r\n\r\nexport default {\r\n  // for key we use the `ENV` from our config\r\n  PREPROD: {\r\n    // Firebase config\r\n    credentials: {\r\n      apiKey: 'AIzaSyA9op6DM3NoXxvirxtgbxr7HkJazN97K-o',\r\n      authDomain: 'paymytable-eu-preprod.firebaseapp.com',\r\n      projectId: 'paymytable-eu-preprod',\r\n      storageBucket: 'paymytable-eu-preprod-firebase-com',\r\n      messagingSenderId: '517015730789',\r\n      appId: '1:517015730789:web:f130cb8f7023633054a48c',\r\n      databaseURL: 'paymytable-eu-preprod-default-rtdb.europe-west1.firebasedatabase.app',\r\n    },\r\n    //\r\n    rrfConfig,\r\n  },\r\n  PROD: {\r\n    // Firebase config\r\n    credentials: {\r\n      apiKey: 'AIzaSyC0GlY9SiWH-zDZL4AHDZsbZXIp2SNqIIw',\r\n      authDomain: 'paymytable-eu.firebaseapp.com',\r\n      databaseURL: 'https://paymytable-eu-default-rtdb.europe-west1.firebasedatabase.app',\r\n      projectId: 'paymytable-eu',\r\n      storageBucket: 'paymytable-eu-firebase-com',\r\n      messagingSenderId: '177135918636',\r\n      appId: '1:177135918636:web:807ac0e2a3deb3f9f7bb89',\r\n    },\r\n    //\r\n    rrfConfig,\r\n  },\r\n}\r\n","import Application from 'pmt-modules/archi/Application'\r\n\r\nimport analytics from './config/analytics'\r\nimport appConfig from './config/appConfig'\r\nimport dataCatcher from './config/dataCatcher'\r\nimport devMiddlewares from './config/devMiddlewares'\r\nimport dialogs from './config/dialogs'\r\nimport entities from './config/entities'\r\nimport environment from './config/environment'\r\nimport forms from './config/forms'\r\nimport getApiManagerOptions from './config/getApiManagerOptions'\r\nimport i18n from './config/i18n'\r\nimport middlewares from './config/middlewares'\r\nimport routingEnum from './config/routingEnum'\r\nimport texts from './config/texts'\r\nimport theme from './config/theme'\r\nimport firebase from './config/firebase'\r\n\r\nimport 'pmt-modules/archi/styles/fontLato.scss'\r\n\r\nconst appOptions = {\r\n  analytics,\r\n  appConfig,\r\n  dataCatcher,\r\n  devMiddlewares,\r\n  dialogs,\r\n  entities,\r\n  environment,\r\n  forms,\r\n  getApiManagerOptions,\r\n  i18n,\r\n  middlewares,\r\n  routingEnum,\r\n  texts,\r\n  theme,\r\n  firebase,\r\n}\r\n\r\nApplication(appOptions)\r\n"],"file":"index-DFbfe7zr.mjs"}