{"version":3,"file":"static/js/52093.88bc3f28.js","mappings":"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IAAK,gBACL,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,OACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,iBACL,IAAK,cACL,IAAK,oBACL,IAAK,gBACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,cACL,IAAK,qBACL,IAAK,SACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,eACL,IAAK,eACL,IAAK,iBACL,IAAK,eACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,gBACL,IAAK,cACL,IAAK,eACL,IAAK,kBACL,IAAK,oBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,cACL,IAAK,UACL,IAAK,SACL,IAAK,cACL,IAAK,UACL,IAAK,oBACL,IAAK,kBACL,IAAK,QACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,oBACL,IAAK,cACL,IAAK,cACL,IAAK,mBACL,IAAK,eACL,IAAK,aACL,IAAK,eACL,IAAK,gBACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,iBACL,IAAK,YACL,IAAK,cACL,IAAK,eACL,IAAK,aACL,IAAK,aACL,IAAK,gBACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,qBACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,kBACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,cACL,IAAK,iBACL,IAAK,qBACL,IAAK,YACL,IAAK,oBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,WACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,eACL,IAAK,cACL,IAAK,YACL,IAAK,kBACL,IAAK,oBACL,IAAK,iBACL,IAAK,YACL,IAAK,aACL,IAAK,oBACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,mBACL,IAAK,qBACL,IAAK,yBACL,IAAK,cACL,IAAK,aACL,IAAK,mBACL,IAAK,sBACL,IAAK,eACL,IAAK,eACL,IAAK,gBACL,IAAK,cACL,IAAK,kBACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,2BACL,IAAK,eACL,IAAK,iBACL,IAAK,aACL,IAAK,iBACL,IAAK,YACL,IAAK,mBACL,IAAK,cACL,IAAK,wBACL,IAAK,kBACL,IAAK,qBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,iBACL,IAAK,eACL,IAAK,mBACL,IAAK,aACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,iBACL,IAAK,uBACL,IAAK,0BACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,cACL,IAAK,aACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,cACL,IAAK,mBACL,IAAK,uBACL,IAAK,mBACL,IAAK,kBACL,IAAK,mBACL,IAAK,cACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,eACL,IAAK,oBACL,IAAK,sBACL,IAAK,sBACL,IAAK,mBACL,IAAK,qBACL,IAAK,qBACL,IAAK,gBACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,gBACL,IAAK,wBACL,IAAK,qBACL,IAAK,SACL,IAAK,kBACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,mBACL,IAAK,oBACL,IAAK,eACL,IAAK,oBACL,IAAK,uBACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,qBACL,IAAK,yBACL,IAAK,mBACL,IAAK,WACL,IAAK,iBACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,mBACL,IAAK,mBACL,IAAK,iBAC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AK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,SACL,IAAK,aACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,WACL,IAAK,OACL,IAAK,QACL,IAAK,aACL,IAAK,KACL,IAAK,QACL,IAAK,SACL,IAAK,YACL,IAAK,cACL,IAAK,iBACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,cACL,IAAK,WACL,IAAK,iBACL,IAAK,aACL,IAAK,YACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,eACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,SACL,IAAK,SACL,IAAK,aACL,IAAK,YACL,IAAK,OACL,IAAK,YACL,IAAK,QACL,IAAK,OACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,cACL,IAAK,SACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,MACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,QACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,YACL,IAAK,cACL,IAAK,QACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,oBACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,QACL,IAAK,cACL,IAAK,cACL,IAAK,WACL,IAAK,eACL,IAAK,YACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,YACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,mBACL,IAAK,cACL,IAAK,gBACL,IAAK,cACL,IAAK,WACL,IAAK,MACL,IAAK,YACL,IAAK,aACL,IAAK,qBACL,IAAK,mBACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,cACL,IAAK,YACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,SACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,OACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,WACL,IAAK,OACL,IAAK,YACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,aACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,MACL,IAAK,cACL,IAAK,MACL,IAAK,aACL,IAAK,gBACL,IAAK,UACL,IAAK,eACL,IAAK,UACL,IAAK,WACL,IAAK,SACL,IAAK,YACL,IAAK,cAEHD,GAAW,CACb,EAAG,EACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,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CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEF,EAGA,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAAG,GAIL,IAEE,CAEAA,GAAI,GAIN,IAEE,CAEAA,EAA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GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEF,EAGA,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEF,EAGA,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEAA,GAAI,GAIN,KAEE,CAEAA,EAAG,GAIL,KAEE,CAEF,EAGA,KAEE,CAEF,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","sources":["../node_modules/xlsx/xlsx.mjs"],"sourcesContent":["/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*exported XLSX */\n\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.18.5';\nvar current_codepage = 1200,\n current_ansi = 1252;\nvar VALID_ANSI = [874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000];\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\n\nvar CS2CP = {\n /*::[*/\n 0\n /*::]*/\n : 1252,\n\n /* ANSI */\n\n /*::[*/\n 1\n /*::]*/\n : 65001,\n\n /* DEFAULT */\n\n /*::[*/\n 2\n /*::]*/\n : 65001,\n\n /* SYMBOL */\n\n /*::[*/\n 77\n /*::]*/\n : 10000,\n\n /* MAC */\n\n /*::[*/\n 128\n /*::]*/\n : 932,\n\n /* SHIFTJIS */\n\n /*::[*/\n 129\n /*::]*/\n : 949,\n\n /* HANGUL */\n\n /*::[*/\n 130\n /*::]*/\n : 1361,\n\n /* JOHAB */\n\n /*::[*/\n 134\n /*::]*/\n : 936,\n\n /* GB2312 */\n\n /*::[*/\n 136\n /*::]*/\n : 950,\n\n /* CHINESEBIG5 */\n\n /*::[*/\n 161\n /*::]*/\n : 1253,\n\n /* GREEK */\n\n /*::[*/\n 162\n /*::]*/\n : 1254,\n\n /* TURKISH */\n\n /*::[*/\n 163\n /*::]*/\n : 1258,\n\n /* VIETNAMESE */\n\n /*::[*/\n 177\n /*::]*/\n : 1255,\n\n /* HEBREW */\n\n /*::[*/\n 178\n /*::]*/\n : 1256,\n\n /* ARABIC */\n\n /*::[*/\n 186\n /*::]*/\n : 1257,\n\n /* BALTIC */\n\n /*::[*/\n 204\n /*::]*/\n : 1251,\n\n /* RUSSIAN */\n\n /*::[*/\n 222\n /*::]*/\n : 874,\n\n /* THAI */\n\n /*::[*/\n 238\n /*::]*/\n : 1250,\n\n /* EASTEUROPE */\n\n /*::[*/\n 255\n /*::]*/\n : 1252,\n\n /* OEM */\n\n /*::[*/\n 69\n /*::]*/\n : 6969\n /* MISC */\n\n}\n/*:any*/\n;\n\nvar set_ansi = function set_ansi(cp\n/*:number*/\n) {\n if (VALID_ANSI.indexOf(cp) == -1) return;\n current_ansi = CS2CP[0] = cp;\n};\n\nfunction reset_ansi() {\n set_ansi(1252);\n}\n\nvar set_cp = function set_cp(cp\n/*:number*/\n) {\n current_codepage = cp;\n set_ansi(cp);\n};\n\nfunction reset_cp() {\n set_cp(1200);\n reset_ansi();\n}\n\nfunction char_codes(data\n/*:string*/\n)\n/*:Array*/\n{\n var o\n /*:Array*/\n = [];\n\n for (var i = 0, len = data.length; i < len; ++i) {\n o[i] = data.charCodeAt(i);\n }\n\n return o;\n}\n\nfunction utf16leread(data\n/*:string*/\n)\n/*:string*/\n{\n var o\n /*:Array*/\n = [];\n\n for (var i = 0; i < data.length >> 1; ++i) {\n o[i] = String.fromCharCode(data.charCodeAt(2 * i) + (data.charCodeAt(2 * i + 1) << 8));\n }\n\n return o.join(\"\");\n}\n\nfunction utf16beread(data\n/*:string*/\n)\n/*:string*/\n{\n var o\n /*:Array*/\n = [];\n\n for (var i = 0; i < data.length >> 1; ++i) {\n o[i] = String.fromCharCode(data.charCodeAt(2 * i + 1) + (data.charCodeAt(2 * i) << 8));\n }\n\n return o.join(\"\");\n}\n\nvar debom = function debom(data\n/*:string*/\n)\n/*:string*/\n{\n var c1 = data.charCodeAt(0),\n c2 = data.charCodeAt(1);\n if (c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n if (c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n if (c1 == 0xFEFF) return data.slice(1);\n return data;\n};\n\nvar _getchar = function _gc1(x\n/*:number*/\n)\n/*:string*/\n{\n return String.fromCharCode(x);\n};\n\nvar _getansi = function _ga1(x\n/*:number*/\n)\n/*:string*/\n{\n return String.fromCharCode(x);\n};\n\nvar $cptable;\n\nfunction set_cptable(cptable) {\n $cptable = cptable;\n\n set_cp = function set_cp(cp\n /*:number*/\n ) {\n current_codepage = cp;\n set_ansi(cp);\n };\n\n debom = function debom(data\n /*:string*/\n ) {\n if (data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) {\n return $cptable.utils.decode(1200, char_codes(data.slice(2)));\n }\n\n return data;\n };\n\n _getchar = function _gc2(x\n /*:number*/\n )\n /*:string*/\n {\n if (current_codepage === 1200) return String.fromCharCode(x);\n return $cptable.utils.decode(current_codepage, [x & 255, x >> 8])[0];\n };\n\n _getansi = function _ga2(x\n /*:number*/\n )\n /*:string*/\n {\n return $cptable.utils.decode(current_ansi, [x])[0];\n };\n\n cpdoit();\n}\n\nexport { set_cptable };\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nfunction Base64_encode(input) {\n var o = \"\";\n var c1 = 0,\n c2 = 0,\n c3 = 0,\n e1 = 0,\n e2 = 0,\n e3 = 0,\n e4 = 0;\n\n for (var i = 0; i < input.length;) {\n c1 = input.charCodeAt(i++);\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n\n return o;\n}\n\nfunction Base64_decode(input) {\n var o = \"\";\n var c1 = 0,\n c2 = 0,\n c3 = 0,\n e1 = 0,\n e2 = 0,\n e3 = 0,\n e4 = 0;\n input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\n for (var i = 0; i < input.length;) {\n e1 = Base64_map.indexOf(input.charAt(i++));\n e2 = Base64_map.indexOf(input.charAt(i++));\n c1 = e1 << 2 | e2 >> 4;\n o += String.fromCharCode(c1);\n e3 = Base64_map.indexOf(input.charAt(i++));\n c2 = (e2 & 15) << 4 | e3 >> 2;\n\n if (e3 !== 64) {\n o += String.fromCharCode(c2);\n }\n\n e4 = Base64_map.indexOf(input.charAt(i++));\n c3 = (e3 & 3) << 6 | e4;\n\n if (e4 !== 64) {\n o += String.fromCharCode(c3);\n }\n }\n\n return o;\n}\n\nvar has_buf = /*#__PURE__*/function () {\n return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node;\n}();\n\nvar Buffer_from = /*#__PURE__*/function () {\n if (typeof Buffer !== 'undefined') {\n var nbfs = !Buffer.from;\n if (!nbfs) try {\n Buffer.from(\"foo\", \"utf8\");\n } catch (e) {\n nbfs = true;\n }\n return nbfs ? function (buf, enc) {\n return enc ? new Buffer(buf, enc) : new Buffer(buf);\n } : Buffer.from.bind(Buffer);\n }\n\n return function () {};\n}();\n\nfunction new_raw_buf(len\n/*:number*/\n) {\n /* jshint -W056 */\n if (has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n return typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n /* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len\n/*:number*/\n) {\n /* jshint -W056 */\n if (has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n return typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n /* jshint +W056 */\n}\n\nvar s2a = function s2a(s\n/*:string*/\n)\n/*:any*/\n{\n if (has_buf) return Buffer_from(s, \"binary\");\n return s.split(\"\").map(function (x\n /*:string*/\n )\n /*:number*/\n {\n return x.charCodeAt(0) & 0xff;\n });\n};\n\nfunction s2ab(s\n/*:string*/\n)\n/*:any*/\n{\n if (typeof ArrayBuffer === 'undefined') return s2a(s);\n var buf = new ArrayBuffer(s.length),\n view = new Uint8Array(buf);\n\n for (var i = 0; i != s.length; ++i) {\n view[i] = s.charCodeAt(i) & 0xFF;\n }\n\n return buf;\n}\n\nfunction a2s(data\n/*:any*/\n)\n/*:string*/\n{\n if (Array.isArray(data)) return data.map(function (c) {\n return String.fromCharCode(c);\n }).join(\"\");\n var o\n /*:Array*/\n = [];\n\n for (var i = 0; i < data.length; ++i) {\n o[i] = String.fromCharCode(data[i]);\n }\n\n return o.join(\"\");\n}\n\nfunction a2u(data\n/*:Array*/\n)\n/*:Uint8Array*/\n{\n if (typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n return new Uint8Array(data);\n}\n\nfunction ab2a(data\n/*:ArrayBuffer|Uint8Array*/\n)\n/*:Array*/\n{\n if (typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n if (data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n /*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\n var o = new Array(data.length);\n\n for (var i = 0; i < data.length; ++i) {\n o[i] = data[i];\n }\n\n return o;\n}\n\nvar bconcat = has_buf ? function (bufs) {\n return Buffer.concat(bufs.map(function (buf) {\n return Buffer.isBuffer(buf) ? buf : Buffer_from(buf);\n }));\n} : function (bufs) {\n if (typeof Uint8Array !== \"undefined\") {\n var i = 0,\n maxlen = 0;\n\n for (i = 0; i < bufs.length; ++i) {\n maxlen += bufs[i].length;\n }\n\n var o = new Uint8Array(maxlen);\n var len = 0;\n\n for (i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n len = bufs[i].length;\n if (bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);else if (typeof bufs[i] == \"string\") {\n throw \"wtf\";\n } else o.set(new Uint8Array(bufs[i]), maxlen);\n }\n\n return o;\n }\n\n return [].concat.apply([], bufs.map(function (buf) {\n return Array.isArray(buf) ? buf : [].slice.call(buf);\n }));\n};\n\nfunction utf8decode(content\n/*:string*/\n) {\n var out = [],\n widx = 0,\n L = content.length + 250;\n var o = new_raw_buf(content.length + 255);\n\n for (var ridx = 0; ridx < content.length; ++ridx) {\n var c = content.charCodeAt(ridx);\n if (c < 0x80) o[widx++] = c;else if (c < 0x800) {\n o[widx++] = 192 | c >> 6 & 31;\n o[widx++] = 128 | c & 63;\n } else if (c >= 0xD800 && c < 0xE000) {\n c = (c & 1023) + 64;\n var d = content.charCodeAt(++ridx) & 1023;\n o[widx++] = 240 | c >> 8 & 7;\n o[widx++] = 128 | c >> 2 & 63;\n o[widx++] = 128 | d >> 6 & 15 | (c & 3) << 4;\n o[widx++] = 128 | d & 63;\n } else {\n o[widx++] = 224 | c >> 12 & 15;\n o[widx++] = 128 | c >> 6 & 63;\n o[widx++] = 128 | c & 63;\n }\n\n if (widx > L) {\n out.push(o.slice(0, widx));\n widx = 0;\n o = new_raw_buf(65535);\n L = 65530;\n }\n }\n\n out.push(o.slice(0, widx));\n return bconcat(out);\n}\n\nvar chr0 = /\\u0000/g,\n chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array};\n\ntype StringConv = {(string):string};\n\n*/\n\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/*jshint -W041 */\n\nfunction _strrev(x\n/*:string*/\n)\n/*:string*/\n{\n var o = \"\",\n i = x.length - 1;\n\n while (i >= 0) {\n o += x.charAt(i--);\n }\n\n return o;\n}\n\nfunction pad0(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n var t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nfunction pad_(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n var t = \"\" + v;\n return t.length >= d ? t : fill(' ', d - t.length) + t;\n}\n\nfunction rpad_(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n var t = \"\" + v;\n return t.length >= d ? t : t + fill(' ', d - t.length);\n}\n\nfunction pad0r1(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n var t = \"\" + Math.round(v);\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nfunction pad0r2(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n var t = \"\" + v;\n return t.length >= d ? t : fill('0', d - t.length) + t;\n}\n\nvar p2_32 = /*#__PURE__*/Math.pow(2, 32);\n\nfunction pad0r(v\n/*:any*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n if (v > p2_32 || v < -p2_32) return pad0r1(v, d);\n var i = Math.round(v);\n return pad0r2(i, d);\n}\n/* yes, in 2022 this is still faster than string compare */\n\n\nfunction SSF_isgeneral(s\n/*:string*/\n, i\n/*:?number*/\n)\n/*:boolean*/\n{\n i = i || 0;\n return s.length >= 7 + i && (s.charCodeAt(i) | 32) === 103 && (s.charCodeAt(i + 1) | 32) === 101 && (s.charCodeAt(i + 2) | 32) === 110 && (s.charCodeAt(i + 3) | 32) === 101 && (s.charCodeAt(i + 4) | 32) === 114 && (s.charCodeAt(i + 5) | 32) === 97 && (s.charCodeAt(i + 6) | 32) === 108;\n}\n\nvar days\n/*:Array >*/\n= [['Sun', 'Sunday'], ['Mon', 'Monday'], ['Tue', 'Tuesday'], ['Wed', 'Wednesday'], ['Thu', 'Thursday'], ['Fri', 'Friday'], ['Sat', 'Saturday']];\nvar months\n/*:Array >*/\n= [['J', 'Jan', 'January'], ['F', 'Feb', 'February'], ['M', 'Mar', 'March'], ['A', 'Apr', 'April'], ['M', 'May', 'May'], ['J', 'Jun', 'June'], ['J', 'Jul', 'July'], ['A', 'Aug', 'August'], ['S', 'Sep', 'September'], ['O', 'Oct', 'October'], ['N', 'Nov', 'November'], ['D', 'Dec', 'December']];\n\nfunction SSF_init_table(t\n/*:any*/\n) {\n if (!t) t = {};\n t[0] = 'General';\n t[1] = '0';\n t[2] = '0.00';\n t[3] = '#,##0';\n t[4] = '#,##0.00';\n t[9] = '0%';\n t[10] = '0.00%';\n t[11] = '0.00E+00';\n t[12] = '# ?/?';\n t[13] = '# ??/??';\n t[14] = 'm/d/yy';\n t[15] = 'd-mmm-yy';\n t[16] = 'd-mmm';\n t[17] = 'mmm-yy';\n t[18] = 'h:mm AM/PM';\n t[19] = 'h:mm:ss AM/PM';\n t[20] = 'h:mm';\n t[21] = 'h:mm:ss';\n t[22] = 'm/d/yy h:mm';\n t[37] = '#,##0 ;(#,##0)';\n t[38] = '#,##0 ;[Red](#,##0)';\n t[39] = '#,##0.00;(#,##0.00)';\n t[40] = '#,##0.00;[Red](#,##0.00)';\n t[45] = 'mm:ss';\n t[46] = '[h]:mm:ss';\n t[47] = 'mmss.0';\n t[48] = '##0.0E+0';\n t[49] = '@';\n t[56] = '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n return t;\n}\n/* repeated to satiate webpack */\n\n\nvar table_fmt = {\n 0: 'General',\n 1: '0',\n 2: '0.00',\n 3: '#,##0',\n 4: '#,##0.00',\n 9: '0%',\n 10: '0.00%',\n 11: '0.00E+00',\n 12: '# ?/?',\n 13: '# ??/??',\n 14: 'm/d/yy',\n 15: 'd-mmm-yy',\n 16: 'd-mmm',\n 17: 'mmm-yy',\n 18: 'h:mm AM/PM',\n 19: 'h:mm:ss AM/PM',\n 20: 'h:mm',\n 21: 'h:mm:ss',\n 22: 'm/d/yy h:mm',\n 37: '#,##0 ;(#,##0)',\n 38: '#,##0 ;[Red](#,##0)',\n 39: '#,##0.00;(#,##0.00)',\n 40: '#,##0.00;[Red](#,##0.00)',\n 45: 'mm:ss',\n 46: '[h]:mm:ss',\n 47: 'mmss.0',\n 48: '##0.0E+0',\n 49: '@',\n 56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\n\nvar SSF_default_map = {\n 5: 37,\n 6: 38,\n 7: 39,\n 8: 40,\n // 5 -> 37 ... 8 -> 40\n 23: 0,\n 24: 0,\n 25: 0,\n 26: 0,\n // 23 -> 0 ... 26 -> 0\n 27: 14,\n 28: 14,\n 29: 14,\n 30: 14,\n 31: 14,\n // 27 -> 14 ... 31 -> 14\n 50: 14,\n 51: 14,\n 52: 14,\n 53: 14,\n 54: 14,\n // 50 -> 14 ... 58 -> 14\n 55: 14,\n 56: 14,\n 57: 14,\n 58: 14,\n 59: 1,\n 60: 2,\n 61: 3,\n 62: 4,\n // 59 -> 1 ... 62 -> 4\n 67: 9,\n 68: 10,\n // 67 -> 9 ... 68 -> 10\n 69: 12,\n 70: 13,\n 71: 14,\n // 69 -> 12 ... 71 -> 14\n 72: 14,\n 73: 15,\n 74: 16,\n 75: 17,\n // 72 -> 14 ... 75 -> 17\n 76: 20,\n 77: 21,\n 78: 22,\n // 76 -> 20 ... 78 -> 22\n 79: 45,\n 80: 46,\n 81: 47,\n // 79 -> 45 ... 81 -> 47\n 82: 0 // 82 -> 0 ... 65536 -> 0 (omitted)\n\n};\n/* These formats technically refer to Accounting formats with no equivalent */\n\nvar SSF_default_str = {\n // 5 -- Currency, 0 decimal, black negative\n 5: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n 63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n // 6 -- Currency, 0 decimal, red negative\n 6: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n 64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n // 7 -- Currency, 2 decimal, black negative\n 7: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n 65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n // 8 -- Currency, 2 decimal, red negative\n 8: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n 66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n // 41 -- Accounting, 0 decimal, No Symbol\n 41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n // 42 -- Accounting, 0 decimal, $ Symbol\n 42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n // 43 -- Accounting, 2 decimal, No Symbol\n 43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n // 44 -- Accounting, 2 decimal, $ Symbol\n 44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x\n/*:number*/\n, D\n/*:number*/\n, mixed\n/*:?boolean*/\n)\n/*:Array*/\n{\n var sgn = x < 0 ? -1 : 1;\n var B = x * sgn;\n var P_2 = 0,\n P_1 = 1,\n P = 0;\n var Q_2 = 1,\n Q_1 = 0,\n Q = 0;\n var A = Math.floor(B);\n\n while (Q_1 < D) {\n A = Math.floor(B);\n P = A * P_1 + P_2;\n Q = A * Q_1 + Q_2;\n if (B - A < 0.00000005) break;\n B = 1 / (B - A);\n P_2 = P_1;\n P_1 = P;\n Q_2 = Q_1;\n Q_1 = Q;\n }\n\n if (Q > D) {\n if (Q_1 > D) {\n Q = Q_2;\n P = P_2;\n } else {\n Q = Q_1;\n P = P_1;\n }\n }\n\n if (!mixed) return [0, sgn * P, Q];\n var q = Math.floor(sgn * P / Q);\n return [q, sgn * P - q * Q, Q];\n}\n\nfunction SSF_parse_date_code(v\n/*:number*/\n, opts\n/*:?any*/\n, b2\n/*:?boolean*/\n) {\n if (v > 2958465 || v < 0) return null;\n var date = v | 0,\n time = Math.floor(86400 * (v - date)),\n dow = 0;\n var dout = [];\n var out = {\n D: date,\n T: time,\n u: 86400 * (v - date) - time,\n y: 0,\n m: 0,\n d: 0,\n H: 0,\n M: 0,\n S: 0,\n q: 0\n };\n if (Math.abs(out.u) < 1e-6) out.u = 0;\n if (opts && opts.date1904) date += 1462;\n\n if (out.u > 0.9999) {\n out.u = 0;\n\n if (++time == 86400) {\n out.T = time = 0;\n ++date;\n ++out.D;\n }\n }\n\n if (date === 60) {\n dout = b2 ? [1317, 10, 29] : [1900, 2, 29];\n dow = 3;\n } else if (date === 0) {\n dout = b2 ? [1317, 8, 29] : [1900, 1, 0];\n dow = 6;\n } else {\n if (date > 60) --date;\n /* 1 = Jan 1 1900 in Gregorian */\n\n var d = new Date(1900, 0, 1);\n d.setDate(d.getDate() + date - 1);\n dout = [d.getFullYear(), d.getMonth() + 1, d.getDate()];\n dow = d.getDay();\n if (date < 60) dow = (dow + 6) % 7;\n if (b2) dow = SSF_fix_hijri(d, dout);\n }\n\n out.y = dout[0];\n out.m = dout[1];\n out.d = dout[2];\n out.S = time % 60;\n time = Math.floor(time / 60);\n out.M = time % 60;\n time = Math.floor(time / 60);\n out.H = time;\n out.q = dow;\n return out;\n}\n\nvar SSFbasedate = /*#__PURE__*/new Date(1899, 11, 31, 0, 0, 0);\nvar SSFdnthresh = /*#__PURE__*/SSFbasedate.getTime();\nvar SSFbase1904 = /*#__PURE__*/new Date(1900, 2, 1, 0, 0, 0);\n\nfunction datenum_local(v\n/*:Date*/\n, date1904\n/*:?boolean*/\n)\n/*:number*/\n{\n var epoch = /*#__PURE__*/v.getTime();\n if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1000;else if (v >= SSFbase1904) epoch += 24 * 60 * 60 * 1000;\n return (epoch - (SSFdnthresh + ( /*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/SSFbasedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* ECMA-376 18.8.30 numFmt*/\n\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n\n/* exponent >= -9 and <= 9 */\n\n\nfunction SSF_strip_decimal(o\n/*:string*/\n)\n/*:string*/\n{\n return o.indexOf(\".\") == -1 ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n/* General Exponential always shows 2 digits exp and trims the mantissa */\n\n\nfunction SSF_normalize_exp(o\n/*:string*/\n)\n/*:string*/\n{\n if (o.indexOf(\"E\") == -1) return o;\n return o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/, \"$1E\").replace(/(E[+-])(\\d)$/, \"$10$2\");\n}\n/* exponent >= -9 and <= 9 */\n\n\nfunction SSF_small_exp(v\n/*:number*/\n)\n/*:string*/\n{\n var w = v < 0 ? 12 : 11;\n var o = SSF_strip_decimal(v.toFixed(12));\n if (o.length <= w) return o;\n o = v.toPrecision(10);\n if (o.length <= w) return o;\n return v.toExponential(5);\n}\n/* exponent >= 11 or <= -10 likely exponential */\n\n\nfunction SSF_large_exp(v\n/*:number*/\n)\n/*:string*/\n{\n var o = SSF_strip_decimal(v.toFixed(11));\n return o.length > (v < 0 ? 12 : 11) || o === \"0\" || o === \"-0\" ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v\n/*:number*/\n)\n/*:string*/\n{\n var V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E),\n o;\n if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);else if (Math.abs(V) <= 9) o = SSF_small_exp(v);else if (V === 10) o = v.toFixed(10).substr(0, 12);else o = SSF_large_exp(v);\n return SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\n}\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\n\n\nfunction SSF_general(v\n/*:any*/\n, opts\n/*:any*/\n) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? \"TRUE\" : \"FALSE\";\n\n case 'number':\n return (v | 0) === v ? v.toString(10) : SSF_general_num(v);\n\n case 'undefined':\n return \"\";\n\n case 'object':\n if (v == null) return \"\";\n if (v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);\n }\n\n throw new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date\n/*:Date*/\n, o\n/*:[number, number, number]*/\n) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if (date < 60) dow = (dow + 6) % 7;\n return dow;\n} //var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\n\n\nfunction SSF_write_date(type\n/*:number*/\n, fmt\n/*:string*/\n, val, ss0\n/*:?number*/\n)\n/*:string*/\n{\n var o = \"\",\n ss = 0,\n tt = 0,\n y = val.y,\n out,\n outl = 0;\n\n switch (type) {\n case 98:\n /* 'b' buddhist year */\n y = val.y + 543;\n\n /* falls through */\n\n case 121:\n /* 'y' year */\n switch (fmt.length) {\n case 1:\n case 2:\n out = y % 100;\n outl = 2;\n break;\n\n default:\n out = y % 10000;\n outl = 4;\n break;\n }\n\n break;\n\n case 109:\n /* 'm' month */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.m;\n outl = fmt.length;\n break;\n\n case 3:\n return months[val.m - 1][1];\n\n case 5:\n return months[val.m - 1][0];\n\n default:\n return months[val.m - 1][2];\n }\n\n break;\n\n case 100:\n /* 'd' day */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.d;\n outl = fmt.length;\n break;\n\n case 3:\n return days[val.q][0];\n\n default:\n return days[val.q][1];\n }\n\n break;\n\n case 104:\n /* 'h' 12-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = 1 + (val.H + 11) % 12;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad hour format: ' + fmt;\n }\n\n break;\n\n case 72:\n /* 'H' 24-hour */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.H;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad hour format: ' + fmt;\n }\n\n break;\n\n case 77:\n /* 'M' minutes */\n switch (fmt.length) {\n case 1:\n case 2:\n out = val.M;\n outl = fmt.length;\n break;\n\n default:\n throw 'bad minute format: ' + fmt;\n }\n\n break;\n\n case 115:\n /* 's' seconds */\n if (fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n if (val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n /*::if(!ss0) ss0 = 0; */\n\n if (ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;else tt = ss0 === 1 ? 10 : 1;\n ss = Math.round(tt * (val.S + val.u));\n if (ss >= 60 * tt) ss = 0;\n if (fmt === 's') return ss === 0 ? \"0\" : \"\" + ss / tt;\n o = pad0(ss, 2 + ss0);\n if (fmt === 'ss') return o.substr(0, 2);\n return \".\" + o.substr(2, fmt.length - 1);\n\n case 90:\n /* 'Z' absolute time */\n switch (fmt) {\n case '[h]':\n case '[hh]':\n out = val.D * 24 + val.H;\n break;\n\n case '[m]':\n case '[mm]':\n out = (val.D * 24 + val.H) * 60 + val.M;\n break;\n\n case '[s]':\n case '[ss]':\n out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);\n break;\n\n default:\n throw 'bad abstime format: ' + fmt;\n }\n\n outl = fmt.length === 3 ? 1 : 2;\n break;\n\n case 101:\n /* 'e' era */\n out = y;\n outl = 1;\n break;\n }\n\n var outstr = outl > 0 ? pad0(out, outl) : \"\";\n return outstr;\n}\n/*jshint -W086 */\n\n/*jshint +W086 */\n\n\nfunction commaify(s\n/*:string*/\n)\n/*:string*/\n{\n var w = 3;\n if (s.length <= w) return s;\n var j = s.length % w,\n o = s.substr(0, j);\n\n for (; j != s.length; j += w) {\n o += (o.length > 0 ? \",\" : \"\") + s.substr(j, w);\n }\n\n return o;\n}\n\nvar pct1 = /%/g;\n\nfunction write_num_pct(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n var sfmt = fmt.replace(pct1, \"\"),\n mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n}\n\nfunction write_num_cm(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n var idx = fmt.length - 1;\n\n while (fmt.charCodeAt(idx - 1) === 44) {\n --idx;\n }\n\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n}\n\nfunction write_num_exp(fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n var o\n /*:string*/\n ;\n var idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val == 0) return \"0.0E+0\";else if (val < 0) return \"-\" + write_num_exp(fmt, -val);\n var period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n\n if (o.indexOf(\"e\") === -1) {\n var fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);else o += \"E+\" + (fakee - ee);\n\n while (o.substr(0, 2) === \"0.\") {\n o = o.charAt(0) + o.substr(2, period) + \".\" + o.substr(2 + period);\n o = o.replace(/^0+([1-9])/, \"$1\").replace(/^0+\\./, \"0.\");\n }\n\n o = o.replace(/\\+-/, \"-\");\n }\n\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n}\n\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\n\nfunction write_num_f1(r\n/*:Array*/\n, aval\n/*:number*/\n, sign\n/*:string*/\n)\n/*:string*/\n{\n var den = parseInt(r[4], 10),\n rr = Math.round(aval * den),\n base = Math.floor(rr / den);\n var myn = rr - base * den,\n myd = den;\n return sign + (base === 0 ? \"\" : \"\" + base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn, r[1].length) + r[2] + \"/\" + r[3] + pad0(myd, r[4].length));\n}\n\nfunction write_num_f2(r\n/*:Array*/\n, aval\n/*:number*/\n, sign\n/*:string*/\n)\n/*:string*/\n{\n return sign + (aval === 0 ? \"\" : \"\" + aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\n\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\n\nfunction hashq(str\n/*:string*/\n)\n/*:string*/\n{\n var o = \"\",\n cc;\n\n for (var i = 0; i != str.length; ++i) {\n switch (cc = str.charCodeAt(i)) {\n case 35:\n break;\n\n case 63:\n o += \" \";\n break;\n\n case 48:\n o += \"0\";\n break;\n\n default:\n o += String.fromCharCode(cc);\n }\n }\n\n return o;\n}\n\nfunction rnd(val\n/*:number*/\n, d\n/*:number*/\n)\n/*:string*/\n{\n var dd = Math.pow(10, d);\n return \"\" + Math.round(val * dd) / dd;\n}\n\nfunction dec(val\n/*:number*/\n, d\n/*:number*/\n)\n/*:number*/\n{\n var _frac = val - Math.floor(val),\n dd = Math.pow(10, d);\n\n if (d < ('' + Math.round(_frac * dd)).length) return 0;\n return Math.round(_frac * dd);\n}\n\nfunction carry(val\n/*:number*/\n, d\n/*:number*/\n)\n/*:number*/\n{\n if (d < ('' + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {\n return 1;\n }\n\n return 0;\n}\n\nfunction flr(val\n/*:number*/\n)\n/*:string*/\n{\n if (val < 2147483647 && val > -2147483648) return \"\" + (val >= 0 ? val | 0 : val - 1 | 0);\n return \"\" + Math.floor(val);\n}\n\nfunction write_num_flt(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n var ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_flt('n', ffmt, val);\n return '(' + write_num_flt('n', ffmt, -val) + ')';\n }\n\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_flt(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n var o;\n var r\n /*:?Array*/\n ,\n ri,\n ff,\n aval = Math.abs(val),\n sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0r(aval, fmt.length);\n\n if (fmt.match(/^[#?]+$/)) {\n o = pad0r(val, 0);\n if (o === \"0\") o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(frac1)) return write_num_f1(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0r(aval, fmt.length - fmt.indexOf(\"0\"));\n\n if (r = fmt.match(dec1)) {\n o = rnd(val, r[1].length).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1])).replace(/\\.(\\d*)$/, function ($$, $1) {\n return \".\" + $1 + fill(\"0\", hashq(\n /*::(*/\n r\n /*::||[\"\"])*/\n [1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n\n if (r = fmt.match(/^(0*)\\.(#*)$/)) {\n return sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n\n if (r = fmt.match(/^#{1,3},##0(\\.?)$/)) return sign + commaify(pad0r(aval, 0));\n\n if (r = fmt.match(/^#,##0\\.([#0]*0)$/)) {\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\" + (Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length), r[1].length);\n }\n\n if (r = fmt.match(/^#,#*,#0/)) return write_num_flt(type, fmt.replace(/^#,#*,/, \"\"), val);\n\n if (r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) {\n o = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n\n if (fmt.match(phone)) {\n o = write_num_flt(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n\n var oa = \"\";\n\n if (r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(\n /*::String(*/\n r[4]\n /*::)*/\n .length, 7);\n ff = SSF_frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\",\n /*::String(*/\n r[1]\n /*::)*/\n , ff[1]);\n if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa +\n /*::String(*/\n r[2]\n /*::)*/\n + \"/\" +\n /*::String(*/\n r[3]\n /*::)*/\n ;\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n\n if (r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = SSF_frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n\n if (r = fmt.match(/^[#0?]+$/)) {\n o = pad0r(val, 0);\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(/^([#0?]+)\\.([#0]+)$/)) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n var lres = fmt.indexOf(\".\") - ri,\n rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n\n if (r = fmt.match(/^00,000\\.([#0]*0)$/)) {\n ri = dec(val, r[1].length);\n return val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(ri, r[1].length);\n }\n\n switch (fmt) {\n case \"###,##0.00\":\n return write_num_flt(type, \"#,##0.00\", val);\n\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n var x = commaify(pad0r(aval, 0));\n return x !== \"0\" ? sign + x : \"\";\n\n case \"###,###.00\":\n return write_num_flt(type, \"###,##0.00\", val).replace(/^0\\./, \".\");\n\n case \"#,###.00\":\n return write_num_flt(type, \"#,##0.00\", val).replace(/^0\\./, \".\");\n\n default:\n }\n\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n}\n\nfunction write_num_cm2(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n var idx = fmt.length - 1;\n\n while (fmt.charCodeAt(idx - 1) === 44) {\n --idx;\n }\n\n return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));\n}\n\nfunction write_num_pct2(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n var sfmt = fmt.replace(pct1, \"\"),\n mul = fmt.length - sfmt.length;\n return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill(\"%\", mul);\n}\n\nfunction write_num_exp2(fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n var o\n /*:string*/\n ;\n var idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\n if (fmt.match(/^#+0.0E\\+0$/)) {\n if (val == 0) return \"0.0E+0\";else if (val < 0) return \"-\" + write_num_exp2(fmt, -val);\n var period = fmt.indexOf(\".\");\n if (period === -1) period = fmt.indexOf('E');\n var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;\n if (ee < 0) ee += period;\n o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);\n\n if (!o.match(/[Ee]/)) {\n var fakee = Math.floor(Math.log(val) * Math.LOG10E);\n if (o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length + ee);else o += \"E+\" + (fakee - ee);\n o = o.replace(/\\+-/, \"-\");\n }\n\n o = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/, function ($$, $1, $2, $3) {\n return $1 + $2 + $3.substr(0, (period + ee) % period) + \".\" + $3.substr(ee) + \"E\";\n });\n } else o = val.toExponential(idx);\n\n if (fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0, o.length - 1) + \"0\" + o.charAt(o.length - 1);\n if (fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/, \"e\");\n return o.replace(\"e\", \"E\");\n}\n\nfunction write_num_int(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n var ffmt = fmt.replace(/\\( */, \"\").replace(/ \\)/, \"\").replace(/\\)/, \"\");\n if (val >= 0) return write_num_int('n', ffmt, val);\n return '(' + write_num_int('n', ffmt, -val) + ')';\n }\n\n if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n if (fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n if (fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n if (fmt.charCodeAt(0) === 36) return \"$\" + write_num_int(type, fmt.substr(fmt.charAt(1) == ' ' ? 2 : 1), val);\n var o;\n var r\n /*:?Array*/\n ,\n ri,\n ff,\n aval = Math.abs(val),\n sign = val < 0 ? \"-\" : \"\";\n if (fmt.match(/^00+$/)) return sign + pad0(aval, fmt.length);\n\n if (fmt.match(/^[#?]+$/)) {\n o = \"\" + val;\n if (val === 0) o = \"\";\n return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(frac1)) return write_num_f2(r, aval, sign);\n if (fmt.match(/^#+0+$/)) return sign + pad0(aval, fmt.length - fmt.indexOf(\"0\"));\n\n if (r = fmt.match(dec1)) {\n /*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n o = (\"\" + val).replace(/^([^\\.]+)$/, \"$1.\" + hashq(r[1])).replace(/\\.$/, \".\" + hashq(r[1]));\n o = o.replace(/\\.(\\d*)$/, function ($$, $1) {\n /*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n return \".\" + $1 + fill(\"0\", hashq(r[1]).length - $1.length);\n });\n return fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./, \".\");\n }\n\n fmt = fmt.replace(/^#+([0.])/, \"$1\");\n\n if (r = fmt.match(/^(0*)\\.(#*)$/)) {\n return sign + (\"\" + aval).replace(/\\.(\\d*[1-9])0*$/, \".$1\").replace(/^(-?\\d*)$/, \"$1.\").replace(/^0\\./, r[1].length ? \"0.\" : \".\");\n }\n\n if (r = fmt.match(/^#{1,3},##0(\\.?)$/)) return sign + commaify(\"\" + aval);\n\n if (r = fmt.match(/^#,##0\\.([#0]*0)$/)) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val) + \".\" + fill('0', r[1].length);\n }\n\n if (r = fmt.match(/^#,#*,#0/)) return write_num_int(type, fmt.replace(/^#,#*,/, \"\"), val);\n\n if (r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/)) {\n o = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g, \"\"), val));\n ri = 0;\n return _strrev(_strrev(fmt.replace(/\\\\/g, \"\")).replace(/[0#]/g, function (x) {\n return ri < o.length ? o.charAt(ri++) : x === '0' ? '0' : \"\";\n }));\n }\n\n if (fmt.match(phone)) {\n o = write_num_int(type, \"##########\", val);\n return \"(\" + o.substr(0, 3) + \") \" + o.substr(3, 3) + \"-\" + o.substr(6);\n }\n\n var oa = \"\";\n\n if (r = fmt.match(/^([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(\n /*::String(*/\n r[4]\n /*::)*/\n .length, 7);\n ff = SSF_frac(aval, Math.pow(10, ri) - 1, false);\n o = \"\" + sign;\n oa = write_num(\"n\",\n /*::String(*/\n r[1]\n /*::)*/\n , ff[1]);\n if (oa.charAt(oa.length - 1) == \" \") oa = oa.substr(0, oa.length - 1) + \"0\";\n o += oa +\n /*::String(*/\n r[2]\n /*::)*/\n + \"/\" +\n /*::String(*/\n r[3]\n /*::)*/\n ;\n oa = rpad_(ff[2], ri);\n if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;\n o += oa;\n return o;\n }\n\n if (r = fmt.match(/^# ([#0?]+)( ?)\\/( ?)([#0?]+)/)) {\n ri = Math.min(Math.max(r[1].length, r[4].length), 7);\n ff = SSF_frac(aval, Math.pow(10, ri) - 1, true);\n return sign + (ff[0] || (ff[1] ? \"\" : \"0\")) + \" \" + (ff[1] ? pad_(ff[1], ri) + r[2] + \"/\" + r[3] + rpad_(ff[2], ri) : fill(\" \", 2 * ri + 1 + r[2].length + r[3].length));\n }\n\n if (r = fmt.match(/^[#0?]+$/)) {\n o = \"\" + val;\n if (fmt.length <= o.length) return o;\n return hashq(fmt.substr(0, fmt.length - o.length)) + o;\n }\n\n if (r = fmt.match(/^([#0]+)\\.([#0]+)$/)) {\n o = \"\" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, \"$1\");\n ri = o.indexOf(\".\");\n var lres = fmt.indexOf(\".\") - ri,\n rres = fmt.length - o.length - lres;\n return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));\n }\n\n if (r = fmt.match(/^00,000\\.([#0]*0)$/)) {\n return val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify(\"\" + val).replace(/^\\d,\\d{3}$/, \"0$&\").replace(/^\\d*$/, function ($$) {\n return \"00,\" + ($$.length < 3 ? pad0(0, 3 - $$.length) : \"\") + $$;\n }) + \".\" + pad0(0, r[1].length);\n }\n\n switch (fmt) {\n case \"###,###\":\n case \"##,###\":\n case \"#,###\":\n var x = commaify(\"\" + aval);\n return x !== \"0\" ? sign + x : \"\";\n\n default:\n if (fmt.match(/\\.[0#?]*$/)) return write_num_int(type, fmt.slice(0, fmt.lastIndexOf(\".\")), val) + hashq(fmt.slice(fmt.lastIndexOf(\".\")));\n }\n\n throw new Error(\"unsupported format |\" + fmt + \"|\");\n}\n\nfunction write_num(type\n/*:string*/\n, fmt\n/*:string*/\n, val\n/*:number*/\n)\n/*:string*/\n{\n return (val | 0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);\n}\n\nfunction SSF_split_fmt(fmt\n/*:string*/\n)\n/*:Array*/\n{\n var out\n /*:Array*/\n = [];\n var in_str = false\n /*, cc*/\n ;\n\n for (var i = 0, j = 0; i < fmt.length; ++i) {\n switch (\n /*cc=*/\n fmt.charCodeAt(i)) {\n case 34:\n /* '\"' */\n in_str = !in_str;\n break;\n\n case 95:\n case 42:\n case 92:\n /* '_' '*' '\\\\' */\n ++i;\n break;\n\n case 59:\n /* ';' */\n out[out.length] = fmt.substr(j, i - j);\n j = i + 1;\n }\n }\n\n out[out.length] = fmt.substr(j);\n if (in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n return out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\n\nfunction fmt_is_date(fmt\n/*:string*/\n)\n/*:boolean*/\n{\n var i = 0,\n\n /*cc = 0,*/\n c = \"\",\n o = \"\";\n\n while (i < fmt.length) {\n switch (c = fmt.charAt(i)) {\n case 'G':\n if (SSF_isgeneral(fmt, i)) i += 6;\n i++;\n break;\n\n case '\"':\n for (;\n /*cc=*/\n fmt.charCodeAt(++i) !== 34 && i < fmt.length;) {\n /*empty*/\n }\n\n ++i;\n break;\n\n case '\\\\':\n i += 2;\n break;\n\n case '_':\n i += 2;\n break;\n\n case '@':\n ++i;\n break;\n\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") return true;\n\n /* falls through */\n\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n /* falls through */\n\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n return true;\n\n case 'A':\n case 'a':\n case '上':\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n if (fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n ++i;\n break;\n\n case '[':\n o = c;\n\n while (fmt.charAt(i++) !== ']' && i < fmt.length) {\n o += fmt.charAt(i);\n }\n\n if (o.match(SSF_abstime)) return true;\n break;\n\n case '.':\n /* falls through */\n\n case '0':\n case '#':\n while (i < fmt.length && (\"0#?.,E+-%\".indexOf(c = fmt.charAt(++i)) > -1 || c == '\\\\' && fmt.charAt(i + 1) == \"-\" && \"0#\".indexOf(fmt.charAt(i + 2)) > -1)) {\n /* empty */\n }\n\n break;\n\n case '?':\n while (fmt.charAt(++i) === c) {\n /* empty */\n }\n\n break;\n\n case '*':\n ++i;\n if (fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i;\n break;\n\n case '(':\n case ')':\n ++i;\n break;\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {\n /* empty */\n }\n\n break;\n\n case ' ':\n ++i;\n break;\n\n default:\n ++i;\n break;\n }\n }\n\n return false;\n}\n\nfunction eval_fmt(fmt\n/*:string*/\n, v\n/*:any*/\n, opts\n/*:any*/\n, flen\n/*:number*/\n) {\n var out = [],\n o = \"\",\n i = 0,\n c = \"\",\n lst = 't',\n dt,\n j,\n cc;\n var hr = 'H';\n /* Tokenize */\n\n while (i < fmt.length) {\n switch (c = fmt.charAt(i)) {\n case 'G':\n /* General */\n if (!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {\n t: 'G',\n v: 'General'\n };\n i += 7;\n break;\n\n case '\"':\n /* Literal text */\n for (o = \"\"; (cc = fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) {\n o += String.fromCharCode(cc);\n }\n\n out[out.length] = {\n t: 't',\n v: o\n };\n ++i;\n break;\n\n case '\\\\':\n var w = fmt.charAt(++i),\n t = w === \"(\" || w === \")\" ? w : 't';\n out[out.length] = {\n t: t,\n v: w\n };\n ++i;\n break;\n\n case '_':\n out[out.length] = {\n t: 't',\n v: \" \"\n };\n i += 2;\n break;\n\n case '@':\n /* Text Placeholder */\n out[out.length] = {\n t: 'T',\n v: v\n };\n ++i;\n break;\n\n case 'B':\n case 'b':\n if (fmt.charAt(i + 1) === \"1\" || fmt.charAt(i + 1) === \"2\") {\n if (dt == null) {\n dt = SSF_parse_date_code(v, opts, fmt.charAt(i + 1) === \"2\");\n if (dt == null) return \"\";\n }\n\n out[out.length] = {\n t: 'X',\n v: fmt.substr(i, 2)\n };\n lst = c;\n i += 2;\n break;\n }\n\n /* falls through */\n\n case 'M':\n case 'D':\n case 'Y':\n case 'H':\n case 'S':\n case 'E':\n c = c.toLowerCase();\n\n /* falls through */\n\n case 'm':\n case 'd':\n case 'y':\n case 'h':\n case 's':\n case 'e':\n case 'g':\n if (v < 0) return \"\";\n\n if (dt == null) {\n dt = SSF_parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n\n o = c;\n\n while (++i < fmt.length && fmt.charAt(i).toLowerCase() === c) {\n o += c;\n }\n\n if (c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n if (c === 'h') c = hr;\n out[out.length] = {\n t: c,\n v: o\n };\n lst = c;\n break;\n\n case 'A':\n case 'a':\n case '上':\n var q = {\n t: c,\n v: c\n };\n if (dt == null) dt = SSF_parse_date_code(v, opts);\n\n if (fmt.substr(i, 3).toUpperCase() === \"A/P\") {\n if (dt != null) q.v = dt.H >= 12 ? \"P\" : \"A\";\n q.t = 'T';\n hr = 'h';\n i += 3;\n } else if (fmt.substr(i, 5).toUpperCase() === \"AM/PM\") {\n if (dt != null) q.v = dt.H >= 12 ? \"PM\" : \"AM\";\n q.t = 'T';\n i += 5;\n hr = 'h';\n } else if (fmt.substr(i, 5).toUpperCase() === \"上午/下午\") {\n if (dt != null) q.v = dt.H >= 12 ? \"下午\" : \"上午\";\n q.t = 'T';\n i += 5;\n hr = 'h';\n } else {\n q.t = \"t\";\n ++i;\n }\n\n if (dt == null && q.t === 'T') return \"\";\n out[out.length] = q;\n lst = c;\n break;\n\n case '[':\n o = c;\n\n while (fmt.charAt(i++) !== ']' && i < fmt.length) {\n o += fmt.charAt(i);\n }\n\n if (o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\n if (o.match(SSF_abstime)) {\n if (dt == null) {\n dt = SSF_parse_date_code(v, opts);\n if (dt == null) return \"\";\n }\n\n out[out.length] = {\n t: 'Z',\n v: o.toLowerCase()\n };\n lst = o.charAt(1);\n } else if (o.indexOf(\"$\") > -1) {\n o = (o.match(/\\$([^-\\[\\]]*)/) || [])[1] || \"$\";\n if (!fmt_is_date(fmt)) out[out.length] = {\n t: 't',\n v: o\n };\n }\n\n break;\n\n /* Numbers */\n\n case '.':\n if (dt != null) {\n o = c;\n\n while (++i < fmt.length && (c = fmt.charAt(i)) === \"0\") {\n o += c;\n }\n\n out[out.length] = {\n t: 's',\n v: o\n };\n break;\n }\n\n /* falls through */\n\n case '0':\n case '#':\n o = c;\n\n while (++i < fmt.length && \"0#?.,E+-%\".indexOf(c = fmt.charAt(i)) > -1) {\n o += c;\n }\n\n out[out.length] = {\n t: 'n',\n v: o\n };\n break;\n\n case '?':\n o = c;\n\n while (fmt.charAt(++i) === c) {\n o += c;\n }\n\n out[out.length] = {\n t: c,\n v: o\n };\n lst = c;\n break;\n\n case '*':\n ++i;\n if (fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i;\n break;\n // **\n\n case '(':\n case ')':\n out[out.length] = {\n t: flen === 1 ? 't' : c,\n v: c\n };\n ++i;\n break;\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n o = c;\n\n while (i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) {\n o += fmt.charAt(i);\n }\n\n out[out.length] = {\n t: 'D',\n v: o\n };\n break;\n\n case ' ':\n out[out.length] = {\n t: c,\n v: c\n };\n ++i;\n break;\n\n case '$':\n out[out.length] = {\n t: 't',\n v: '$'\n };\n ++i;\n break;\n\n default:\n if (\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n out[out.length] = {\n t: 't',\n v: c\n };\n ++i;\n break;\n }\n }\n /* Scan for date/time parts */\n\n\n var bt = 0,\n ss0 = 0,\n ssm;\n\n for (i = out.length - 1, lst = 't'; i >= 0; --i) {\n switch (out[i].t) {\n case 'h':\n case 'H':\n out[i].t = hr;\n lst = 'h';\n if (bt < 1) bt = 1;\n break;\n\n case 's':\n if (ssm = out[i].v.match(/\\.0+$/)) ss0 = Math.max(ss0, ssm[0].length - 1);\n if (bt < 3) bt = 3;\n\n /* falls through */\n\n case 'd':\n case 'y':\n case 'M':\n case 'e':\n lst = out[i].t;\n break;\n\n case 'm':\n if (lst === 's') {\n out[i].t = 'M';\n if (bt < 2) bt = 2;\n }\n\n break;\n\n case 'X':\n /*if(out[i].v === \"B2\");*/\n break;\n\n case 'Z':\n if (bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n if (bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n }\n }\n /* time rounding depends on presence of minute / second / usec fields */\n\n\n switch (bt) {\n case 0:\n break;\n\n case 1:\n /*::if(!dt) break;*/\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n\n if (dt.M >= 60) {\n dt.M = 0;\n ++dt.H;\n }\n\n break;\n\n case 2:\n /*::if(!dt) break;*/\n if (dt.u >= 0.5) {\n dt.u = 0;\n ++dt.S;\n }\n\n if (dt.S >= 60) {\n dt.S = 0;\n ++dt.M;\n }\n\n break;\n }\n /* replace fields */\n\n\n var nstr = \"\",\n jj;\n\n for (i = 0; i < out.length; ++i) {\n switch (out[i].t) {\n case 't':\n case 'T':\n case ' ':\n case 'D':\n break;\n\n case 'X':\n out[i].v = \"\";\n out[i].t = \";\";\n break;\n\n case 'd':\n case 'm':\n case 'y':\n case 'h':\n case 'H':\n case 'M':\n case 's':\n case 'e':\n case 'b':\n case 'Z':\n /*::if(!dt) throw \"unreachable\"; */\n out[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n out[i].t = 't';\n break;\n\n case 'n':\n case '?':\n jj = i + 1;\n\n while (out[jj] != null && ((c = out[jj].t) === \"?\" || c === \"D\" || (c === \" \" || c === \"t\") && out[jj + 1] != null && (out[jj + 1].t === '?' || out[jj + 1].t === \"t\" && out[jj + 1].v === '/') || out[i].t === '(' && (c === ' ' || c === 'n' || c === ')') || c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj + 1] != null && out[jj + 1].t == '?'))) {\n out[i].v += out[jj].v;\n out[jj] = {\n v: \"\",\n t: \";\"\n };\n ++jj;\n }\n\n nstr += out[i].v;\n i = jj - 1;\n break;\n\n case 'G':\n out[i].t = 't';\n out[i].v = SSF_general(v, opts);\n break;\n }\n }\n\n var vv = \"\",\n myv,\n ostr;\n\n if (nstr.length > 0) {\n if (nstr.charCodeAt(0) == 40)\n /* '(' */\n {\n myv = v < 0 && nstr.charCodeAt(0) === 45 ? -v : v;\n ostr = write_num('n', nstr, myv);\n } else {\n myv = v < 0 && flen > 1 ? -v : v;\n ostr = write_num('n', nstr, myv);\n\n if (myv < 0 && out[0] && out[0].t == 't') {\n ostr = ostr.substr(1);\n out[0].v = \"-\" + out[0].v;\n }\n }\n\n jj = ostr.length - 1;\n var decpt = out.length;\n\n for (i = 0; i < out.length; ++i) {\n if (out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) {\n decpt = i;\n break;\n }\n }\n\n var lasti = out.length;\n\n if (decpt === out.length && ostr.indexOf(\"E\") === -1) {\n for (i = out.length - 1; i >= 0; --i) {\n if (out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\n if (jj >= out[i].v.length - 1) {\n jj -= out[i].v.length;\n out[i].v = ostr.substr(jj + 1, out[i].v.length);\n } else if (jj < 0) out[i].v = \"\";else {\n out[i].v = ostr.substr(0, jj + 1);\n jj = -1;\n }\n\n out[i].t = 't';\n lasti = i;\n }\n\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n } else if (decpt !== out.length && ostr.indexOf(\"E\") === -1) {\n jj = ostr.indexOf(\".\") - 1;\n\n for (i = decpt; i >= 0; --i) {\n if (out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") - 1 : out[i].v.length - 1;\n vv = out[i].v.substr(j + 1);\n\n for (; j >= 0; --j) {\n if (jj >= 0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n }\n\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n\n if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;\n jj = ostr.indexOf(\".\") + 1;\n\n for (i = decpt; i < out.length; ++i) {\n if (out[i] == null || 'n?('.indexOf(out[i].t) === -1 && i !== decpt) continue;\n j = out[i].v.indexOf(\".\") > -1 && i === decpt ? out[i].v.indexOf(\".\") + 1 : 0;\n vv = out[i].v.substr(0, j);\n\n for (; j < out[i].v.length; ++j) {\n if (jj < ostr.length) vv += ostr.charAt(jj++);\n }\n\n out[i].v = vv;\n out[i].t = 't';\n lasti = i;\n }\n }\n }\n\n for (i = 0; i < out.length; ++i) {\n if (out[i] != null && 'n?'.indexOf(out[i].t) > -1) {\n myv = flen > 1 && v < 0 && i > 0 && out[i - 1].v === \"-\" ? -v : v;\n out[i].v = write_num(out[i].t, out[i].v, myv);\n out[i].t = 't';\n }\n }\n\n var retval = \"\";\n\n for (i = 0; i !== out.length; ++i) {\n if (out[i] != null) retval += out[i].v;\n }\n\n return retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\n\nfunction chkcond(v, rr) {\n if (rr == null) return false;\n var thresh = parseFloat(rr[2]);\n\n switch (rr[1]) {\n case \"=\":\n if (v == thresh) return true;\n break;\n\n case \">\":\n if (v > thresh) return true;\n break;\n\n case \"<\":\n if (v < thresh) return true;\n break;\n\n case \"<>\":\n if (v != thresh) return true;\n break;\n\n case \">=\":\n if (v >= thresh) return true;\n break;\n\n case \"<=\":\n if (v <= thresh) return true;\n break;\n }\n\n return false;\n}\n\nfunction choose_fmt(f\n/*:string*/\n, v\n/*:any*/\n) {\n var fmt = SSF_split_fmt(f);\n var l = fmt.length,\n lat = fmt[l - 1].indexOf(\"@\");\n if (l < 4 && lat > -1) --l;\n if (fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n if (typeof v !== \"number\") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : \"@\"];\n\n switch (fmt.length) {\n case 1:\n fmt = lat > -1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"];\n break;\n\n case 2:\n fmt = lat > -1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"];\n break;\n\n case 3:\n fmt = lat > -1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"];\n break;\n\n case 4:\n break;\n }\n\n var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n if (fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\n if (fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n var m1 = fmt[0].match(cfregex2);\n var m2 = fmt[1].match(cfregex2);\n return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n }\n\n return [l, ff];\n}\n\nfunction SSF_format(fmt\n/*:string|number*/\n, v\n/*:any*/\n, o\n/*:?any*/\n) {\n if (o == null) o = {};\n var sfmt = \"\";\n\n switch (typeof fmt) {\n case \"string\":\n if (fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;else sfmt = fmt;\n break;\n\n case \"number\":\n if (fmt == 14 && o.dateNF) sfmt = o.dateNF;else sfmt = (o.table != null ? o.table\n /*:any*/\n : table_fmt)[fmt];\n if (sfmt == null) sfmt = o.table && o.table[SSF_default_map[fmt]] || table_fmt[SSF_default_map[fmt]];\n if (sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n break;\n }\n\n if (SSF_isgeneral(sfmt, 0)) return SSF_general(v, o);\n if (v instanceof Date) v = datenum_local(v, o.date1904);\n var f = choose_fmt(sfmt, v);\n if (SSF_isgeneral(f[1])) return SSF_general(v, o);\n if (v === true) v = \"TRUE\";else if (v === false) v = \"FALSE\";else if (v === \"\" || v == null) return \"\";\n return eval_fmt(f[1], v, o, f[0]);\n}\n\nfunction SSF_load(fmt\n/*:string*/\n, idx\n/*:?number*/\n)\n/*:number*/\n{\n if (typeof idx != 'number') {\n idx = +idx || -1;\n /*::if(typeof idx != 'number') return 0x188; */\n\n for (var i = 0; i < 0x0188; ++i) {\n /*::if(typeof idx != 'number') return 0x188; */\n if (table_fmt[i] == undefined) {\n if (idx < 0) idx = i;\n continue;\n }\n\n if (table_fmt[i] == fmt) {\n idx = i;\n break;\n }\n }\n /*::if(typeof idx != 'number') return 0x188; */\n\n\n if (idx < 0) idx = 0x187;\n }\n /*::if(typeof idx != 'number') return 0x188; */\n\n\n table_fmt[idx] = fmt;\n return idx;\n}\n\nfunction SSF_load_table(tbl\n/*:SSFTable*/\n)\n/*:void*/\n{\n for (var i = 0; i != 0x0188; ++i) {\n if (tbl[i] !== undefined) SSF_load(tbl[i], i);\n }\n}\n\nfunction make_ssf() {\n table_fmt = SSF_init_table();\n}\n\nvar SSF = {\n format: SSF_format,\n load: SSF_load,\n _table: table_fmt,\n load_table: SSF_load_table,\n parse_date_code: SSF_parse_date_code,\n is_date: fmt_is_date,\n get_table: function get_table() {\n return SSF._table = table_fmt;\n }\n};\nvar SSFImplicit\n/*{[number]:string}*/\n= {\n \"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n \"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n \"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n \"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"23\": 'General',\n \"24\": 'General',\n \"25\": 'General',\n \"26\": 'General',\n \"27\": 'm/d/yy',\n \"28\": 'm/d/yy',\n \"29\": 'm/d/yy',\n \"30\": 'm/d/yy',\n \"31\": 'm/d/yy',\n \"32\": 'h:mm:ss',\n \"33\": 'h:mm:ss',\n \"34\": 'h:mm:ss',\n \"35\": 'h:mm:ss',\n \"36\": 'm/d/yy',\n \"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n \"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n \"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n \"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n \"50\": 'm/d/yy',\n \"51\": 'm/d/yy',\n \"52\": 'm/d/yy',\n \"53\": 'm/d/yy',\n \"54\": 'm/d/yy',\n \"55\": 'm/d/yy',\n \"56\": 'm/d/yy',\n \"57\": 'm/d/yy',\n \"58\": 'm/d/yy',\n \"59\": '0',\n \"60\": '0.00',\n \"61\": '#,##0',\n \"62\": '#,##0.00',\n \"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n \"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n \"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n \"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"67\": '0%',\n \"68\": '0.00%',\n \"69\": '# ?/?',\n \"70\": '# ??/??',\n \"71\": 'm/d/yy',\n \"72\": 'm/d/yy',\n \"73\": 'd-mmm-yy',\n \"74\": 'd-mmm',\n \"75\": 'mmm-yy',\n \"76\": 'h:mm',\n \"77\": 'h:mm:ss',\n \"78\": 'm/d/yy h:mm',\n \"79\": 'mm:ss',\n \"80\": '[h]:mm:ss',\n \"81\": 'mmss.0'\n}\n/*:any*/\n;\n/* dateNF parse TODO: move to SSF */\n\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\n\nfunction dateNF_regex(dateNF\n/*:string|number*/\n)\n/*:RegExp*/\n{\n var fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n fmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n return new RegExp(\"^\" + fmt + \"$\");\n}\n\nfunction dateNF_fix(str\n/*:string*/\n, dateNF\n/*:string*/\n, match\n/*:Array*/\n)\n/*:string*/\n{\n var Y = -1,\n m = -1,\n d = -1,\n H = -1,\n M = -1,\n S = -1;\n (dateNF.match(dateNFregex) || []).forEach(function (n, i) {\n var v = parseInt(match[i + 1], 10);\n\n switch (n.toLowerCase().charAt(0)) {\n case 'y':\n Y = v;\n break;\n\n case 'd':\n d = v;\n break;\n\n case 'h':\n H = v;\n break;\n\n case 's':\n S = v;\n break;\n\n case 'm':\n if (H >= 0) M = v;else m = v;\n break;\n }\n });\n\n if (S >= 0 && M == -1 && m >= 0) {\n M = m;\n m = -1;\n }\n\n var datestr = (\"\" + (Y >= 0 ? Y : new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m >= 1 ? m : 1)).slice(-2) + \"-\" + (\"00\" + (d >= 1 ? d : 1)).slice(-2);\n if (datestr.length == 7) datestr = \"0\" + datestr;\n if (datestr.length == 8) datestr = \"20\" + datestr;\n var timestr = (\"00\" + (H >= 0 ? H : 0)).slice(-2) + \":\" + (\"00\" + (M >= 0 ? M : 0)).slice(-2) + \":\" + (\"00\" + (S >= 0 ? S : 0)).slice(-2);\n if (H == -1 && M == -1 && S == -1) return datestr;\n if (Y == -1 && m == -1 && d == -1) return timestr;\n return datestr + \"T\" + timestr;\n}\n/*::\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\ndeclare var Buffer_from:any;\n*/\n\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*jshint eqnull:true */\n\n/*exported CFB */\n\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*exported CRC32 */\n\n\nvar CRC32 = /*#__PURE__*/function () {\n var CRC32 = {};\n CRC32.version = '1.2.0';\n /* see perf/crc32table.js */\n\n /*global Int32Array */\n\n function signed_crc_table()\n /*:any*/\n {\n var c = 0,\n table\n /*:Array*/\n = new Array(256);\n\n for (var n = 0; n != 256; ++n) {\n c = n;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n table[n] = c;\n }\n\n return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n }\n\n var T0 = signed_crc_table();\n\n function slice_by_16_tables(T) {\n var c = 0,\n v = 0,\n n = 0,\n table\n /*:Array*/\n = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096);\n\n for (n = 0; n != 256; ++n) {\n table[n] = T[n];\n }\n\n for (n = 0; n != 256; ++n) {\n v = T[n];\n\n for (c = 256 + n; c < 4096; c += 256) {\n v = table[c] = v >>> 8 ^ T[v & 0xFF];\n }\n }\n\n var out = [];\n\n for (n = 1; n != 16; ++n) {\n out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n }\n\n return out;\n }\n\n var TT = slice_by_16_tables(T0);\n var T1 = TT[0],\n T2 = TT[1],\n T3 = TT[2],\n T4 = TT[3],\n T5 = TT[4];\n var T6 = TT[5],\n T7 = TT[6],\n T8 = TT[7],\n T9 = TT[8],\n Ta = TT[9];\n var Tb = TT[10],\n Tc = TT[11],\n Td = TT[12],\n Te = TT[13],\n Tf = TT[14];\n\n function crc32_bstr(bstr\n /*:string*/\n , seed\n /*:number*/\n )\n /*:number*/\n {\n var C = seed\n /*:: ? 0 : 0 */\n ^ -1;\n\n for (var i = 0, L = bstr.length; i < L;) {\n C = C >>> 8 ^ T0[(C ^ bstr.charCodeAt(i++)) & 0xFF];\n }\n\n return ~C;\n }\n\n function crc32_buf(B\n /*:Uint8Array|Array*/\n , seed\n /*:number*/\n )\n /*:number*/\n {\n var C = seed\n /*:: ? 0 : 0 */\n ^ -1,\n L = B.length - 15,\n i = 0;\n\n for (; i < L;) {\n C = Tf[B[i++] ^ C & 255] ^ Te[B[i++] ^ C >> 8 & 255] ^ Td[B[i++] ^ C >> 16 & 255] ^ Tc[B[i++] ^ C >>> 24] ^ Tb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^ T7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^ T3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n }\n\n L += 15;\n\n while (i < L) {\n C = C >>> 8 ^ T0[(C ^ B[i++]) & 0xFF];\n }\n\n return ~C;\n }\n\n function crc32_str(str\n /*:string*/\n , seed\n /*:number*/\n )\n /*:number*/\n {\n var C = seed ^ -1;\n\n for (var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n c = str.charCodeAt(i++);\n\n if (c < 0x80) {\n C = C >>> 8 ^ T0[(C ^ c) & 0xFF];\n } else if (c < 0x800) {\n C = C >>> 8 ^ T0[(C ^ (192 | c >> 6 & 31)) & 0xFF];\n C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 0xFF];\n } else if (c >= 0xD800 && c < 0xE000) {\n c = (c & 1023) + 64;\n d = str.charCodeAt(i++) & 1023;\n C = C >>> 8 ^ T0[(C ^ (240 | c >> 8 & 7)) & 0xFF];\n C = C >>> 8 ^ T0[(C ^ (128 | c >> 2 & 63)) & 0xFF];\n C = C >>> 8 ^ T0[(C ^ (128 | d >> 6 & 15 | (c & 3) << 4)) & 0xFF];\n C = C >>> 8 ^ T0[(C ^ (128 | d & 63)) & 0xFF];\n } else {\n C = C >>> 8 ^ T0[(C ^ (224 | c >> 12 & 15)) & 0xFF];\n C = C >>> 8 ^ T0[(C ^ (128 | c >> 6 & 63)) & 0xFF];\n C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 0xFF];\n }\n }\n\n return ~C;\n }\n\n CRC32.table = T0;\n CRC32.bstr = crc32_bstr;\n CRC32.buf = crc32_buf;\n CRC32.str = crc32_str;\n return CRC32;\n}();\n/* [MS-CFB] v20171201 */\n\n\nvar CFB = /*#__PURE__*/function _CFB() {\n var exports = {};\n exports.version = '1.2.1';\n /* [MS-CFB] 2.6.4 */\n\n function namecmp(l\n /*:string*/\n , r\n /*:string*/\n )\n /*:number*/\n {\n var L = l.split(\"/\"),\n R = r.split(\"/\");\n\n for (var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n if (c = L[i].length - R[i].length) return c;\n if (L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n }\n\n return L.length - R.length;\n }\n\n function dirname(p\n /*:string*/\n )\n /*:string*/\n {\n if (p.charAt(p.length - 1) == \"/\") return p.slice(0, -1).indexOf(\"/\") === -1 ? p : dirname(p.slice(0, -1));\n var c = p.lastIndexOf(\"/\");\n return c === -1 ? p : p.slice(0, c + 1);\n }\n\n function filename(p\n /*:string*/\n )\n /*:string*/\n {\n if (p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n var c = p.lastIndexOf(\"/\");\n return c === -1 ? p : p.slice(c + 1);\n }\n /* -------------------------------------------------------------------------- */\n\n /* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n */\n\n /* write JS date to buf as a DOS date */\n\n\n function write_dos_date(buf\n /*:CFBlob*/\n , date\n /*:Date|string*/\n ) {\n if (typeof date === \"string\") date = new Date(date);\n var hms\n /*:number*/\n = date.getHours();\n hms = hms << 6 | date.getMinutes();\n hms = hms << 5 | date.getSeconds() >>> 1;\n buf.write_shift(2, hms);\n var ymd\n /*:number*/\n = date.getFullYear() - 1980;\n ymd = ymd << 4 | date.getMonth() + 1;\n ymd = ymd << 5 | date.getDate();\n buf.write_shift(2, ymd);\n }\n /* read four bytes from buf and interpret as a DOS date */\n\n\n function parse_dos_date(buf\n /*:CFBlob*/\n )\n /*:Date*/\n {\n var hms = buf.read_shift(2) & 0xFFFF;\n var ymd = buf.read_shift(2) & 0xFFFF;\n var val = new Date();\n var d = ymd & 0x1F;\n ymd >>>= 5;\n var m = ymd & 0x0F;\n ymd >>>= 4;\n val.setMilliseconds(0);\n val.setFullYear(ymd + 1980);\n val.setMonth(m - 1);\n val.setDate(d);\n var S = hms & 0x1F;\n hms >>>= 5;\n var M = hms & 0x3F;\n hms >>>= 6;\n val.setHours(hms);\n val.setMinutes(M);\n val.setSeconds(S << 1);\n return val;\n }\n\n function parse_extra_field(blob\n /*:CFBlob*/\n )\n /*:any*/\n {\n prep_blob(blob, 0);\n var o =\n /*::(*/\n {}\n /*:: :any)*/\n ;\n var flags = 0;\n\n while (blob.l <= blob.length - 4) {\n var type = blob.read_shift(2);\n var sz = blob.read_shift(2),\n tgt = blob.l + sz;\n var p = {};\n\n switch (type) {\n /* UNIX-style Timestamps */\n case 0x5455:\n {\n flags = blob.read_shift(1);\n if (flags & 1) p.mtime = blob.read_shift(4);\n /* for some reason, CD flag corresponds to LFH */\n\n if (sz > 5) {\n if (flags & 2) p.atime = blob.read_shift(4);\n if (flags & 4) p.ctime = blob.read_shift(4);\n }\n\n if (p.mtime) p.mt = new Date(p.mtime * 1000);\n }\n break;\n }\n\n blob.l = tgt;\n o[type] = p;\n }\n\n return o;\n }\n\n var fs\n /*:: = require('fs'); */\n ;\n\n function get_fs() {\n return fs || (fs = {});\n }\n\n function parse(file\n /*:RawBytes*/\n , options\n /*:CFBReadOpts*/\n )\n /*:CFBContainer*/\n {\n if (file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\n if ((file[0] | 0x20) == 0x6d && (file[1] | 0x20) == 0x69) return parse_mad(file, options);\n if (file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\n var mver = 3;\n var ssz = 512;\n var nmfs = 0; // number of mini FAT sectors\n\n var difat_sec_cnt = 0;\n var dir_start = 0;\n var minifat_start = 0;\n var difat_start = 0;\n var fat_addrs\n /*:Array*/\n = []; // locations of FAT sectors\n\n /* [MS-CFB] 2.2 Compound File Header */\n\n var blob\n /*:CFBlob*/\n =\n /*::(*/\n file.slice(0, 512)\n /*:: :any)*/\n ;\n prep_blob(blob, 0);\n /* major version */\n\n var mv = check_get_mver(blob);\n mver = mv[0];\n\n switch (mver) {\n case 3:\n ssz = 512;\n break;\n\n case 4:\n ssz = 4096;\n break;\n\n case 0:\n if (mv[1] == 0) return parse_zip(file, options);\n\n /* falls through */\n\n default:\n throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n }\n /* reprocess header */\n\n\n if (ssz !== 512) {\n blob =\n /*::(*/\n file.slice(0, ssz)\n /*:: :any)*/\n ;\n prep_blob(blob, 28\n /* blob.l */\n );\n }\n /* Save header for final object */\n\n\n var header\n /*:RawBytes*/\n = file.slice(0, ssz);\n check_shifts(blob, mver); // Number of Directory Sectors\n\n var dir_cnt\n /*:number*/\n = blob.read_shift(4, 'i');\n if (mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt); // Number of FAT Sectors\n\n blob.l += 4; // First Directory Sector Location\n\n dir_start = blob.read_shift(4, 'i'); // Transaction Signature\n\n blob.l += 4; // Mini Stream Cutoff Size\n\n blob.chk('00100000', 'Mini Stream Cutoff Size: '); // First Mini FAT Sector Location\n\n minifat_start = blob.read_shift(4, 'i'); // Number of Mini FAT Sectors\n\n nmfs = blob.read_shift(4, 'i'); // First DIFAT sector location\n\n difat_start = blob.read_shift(4, 'i'); // Number of DIFAT Sectors\n\n difat_sec_cnt = blob.read_shift(4, 'i'); // Grab FAT Sector Locations\n\n for (var q = -1, j = 0; j < 109; ++j) {\n /* 109 = (512 - blob.l)>>>2; */\n q = blob.read_shift(4, 'i');\n if (q < 0) break;\n fat_addrs[j] = q;\n }\n /** Break the file up into sectors */\n\n\n var sectors\n /*:Array*/\n = sectorify(file, ssz);\n sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n /** Chains */\n\n var sector_list\n /*:SectorList*/\n = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n sector_list[dir_start].name = \"!Directory\";\n if (nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\n sector_list[fat_addrs[0]].name = \"!FAT\";\n sector_list.fat_addrs = fat_addrs;\n sector_list.ssz = ssz;\n /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n var files\n /*:CFBFiles*/\n = {},\n Paths\n /*:Array*/\n = [],\n FileIndex\n /*:CFBFileIndex*/\n = [],\n FullPaths\n /*:Array*/\n = [];\n read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n build_full_paths(FileIndex, FullPaths, Paths);\n Paths.shift();\n var o = {\n FileIndex: FileIndex,\n FullPaths: FullPaths\n }; // $FlowIgnore\n\n if (options && options.raw) o.raw = {\n header: header,\n sectors: sectors\n };\n return o;\n } // parse\n\n /* [MS-CFB] 2.2 Compound File Header -- read up to major version */\n\n\n function check_get_mver(blob\n /*:CFBlob*/\n )\n /*:[number, number]*/\n {\n if (blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0]; // header signature 8\n\n blob.chk(HEADER_SIGNATURE, 'Header Signature: '); // clsid 16\n //blob.chk(HEADER_CLSID, 'CLSID: ');\n\n blob.l += 16; // minor version 2\n\n var mver\n /*:number*/\n = blob.read_shift(2, 'u');\n return [blob.read_shift(2, 'u'), mver];\n }\n\n function check_shifts(blob\n /*:CFBlob*/\n , mver\n /*:number*/\n )\n /*:void*/\n {\n var shift = 0x09; // Byte Order\n //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\n blob.l += 2; // Sector Shift\n\n switch (shift = blob.read_shift(2)) {\n case 0x09:\n if (mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift);\n break;\n\n case 0x0c:\n if (mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift);\n break;\n\n default:\n throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n } // Mini Sector Shift\n\n\n blob.chk('0600', 'Mini Sector Shift: '); // Reserved\n\n blob.chk('000000000000', 'Reserved: ');\n }\n /** Break the file up into sectors */\n\n\n function sectorify(file\n /*:RawBytes*/\n , ssz\n /*:number*/\n )\n /*:Array*/\n {\n var nsectors = Math.ceil(file.length / ssz) - 1;\n var sectors\n /*:Array*/\n = [];\n\n for (var i = 1; i < nsectors; ++i) {\n sectors[i - 1] = file.slice(i * ssz, (i + 1) * ssz);\n }\n\n sectors[nsectors - 1] = file.slice(nsectors * ssz);\n return sectors;\n }\n /* [MS-CFB] 2.6.4 Red-Black Tree */\n\n\n function build_full_paths(FI\n /*:CFBFileIndex*/\n , FP\n /*:Array*/\n , Paths\n /*:Array*/\n )\n /*:void*/\n {\n var i = 0,\n L = 0,\n R = 0,\n C = 0,\n j = 0,\n pl = Paths.length;\n var dad\n /*:Array*/\n = [],\n q\n /*:Array*/\n = [];\n\n for (; i < pl; ++i) {\n dad[i] = q[i] = i;\n FP[i] = Paths[i];\n }\n\n for (; j < q.length; ++j) {\n i = q[j];\n L = FI[i].L;\n R = FI[i].R;\n C = FI[i].C;\n\n if (dad[i] === i) {\n if (L !== -1\n /*NOSTREAM*/\n && dad[L] !== L) dad[i] = dad[L];\n if (R !== -1 && dad[R] !== R) dad[i] = dad[R];\n }\n\n if (C !== -1\n /*NOSTREAM*/\n ) dad[C] = i;\n\n if (L !== -1 && i != dad[i]) {\n dad[L] = dad[i];\n if (q.lastIndexOf(L) < j) q.push(L);\n }\n\n if (R !== -1 && i != dad[i]) {\n dad[R] = dad[i];\n if (q.lastIndexOf(R) < j) q.push(R);\n }\n }\n\n for (i = 1; i < pl; ++i) {\n if (dad[i] === i) {\n if (R !== -1\n /*NOSTREAM*/\n && dad[R] !== R) dad[i] = dad[R];else if (L !== -1 && dad[L] !== L) dad[i] = dad[L];\n }\n }\n\n for (i = 1; i < pl; ++i) {\n if (FI[i].type === 0\n /* unknown */\n ) continue;\n j = i;\n if (j != dad[j]) do {\n j = dad[j];\n FP[i] = FP[j] + \"/\" + FP[i];\n } while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n dad[i] = -1;\n }\n\n FP[0] += \"/\";\n\n for (i = 1; i < pl; ++i) {\n if (FI[i].type !== 2\n /* stream */\n ) FP[i] += \"/\";\n }\n }\n\n function get_mfat_entry(entry\n /*:CFBEntry*/\n , payload\n /*:RawBytes*/\n , mini\n /*:?RawBytes*/\n )\n /*:CFBlob*/\n {\n var start = entry.start,\n size = entry.size; //return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\n var o = [];\n var idx = start;\n\n while (mini && size > 0 && idx >= 0) {\n o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n size -= MSSZ;\n idx = __readInt32LE(mini, idx * 4);\n }\n\n if (o.length === 0) return new_buf(0)\n /*:any*/\n ;\n return bconcat(o).slice(0, entry.size)\n /*:any*/\n ;\n }\n /** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\n\n\n function sleuth_fat(idx\n /*:number*/\n , cnt\n /*:number*/\n , sectors\n /*:Array*/\n , ssz\n /*:number*/\n , fat_addrs)\n /*:void*/\n {\n var q\n /*:number*/\n = ENDOFCHAIN;\n\n if (idx === ENDOFCHAIN) {\n if (cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n } else if (idx !== -1\n /*FREESECT*/\n ) {\n var sector = sectors[idx],\n m = (ssz >>> 2) - 1;\n if (!sector) return;\n\n for (var i = 0; i < m; ++i) {\n if ((q = __readInt32LE(sector, i * 4)) === ENDOFCHAIN) break;\n fat_addrs.push(q);\n }\n\n sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);\n }\n }\n /** Follow the linked list of sectors for a given starting point */\n\n\n function get_sector_list(sectors\n /*:Array*/\n , start\n /*:number*/\n , fat_addrs\n /*:Array*/\n , ssz\n /*:number*/\n , chkd\n /*:?Array*/\n )\n /*:SectorEntry*/\n {\n var buf\n /*:Array*/\n = [],\n buf_chain\n /*:Array*/\n = [];\n if (!chkd) chkd = [];\n var modulus = ssz - 1,\n j = 0,\n jj = 0;\n\n for (j = start; j >= 0;) {\n chkd[j] = true;\n buf[buf.length] = j;\n buf_chain.push(sectors[j]);\n var addr = fat_addrs[Math.floor(j * 4 / ssz)];\n jj = j * 4 & modulus;\n if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n if (!sectors[addr]) break;\n j = __readInt32LE(sectors[addr], jj);\n }\n\n return {\n nodes: buf,\n data: __toBuffer([buf_chain])\n };\n }\n /** Chase down the sector linked lists */\n\n\n function make_sector_list(sectors\n /*:Array*/\n , dir_start\n /*:number*/\n , fat_addrs\n /*:Array*/\n , ssz\n /*:number*/\n )\n /*:SectorList*/\n {\n var sl = sectors.length,\n sector_list\n /*:SectorList*/\n = []\n /*:any*/\n ;\n var chkd\n /*:Array*/\n = [],\n buf\n /*:Array*/\n = [],\n buf_chain\n /*:Array*/\n = [];\n var modulus = ssz - 1,\n i = 0,\n j = 0,\n k = 0,\n jj = 0;\n\n for (i = 0; i < sl; ++i) {\n buf = []\n /*:Array*/\n ;\n k = i + dir_start;\n if (k >= sl) k -= sl;\n if (chkd[k]) continue;\n buf_chain = [];\n var seen = [];\n\n for (j = k; j >= 0;) {\n seen[j] = true;\n chkd[j] = true;\n buf[buf.length] = j;\n buf_chain.push(sectors[j]);\n var addr\n /*:number*/\n = fat_addrs[Math.floor(j * 4 / ssz)];\n jj = j * 4 & modulus;\n if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n if (!sectors[addr]) break;\n j = __readInt32LE(sectors[addr], jj);\n if (seen[j]) break;\n }\n\n sector_list[k] = {\n nodes: buf,\n data: __toBuffer([buf_chain])\n }\n /*:SectorEntry*/\n ;\n }\n\n return sector_list;\n }\n /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n\n function read_directory(dir_start\n /*:number*/\n , sector_list\n /*:SectorList*/\n , sectors\n /*:Array*/\n , Paths\n /*:Array*/\n , nmfs, files, FileIndex, mini) {\n var minifat_store = 0,\n pl = Paths.length ? 2 : 0;\n var sector = sector_list[dir_start].data;\n var i = 0,\n namelen = 0,\n name;\n\n for (; i < sector.length; i += 128) {\n var blob\n /*:CFBlob*/\n =\n /*::(*/\n sector.slice(i, i + 128)\n /*:: :any)*/\n ;\n prep_blob(blob, 64);\n namelen = blob.read_shift(2);\n name = __utf16le(blob, 0, namelen - pl);\n Paths.push(name);\n var o\n /*:CFBEntry*/\n = {\n name: name,\n type: blob.read_shift(1),\n color: blob.read_shift(1),\n L: blob.read_shift(4, 'i'),\n R: blob.read_shift(4, 'i'),\n C: blob.read_shift(4, 'i'),\n clsid: blob.read_shift(16),\n state: blob.read_shift(4, 'i'),\n start: 0,\n size: 0\n };\n var ctime\n /*:number*/\n = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n if (ctime !== 0) o.ct = read_date(blob, blob.l - 8);\n var mtime\n /*:number*/\n = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n if (mtime !== 0) o.mt = read_date(blob, blob.l - 8);\n o.start = blob.read_shift(4, 'i');\n o.size = blob.read_shift(4, 'i');\n\n if (o.size < 0 && o.start < 0) {\n o.size = o.type = 0;\n o.start = ENDOFCHAIN;\n o.name = \"\";\n }\n\n if (o.type === 5) {\n /* root */\n minifat_store = o.start;\n if (nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n /*minifat_size = o.size;*/\n } else if (o.size >= 4096\n /* MSCSZ */\n ) {\n o.storage = 'fat';\n if (sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n sector_list[o.start].name = o.name;\n o.content = sector_list[o.start].data.slice(0, o.size)\n /*:any*/\n ;\n } else {\n o.storage = 'minifat';\n if (o.size < 0) o.size = 0;else if (minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini] || {}).data);\n }\n }\n\n if (o.content) prep_blob(o.content, 0);\n files[name] = o;\n FileIndex.push(o);\n }\n }\n\n function read_date(blob\n /*:RawBytes|CFBlob*/\n , offset\n /*:number*/\n )\n /*:Date*/\n {\n return new Date((__readUInt32LE(blob, offset + 4) / 1e7 * Math.pow(2, 32) + __readUInt32LE(blob, offset) / 1e7 - 11644473600) * 1000);\n }\n\n function read_file(filename\n /*:string*/\n , options\n /*:CFBReadOpts*/\n ) {\n get_fs();\n return parse(fs.readFileSync(filename), options);\n }\n\n function read(blob\n /*:RawBytes|string*/\n , options\n /*:CFBReadOpts*/\n ) {\n var type = options && options.type;\n\n if (!type) {\n if (has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n }\n\n switch (type || \"base64\") {\n case \"file\":\n /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */\n return read_file(blob, options);\n\n case \"base64\":\n /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */\n return parse(s2a(Base64_decode(blob)), options);\n\n case \"binary\":\n /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */\n return parse(s2a(blob), options);\n }\n\n return parse(\n /*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */\n blob, options);\n }\n\n function init_cfb(cfb\n /*:CFBContainer*/\n , opts\n /*:?any*/\n )\n /*:void*/\n {\n var o = opts || {},\n root = o.root || \"Root Entry\";\n if (!cfb.FullPaths) cfb.FullPaths = [];\n if (!cfb.FileIndex) cfb.FileIndex = [];\n if (cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\n if (cfb.FullPaths.length === 0) {\n cfb.FullPaths[0] = root + \"/\";\n cfb.FileIndex[0] = {\n name: root,\n type: 5\n }\n /*:any*/\n ;\n }\n\n if (o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n seed_cfb(cfb);\n }\n\n function seed_cfb(cfb\n /*:CFBContainer*/\n )\n /*:void*/\n {\n var nm = \"\\x01Sh33tJ5\";\n if (CFB.find(cfb, \"/\" + nm)) return;\n var p = new_buf(4);\n p[0] = 55;\n p[1] = p[3] = 50;\n p[2] = 54;\n cfb.FileIndex.push({\n name: nm,\n type: 2,\n content: p,\n size: 4,\n L: 69,\n R: 69,\n C: 69\n }\n /*:any*/\n );\n cfb.FullPaths.push(cfb.FullPaths[0] + nm);\n rebuild_cfb(cfb);\n }\n\n function rebuild_cfb(cfb\n /*:CFBContainer*/\n , f\n /*:?boolean*/\n )\n /*:void*/\n {\n init_cfb(cfb);\n var gc = false,\n s = false;\n\n for (var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n var _file = cfb.FileIndex[i];\n\n switch (_file.type) {\n case 0:\n if (s) gc = true;else {\n cfb.FileIndex.pop();\n cfb.FullPaths.pop();\n }\n break;\n\n case 1:\n case 2:\n case 5:\n s = true;\n if (isNaN(_file.R * _file.L * _file.C)) gc = true;\n if (_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n break;\n\n default:\n gc = true;\n break;\n }\n }\n\n if (!gc && !f) return;\n var now = new Date(1987, 1, 19),\n j = 0; // Track which names exist\n\n var fullPaths = Object.create ? Object.create(null) : {};\n var data\n /*:Array<[string, CFBEntry]>*/\n = [];\n\n for (i = 0; i < cfb.FullPaths.length; ++i) {\n fullPaths[cfb.FullPaths[i]] = true;\n if (cfb.FileIndex[i].type === 0) continue;\n data.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n }\n\n for (i = 0; i < data.length; ++i) {\n var dad = dirname(data[i][0]);\n s = fullPaths[dad];\n\n if (!s) {\n data.push([dad, {\n name: filename(dad).replace(\"/\", \"\"),\n type: 1,\n clsid: HEADER_CLSID,\n ct: now,\n mt: now,\n content: null\n }\n /*:any*/\n ]); // Add name to set\n\n fullPaths[dad] = true;\n }\n }\n\n data.sort(function (x, y) {\n return namecmp(x[0], y[0]);\n });\n cfb.FullPaths = [];\n cfb.FileIndex = [];\n\n for (i = 0; i < data.length; ++i) {\n cfb.FullPaths[i] = data[i][0];\n cfb.FileIndex[i] = data[i][1];\n }\n\n for (i = 0; i < data.length; ++i) {\n var elt = cfb.FileIndex[i];\n var nm = cfb.FullPaths[i];\n elt.name = filename(nm).replace(\"/\", \"\");\n elt.L = elt.R = elt.C = -(elt.color = 1);\n elt.size = elt.content ? elt.content.length : 0;\n elt.start = 0;\n elt.clsid = elt.clsid || HEADER_CLSID;\n\n if (i === 0) {\n elt.C = data.length > 1 ? 1 : -1;\n elt.size = 0;\n elt.type = 5;\n } else if (nm.slice(-1) == \"/\") {\n for (j = i + 1; j < data.length; ++j) {\n if (dirname(cfb.FullPaths[j]) == nm) break;\n }\n\n elt.C = j >= data.length ? -1 : j;\n\n for (j = i + 1; j < data.length; ++j) {\n if (dirname(cfb.FullPaths[j]) == dirname(nm)) break;\n }\n\n elt.R = j >= data.length ? -1 : j;\n elt.type = 1;\n } else {\n if (dirname(cfb.FullPaths[i + 1] || \"\") == dirname(nm)) elt.R = i + 1;\n elt.type = 2;\n }\n }\n }\n\n function _write(cfb\n /*:CFBContainer*/\n , options\n /*:CFBWriteOpts*/\n )\n /*:RawBytes|string*/\n {\n var _opts = options || {};\n /* MAD is order-sensitive, skip rebuild and sort */\n\n\n if (_opts.fileType == 'mad') return write_mad(cfb, _opts);\n rebuild_cfb(cfb);\n\n switch (_opts.fileType) {\n case 'zip':\n return write_zip(cfb, _opts);\n //case 'mad': return write_mad(cfb, _opts);\n }\n\n var L = function (cfb\n /*:CFBContainer*/\n )\n /*:Array*/\n {\n var mini_size = 0,\n fat_size = 0;\n\n for (var i = 0; i < cfb.FileIndex.length; ++i) {\n var file = cfb.FileIndex[i];\n if (!file.content) continue;\n /*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\n var flen = file.content.length;\n\n if (flen > 0) {\n if (flen < 0x1000) mini_size += flen + 0x3F >> 6;else fat_size += flen + 0x01FF >> 9;\n }\n }\n\n var dir_cnt = cfb.FullPaths.length + 3 >> 2;\n var mini_cnt = mini_size + 7 >> 3;\n var mfat_cnt = mini_size + 0x7F >> 7;\n var fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n var fat_cnt = fat_base + 0x7F >> 7;\n var difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n\n while (fat_base + fat_cnt + difat_cnt + 0x7F >> 7 > fat_cnt) {\n difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n }\n\n var L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n cfb.FileIndex[0].size = mini_size << 6;\n L[7] = (cfb.FileIndex[0].start = L[0] + L[1] + L[2] + L[3] + L[4] + L[5]) + (L[6] + 7 >> 3);\n return L;\n }(cfb);\n\n var o = new_buf(L[7] << 9);\n var i = 0,\n T = 0;\n {\n for (i = 0; i < 8; ++i) {\n o.write_shift(1, HEADER_SIG[i]);\n }\n\n for (i = 0; i < 8; ++i) {\n o.write_shift(2, 0);\n }\n\n o.write_shift(2, 0x003E);\n o.write_shift(2, 0x0003);\n o.write_shift(2, 0xFFFE);\n o.write_shift(2, 0x0009);\n o.write_shift(2, 0x0006);\n\n for (i = 0; i < 3; ++i) {\n o.write_shift(2, 0);\n }\n\n o.write_shift(4, 0);\n o.write_shift(4, L[2]);\n o.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n o.write_shift(4, 0);\n o.write_shift(4, 1 << 12);\n o.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1 : ENDOFCHAIN);\n o.write_shift(4, L[3]);\n o.write_shift(-4, L[1] ? L[0] - 1 : ENDOFCHAIN);\n o.write_shift(4, L[1]);\n\n for (i = 0; i < 109; ++i) {\n o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n }\n }\n\n if (L[1]) {\n for (T = 0; T < L[1]; ++T) {\n for (; i < 236 + T * 127; ++i) {\n o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n }\n\n o.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n }\n }\n\n var chainit = function chainit(w\n /*:number*/\n )\n /*:void*/\n {\n for (T += w; i < T - 1; ++i) {\n o.write_shift(-4, i + 1);\n }\n\n if (w) {\n ++i;\n o.write_shift(-4, ENDOFCHAIN);\n }\n };\n\n T = i = 0;\n\n for (T += L[1]; i < T; ++i) {\n o.write_shift(-4, consts.DIFSECT);\n }\n\n for (T += L[2]; i < T; ++i) {\n o.write_shift(-4, consts.FATSECT);\n }\n\n chainit(L[3]);\n chainit(L[4]);\n var j\n /*:number*/\n = 0,\n flen\n /*:number*/\n = 0;\n var file\n /*:CFBEntry*/\n = cfb.FileIndex[0];\n\n for (; j < cfb.FileIndex.length; ++j) {\n file = cfb.FileIndex[j];\n if (!file.content) continue;\n /*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\n flen = file.content.length;\n if (flen < 0x1000) continue;\n file.start = T;\n chainit(flen + 0x01FF >> 9);\n }\n\n chainit(L[6] + 7 >> 3);\n\n while (o.l & 0x1FF) {\n o.write_shift(-4, consts.ENDOFCHAIN);\n }\n\n T = i = 0;\n\n for (j = 0; j < cfb.FileIndex.length; ++j) {\n file = cfb.FileIndex[j];\n if (!file.content) continue;\n /*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\n flen = file.content.length;\n if (!flen || flen >= 0x1000) continue;\n file.start = T;\n chainit(flen + 0x3F >> 6);\n }\n\n while (o.l & 0x1FF) {\n o.write_shift(-4, consts.ENDOFCHAIN);\n }\n\n for (i = 0; i < L[4] << 2; ++i) {\n var nm = cfb.FullPaths[i];\n\n if (!nm || nm.length === 0) {\n for (j = 0; j < 17; ++j) {\n o.write_shift(4, 0);\n }\n\n for (j = 0; j < 3; ++j) {\n o.write_shift(4, -1);\n }\n\n for (j = 0; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n\n continue;\n }\n\n file = cfb.FileIndex[i];\n if (i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\n var _nm\n /*:string*/\n = i === 0 && _opts.root || file.name;\n\n flen = 2 * (_nm.length + 1);\n o.write_shift(64, _nm, \"utf16le\");\n o.write_shift(2, flen);\n o.write_shift(1, file.type);\n o.write_shift(1, file.color);\n o.write_shift(-4, file.L);\n o.write_shift(-4, file.R);\n o.write_shift(-4, file.C);\n if (!file.clsid) for (j = 0; j < 4; ++j) {\n o.write_shift(4, 0);\n } else o.write_shift(16, file.clsid, \"hex\");\n o.write_shift(4, file.state || 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, file.start);\n o.write_shift(4, file.size);\n o.write_shift(4, 0);\n }\n\n for (i = 1; i < cfb.FileIndex.length; ++i) {\n file = cfb.FileIndex[i];\n /*:: if(!file.content) throw new Error(\"unreachable\"); */\n\n if (file.size >= 0x1000) {\n o.l = file.start + 1 << 9;\n\n if (has_buf && Buffer.isBuffer(file.content)) {\n file.content.copy(o, o.l, 0, file.size); // o is a 0-filled Buffer so just set next offset\n\n o.l += file.size + 511 & -512;\n } else {\n for (j = 0; j < file.size; ++j) {\n o.write_shift(1, file.content[j]);\n }\n\n for (; j & 0x1FF; ++j) {\n o.write_shift(1, 0);\n }\n }\n }\n }\n\n for (i = 1; i < cfb.FileIndex.length; ++i) {\n file = cfb.FileIndex[i];\n /*:: if(!file.content) throw new Error(\"unreachable\"); */\n\n if (file.size > 0 && file.size < 0x1000) {\n if (has_buf && Buffer.isBuffer(file.content)) {\n file.content.copy(o, o.l, 0, file.size); // o is a 0-filled Buffer so just set next offset\n\n o.l += file.size + 63 & -64;\n } else {\n for (j = 0; j < file.size; ++j) {\n o.write_shift(1, file.content[j]);\n }\n\n for (; j & 0x3F; ++j) {\n o.write_shift(1, 0);\n }\n }\n }\n }\n\n if (has_buf) {\n o.l = o.length;\n } else {\n // When using Buffer, already 0-filled\n while (o.l < o.length) {\n o.write_shift(1, 0);\n }\n }\n\n return o;\n }\n /* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\n\n\n function find(cfb\n /*:CFBContainer*/\n , path\n /*:string*/\n )\n /*:?CFBEntry*/\n {\n var UCFullPaths\n /*:Array*/\n = cfb.FullPaths.map(function (x) {\n return x.toUpperCase();\n });\n var UCPaths\n /*:Array*/\n = UCFullPaths.map(function (x) {\n var y = x.split(\"/\");\n return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)];\n });\n var k\n /*:boolean*/\n = false;\n\n if (path.charCodeAt(0) === 47\n /* \"/\" */\n ) {\n k = true;\n path = UCFullPaths[0].slice(0, -1) + path;\n } else k = path.indexOf(\"/\") !== -1;\n\n var UCPath\n /*:string*/\n = path.toUpperCase();\n var w\n /*:number*/\n = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n if (w !== -1) return cfb.FileIndex[w];\n var m = !UCPath.match(chr1);\n UCPath = UCPath.replace(chr0, '');\n if (m) UCPath = UCPath.replace(chr1, '!');\n\n for (w = 0; w < UCFullPaths.length; ++w) {\n if ((m ? UCFullPaths[w].replace(chr1, '!') : UCFullPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n if ((m ? UCPaths[w].replace(chr1, '!') : UCPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n }\n\n return null;\n }\n /** CFB Constants */\n\n\n var MSSZ = 64;\n /* Mini Sector Size = 1<<6 */\n //var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n\n /* 2.1 Compound File Sector Numbers and Types */\n\n var ENDOFCHAIN = -2;\n /* 2.2 Compound File Header */\n\n var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\n var HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\n var HEADER_CLSID = '00000000000000000000000000000000';\n var consts = {\n /* 2.1 Compund File Sector Numbers and Types */\n MAXREGSECT: -6,\n DIFSECT: -4,\n FATSECT: -3,\n ENDOFCHAIN: ENDOFCHAIN,\n FREESECT: -1,\n\n /* 2.2 Compound File Header */\n HEADER_SIGNATURE: HEADER_SIGNATURE,\n HEADER_MINOR_VERSION: '3e00',\n MAXREGSID: -6,\n NOSTREAM: -1,\n HEADER_CLSID: HEADER_CLSID,\n\n /* 2.6.1 Compound File Directory Entry */\n EntryTypes: ['unknown', 'storage', 'stream', 'lockbytes', 'property', 'root']\n };\n\n function write_file(cfb\n /*:CFBContainer*/\n , filename\n /*:string*/\n , options\n /*:CFBWriteOpts*/\n )\n /*:void*/\n {\n get_fs();\n\n var o = _write(cfb, options);\n /*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\n\n fs.writeFileSync(filename, o);\n }\n\n function a2s(o\n /*:RawBytes*/\n )\n /*:string*/\n {\n var out = new Array(o.length);\n\n for (var i = 0; i < o.length; ++i) {\n out[i] = String.fromCharCode(o[i]);\n }\n\n return out.join(\"\");\n }\n\n function write(cfb\n /*:CFBContainer*/\n , options\n /*:CFBWriteOpts*/\n )\n /*:RawBytes|string*/\n {\n var o = _write(cfb, options);\n\n switch (options && options.type || \"buffer\") {\n case \"file\":\n get_fs();\n fs.writeFileSync(options.filename, o\n /*:any*/\n );\n return o;\n\n case \"binary\":\n return typeof o == \"string\" ? o : a2s(o);\n\n case \"base64\":\n return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\n case \"buffer\":\n if (has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\n /* falls through */\n\n case \"array\":\n return typeof o == \"string\" ? s2a(o) : o;\n }\n\n return o;\n }\n /* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\n\n\n var _zlib;\n\n function use_zlib(zlib) {\n try {\n var InflateRaw = zlib.InflateRaw;\n var InflRaw = new InflateRaw();\n\n InflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\n if (InflRaw.bytesRead) _zlib = zlib;else throw new Error(\"zlib does not expose bytesRead\");\n } catch (e) {\n console.error(\"cannot use native zlib: \" + (e.message || e));\n }\n }\n\n function _inflateRawSync(payload, usz) {\n if (!_zlib) return _inflate(payload, usz);\n var InflateRaw = _zlib.InflateRaw;\n var InflRaw = new InflateRaw();\n\n var out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\n payload.l += InflRaw.bytesRead;\n return out;\n }\n\n function _deflateRawSync(payload) {\n return _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n }\n\n var CLEN_ORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n /* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\n\n var LEN_LN = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258];\n /* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\n\n var DST_LN = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577];\n\n function bit_swap_8(n) {\n var t = (n << 1 | n << 11) & 0x22110 | (n << 5 | n << 15) & 0x88440;\n return (t >> 16 | t >> 8 | t) & 0xFF;\n }\n\n var use_typed_arrays = typeof Uint8Array !== 'undefined';\n var bitswap8 = use_typed_arrays ? new Uint8Array(1 << 8) : [];\n\n for (var q = 0; q < 1 << 8; ++q) {\n bitswap8[q] = bit_swap_8(q);\n }\n\n function bit_swap_n(n, b) {\n var rev = bitswap8[n & 0xFF];\n if (b <= 8) return rev >>> 8 - b;\n rev = rev << 8 | bitswap8[n >> 8 & 0xFF];\n if (b <= 16) return rev >>> 16 - b;\n rev = rev << 8 | bitswap8[n >> 16 & 0xFF];\n return rev >>> 24 - b;\n }\n /* helpers for unaligned bit reads */\n\n\n function read_bits_2(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 6 ? 0 : buf[h + 1] << 8)) >>> w & 0x03;\n }\n\n function read_bits_3(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 5 ? 0 : buf[h + 1] << 8)) >>> w & 0x07;\n }\n\n function read_bits_4(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 4 ? 0 : buf[h + 1] << 8)) >>> w & 0x0F;\n }\n\n function read_bits_5(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 3 ? 0 : buf[h + 1] << 8)) >>> w & 0x1F;\n }\n\n function read_bits_7(buf, bl) {\n var w = bl & 7,\n h = bl >>> 3;\n return (buf[h] | (w <= 1 ? 0 : buf[h + 1] << 8)) >>> w & 0x7F;\n }\n /* works up to n = 3 * 8 + 1 = 25 */\n\n\n function read_bits_n(buf, bl, n) {\n var w = bl & 7,\n h = bl >>> 3,\n f = (1 << n) - 1;\n var v = buf[h] >>> w;\n if (n < 8 - w) return v & f;\n v |= buf[h + 1] << 8 - w;\n if (n < 16 - w) return v & f;\n v |= buf[h + 2] << 16 - w;\n if (n < 24 - w) return v & f;\n v |= buf[h + 3] << 24 - w;\n return v & f;\n }\n /* helpers for unaligned bit writes */\n\n\n function write_bits_3(buf, bl, v) {\n var w = bl & 7,\n h = bl >>> 3;\n if (w <= 5) buf[h] |= (v & 7) << w;else {\n buf[h] |= v << w & 0xFF;\n buf[h + 1] = (v & 7) >> 8 - w;\n }\n return bl + 3;\n }\n\n function write_bits_1(buf, bl, v) {\n var w = bl & 7,\n h = bl >>> 3;\n v = (v & 1) << w;\n buf[h] |= v;\n return bl + 1;\n }\n\n function write_bits_8(buf, bl, v) {\n var w = bl & 7,\n h = bl >>> 3;\n v <<= w;\n buf[h] |= v & 0xFF;\n v >>>= 8;\n buf[h + 1] = v;\n return bl + 8;\n }\n\n function write_bits_16(buf, bl, v) {\n var w = bl & 7,\n h = bl >>> 3;\n v <<= w;\n buf[h] |= v & 0xFF;\n v >>>= 8;\n buf[h + 1] = v & 0xFF;\n buf[h + 2] = v >>> 8;\n return bl + 16;\n }\n /* until ArrayBuffer#realloc is a thing, fake a realloc */\n\n\n function realloc(b, sz\n /*:number*/\n ) {\n var L = b.length,\n M = 2 * L > sz ? 2 * L : sz + 5,\n i = 0;\n if (L >= sz) return b;\n\n if (has_buf) {\n var o = new_unsafe_buf(M); // $FlowIgnore\n\n if (b.copy) b.copy(o);else for (; i < b.length; ++i) {\n o[i] = b[i];\n }\n return o;\n } else if (use_typed_arrays) {\n var a = new Uint8Array(M);\n if (a.set) a.set(b);else for (; i < L; ++i) {\n a[i] = b[i];\n }\n return a;\n }\n\n b.length = M;\n return b;\n }\n /* zero-filled arrays for older browsers */\n\n\n function zero_fill_array(n) {\n var o = new Array(n);\n\n for (var i = 0; i < n; ++i) {\n o[i] = 0;\n }\n\n return o;\n }\n /* build tree (used for literals and lengths) */\n\n\n function build_tree(clens, cmap, MAX\n /*:number*/\n )\n /*:number*/\n {\n var maxlen = 1,\n w = 0,\n i = 0,\n j = 0,\n ccode = 0,\n L = clens.length;\n var bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n for (i = 0; i < 32; ++i) {\n bl_count[i] = 0;\n }\n\n for (i = L; i < MAX; ++i) {\n clens[i] = 0;\n }\n\n L = clens.length;\n var ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n /* build code tree */\n\n for (i = 0; i < L; ++i) {\n bl_count[w = clens[i]]++;\n if (maxlen < w) maxlen = w;\n ctree[i] = 0;\n }\n\n bl_count[0] = 0;\n\n for (i = 1; i <= maxlen; ++i) {\n bl_count[i + 16] = ccode = ccode + bl_count[i - 1] << 1;\n }\n\n for (i = 0; i < L; ++i) {\n ccode = clens[i];\n if (ccode != 0) ctree[i] = bl_count[ccode + 16]++;\n }\n /* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\n\n var cleni = 0;\n\n for (i = 0; i < L; ++i) {\n cleni = clens[i];\n\n if (cleni != 0) {\n ccode = bit_swap_n(ctree[i], maxlen) >> maxlen - cleni;\n\n for (j = (1 << maxlen + 4 - cleni) - 1; j >= 0; --j) {\n cmap[ccode | j << cleni] = cleni & 15 | i << 4;\n }\n }\n }\n\n return maxlen;\n }\n /* Fixed Huffman */\n\n\n var fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\n var fix_dmap = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n if (!use_typed_arrays) {\n for (var i = 0; i < 512; ++i) {\n fix_lmap[i] = 0;\n }\n\n for (i = 0; i < 32; ++i) {\n fix_dmap[i] = 0;\n }\n }\n\n (function () {\n var dlens\n /*:Array*/\n = [];\n var i = 0;\n\n for (; i < 32; i++) {\n dlens.push(5);\n }\n\n build_tree(dlens, fix_dmap, 32);\n var clens\n /*:Array*/\n = [];\n i = 0;\n\n for (; i <= 143; i++) {\n clens.push(8);\n }\n\n for (; i <= 255; i++) {\n clens.push(9);\n }\n\n for (; i <= 279; i++) {\n clens.push(7);\n }\n\n for (; i <= 287; i++) {\n clens.push(8);\n }\n\n build_tree(clens, fix_lmap, 288);\n })();\n\n var _deflateRaw = /*#__PURE__*/function _deflateRawIIFE() {\n var DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n var j = 0,\n k = 0;\n\n for (; j < DST_LN.length - 1; ++j) {\n for (; k < DST_LN[j + 1]; ++k) {\n DST_LN_RE[k] = j;\n }\n }\n\n for (; k < 32768; ++k) {\n DST_LN_RE[k] = 29;\n }\n\n var LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\n for (j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n for (; k < LEN_LN[j + 1]; ++k) {\n LEN_LN_RE[k] = j;\n }\n }\n\n function write_stored(data, out) {\n var boff = 0;\n\n while (boff < data.length) {\n var L = Math.min(0xFFFF, data.length - boff);\n var h = boff + L == data.length;\n out.write_shift(1, +h);\n out.write_shift(2, L);\n out.write_shift(2, ~L & 0xFFFF);\n\n while (L-- > 0) {\n out[out.l++] = data[boff++];\n }\n }\n\n return out.l;\n }\n /* Fixed Huffman */\n\n\n function write_huff_fixed(data, out) {\n var bl = 0;\n var boff = 0;\n var addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\n while (boff < data.length) {\n var L =\n /* data.length - boff; */\n Math.min(0xFFFF, data.length - boff);\n /* write a stored block for short data */\n\n if (L < 10) {\n bl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\n if (bl & 7) bl += 8 - (bl & 7);\n out.l = bl / 8 | 0;\n out.write_shift(2, L);\n out.write_shift(2, ~L & 0xFFFF);\n\n while (L-- > 0) {\n out[out.l++] = data[boff++];\n }\n\n bl = out.l * 8;\n continue;\n }\n\n bl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\n var hash = 0;\n\n while (L-- > 0) {\n var d = data[boff];\n hash = (hash << 5 ^ d) & 0x7FFF;\n var match = -1,\n mlen = 0;\n\n if (match = addrs[hash]) {\n match |= boff & ~0x7FFF;\n if (match > boff) match -= 0x8000;\n if (match < boff) while (data[match + mlen] == data[boff + mlen] && mlen < 250) {\n ++mlen;\n }\n }\n\n if (mlen > 2) {\n /* Copy Token */\n d = LEN_LN_RE[mlen];\n if (d <= 22) bl = write_bits_8(out, bl, bitswap8[d + 1] >> 1) - 1;else {\n write_bits_8(out, bl, 3);\n bl += 5;\n write_bits_8(out, bl, bitswap8[d - 23] >> 5);\n bl += 3;\n }\n var len_eb = d < 8 ? 0 : d - 4 >> 2;\n\n if (len_eb > 0) {\n write_bits_16(out, bl, mlen - LEN_LN[d]);\n bl += len_eb;\n }\n\n d = DST_LN_RE[boff - match];\n bl = write_bits_8(out, bl, bitswap8[d] >> 3);\n bl -= 3;\n var dst_eb = d < 4 ? 0 : d - 2 >> 1;\n\n if (dst_eb > 0) {\n write_bits_16(out, bl, boff - match - DST_LN[d]);\n bl += dst_eb;\n }\n\n for (var q = 0; q < mlen; ++q) {\n addrs[hash] = boff & 0x7FFF;\n hash = (hash << 5 ^ data[boff]) & 0x7FFF;\n ++boff;\n }\n\n L -= mlen - 1;\n } else {\n /* Literal Token */\n if (d <= 143) d = d + 48;else bl = write_bits_1(out, bl, 1);\n bl = write_bits_8(out, bl, bitswap8[d]);\n addrs[hash] = boff & 0x7FFF;\n ++boff;\n }\n }\n\n bl = write_bits_8(out, bl, 0) - 1;\n }\n\n out.l = (bl + 7) / 8 | 0;\n return out.l;\n }\n\n return function _deflateRaw(data, out) {\n if (data.length < 8) return write_stored(data, out);\n return write_huff_fixed(data, out);\n };\n }();\n\n function _deflate(data) {\n var buf = new_buf(50 + Math.floor(data.length * 1.1));\n\n var off = _deflateRaw(data, buf);\n\n return buf.slice(0, off);\n }\n /* modified inflate function also moves original read head */\n\n\n var dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n var dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n var dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\n var dyn_len_1 = 1,\n dyn_len_2 = 1;\n /* 5.5.3 Expanding Huffman Codes */\n\n function dyn(data, boff\n /*:number*/\n ) {\n /* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n var _HLIT = read_bits_5(data, boff) + 257;\n\n boff += 5;\n\n var _HDIST = read_bits_5(data, boff) + 1;\n\n boff += 5;\n\n var _HCLEN = read_bits_4(data, boff) + 4;\n\n boff += 4;\n var w = 0;\n /* grab and store code lengths */\n\n var clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n var ctree = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n var maxlen = 1;\n var bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n var next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n var L = clens.length;\n /* 19 */\n\n for (var i = 0; i < _HCLEN; ++i) {\n clens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n if (maxlen < w) maxlen = w;\n bl_count[w]++;\n boff += 3;\n }\n /* build code tree */\n\n\n var ccode = 0;\n bl_count[0] = 0;\n\n for (i = 1; i <= maxlen; ++i) {\n next_code[i] = ccode = ccode + bl_count[i - 1] << 1;\n }\n\n for (i = 0; i < L; ++i) {\n if ((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n }\n /* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\n\n var cleni = 0;\n\n for (i = 0; i < L; ++i) {\n cleni = clens[i];\n\n if (cleni != 0) {\n ccode = bitswap8[ctree[i]] >> 8 - cleni;\n\n for (var j = (1 << 7 - cleni) - 1; j >= 0; --j) {\n dyn_cmap[ccode | j << cleni] = cleni & 7 | i << 3;\n }\n }\n }\n /* read literal and dist codes at once */\n\n\n var hcodes\n /*:Array*/\n = [];\n maxlen = 1;\n\n for (; hcodes.length < _HLIT + _HDIST;) {\n ccode = dyn_cmap[read_bits_7(data, boff)];\n boff += ccode & 7;\n\n switch (ccode >>>= 3) {\n case 16:\n w = 3 + read_bits_2(data, boff);\n boff += 2;\n ccode = hcodes[hcodes.length - 1];\n\n while (w-- > 0) {\n hcodes.push(ccode);\n }\n\n break;\n\n case 17:\n w = 3 + read_bits_3(data, boff);\n boff += 3;\n\n while (w-- > 0) {\n hcodes.push(0);\n }\n\n break;\n\n case 18:\n w = 11 + read_bits_7(data, boff);\n boff += 7;\n\n while (w-- > 0) {\n hcodes.push(0);\n }\n\n break;\n\n default:\n hcodes.push(ccode);\n if (maxlen < ccode) maxlen = ccode;\n break;\n }\n }\n /* build literal / length trees */\n\n\n var h1 = hcodes.slice(0, _HLIT),\n h2 = hcodes.slice(_HLIT);\n\n for (i = _HLIT; i < 286; ++i) {\n h1[i] = 0;\n }\n\n for (i = _HDIST; i < 30; ++i) {\n h2[i] = 0;\n }\n\n dyn_len_1 = build_tree(h1, dyn_lmap, 286);\n dyn_len_2 = build_tree(h2, dyn_dmap, 30);\n return boff;\n }\n /* return [ data, bytesRead ] */\n\n\n function inflate(data, usz\n /*:number*/\n ) {\n /* shortcircuit for empty buffer [0x03, 0x00] */\n if (data[0] == 3 && !(data[1] & 0x3)) {\n return [new_raw_buf(usz), 2];\n }\n /* bit offset */\n\n\n var boff = 0;\n /* header includes final bit and type bits */\n\n var header = 0;\n var outbuf = new_unsafe_buf(usz ? usz : 1 << 18);\n var woff = 0;\n var OL = outbuf.length >>> 0;\n var max_len_1 = 0,\n max_len_2 = 0;\n\n while ((header & 1) == 0) {\n header = read_bits_3(data, boff);\n boff += 3;\n\n if (header >>> 1 == 0) {\n /* Stored block */\n if (boff & 7) boff += 8 - (boff & 7);\n /* 2 bytes sz, 2 bytes bit inverse */\n\n var sz = data[boff >>> 3] | data[(boff >>> 3) + 1] << 8;\n boff += 32;\n /* push sz bytes */\n\n if (sz > 0) {\n if (!usz && OL < woff + sz) {\n outbuf = realloc(outbuf, woff + sz);\n OL = outbuf.length;\n }\n\n while (sz-- > 0) {\n outbuf[woff++] = data[boff >>> 3];\n boff += 8;\n }\n }\n\n continue;\n } else if (header >> 1 == 1) {\n /* Fixed Huffman */\n max_len_1 = 9;\n max_len_2 = 5;\n } else {\n /* Dynamic Huffman */\n boff = dyn(data, boff);\n max_len_1 = dyn_len_1;\n max_len_2 = dyn_len_2;\n }\n\n for (;;) {\n // while(true) is apparently out of vogue in modern JS circles\n if (!usz && OL < woff + 32767) {\n outbuf = realloc(outbuf, woff + 32767);\n OL = outbuf.length;\n }\n /* ingest code and move read head */\n\n\n var bits = read_bits_n(data, boff, max_len_1);\n var code = header >>> 1 == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n boff += code & 15;\n code >>>= 4;\n /* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\n if ((code >>> 8 & 0xFF) === 0) outbuf[woff++] = code;else if (code == 256) break;else {\n code -= 257;\n var len_eb = code < 8 ? 0 : code - 4 >> 2;\n if (len_eb > 5) len_eb = 0;\n var tgt = woff + LEN_LN[code];\n /* length extra bits */\n\n if (len_eb > 0) {\n tgt += read_bits_n(data, boff, len_eb);\n boff += len_eb;\n }\n /* dist code */\n\n\n bits = read_bits_n(data, boff, max_len_2);\n code = header >>> 1 == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n boff += code & 15;\n code >>>= 4;\n var dst_eb = code < 4 ? 0 : code - 2 >> 1;\n var dst = DST_LN[code];\n /* dist extra bits */\n\n if (dst_eb > 0) {\n dst += read_bits_n(data, boff, dst_eb);\n boff += dst_eb;\n }\n /* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\n\n if (!usz && OL < tgt) {\n outbuf = realloc(outbuf, tgt + 100);\n OL = outbuf.length;\n }\n\n while (woff < tgt) {\n outbuf[woff] = outbuf[woff - dst];\n ++woff;\n }\n }\n }\n }\n\n if (usz) return [outbuf, boff + 7 >>> 3];\n return [outbuf.slice(0, woff), boff + 7 >>> 3];\n }\n\n function _inflate(payload, usz) {\n var data = payload.slice(payload.l || 0);\n var out = inflate(data, usz);\n payload.l += out[1];\n return out[0];\n }\n\n function warn_or_throw(wrn, msg) {\n if (wrn) {\n if (typeof console !== 'undefined') console.error(msg);\n } else throw new Error(msg);\n }\n\n function parse_zip(file\n /*:RawBytes*/\n , options\n /*:CFBReadOpts*/\n )\n /*:CFBContainer*/\n {\n var blob\n /*:CFBlob*/\n =\n /*::(*/\n file\n /*:: :any)*/\n ;\n prep_blob(blob, 0);\n var FileIndex\n /*:CFBFileIndex*/\n = [],\n FullPaths\n /*:Array*/\n = [];\n var o = {\n FileIndex: FileIndex,\n FullPaths: FullPaths\n };\n init_cfb(o, {\n root: options.root\n });\n /* find end of central directory, start just after signature */\n\n var i = blob.length - 4;\n\n while ((blob[i] != 0x50 || blob[i + 1] != 0x4b || blob[i + 2] != 0x05 || blob[i + 3] != 0x06) && i >= 0) {\n --i;\n }\n\n blob.l = i + 4;\n /* parse end of central directory */\n\n blob.l += 4;\n var fcnt = blob.read_shift(2);\n blob.l += 6;\n var start_cd = blob.read_shift(4);\n /* parse central directory */\n\n blob.l = start_cd;\n\n for (i = 0; i < fcnt; ++i) {\n /* trust local file header instead of CD entry */\n blob.l += 20;\n var csz = blob.read_shift(4);\n var usz = blob.read_shift(4);\n var namelen = blob.read_shift(2);\n var efsz = blob.read_shift(2);\n var fcsz = blob.read_shift(2);\n blob.l += 8;\n var offset = blob.read_shift(4);\n var EF = parse_extra_field(\n /*::(*/\n blob.slice(blob.l + namelen, blob.l + namelen + efsz)\n /*:: :any)*/\n );\n blob.l += namelen + efsz + fcsz;\n var L = blob.l;\n blob.l = offset + 4;\n parse_local_file(blob, csz, usz, o, EF);\n blob.l = L;\n }\n\n return o;\n }\n /* head starts just after local file header signature */\n\n\n function parse_local_file(blob\n /*:CFBlob*/\n , csz\n /*:number*/\n , usz\n /*:number*/\n , o\n /*:CFBContainer*/\n , EF) {\n /* [local file header] */\n blob.l += 2;\n var flags = blob.read_shift(2);\n var meth = blob.read_shift(2);\n var date = parse_dos_date(blob);\n if (flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n var crc32 = blob.read_shift(4);\n\n var _csz = blob.read_shift(4);\n\n var _usz = blob.read_shift(4);\n\n var namelen = blob.read_shift(2);\n var efsz = blob.read_shift(2); // TODO: flags & (1<<11) // UTF8\n\n var name = \"\";\n\n for (var i = 0; i < namelen; ++i) {\n name += String.fromCharCode(blob[blob.l++]);\n }\n\n if (efsz) {\n var ef = parse_extra_field(\n /*::(*/\n blob.slice(blob.l, blob.l + efsz)\n /*:: :any)*/\n );\n if ((ef[0x5455] || {}).mt) date = ef[0x5455].mt;\n if (((EF || {})[0x5455] || {}).mt) date = EF[0x5455].mt;\n }\n\n blob.l += efsz;\n /* [encryption header] */\n\n /* [file data] */\n\n var data = blob.slice(blob.l, blob.l + _csz);\n\n switch (meth) {\n case 8:\n data = _inflateRawSync(blob, _usz);\n break;\n\n case 0:\n break;\n // TODO: scan for magic number\n\n default:\n throw new Error(\"Unsupported ZIP Compression method \" + meth);\n }\n /* [data descriptor] */\n\n\n var wrn = false;\n\n if (flags & 8) {\n crc32 = blob.read_shift(4);\n\n if (crc32 == 0x08074b50) {\n crc32 = blob.read_shift(4);\n wrn = true;\n }\n\n _csz = blob.read_shift(4);\n _usz = blob.read_shift(4);\n }\n\n if (_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n if (_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz); //var _crc32 = CRC32.buf(data, 0);\n //if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\n cfb_add(o, name, data, {\n unsafe: true,\n mt: date\n });\n }\n\n function write_zip(cfb\n /*:CFBContainer*/\n , options\n /*:CFBWriteOpts*/\n )\n /*:RawBytes*/\n {\n var _opts = options || {};\n\n var out = [],\n cdirs = [];\n var o\n /*:CFBlob*/\n = new_buf(1);\n var method = _opts.compression ? 8 : 0,\n flags = 0;\n var desc = false;\n if (desc) flags |= 8;\n var i = 0,\n j = 0;\n var start_cd = 0,\n fcnt = 0;\n var root = cfb.FullPaths[0],\n fp = root,\n fi = cfb.FileIndex[0];\n var crcs = [];\n var sz_cd = 0;\n\n for (i = 1; i < cfb.FullPaths.length; ++i) {\n fp = cfb.FullPaths[i].slice(root.length);\n fi = cfb.FileIndex[i];\n if (!fi.size || !fi.content || fp == \"\\x01Sh33tJ5\") continue;\n var start = start_cd;\n /* TODO: CP437 filename */\n\n var namebuf = new_buf(fp.length);\n\n for (j = 0; j < fp.length; ++j) {\n namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n }\n\n namebuf = namebuf.slice(0, namebuf.l);\n crcs[fcnt] = CRC32.buf(\n /*::((*/\n fi.content\n /*::||[]):any)*/\n , 0);\n var outbuf = fi.content\n /*::||[]*/\n ;\n if (method == 8) outbuf = _deflateRawSync(outbuf);\n /* local file header */\n\n o = new_buf(30);\n o.write_shift(4, 0x04034b50);\n o.write_shift(2, 20);\n o.write_shift(2, flags);\n o.write_shift(2, method);\n /* TODO: last mod file time/date */\n\n if (fi.mt) write_dos_date(o, fi.mt);else o.write_shift(4, 0);\n o.write_shift(-4, flags & 8 ? 0 : crcs[fcnt]);\n o.write_shift(4, flags & 8 ? 0 : outbuf.length);\n o.write_shift(4, flags & 8 ? 0 :\n /*::(*/\n fi.content\n /*::||[])*/\n .length);\n o.write_shift(2, namebuf.length);\n o.write_shift(2, 0);\n start_cd += o.length;\n out.push(o);\n start_cd += namebuf.length;\n out.push(namebuf);\n /* TODO: extra fields? */\n\n /* TODO: encryption header ? */\n\n start_cd += outbuf.length;\n out.push(outbuf);\n /* data descriptor */\n\n if (flags & 8) {\n o = new_buf(12);\n o.write_shift(-4, crcs[fcnt]);\n o.write_shift(4, outbuf.length);\n o.write_shift(4,\n /*::(*/\n fi.content\n /*::||[])*/\n .length);\n start_cd += o.l;\n out.push(o);\n }\n /* central directory */\n\n\n o = new_buf(46);\n o.write_shift(4, 0x02014b50);\n o.write_shift(2, 0);\n o.write_shift(2, 20);\n o.write_shift(2, flags);\n o.write_shift(2, method);\n o.write_shift(4, 0);\n /* TODO: last mod file time/date */\n\n o.write_shift(-4, crcs[fcnt]);\n o.write_shift(4, outbuf.length);\n o.write_shift(4,\n /*::(*/\n fi.content\n /*::||[])*/\n .length);\n o.write_shift(2, namebuf.length);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(4, 0);\n o.write_shift(4, start);\n sz_cd += o.l;\n cdirs.push(o);\n sz_cd += namebuf.length;\n cdirs.push(namebuf);\n ++fcnt;\n }\n /* end of central directory */\n\n\n o = new_buf(22);\n o.write_shift(4, 0x06054b50);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, fcnt);\n o.write_shift(2, fcnt);\n o.write_shift(4, sz_cd);\n o.write_shift(4, start_cd);\n o.write_shift(2, 0);\n return bconcat([bconcat(out\n /*:any*/\n ), bconcat(cdirs), o]\n /*:any*/\n );\n }\n\n var ContentTypeMap = {\n \"htm\": \"text/html\",\n \"xml\": \"text/xml\",\n \"gif\": \"image/gif\",\n \"jpg\": \"image/jpeg\",\n \"png\": \"image/png\",\n \"mso\": \"application/x-mso\",\n \"thmx\": \"application/vnd.ms-officetheme\",\n \"sh33tj5\": \"application/octet-stream\"\n }\n /*:any*/\n ;\n\n function get_content_type(fi\n /*:CFBEntry*/\n , fp\n /*:string*/\n )\n /*:string*/\n {\n if (fi.ctype) return fi.ctype;\n var ext = fi.name || \"\",\n m = ext.match(/\\.([^\\.]+)$/);\n if (m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n if (fp) {\n m = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n if (m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n }\n\n return \"application/octet-stream\";\n }\n /* 76 character chunks TODO: intertwine encoding */\n\n\n function write_base64_76(bstr\n /*:string*/\n )\n /*:string*/\n {\n var data = Base64_encode(bstr);\n var o = [];\n\n for (var i = 0; i < data.length; i += 76) {\n o.push(data.slice(i, i + 76));\n }\n\n return o.join(\"\\r\\n\") + \"\\r\\n\";\n }\n /*\n Rules for QP:\n \t- escape =## applies for all non-display characters and literal \"=\"\n \t- space or tab at end of line must be encoded\n \t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n \t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n \n TODO: Some files from word appear to write line extensions with bare equals:\n \n ```\n */\n = [],\n split = encoded.split(\"\\r\\n\");\n\n for (var si = 0; si < split.length; ++si) {\n var str = split[si];\n\n if (str.length == 0) {\n o.push(\"\");\n continue;\n }\n\n for (var i = 0; i < str.length;) {\n var end = 76;\n var tmp = str.slice(i, i + end);\n if (tmp.charAt(end - 1) == \"=\") end--;else if (tmp.charAt(end - 2) == \"=\") end -= 2;else if (tmp.charAt(end - 3) == \"=\") end -= 3;\n tmp = str.slice(i, i + end);\n i += end;\n if (i < str.length) tmp += \"=\";\n o.push(tmp);\n }\n }\n\n return o.join(\"\\r\\n\");\n }\n\n function parse_quoted_printable(data\n /*:Array*/\n )\n /*:RawBytes*/\n {\n var o = [];\n /* unify long lines */\n\n for (var di = 0; di < data.length; ++di) {\n var line = data[di];\n\n while (di <= data.length && line.charAt(line.length - 1) == \"=\") {\n line = line.slice(0, line.length - 1) + data[++di];\n }\n\n o.push(line);\n }\n /* decode */\n\n\n for (var oi = 0; oi < o.length; ++oi) {\n o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function ($$) {\n return String.fromCharCode(parseInt($$.slice(1), 16));\n });\n }\n\n return s2a(o.join(\"\\r\\n\"));\n }\n\n function parse_mime(cfb\n /*:CFBContainer*/\n , data\n /*:Array*/\n , root\n /*:string*/\n )\n /*:void*/\n {\n var fname = \"\",\n cte = \"\",\n ctype = \"\",\n fdata;\n var di = 0;\n\n for (; di < 10; ++di) {\n var line = data[di];\n if (!line || line.match(/^\\s*$/)) break;\n var m = line.match(/^(.*?):\\s*([^\\s].*)$/);\n if (m) switch (m[1].toLowerCase()) {\n case \"content-location\":\n fname = m[2].trim();\n break;\n\n case \"content-type\":\n ctype = m[2].trim();\n break;\n\n case \"content-transfer-encoding\":\n cte = m[2].trim();\n break;\n }\n }\n\n ++di;\n\n switch (cte.toLowerCase()) {\n case 'base64':\n fdata = s2a(Base64_decode(data.slice(di).join(\"\")));\n break;\n\n case 'quoted-printable':\n fdata = parse_quoted_printable(data.slice(di));\n break;\n\n default:\n throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n }\n\n var file = cfb_add(cfb, fname.slice(root.length), fdata, {\n unsafe: true\n });\n if (ctype) file.ctype = ctype;\n }\n\n function parse_mad(file\n /*:RawBytes*/\n , options\n /*:CFBReadOpts*/\n )\n /*:CFBContainer*/\n {\n if (a2s(file.slice(0, 13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n var root = options && options.root || \"\"; // $FlowIgnore\n\n var data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n var di = 0,\n row = \"\";\n /* if root is not specified, scan for the common prefix */\n\n for (di = 0; di < data.length; ++di) {\n row = data[di];\n if (!/^Content-Location:/i.test(row)) continue;\n row = row.slice(row.indexOf(\"file\"));\n if (!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n if (row.slice(0, root.length) == root) continue;\n\n while (root.length > 0) {\n root = root.slice(0, root.length - 1);\n root = root.slice(0, root.lastIndexOf(\"/\") + 1);\n if (row.slice(0, root.length) == root) break;\n }\n }\n\n var mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n if (!mboundary) throw new Error(\"MAD cannot find boundary\");\n var boundary = \"--\" + (mboundary[1] || \"\");\n var FileIndex\n /*:CFBFileIndex*/\n = [],\n FullPaths\n /*:Array*/\n = [];\n var o = {\n FileIndex: FileIndex,\n FullPaths: FullPaths\n };\n init_cfb(o);\n var start_di,\n fcnt = 0;\n\n for (di = 0; di < data.length; ++di) {\n var line = data[di];\n if (line !== boundary && line !== boundary + \"--\") continue;\n if (fcnt++) parse_mime(o, data.slice(start_di, di), root);\n start_di = di;\n }\n\n return o;\n }\n\n function write_mad(cfb\n /*:CFBContainer*/\n , options\n /*:CFBWriteOpts*/\n )\n /*:string*/\n {\n var opts = options || {};\n var boundary = opts.boundary || \"SheetJS\";\n boundary = '------=' + boundary;\n var out = ['MIME-Version: 1.0', 'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"', '', '', ''];\n var root = cfb.FullPaths[0],\n fp = root,\n fi = cfb.FileIndex[0];\n\n for (var i = 1; i < cfb.FullPaths.length; ++i) {\n fp = cfb.FullPaths[i].slice(root.length);\n fi = cfb.FileIndex[i];\n if (!fi.size || !fi.content || fp == \"\\x01Sh33tJ5\") continue;\n /* Normalize filename */\n\n fp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function (c) {\n return \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n }).replace(/[\\u0080-\\uFFFF]/g, function (u) {\n return \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n });\n /* Extract content as binary string */\n\n var ca = fi.content; // $FlowIgnore\n\n var cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n /* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\n var dispcnt = 0,\n L = Math.min(1024, cstr.length),\n cc = 0;\n\n for (var csl = 0; csl <= L; ++csl) {\n if ((cc = cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n }\n\n var qp = dispcnt >= L * 4 / 5;\n out.push(boundary);\n out.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n out.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n out.push('Content-Type: ' + get_content_type(fi, fp));\n out.push('');\n out.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n }\n\n out.push(boundary + '--\\r\\n');\n return out.join(\"\\r\\n\");\n }\n\n function cfb_new(opts\n /*:?any*/\n )\n /*:CFBContainer*/\n {\n var o\n /*:CFBContainer*/\n = {}\n /*:any*/\n ;\n init_cfb(o, opts);\n return o;\n }\n\n function cfb_add(cfb\n /*:CFBContainer*/\n , name\n /*:string*/\n , content\n /*:?RawBytes*/\n , opts\n /*:?any*/\n )\n /*:CFBEntry*/\n {\n var unsafe = opts && opts.unsafe;\n if (!unsafe) init_cfb(cfb);\n var file = !unsafe && CFB.find(cfb, name);\n\n if (!file) {\n var fpath\n /*:string*/\n = cfb.FullPaths[0];\n if (name.slice(0, fpath.length) == fpath) fpath = name;else {\n if (fpath.slice(-1) != \"/\") fpath += \"/\";\n fpath = (fpath + name).replace(\"//\", \"/\");\n }\n file = {\n name: filename(name),\n type: 2\n }\n /*:any*/\n ;\n cfb.FileIndex.push(file);\n cfb.FullPaths.push(fpath);\n if (!unsafe) CFB.utils.cfb_gc(cfb);\n }\n /*:: if(!file) throw new Error(\"unreachable\"); */\n\n\n file.content = content\n /*:any*/\n ;\n file.size = content ? content.length : 0;\n\n if (opts) {\n if (opts.CLSID) file.clsid = opts.CLSID;\n if (opts.mt) file.mt = opts.mt;\n if (opts.ct) file.ct = opts.ct;\n }\n\n return file;\n }\n\n function cfb_del(cfb\n /*:CFBContainer*/\n , name\n /*:string*/\n )\n /*:boolean*/\n {\n init_cfb(cfb);\n var file = CFB.find(cfb, name);\n if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n if (cfb.FileIndex[j] == file) {\n cfb.FileIndex.splice(j, 1);\n cfb.FullPaths.splice(j, 1);\n return true;\n }\n }\n return false;\n }\n\n function cfb_mov(cfb\n /*:CFBContainer*/\n , old_name\n /*:string*/\n , new_name\n /*:string*/\n )\n /*:boolean*/\n {\n init_cfb(cfb);\n var file = CFB.find(cfb, old_name);\n if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n if (cfb.FileIndex[j] == file) {\n cfb.FileIndex[j].name = filename(new_name);\n cfb.FullPaths[j] = new_name;\n return true;\n }\n }\n return false;\n }\n\n function cfb_gc(cfb\n /*:CFBContainer*/\n )\n /*:void*/\n {\n rebuild_cfb(cfb, true);\n }\n\n exports.find = find;\n exports.read = read;\n exports.parse = parse;\n exports.write = write;\n exports.writeFile = write_file;\n exports.utils = {\n cfb_new: cfb_new,\n cfb_add: cfb_add,\n cfb_del: cfb_del,\n cfb_mov: cfb_mov,\n cfb_gc: cfb_gc,\n ReadShift: ReadShift,\n CheckField: CheckField,\n prep_blob: prep_blob,\n bconcat: bconcat,\n use_zlib: use_zlib,\n _deflateRaw: _deflate,\n _inflateRaw: _inflate,\n consts: consts\n };\n return exports;\n}();\n\nvar _fs = void 0;\n\nfunction set_fs(fs) {\n _fs = fs;\n}\n\nexport { set_fs };\n/* normalize data for blob ctor */\n\nfunction blobify(data) {\n if (typeof data === \"string\") return s2ab(data);\n if (Array.isArray(data)) return a2u(data);\n return data;\n}\n/* write or download file */\n\n\nfunction write_dl(fname\n/*:string*/\n, payload\n/*:any*/\n, enc\n/*:?string*/\n) {\n /*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n if (typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\n if (typeof Deno !== 'undefined') {\n /* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n if (enc && typeof payload == \"string\") switch (enc) {\n case \"utf8\":\n payload = new TextEncoder(enc).encode(payload);\n break;\n\n case \"binary\":\n payload = s2ab(payload);\n break;\n\n /* TODO: binary equivalent */\n\n default:\n throw new Error(\"Unsupported encoding \" + enc);\n }\n return Deno.writeFileSync(fname, payload);\n }\n\n var data = enc == \"utf8\" ? utf8write(payload) : payload;\n /*:: declare var IE_SaveFile: any; */\n\n if (typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\n if (typeof Blob !== 'undefined') {\n var blob = new Blob([blobify(data)], {\n type: \"application/octet-stream\"\n });\n /*:: declare var navigator: any; */\n\n if (typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n /*:: declare var saveAs: any; */\n\n if (typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\n if (typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n var url = URL.createObjectURL(blob);\n /*:: declare var chrome: any; */\n\n if (typeof chrome === 'object' && typeof (chrome.downloads || {}).download == \"function\") {\n if (URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 60000);\n return chrome.downloads.download({\n url: url,\n filename: fname,\n saveAs: true\n });\n }\n\n var a = document.createElement(\"a\");\n\n if (a.download != null) {\n /*:: if(document.body == null) throw new Error(\"unreachable\"); */\n a.download = fname;\n a.href = url;\n document.body.appendChild(a);\n a.click();\n /*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\n document.body.removeChild(a);\n if (URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 60000);\n return url;\n }\n }\n } // $FlowIgnore\n\n\n if (typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try {\n // extendscript\n // $FlowIgnore\n var out = File(fname);\n out.open(\"w\");\n out.encoding = \"binary\";\n if (Array.isArray(payload)) payload = a2s(payload);\n out.write(payload);\n out.close();\n return payload;\n } catch (e) {\n if (!e.message || !e.message.match(/onstruct/)) throw e;\n }\n throw new Error(\"cannot save file \" + fname);\n}\n/* read binary data from file */\n\n\nfunction read_binary(path\n/*:string*/\n) {\n if (typeof _fs !== 'undefined') return _fs.readFileSync(path);\n if (typeof Deno !== 'undefined') return Deno.readFileSync(path); // $FlowIgnore\n\n if (typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try {\n // extendscript\n // $FlowIgnore\n var infile = File(path);\n infile.open(\"r\");\n infile.encoding = \"binary\";\n var data = infile.read();\n infile.close();\n return data;\n } catch (e) {\n if (!e.message || !e.message.match(/onstruct/)) throw e;\n }\n throw new Error(\"Cannot access file \" + path);\n}\n\nfunction keys(o\n/*:any*/\n)\n/*:Array*/\n{\n var ks = Object.keys(o),\n o2 = [];\n\n for (var i = 0; i < ks.length; ++i) {\n if (Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n }\n\n return o2;\n}\n\nfunction evert_key(obj\n/*:any*/\n, key\n/*:string*/\n)\n/*:EvertType*/\n{\n var o = []\n /*:any*/\n ,\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n if (o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n }\n\n return o;\n}\n\nfunction evert(obj\n/*:any*/\n)\n/*:EvertType*/\n{\n var o = []\n /*:any*/\n ,\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n o[obj[K[i]]] = K[i];\n }\n\n return o;\n}\n\nfunction evert_num(obj\n/*:any*/\n)\n/*:EvertNumType*/\n{\n var o = []\n /*:any*/\n ,\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n o[obj[K[i]]] = parseInt(K[i], 10);\n }\n\n return o;\n}\n\nfunction evert_arr(obj\n/*:any*/\n)\n/*:EvertArrType*/\n{\n var o\n /*:EvertArrType*/\n = []\n /*:any*/\n ,\n K = keys(obj);\n\n for (var i = 0; i !== K.length; ++i) {\n if (o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n o[obj[K[i]]].push(K[i]);\n }\n\n return o;\n}\n\nvar basedate = /*#__PURE__*/new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\n\nfunction datenum(v\n/*:Date*/\n, date1904\n/*:?boolean*/\n)\n/*:number*/\n{\n var epoch = /*#__PURE__*/v.getTime();\n if (date1904) epoch -= 1462 * 24 * 60 * 60 * 1000;\n var dnthresh = /*#__PURE__*/basedate.getTime() + ( /*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\n return (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\n\nvar refdate = /*#__PURE__*/new Date();\nvar dnthresh = /*#__PURE__*/basedate.getTime() + ( /*#__PURE__*/refdate.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\nvar refoffset = /*#__PURE__*/refdate.getTimezoneOffset();\n\nfunction numdate(v\n/*:number*/\n)\n/*:Date*/\n{\n var out = new Date();\n out.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\n if (out.getTimezoneOffset() !== refoffset) {\n out.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n }\n\n return out;\n}\n/* ISO 8601 Duration */\n\n\nfunction parse_isodur(s) {\n var sec = 0,\n mt = 0,\n time = false;\n var m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n if (!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\n for (var i = 1; i != m.length; ++i) {\n if (!m[i]) continue;\n mt = 1;\n if (i > 3) time = true;\n\n switch (m[i].slice(m[i].length - 1)) {\n case 'Y':\n throw new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length - 1));\n\n case 'D':\n mt *= 24;\n\n /* falls through */\n\n case 'H':\n mt *= 60;\n\n /* falls through */\n\n case 'M':\n if (!time) throw new Error(\"Unsupported ISO Duration Field: M\");else mt *= 60;\n\n /* falls through */\n\n case 'S':\n break;\n }\n\n sec += mt * parseInt(m[i], 10);\n }\n\n return sec;\n}\n\nvar good_pd_date_1 = /*#__PURE__*/new Date('2017-02-19T19:06:09.000Z');\nvar good_pd_date = /*#__PURE__*/isNaN( /*#__PURE__*/good_pd_date_1.getFullYear()) ? /*#__PURE__*/new Date('2/19/17') : good_pd_date_1;\nvar good_pd = /*#__PURE__*/good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\n\nfunction parseDate(str\n/*:string|Date*/\n, fixdate\n/*:?number*/\n)\n/*:Date*/\n{\n var d = new Date(str);\n\n if (good_pd) {\n /*:: if(fixdate == null) fixdate = 0; */\n if (fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);else if (fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n return d;\n }\n\n if (str instanceof Date) return str;\n\n if (good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n var s = d.getFullYear();\n if (str.indexOf(\"\" + s) > -1) return d;\n d.setFullYear(d.getFullYear() + 100);\n return d;\n }\n\n var n = str.match(/\\d+/g) || [\"2017\", \"2\", \"19\", \"0\", \"0\", \"0\"];\n var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);\n if (str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n return out;\n}\n\nfunction cc2str(arr\n/*:Array*/\n, debomit)\n/*:string*/\n{\n if (has_buf && Buffer.isBuffer(arr)) {\n if (debomit) {\n if (arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n if (arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n }\n\n return arr.toString(\"binary\");\n }\n\n if (typeof TextDecoder !== \"undefined\") try {\n if (debomit) {\n if (arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n if (arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n }\n\n var rev = {\n \"\\u20AC\": \"\\x80\",\n \"\\u201A\": \"\\x82\",\n \"\\u0192\": \"\\x83\",\n \"\\u201E\": \"\\x84\",\n \"\\u2026\": \"\\x85\",\n \"\\u2020\": \"\\x86\",\n \"\\u2021\": \"\\x87\",\n \"\\u02C6\": \"\\x88\",\n \"\\u2030\": \"\\x89\",\n \"\\u0160\": \"\\x8a\",\n \"\\u2039\": \"\\x8b\",\n \"\\u0152\": \"\\x8c\",\n \"\\u017D\": \"\\x8e\",\n \"\\u2018\": \"\\x91\",\n \"\\u2019\": \"\\x92\",\n \"\\u201C\": \"\\x93\",\n \"\\u201D\": \"\\x94\",\n \"\\u2022\": \"\\x95\",\n \"\\u2013\": \"\\x96\",\n \"\\u2014\": \"\\x97\",\n \"\\u02DC\": \"\\x98\",\n \"\\u2122\": \"\\x99\",\n \"\\u0161\": \"\\x9a\",\n \"\\u203A\": \"\\x9b\",\n \"\\u0153\": \"\\x9c\",\n \"\\u017E\": \"\\x9e\",\n \"\\u0178\": \"\\x9f\"\n };\n if (Array.isArray(arr)) arr = new Uint8Array(arr);\n return new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function (c) {\n return rev[c] || c;\n });\n } catch (e) {}\n var o = [];\n\n for (var i = 0; i != arr.length; ++i) {\n o.push(String.fromCharCode(arr[i]));\n }\n\n return o.join(\"\");\n}\n\nfunction dup(o\n/*:any*/\n)\n/*:any*/\n{\n if (typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n if (typeof o != 'object' || o == null) return o;\n if (o instanceof Date) return new Date(o.getTime());\n var out = {};\n\n for (var k in o) {\n if (Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n }\n\n return out;\n}\n\nfunction fill(c\n/*:string*/\n, l\n/*:number*/\n)\n/*:string*/\n{\n var o = \"\";\n\n while (o.length < l) {\n o += c;\n }\n\n return o;\n}\n/* TODO: stress test */\n\n\nfunction fuzzynum(s\n/*:string*/\n)\n/*:number*/\n{\n var v\n /*:number*/\n = Number(s);\n if (!isNaN(v)) return isFinite(v) ? v : NaN;\n if (!/\\d/.test(s)) return v;\n var wt = 1;\n var ss = s.replace(/([\\d]),([\\d])/g, \"$1$2\").replace(/[$]/g, \"\").replace(/[%]/g, function () {\n wt *= 100;\n return \"\";\n });\n if (!isNaN(v = Number(ss))) return v / wt;\n ss = ss.replace(/[(](.*)[)]/, function ($$, $1) {\n wt = -wt;\n return $1;\n });\n if (!isNaN(v = Number(ss))) return v / wt;\n return v;\n}\n\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\n\nfunction fuzzydate(s\n/*:string*/\n)\n/*:Date*/\n{\n var o = new Date(s),\n n = new Date(NaN);\n var y = o.getYear(),\n m = o.getMonth(),\n d = o.getDate();\n if (isNaN(d)) return n;\n var lower = s.toLowerCase();\n\n if (lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n lower = lower.replace(/[^a-z]/g, \"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/, \"\");\n if (lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n } else if (lower.match(/[a-z]/)) return n;\n\n if (y < 0 || y > 8099) return n;\n if ((m > 0 || d > 1) && y != 101) return o;\n if (s.match(/[^-0-9:,\\/\\\\]/)) return n;\n return o;\n}\n\nvar split_regex = /*#__PURE__*/function () {\n var safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n return function split_regex(str\n /*:string*/\n , re, def\n /*:string*/\n )\n /*:Array*/\n {\n if (safe_split_regex || typeof re == \"string\") return str.split(re);\n var p = str.split(re),\n o = [p[0]];\n\n for (var i = 1; i < p.length; ++i) {\n o.push(def);\n o.push(p[i]);\n }\n\n return o;\n };\n}();\n\nfunction getdatastr(data)\n/*:?string*/\n{\n if (!data) return null;\n if (data.content && data.type) return cc2str(data.content, true);\n if (data.data) return debom(data.data);\n if (data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n if (data.asBinary) return debom(data.asBinary());\n if (data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(), 0)));\n return null;\n}\n\nfunction getdatabin(data) {\n if (!data) return null;\n if (data.data) return char_codes(data.data);\n if (data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\n if (data._data && data._data.getContent) {\n var o = data._data.getContent();\n\n if (typeof o == \"string\") return char_codes(o);\n return Array.prototype.slice.call(o);\n }\n\n if (data.content && data.type) return data.content;\n return null;\n}\n\nfunction getdata(data) {\n return data && data.name.slice(-4) === \".bin\" ? getdatabin(data) : getdatastr(data);\n}\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n\n/* OASIS does not comment on filename case sensitivity */\n\n\nfunction safegetzipfile(zip, file\n/*:string*/\n) {\n var k = zip.FullPaths || keys(zip.files);\n var f = file.toLowerCase().replace(/[\\/]/g, '\\\\'),\n g = f.replace(/\\\\/g, '\\/');\n\n for (var i = 0; i < k.length; ++i) {\n var n = k[i].replace(/^Root Entry[\\/]/, \"\").toLowerCase();\n if (f == n || g == n) return zip.files ? zip.files[k[i]] : zip.FileIndex[i];\n }\n\n return null;\n}\n\nfunction getzipfile(zip, file\n/*:string*/\n) {\n var o = safegetzipfile(zip, file);\n if (o == null) throw new Error(\"Cannot find file \" + file + \" in zip\");\n return o;\n}\n\nfunction getzipdata(zip, file\n/*:string*/\n, safe\n/*:?boolean*/\n)\n/*:any*/\n{\n if (!safe) return getdata(getzipfile(zip, file));\n if (!file) return null;\n\n try {\n return getzipdata(zip, file);\n } catch (e) {\n return null;\n }\n}\n\nfunction getzipstr(zip, file\n/*:string*/\n, safe\n/*:?boolean*/\n)\n/*:?string*/\n{\n if (!safe) return getdatastr(getzipfile(zip, file));\n if (!file) return null;\n\n try {\n return getzipstr(zip, file);\n } catch (e) {\n return null;\n }\n}\n\nfunction getzipbin(zip, file\n/*:string*/\n, safe\n/*:?boolean*/\n)\n/*:any*/\n{\n if (!safe) return getdatabin(getzipfile(zip, file));\n if (!file) return null;\n\n try {\n return getzipbin(zip, file);\n } catch (e) {\n return null;\n }\n}\n\nfunction zipentries(zip) {\n var k = zip.FullPaths || keys(zip.files),\n o = [];\n\n for (var i = 0; i < k.length; ++i) {\n if (k[i].slice(-1) != '/') o.push(k[i].replace(/^Root Entry[\\/]/, \"\"));\n }\n\n return o.sort();\n}\n\nfunction zip_add_file(zip, path, content) {\n if (zip.FullPaths) {\n if (typeof content == \"string\") {\n var res;\n if (has_buf) res = Buffer_from(content);\n /* TODO: investigate performance in Edge 13 */\n //else if(typeof TextEncoder !== \"undefined\") res = new TextEncoder().encode(content);\n else res = utf8decode(content);\n return CFB.utils.cfb_add(zip, path, res);\n }\n\n CFB.utils.cfb_add(zip, path, content);\n } else zip.file(path, content);\n}\n\nfunction zip_new() {\n return CFB.utils.cfb_new();\n}\n\nfunction zip_read(d, o) {\n switch (o.type) {\n case \"base64\":\n return CFB.read(d, {\n type: \"base64\"\n });\n\n case \"binary\":\n return CFB.read(d, {\n type: \"binary\"\n });\n\n case \"buffer\":\n case \"array\":\n return CFB.read(d, {\n type: \"buffer\"\n });\n }\n\n throw new Error(\"Unrecognized type \" + o.type);\n}\n\nfunction resolve_path(path\n/*:string*/\n, base\n/*:string*/\n)\n/*:string*/\n{\n if (path.charAt(0) == \"/\") return path.slice(1);\n var result = base.split('/');\n if (base.slice(-1) != \"/\") result.pop(); // folder path\n\n var target = path.split('/');\n\n while (target.length !== 0) {\n var step = target.shift();\n if (step === '..') result.pop();else if (step !== '.') result.push(step);\n }\n\n return result.join('/');\n}\n\nvar XML_HEADER = '\\r\\n';\nvar attregexg = /([^\"\\s?>\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1 = /<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s*[\\/\\?]?>/mg,\n tagregex2 = /<[^>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex = /<\\w*:/,\n nsregex2 = /<(\\/?)\\w+:/;\n\nfunction parsexmltag(tag\n/*:string*/\n, skip_root\n/*:?boolean*/\n, skip_LC\n/*:?boolean*/\n)\n/*:any*/\n{\n var z = {}\n /*:any*/\n ;\n var eq = 0,\n c = 0;\n\n for (; eq !== tag.length; ++eq) {\n if ((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n }\n\n if (!skip_root) z[0] = tag.slice(0, eq);\n if (eq === tag.length) return z;\n var m = tag.match(attregexg),\n j = 0,\n v = \"\",\n i = 0,\n q = \"\",\n cc = \"\",\n quot = 1;\n if (m) for (i = 0; i != m.length; ++i) {\n cc = m[i];\n\n for (c = 0; c != cc.length; ++c) {\n if (cc.charCodeAt(c) === 61) break;\n }\n\n q = cc.slice(0, c).trim();\n\n while (cc.charCodeAt(c + 1) == 32) {\n ++c;\n }\n\n quot = (eq = cc.charCodeAt(c + 1)) == 34 || eq == 39 ? 1 : 0;\n v = cc.slice(c + 1 + quot, cc.length - quot);\n\n for (j = 0; j != q.length; ++j) {\n if (q.charCodeAt(j) === 58) break;\n }\n\n if (j === q.length) {\n if (q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\n z[q] = v;\n if (!skip_LC) z[q.toLowerCase()] = v;\n } else {\n var k = (j === 5 && q.slice(0, 5) === \"xmlns\" ? \"xmlns\" : \"\") + q.slice(j + 1);\n if (z[k] && q.slice(j - 3, j) == \"ext\") continue; // from ods\n\n z[k] = v;\n if (!skip_LC) z[k.toLowerCase()] = v;\n }\n }\n return z;\n}\n\nfunction strip_ns(x\n/*:string*/\n)\n/*:string*/\n{\n return x.replace(nsregex2, \"<$1\");\n}\n\nvar encodings = {\n '"': '\"',\n ''': \"'\",\n '>': '>',\n '<': '<',\n '&': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings); //var rencstr = \"&<>'\\\"\".split(\"\");\n// TODO: CP remap (need to read file version to determine OS)\n\nvar unescapexml\n/*:StringConv*/\n= /*#__PURE__*/function () {\n /* 22.4.2.4 bstr (Basic String) */\n var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig,\n coderegex = /_x([\\da-fA-F]{4})_/ig;\n return function unescapexml(text\n /*:string*/\n )\n /*:string*/\n {\n var s = text + '',\n i = s.indexOf(\" -1 ? 16 : 10)) || $$;\n }).replace(coderegex, function (m, c) {\n return String.fromCharCode(parseInt(c, 16));\n });\n var j = s.indexOf(\"]]>\");\n return unescapexml(s.slice(0, i)) + s.slice(i + 9, j) + unescapexml(s.slice(j + 3));\n };\n}();\n\nvar decregex = /[&<>'\"]/g,\n charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\n\nfunction escapexml(text\n/*:string*/\n)\n/*:string*/\n{\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(charegex, function (s) {\n return \"_x\" + (\"000\" + s.charCodeAt(0).toString(16)).slice(-4) + \"_\";\n });\n}\n\nfunction escapexmltag(text\n/*:string*/\n)\n/*:string*/\n{\n return escapexml(text).replace(/ /g, \"_x0020_\");\n}\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\n\nfunction escapehtml(text\n/*:string*/\n)\n/*:string*/\n{\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(/\\n/g, \"
\").replace(htmlcharegex, function (s) {\n return \"&#x\" + (\"000\" + s.charCodeAt(0).toString(16)).slice(-4) + \";\";\n });\n}\n\nfunction escapexlml(text\n/*:string*/\n)\n/*:string*/\n{\n var s = text + '';\n return s.replace(decregex, function (y) {\n return rencoding[y];\n }).replace(htmlcharegex, function (s) {\n return \"&#x\" + s.charCodeAt(0).toString(16).toUpperCase() + \";\";\n });\n}\n/* TODO: handle codepages */\n\n\nvar xlml_fixstr\n/*:StringConv*/\n= /*#__PURE__*/function () {\n var entregex = /&#(\\d+);/g;\n\n function entrepl($$\n /*:string*/\n , $1\n /*:string*/\n )\n /*:string*/\n {\n return String.fromCharCode(parseInt($1, 10));\n }\n\n return function xlml_fixstr(str\n /*:string*/\n )\n /*:string*/\n {\n return str.replace(entregex, entrepl);\n };\n}();\n\nfunction xlml_unfixstr(str\n/*:string*/\n)\n/*:string*/\n{\n return str.replace(/(\\r\\n|[\\r\\n])/g, \"\\ \");\n}\n\nfunction parsexmlbool(value\n/*:any*/\n)\n/*:boolean*/\n{\n switch (value) {\n case 1:\n case true:\n case '1':\n case 'true':\n case 'TRUE':\n return true;\n\n /* case '0': case 'false': case 'FALSE':*/\n\n default:\n return false;\n }\n}\n\nfunction utf8reada(orig\n/*:string*/\n)\n/*:string*/\n{\n var out = \"\",\n i = 0,\n c = 0,\n d = 0,\n e = 0,\n f = 0,\n w = 0;\n\n while (i < orig.length) {\n c = orig.charCodeAt(i++);\n\n if (c < 128) {\n out += String.fromCharCode(c);\n continue;\n }\n\n d = orig.charCodeAt(i++);\n\n if (c > 191 && c < 224) {\n f = (c & 31) << 6;\n f |= d & 63;\n out += String.fromCharCode(f);\n continue;\n }\n\n e = orig.charCodeAt(i++);\n\n if (c < 240) {\n out += String.fromCharCode((c & 15) << 12 | (d & 63) << 6 | e & 63);\n continue;\n }\n\n f = orig.charCodeAt(i++);\n w = ((c & 7) << 18 | (d & 63) << 12 | (e & 63) << 6 | f & 63) - 65536;\n out += String.fromCharCode(0xD800 + (w >>> 10 & 1023));\n out += String.fromCharCode(0xDC00 + (w & 1023));\n }\n\n return out;\n}\n\nfunction utf8readb(data) {\n var out = new_raw_buf(2 * data.length),\n w,\n i,\n j = 1,\n k = 0,\n ww = 0,\n c;\n\n for (i = 0; i < data.length; i += j) {\n j = 1;\n if ((c = data.charCodeAt(i)) < 128) w = c;else if (c < 224) {\n w = (c & 31) * 64 + (data.charCodeAt(i + 1) & 63);\n j = 2;\n } else if (c < 240) {\n w = (c & 15) * 4096 + (data.charCodeAt(i + 1) & 63) * 64 + (data.charCodeAt(i + 2) & 63);\n j = 3;\n } else {\n j = 4;\n w = (c & 7) * 262144 + (data.charCodeAt(i + 1) & 63) * 4096 + (data.charCodeAt(i + 2) & 63) * 64 + (data.charCodeAt(i + 3) & 63);\n w -= 65536;\n ww = 0xD800 + (w >>> 10 & 1023);\n w = 0xDC00 + (w & 1023);\n }\n\n if (ww !== 0) {\n out[k++] = ww & 255;\n out[k++] = ww >>> 8;\n ww = 0;\n }\n\n out[k++] = w % 256;\n out[k++] = w >>> 8;\n }\n\n return out.slice(0, k).toString('ucs2');\n}\n\nfunction utf8readc(data) {\n return Buffer_from(data, 'binary').toString('utf8');\n}\n\nvar utf8corpus = \"foo bar baz\\xE2\\x98\\x83\\xF0\\x9F\\x8D\\xA3\";\nvar utf8read = has_buf && ( /*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\nvar utf8write\n/*:StringConv*/\n= has_buf ? function (data) {\n return Buffer_from(data, 'utf8').toString(\"binary\");\n} : function (orig\n/*:string*/\n)\n/*:string*/\n{\n var out\n /*:Array*/\n = [],\n i = 0,\n c = 0,\n d = 0;\n\n while (i < orig.length) {\n c = orig.charCodeAt(i++);\n\n switch (true) {\n case c < 128:\n out.push(String.fromCharCode(c));\n break;\n\n case c < 2048:\n out.push(String.fromCharCode(192 + (c >> 6)));\n out.push(String.fromCharCode(128 + (c & 63)));\n break;\n\n case c >= 55296 && c < 57344:\n c -= 55296;\n d = orig.charCodeAt(i++) - 56320 + (c << 10);\n out.push(String.fromCharCode(240 + (d >> 18 & 7)));\n out.push(String.fromCharCode(144 + (d >> 12 & 63)));\n out.push(String.fromCharCode(128 + (d >> 6 & 63)));\n out.push(String.fromCharCode(128 + (d & 63)));\n break;\n\n default:\n out.push(String.fromCharCode(224 + (c >> 12)));\n out.push(String.fromCharCode(128 + (c >> 6 & 63)));\n out.push(String.fromCharCode(128 + (c & 63)));\n }\n }\n\n return out.join(\"\");\n}; // matches ... extracts content\n\nvar matchtag = /*#__PURE__*/function () {\n var mtcache\n /*:{[k:string]:RegExp}*/\n = {}\n /*:any*/\n ;\n return function matchtag(f\n /*:string*/\n , g\n /*:?string*/\n )\n /*:RegExp*/\n {\n var t = f + \"|\" + (g || \"\");\n if (mtcache[t]) return mtcache[t];\n return mtcache[t] = new RegExp('<(?:\\\\w+:)?' + f + '(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)', g || \"\"\n /*:any*/\n );\n };\n}();\n\nvar htmldecode\n/*:{(s:string):string}*/\n= /*#__PURE__*/function () {\n var entities\n /*:Array<[RegExp, string]>*/\n = [['nbsp', ' '], ['middot', '·'], ['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']].map(function (x\n /*:[string, string]*/\n ) {\n return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]];\n });\n return function htmldecode(str\n /*:string*/\n )\n /*:string*/\n {\n var o = str // Remove new lines and spaces from start of content\n .replace(/^[\\t\\n\\r ]+/, \"\") // Remove new lines and spaces from end of content\n .replace(/[\\t\\n\\r ]+$/, \"\") // Added line which removes any white space characters after and before html tags\n .replace(/>\\s+/g, \">\").replace(/\\s+ tags with new lines\n .replace(/<\\s*[bB][rR]\\s*\\/?>/g, \"\\n\") // Strip HTML elements\n .replace(/<[^>]*>/g, \"\");\n\n for (var i = 0; i < entities.length; ++i) {\n o = o.replace(entities[i][0], entities[i][1]);\n }\n\n return o;\n };\n}();\n\nvar vtregex = /*#__PURE__*/function () {\n var vt_cache = {};\n return function vt_regex(bt) {\n if (vt_cache[bt] !== undefined) return vt_cache[bt];\n return vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)\", 'g');\n };\n}();\n\nvar vtvregex = /<\\/?(?:vt:)?variant>/g,\n vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)*/\n{\n var h = parsexmltag(data);\n var matches\n /*:Array*/\n = data.match(vtregex(h.baseType)) || [];\n var res\n /*:Array*/\n = [];\n\n if (matches.length != h.size) {\n if (opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n return res;\n }\n\n matches.forEach(function (x\n /*:string*/\n ) {\n var v = x.replace(vtvregex, \"\").match(vtmregex);\n if (v) res.push({\n v: utf8read(v[2]),\n t: v[1]\n });\n });\n return res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\n\nfunction writetag(f\n/*:string*/\n, g\n/*:string*/\n)\n/*:string*/\n{\n return '<' + f + (g.match(wtregex) ? ' xml:space=\"preserve\"' : \"\") + '>' + g + '';\n}\n\nfunction wxt_helper(h)\n/*:string*/\n{\n return keys(h).map(function (k) {\n return \" \" + k + '=\"' + h[k] + '\"';\n }).join(\"\");\n}\n\nfunction writextag(f\n/*:string*/\n, g\n/*:?string*/\n, h) {\n return '<' + f + (h != null ? wxt_helper(h) : \"\") + (g != null ? (g.match(wtregex) ? ' xml:space=\"preserve\"' : \"\") + '>' + g + '';\n}\n\nfunction write_w3cdtf(d\n/*:Date*/\n, t\n/*:?boolean*/\n)\n/*:string*/\n{\n try {\n return d.toISOString().replace(/\\.\\d*/, \"\");\n } catch (e) {\n if (t) throw e;\n }\n\n return \"\";\n}\n\nfunction write_vt(s, xlsx\n/*:?boolean*/\n)\n/*:string*/\n{\n switch (typeof s) {\n case 'string':\n var o = writextag('vt:lpwstr', escapexml(s));\n if (xlsx) o = o.replace(/"/g, \"_x0022_\");\n return o;\n\n case 'number':\n return writextag((s | 0) == s ? 'vt:i4' : 'vt:r8', escapexml(String(s)));\n\n case 'boolean':\n return writextag('vt:bool', s ? 'true' : 'false');\n }\n\n if (s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n throw new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)\n/*:string*/\n{\n if (has_buf &&\n /*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/\n Buffer.isBuffer(d)) return d.toString('utf8');\n if (typeof d === 'string') return d;\n /* duktape */\n\n if (typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n throw new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags */\n\n\nvar xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg; //var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\n\nvar XMLNS = {\n CORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n CUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n EXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n CT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n RELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n TCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n 'dc': 'http://purl.org/dc/elements/1.1/',\n 'dcterms': 'http://purl.org/dc/terms/',\n 'dcmitype': 'http://purl.org/dc/dcmitype/',\n 'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n 'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n 'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n 'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n 'xsd': 'http://www.w3.org/2001/XMLSchema'\n}\n/*:any*/\n;\nvar XMLNS_main = ['http://schemas.openxmlformats.org/spreadsheetml/2006/main', 'http://purl.oclc.org/ooxml/spreadsheetml/main', 'http://schemas.microsoft.com/office/excel/2006/main', 'http://schemas.microsoft.com/office/excel/2006/2'];\nvar XLMLNS = {\n 'o': 'urn:schemas-microsoft-com:office:office',\n 'x': 'urn:schemas-microsoft-com:office:excel',\n 'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n 'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n 'mv': 'http://macVmlSchemaUri',\n 'v': 'urn:schemas-microsoft-com:vml',\n 'html': 'http://www.w3.org/TR/REC-html40'\n}\n/*:any*/\n;\n\nfunction read_double_le(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n var s = 1 - 2 * (b[idx + 7] >>> 7);\n var e = ((b[idx + 7] & 0x7f) << 4) + (b[idx + 6] >>> 4 & 0x0f);\n var m = b[idx + 6] & 0x0f;\n\n for (var i = 5; i >= 0; --i) {\n m = m * 256 + b[idx + i];\n }\n\n if (e == 0x7ff) return m == 0 ? s * Infinity : NaN;\n if (e == 0) e = -1022;else {\n e -= 1023;\n m += Math.pow(2, 52);\n }\n return s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b\n/*:RawBytes|CFBlob*/\n, v\n/*:number*/\n, idx\n/*:number*/\n) {\n var bs = (v < 0 || 1 / v == -Infinity ? 1 : 0) << 7,\n e = 0,\n m = 0;\n var av = bs ? -v : v;\n\n if (!isFinite(av)) {\n e = 0x7ff;\n m = isNaN(v) ? 0x6969 : 0;\n } else if (av == 0) e = m = 0;else {\n e = Math.floor(Math.log(av) / Math.LN2);\n m = av * Math.pow(2, 52 - e);\n\n if (e <= -1023 && (!isFinite(m) || m < Math.pow(2, 52))) {\n e = -1022;\n } else {\n m -= Math.pow(2, 52);\n e += 1023;\n }\n }\n\n for (var i = 0; i <= 5; ++i, m /= 256) {\n b[idx + i] = m & 0xff;\n }\n\n b[idx + 6] = (e & 0x0f) << 4 | m & 0xf;\n b[idx + 7] = e >> 4 | bs;\n}\n\nvar ___toBuffer = function ___toBuffer(bufs\n/*:Array >*/\n)\n/*:RawBytes*/\n{\n var x = [],\n w = 10240;\n\n for (var i = 0; i < bufs[0].length; ++i) {\n if (bufs[0][i]) for (var j = 0, L = bufs[0][i].length; j < L; j += w) {\n x.push.apply(x, bufs[0][i].slice(j, j + w));\n }\n }\n\n return x;\n};\n\nvar __toBuffer = has_buf ? function (bufs) {\n return bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0]) ? Buffer.concat(bufs[0].map(function (x) {\n return Buffer.isBuffer(x) ? x : Buffer_from(x);\n })) : ___toBuffer(bufs);\n} : ___toBuffer;\n\nvar ___utf16le = function ___utf16le(b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, e\n/*:number*/\n)\n/*:string*/\n{\n var ss\n /*:Array*/\n = [];\n\n for (var i = s; i < e; i += 2) {\n ss.push(String.fromCharCode(__readUInt16LE(b, i)));\n }\n\n return ss.join(\"\").replace(chr0, '');\n};\n\nvar __utf16le = has_buf ? function (b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, e\n/*:number*/\n)\n/*:string*/\n{\n if (!Buffer.isBuffer(b)\n /*:: || !(b instanceof Buffer)*/\n ) return ___utf16le(b, s, e);\n return b.toString('utf16le', s, e).replace(chr0, '')\n /*.replace(chr1,'!')*/\n ;\n} : ___utf16le;\n\nvar ___hexlify = function ___hexlify(b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, l\n/*:number*/\n)\n/*:string*/\n{\n var ss\n /*:Array*/\n = [];\n\n for (var i = s; i < s + l; ++i) {\n ss.push((\"0\" + b[i].toString(16)).slice(-2));\n }\n\n return ss.join(\"\");\n};\n\nvar __hexlify = has_buf ? function (b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, l\n/*:number*/\n)\n/*:string*/\n{\n return Buffer.isBuffer(b)\n /*:: && b instanceof Buffer*/\n ? b.toString('hex', s, s + l) : ___hexlify(b, s, l);\n} : ___hexlify;\n\nvar ___utf8 = function ___utf8(b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, e\n/*:number*/\n) {\n var ss = [];\n\n for (var i = s; i < e; i++) {\n ss.push(String.fromCharCode(__readUInt8(b, i)));\n }\n\n return ss.join(\"\");\n};\n\nvar __utf8 = has_buf ? function utf8_b(b\n/*:RawBytes|CFBlob*/\n, s\n/*:number*/\n, e\n/*:number*/\n) {\n return Buffer.isBuffer(b)\n /*:: && (b instanceof Buffer)*/\n ? b.toString('utf8', s, e) : ___utf8(b, s, e);\n} : ___utf8;\n\nvar ___lpstr = function ___lpstr(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n};\n\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function ___cpstr(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n};\n\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function ___lpwstr(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n var len = 2 * __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : \"\";\n};\n\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf16le(b, i + 4, i + 4 + len) : \"\";\n};\n\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function ___8lpp4(b\n/*:RawBytes|CFBlob*/\n, i\n/*:number*/\n) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? __utf8(b, i + 4, i + 4 + len) : \"\";\n};\n\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function ___double(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n) {\n return read_double_le(b, idx);\n};\n\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) {\n return Array.isArray(a) || typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array;\n};\n\nif (has_buf\n/*:: && typeof Buffer !== 'undefined'*/\n) {\n __lpstr = function lpstr_b(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n if (!Buffer.isBuffer(b)\n /*:: || !(b instanceof Buffer)*/\n ) return ___lpstr(b, i);\n var len = b.readUInt32LE(i);\n return len > 0 ? b.toString('utf8', i + 4, i + 4 + len - 1) : \"\";\n };\n\n __cpstr = function cpstr_b(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n if (!Buffer.isBuffer(b)\n /*:: || !(b instanceof Buffer)*/\n ) return ___cpstr(b, i);\n var len = b.readUInt32LE(i);\n return len > 0 ? b.toString('utf8', i + 4, i + 4 + len - 1) : \"\";\n };\n\n __lpwstr = function lpwstr_b(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n if (!Buffer.isBuffer(b)\n /*:: || !(b instanceof Buffer)*/\n ) return ___lpwstr(b, i);\n var len = 2 * b.readUInt32LE(i);\n return b.toString('utf16le', i + 4, i + 4 + len - 1);\n };\n\n __lpp4 = function lpp4_b(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n if (!Buffer.isBuffer(b)\n /*:: || !(b instanceof Buffer)*/\n ) return ___lpp4(b, i);\n var len = b.readUInt32LE(i);\n return b.toString('utf16le', i + 4, i + 4 + len);\n };\n\n __8lpp4 = function lpp4_8b(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n if (!Buffer.isBuffer(b)\n /*:: || !(b instanceof Buffer)*/\n ) return ___8lpp4(b, i);\n var len = b.readUInt32LE(i);\n return b.toString('utf8', i + 4, i + 4 + len);\n };\n\n __double = function double_(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n if (Buffer.isBuffer(b)\n /*::&& b instanceof Buffer*/\n ) return b.readDoubleLE(i);\n return ___double(b, i);\n };\n\n is_buf = function is_buf_b(a) {\n return Buffer.isBuffer(a) || Array.isArray(a) || typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array;\n };\n}\n/* from js-xls */\n\n\nfunction cpdoit() {\n __utf16le = function __utf16le(b\n /*:RawBytes|CFBlob*/\n , s\n /*:number*/\n , e\n /*:number*/\n ) {\n return $cptable.utils.decode(1200, b.slice(s, e)).replace(chr0, '');\n };\n\n __utf8 = function __utf8(b\n /*:RawBytes|CFBlob*/\n , s\n /*:number*/\n , e\n /*:number*/\n ) {\n return $cptable.utils.decode(65001, b.slice(s, e));\n };\n\n __lpstr = function __lpstr(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __cpstr = function __cpstr(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __lpwstr = function __lpwstr(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n var len = 2 * __readUInt32LE(b, i);\n\n return len > 0 ? $cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len - 1)) : \"\";\n };\n\n __lpp4 = function __lpp4(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? $cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len)) : \"\";\n };\n\n __8lpp4 = function __8lpp4(b\n /*:RawBytes|CFBlob*/\n , i\n /*:number*/\n ) {\n var len = __readUInt32LE(b, i);\n\n return len > 0 ? $cptable.utils.decode(65001, b.slice(i + 4, i + 4 + len)) : \"\";\n };\n}\n\nif (typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function __readUInt8(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n return b[idx];\n};\n\nvar __readUInt16LE = function __readUInt16LE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n return b[idx + 1] * (1 << 8) + b[idx];\n};\n\nvar __readInt16LE = function __readInt16LE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n var u = b[idx + 1] * (1 << 8) + b[idx];\n return u < 0x8000 ? u : (0xffff - u + 1) * -1;\n};\n\nvar __readUInt32LE = function __readUInt32LE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n return b[idx + 3] * (1 << 24) + (b[idx + 2] << 16) + (b[idx + 1] << 8) + b[idx];\n};\n\nvar __readInt32LE = function __readInt32LE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n return b[idx + 3] << 24 | b[idx + 2] << 16 | b[idx + 1] << 8 | b[idx];\n};\n\nvar __readInt32BE = function __readInt32BE(b\n/*:RawBytes|CFBlob*/\n, idx\n/*:number*/\n)\n/*:number*/\n{\n return b[idx] << 24 | b[idx + 1] << 16 | b[idx + 2] << 8 | b[idx + 3];\n};\n\nfunction ReadShift(size\n/*:number*/\n, t\n/*:?string*/\n)\n/*:number|string*/\n{\n var o = \"\",\n oI\n /*:: :number = 0*/\n ,\n oR,\n oo = [],\n w,\n vv,\n i,\n loc;\n\n switch (t) {\n case 'dbcs':\n loc = this.l;\n if (has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l + 2 * size).toString(\"utf16le\");else for (i = 0; i < size; ++i) {\n o += String.fromCharCode(__readUInt16LE(this, loc));\n loc += 2;\n }\n size *= 2;\n break;\n\n case 'utf8':\n o = __utf8(this, this.l, this.l + size);\n break;\n\n case 'utf16le':\n size *= 2;\n o = __utf16le(this, this.l, this.l + size);\n break;\n\n case 'wstr':\n if (typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + 2 * size));else return ReadShift.call(this, size, 'dbcs');\n size = 2 * size;\n break;\n\n /* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\n case 'lpstr-ansi':\n o = __lpstr(this, this.l);\n size = 4 + __readUInt32LE(this, this.l);\n break;\n\n case 'lpstr-cp':\n o = __cpstr(this, this.l);\n size = 4 + __readUInt32LE(this, this.l);\n break;\n\n /* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\n case 'lpwstr':\n o = __lpwstr(this, this.l);\n size = 4 + 2 * __readUInt32LE(this, this.l);\n break;\n\n /* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\n case 'lpp4':\n size = 4 + __readUInt32LE(this, this.l);\n o = __lpp4(this, this.l);\n if (size & 0x02) size += 2;\n break;\n\n /* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\n case '8lpp4':\n size = 4 + __readUInt32LE(this, this.l);\n o = __8lpp4(this, this.l);\n if (size & 0x03) size += 4 - (size & 0x03);\n break;\n\n case 'cstr':\n size = 0;\n o = \"\";\n\n while ((w = __readUInt8(this, this.l + size++)) !== 0) {\n oo.push(_getchar(w));\n }\n\n o = oo.join(\"\");\n break;\n\n case '_wstr':\n size = 0;\n o = \"\";\n\n while ((w = __readUInt16LE(this, this.l + size)) !== 0) {\n oo.push(_getchar(w));\n size += 2;\n }\n\n size += 2;\n o = oo.join(\"\");\n break;\n\n /* sbcs and dbcs support continue records in the SST way TODO codepages */\n\n case 'dbcs-cont':\n o = \"\";\n loc = this.l;\n\n for (i = 0; i < size; ++i) {\n if (this.lens && this.lens.indexOf(loc) !== -1) {\n w = __readUInt8(this, loc);\n this.l = loc + 1;\n vv = ReadShift.call(this, size - i, w ? 'dbcs-cont' : 'sbcs-cont');\n return oo.join(\"\") + vv;\n }\n\n oo.push(_getchar(__readUInt16LE(this, loc)));\n loc += 2;\n }\n\n o = oo.join(\"\");\n size *= 2;\n break;\n\n case 'cpstr':\n if (typeof $cptable !== 'undefined') {\n o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n break;\n }\n\n /* falls through */\n\n case 'sbcs-cont':\n o = \"\";\n loc = this.l;\n\n for (i = 0; i != size; ++i) {\n if (this.lens && this.lens.indexOf(loc) !== -1) {\n w = __readUInt8(this, loc);\n this.l = loc + 1;\n vv = ReadShift.call(this, size - i, w ? 'dbcs-cont' : 'sbcs-cont');\n return oo.join(\"\") + vv;\n }\n\n oo.push(_getchar(__readUInt8(this, loc)));\n loc += 1;\n }\n\n o = oo.join(\"\");\n break;\n\n default:\n switch (size) {\n case 1:\n oI = __readUInt8(this, this.l);\n this.l++;\n return oI;\n\n case 2:\n oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l);\n this.l += 2;\n return oI;\n\n case 4:\n case -4:\n if (t === 'i' || (this[this.l + 3] & 0x80) === 0) {\n oI = (size > 0 ? __readInt32LE : __readInt32BE)(this, this.l);\n this.l += 4;\n return oI;\n } else {\n oR = __readUInt32LE(this, this.l);\n this.l += 4;\n }\n\n return oR;\n\n case 8:\n case -8:\n if (t === 'f') {\n if (size == 8) oR = __double(this, this.l);else oR = __double([this[this.l + 7], this[this.l + 6], this[this.l + 5], this[this.l + 4], this[this.l + 3], this[this.l + 2], this[this.l + 1], this[this.l + 0]], 0);\n this.l += 8;\n return oR;\n } else size = 8;\n\n /* falls through */\n\n case 16:\n o = __hexlify(this, this.l, size);\n break;\n }\n\n }\n\n this.l += size;\n return o;\n}\n\nvar __writeUInt32LE = function __writeUInt32LE(b\n/*:RawBytes|CFBlob*/\n, val\n/*:number*/\n, idx\n/*:number*/\n)\n/*:void*/\n{\n b[idx] = val & 0xFF;\n b[idx + 1] = val >>> 8 & 0xFF;\n b[idx + 2] = val >>> 16 & 0xFF;\n b[idx + 3] = val >>> 24 & 0xFF;\n};\n\nvar __writeInt32LE = function __writeInt32LE(b\n/*:RawBytes|CFBlob*/\n, val\n/*:number*/\n, idx\n/*:number*/\n)\n/*:void*/\n{\n b[idx] = val & 0xFF;\n b[idx + 1] = val >> 8 & 0xFF;\n b[idx + 2] = val >> 16 & 0xFF;\n b[idx + 3] = val >> 24 & 0xFF;\n};\n\nvar __writeUInt16LE = function __writeUInt16LE(b\n/*:RawBytes|CFBlob*/\n, val\n/*:number*/\n, idx\n/*:number*/\n)\n/*:void*/\n{\n b[idx] = val & 0xFF;\n b[idx + 1] = val >>> 8 & 0xFF;\n};\n\nfunction WriteShift(t\n/*:number*/\n, val\n/*:string|number*/\n, f\n/*:?string*/\n)\n/*:any*/\n{\n var size = 0,\n i = 0;\n\n if (f === 'dbcs') {\n /*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n for (i = 0; i != val.length; ++i) {\n __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n }\n\n size = 2 * val.length;\n } else if (f === 'sbcs') {\n if (typeof $cptable !== 'undefined' && current_ansi == 874) {\n /* TODO: use tables directly, don't encode */\n\n /*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n for (i = 0; i != val.length; ++i) {\n var cppayload = $cptable.utils.encode(current_ansi, val.charAt(i));\n this[this.l + i] = cppayload[0];\n }\n } else {\n /*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n val = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n /*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\n for (i = 0; i != val.length; ++i) {\n this[this.l + i] = val.charCodeAt(i) & 0xFF;\n }\n }\n\n size = val.length;\n } else if (f === 'hex') {\n for (; i < t; ++i) {\n /*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n this[this.l++] = parseInt(val.slice(2 * i, 2 * i + 2), 16) || 0;\n }\n\n return this;\n } else if (f === 'utf16le') {\n /*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n var end\n /*:number*/\n = Math.min(this.l + t, this.length);\n\n for (i = 0; i < Math.min(val.length, t); ++i) {\n var cc = val.charCodeAt(i);\n this[this.l++] = cc & 0xff;\n this[this.l++] = cc >> 8;\n }\n\n while (this.l < end) {\n this[this.l++] = 0;\n }\n\n return this;\n } else\n /*:: if(typeof val === 'number') */\n switch (t) {\n case 1:\n size = 1;\n this[this.l] = val & 0xFF;\n break;\n\n case 2:\n size = 2;\n this[this.l] = val & 0xFF;\n val >>>= 8;\n this[this.l + 1] = val & 0xFF;\n break;\n\n case 3:\n size = 3;\n this[this.l] = val & 0xFF;\n val >>>= 8;\n this[this.l + 1] = val & 0xFF;\n val >>>= 8;\n this[this.l + 2] = val & 0xFF;\n break;\n\n case 4:\n size = 4;\n\n __writeUInt32LE(this, val, this.l);\n\n break;\n\n case 8:\n size = 8;\n\n if (f === 'f') {\n write_double_le(this, val, this.l);\n break;\n }\n\n /* falls through */\n\n case 16:\n break;\n\n case -4:\n size = 4;\n\n __writeInt32LE(this, val, this.l);\n\n break;\n }\n\n this.l += size;\n return this;\n}\n\nfunction CheckField(hexstr\n/*:string*/\n, fld\n/*:string*/\n)\n/*:void*/\n{\n var m = __hexlify(this, this.l, hexstr.length >> 1);\n\n if (m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n this.l += hexstr.length >> 1;\n}\n\nfunction prep_blob(blob, pos\n/*:number*/\n)\n/*:void*/\n{\n blob.l = pos;\n blob.read_shift =\n /*::(*/\n ReadShift\n /*:: :any)*/\n ;\n blob.chk = CheckField;\n blob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length\n/*:: :number, opts?:any */\n) {\n blob.l += length;\n}\n\nfunction new_buf(sz\n/*:number*/\n)\n/*:Block*/\n{\n var o = new_raw_buf(sz);\n prep_blob(o, 0);\n return o;\n}\n/* [MS-XLSB] 2.1.4 Record */\n\n\nfunction recordhopper(data, cb\n/*:RecordHopperCB*/\n, opts\n/*:?any*/\n) {\n if (!data) return;\n var tmpbyte, cntbyte, length;\n prep_blob(data, data.l || 0);\n var L = data.length,\n RT = 0,\n tgt = 0;\n\n while (data.l < L) {\n RT = data.read_shift(1);\n if (RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F) << 7);\n var R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n tmpbyte = data.read_shift(1);\n length = tmpbyte & 0x7F;\n\n for (cntbyte = 1; cntbyte < 4 && tmpbyte & 0x80; ++cntbyte) {\n length += ((tmpbyte = data.read_shift(1)) & 0x7F) << 7 * cntbyte;\n }\n\n tgt = data.l + length;\n var d = R.f && R.f(data, length, opts);\n data.l = tgt;\n if (cb(d, R, RT)) return;\n }\n}\n/* control buffer usage for fixed-length buffers */\n\n\nfunction buf_array()\n/*:BufArray*/\n{\n var bufs\n /*:Array*/\n = [],\n blksz = has_buf ? 256 : 2048;\n\n var newblk = function ba_newblk(sz\n /*:number*/\n )\n /*:Block*/\n {\n var o\n /*:Block*/\n = new_buf(sz)\n /*:any*/\n ;\n prep_blob(o, 0);\n return o;\n };\n\n var curbuf\n /*:Block*/\n = newblk(blksz);\n\n var endbuf = function ba_endbuf() {\n if (!curbuf) return;\n\n if (curbuf.length > curbuf.l) {\n curbuf = curbuf.slice(0, curbuf.l);\n curbuf.l = curbuf.length;\n }\n\n if (curbuf.length > 0) bufs.push(curbuf);\n curbuf = null;\n };\n\n var next = function ba_next(sz\n /*:number*/\n )\n /*:Block*/\n {\n if (curbuf && sz < curbuf.length - curbuf.l) return curbuf;\n endbuf();\n return curbuf = newblk(Math.max(sz + 1, blksz));\n };\n\n var end = function ba_end() {\n endbuf();\n return bconcat(bufs);\n };\n\n var push = function ba_push(buf) {\n endbuf();\n curbuf = buf;\n if (curbuf.l == null) curbuf.l = curbuf.length;\n next(blksz);\n };\n\n return {\n next: next,\n push: push,\n end: end,\n _bufs: bufs\n }\n /*:any*/\n ;\n}\n\nfunction write_record(ba\n/*:BufArray*/\n, type\n/*:number*/\n, payload, length\n/*:?number*/\n) {\n var t\n /*:number*/\n = +type,\n l;\n if (isNaN(t)) return; // TODO: throw something here?\n\n if (!length) length = XLSBRecordEnum[t].p || (payload || []).length || 0;\n l = 1 + (t >= 0x80 ? 1 : 0) + 1\n /* + length*/\n ;\n if (length >= 0x80) ++l;\n if (length >= 0x4000) ++l;\n if (length >= 0x200000) ++l;\n var o = ba.next(l);\n if (t <= 0x7F) o.write_shift(1, t);else {\n o.write_shift(1, (t & 0x7F) + 0x80);\n o.write_shift(1, t >> 7);\n }\n\n for (var i = 0; i != 4; ++i) {\n if (length >= 0x80) {\n o.write_shift(1, (length & 0x7F) + 0x80);\n length >>= 7;\n } else {\n o.write_shift(1, length);\n break;\n }\n }\n\n if (\n /*:: length != null &&*/\n length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\n\n\nfunction shift_cell_xls(cell\n/*:CellAddress*/\n, tgt\n/*:any*/\n, opts\n/*:?any*/\n)\n/*:CellAddress*/\n{\n var out = dup(cell);\n\n if (tgt.s) {\n if (out.cRel) out.c += tgt.s.c;\n if (out.rRel) out.r += tgt.s.r;\n } else {\n if (out.cRel) out.c += tgt.c;\n if (out.rRel) out.r += tgt.r;\n }\n\n if (!opts || opts.biff < 12) {\n while (out.c >= 0x100) {\n out.c -= 0x100;\n }\n\n while (out.r >= 0x10000) {\n out.r -= 0x10000;\n }\n }\n\n return out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n var out = dup(cell);\n out.s = shift_cell_xls(out.s, range.s, opts);\n out.e = shift_cell_xls(out.e, range.s, opts);\n return out;\n}\n\nfunction encode_cell_xls(c\n/*:CellAddress*/\n, biff\n/*:number*/\n)\n/*:string*/\n{\n if (c.cRel && c.c < 0) {\n c = dup(c);\n\n while (c.c < 0) {\n c.c += biff > 8 ? 0x4000 : 0x100;\n }\n }\n\n if (c.rRel && c.r < 0) {\n c = dup(c);\n\n while (c.r < 0) {\n c.r += biff > 8 ? 0x100000 : biff > 5 ? 0x10000 : 0x4000;\n }\n }\n\n var s = encode_cell(c);\n if (!c.cRel && c.cRel != null) s = fix_col(s);\n if (!c.rRel && c.rRel != null) s = fix_row(s);\n return s;\n}\n\nfunction encode_range_xls(r, opts)\n/*:string*/\n{\n if (r.s.r == 0 && !r.s.rRel) {\n if (r.e.r == (opts.biff >= 12 ? 0xFFFFF : opts.biff >= 8 ? 0x10000 : 0x4000) && !r.e.rRel) {\n return (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n }\n }\n\n if (r.s.c == 0 && !r.s.cRel) {\n if (r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n return (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n }\n }\n\n return encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\n\nfunction decode_row(rowstr\n/*:string*/\n)\n/*:number*/\n{\n return parseInt(unfix_row(rowstr), 10) - 1;\n}\n\nfunction encode_row(row\n/*:number*/\n)\n/*:string*/\n{\n return \"\" + (row + 1);\n}\n\nfunction fix_row(cstr\n/*:string*/\n)\n/*:string*/\n{\n return cstr.replace(/([A-Z]|^)(\\d+)$/, \"$1$$$2\");\n}\n\nfunction unfix_row(cstr\n/*:string*/\n)\n/*:string*/\n{\n return cstr.replace(/\\$(\\d+)$/, \"$1\");\n}\n\nfunction decode_col(colstr\n/*:string*/\n)\n/*:number*/\n{\n var c = unfix_col(colstr),\n d = 0,\n i = 0;\n\n for (; i !== c.length; ++i) {\n d = 26 * d + c.charCodeAt(i) - 64;\n }\n\n return d - 1;\n}\n\nfunction encode_col(col\n/*:number*/\n)\n/*:string*/\n{\n if (col < 0) throw new Error(\"invalid column \" + col);\n var s = \"\";\n\n for (++col; col; col = Math.floor((col - 1) / 26)) {\n s = String.fromCharCode((col - 1) % 26 + 65) + s;\n }\n\n return s;\n}\n\nfunction fix_col(cstr\n/*:string*/\n)\n/*:string*/\n{\n return cstr.replace(/^([A-Z])/, \"$$$1\");\n}\n\nfunction unfix_col(cstr\n/*:string*/\n)\n/*:string*/\n{\n return cstr.replace(/^\\$([A-Z])/, \"$1\");\n}\n\nfunction split_cell(cstr\n/*:string*/\n)\n/*:Array*/\n{\n return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/, \"$1,$2\").split(\",\");\n} //function decode_cell(cstr/*:string*/)/*:CellAddress*/ { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\n\n\nfunction decode_cell(cstr\n/*:string*/\n)\n/*:CellAddress*/\n{\n var R = 0,\n C = 0;\n\n for (var i = 0; i < cstr.length; ++i) {\n var cc = cstr.charCodeAt(i);\n if (cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);else if (cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n }\n\n return {\n c: C - 1,\n r: R - 1\n };\n} //function encode_cell(cell/*:CellAddress*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); }\n\n\nfunction encode_cell(cell\n/*:CellAddress*/\n)\n/*:string*/\n{\n var col = cell.c + 1;\n var s = \"\";\n\n for (; col; col = (col - 1) / 26 | 0) {\n s = String.fromCharCode((col - 1) % 26 + 65) + s;\n }\n\n return s + (cell.r + 1);\n}\n\nfunction decode_range(range\n/*:string*/\n)\n/*:Range*/\n{\n var idx = range.indexOf(\":\");\n if (idx == -1) return {\n s: decode_cell(range),\n e: decode_cell(range)\n };\n return {\n s: decode_cell(range.slice(0, idx)),\n e: decode_cell(range.slice(idx + 1))\n };\n}\n/*# if only one arg, it is assumed to be a Range. If 2 args, both are cell addresses */\n\n\nfunction encode_range(cs\n/*:CellAddrSpec|Range*/\n, ce\n/*:?CellAddrSpec*/\n)\n/*:string*/\n{\n if (typeof ce === 'undefined' || typeof ce === 'number') {\n /*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n return encode_range(cs.s, cs.e);\n }\n /*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\n\n if (typeof cs !== 'string') cs = encode_cell(cs\n /*:any*/\n );\n if (typeof ce !== 'string') ce = encode_cell(ce\n /*:any*/\n );\n /*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n\n /*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\n return cs == ce ? cs : cs + \":\" + ce;\n}\n\nfunction safe_decode_range(range\n/*:string*/\n)\n/*:Range*/\n{\n var o = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n var idx = 0,\n i = 0,\n cc = 0;\n var len = range.length;\n\n for (idx = 0; i < len; ++i) {\n if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n o.s.c = --idx;\n\n for (idx = 0; i < len; ++i) {\n if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;\n idx = 10 * idx + cc;\n }\n\n o.s.r = --idx;\n\n if (i === len || cc != 10) {\n o.e.c = o.s.c;\n o.e.r = o.s.r;\n return o;\n }\n\n ++i;\n\n for (idx = 0; i != len; ++i) {\n if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n o.e.c = --idx;\n\n for (idx = 0; i != len; ++i) {\n if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;\n idx = 10 * idx + cc;\n }\n\n o.e.r = --idx;\n return o;\n}\n\nfunction safe_format_cell(cell\n/*:Cell*/\n, v\n/*:any*/\n) {\n var q = cell.t == 'd' && v instanceof Date;\n if (cell.z != null) try {\n return cell.w = SSF_format(cell.z, q ? datenum(v) : v);\n } catch (e) {}\n\n try {\n return cell.w = SSF_format((cell.XF || {}).numFmtId || (q ? 14 : 0), q ? datenum(v) : v);\n } catch (e) {\n return '' + v;\n }\n}\n\nfunction format_cell(cell\n/*:Cell*/\n, v\n/*:any*/\n, o\n/*:any*/\n) {\n if (cell == null || cell.t == null || cell.t == 'z') return \"\";\n if (cell.w !== undefined) return cell.w;\n if (cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n if (cell.t == \"e\") return BErr[cell.v] || cell.v;\n if (v == undefined) return safe_format_cell(cell, cell.v);\n return safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet\n/*:Worksheet*/\n, opts)\n/*:Workbook*/\n{\n var n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n var sheets = {};\n sheets[n] = sheet;\n return {\n SheetNames: [n],\n Sheets: sheets\n };\n}\n\nfunction sheet_add_aoa(_ws\n/*:?Worksheet*/\n, data\n/*:AOA*/\n, opts\n/*:?any*/\n)\n/*:Worksheet*/\n{\n var o = opts || {};\n var dense = _ws ? Array.isArray(_ws) : o.dense;\n if (DENSE != null && dense == null) dense = DENSE;\n var ws\n /*:Worksheet*/\n = _ws || (dense ? []\n /*:any*/\n : {}\n /*:any*/\n );\n var _R = 0,\n _C = 0;\n\n if (ws && o.origin != null) {\n if (typeof o.origin == 'number') _R = o.origin;else {\n var _origin\n /*:CellAddress*/\n = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\n _R = _origin.r;\n _C = _origin.c;\n }\n if (!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n }\n\n var range\n /*:Range*/\n = {\n s: {\n c: 10000000,\n r: 10000000\n },\n e: {\n c: 0,\n r: 0\n }\n }\n /*:any*/\n ;\n\n if (ws['!ref']) {\n var _range = safe_decode_range(ws['!ref']);\n\n range.s.c = _range.s.c;\n range.s.r = _range.s.r;\n range.e.c = Math.max(range.e.c, _range.e.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n if (_R == -1) range.e.r = _R = _range.e.r + 1;\n }\n\n for (var R = 0; R != data.length; ++R) {\n if (!data[R]) continue;\n if (!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\n for (var C = 0; C != data[R].length; ++C) {\n if (typeof data[R][C] === 'undefined') continue;\n var cell\n /*:Cell*/\n = {\n v: data[R][C]\n }\n /*:any*/\n ;\n\n var __R = _R + R,\n __C = _C + C;\n\n if (range.s.r > __R) range.s.r = __R;\n if (range.s.c > __C) range.s.c = __C;\n if (range.e.r < __R) range.e.r = __R;\n if (range.e.c < __C) range.e.c = __C;\n if (data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];else {\n if (Array.isArray(cell.v)) {\n cell.f = data[R][C][1];\n cell.v = cell.v[0];\n }\n\n if (cell.v === null) {\n if (cell.f) cell.t = 'n';else if (o.nullError) {\n cell.t = 'e';\n cell.v = 0;\n } else if (!o.sheetStubs) continue;else cell.t = 'z';\n } else if (typeof cell.v === 'number') cell.t = 'n';else if (typeof cell.v === 'boolean') cell.t = 'b';else if (cell.v instanceof Date) {\n cell.z = o.dateNF || table_fmt[14];\n\n if (o.cellDates) {\n cell.t = 'd';\n cell.w = SSF_format(cell.z, datenum(cell.v));\n } else {\n cell.t = 'n';\n cell.v = datenum(cell.v);\n cell.w = SSF_format(cell.z, cell.v);\n }\n } else cell.t = 's';\n }\n\n if (dense) {\n if (!ws[__R]) ws[__R] = [];\n if (ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n ws[__R][__C] = cell;\n } else {\n var cell_ref = encode_cell({\n c: __C,\n r: __R\n }\n /*:any*/\n );\n if (ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n ws[cell_ref] = cell;\n }\n }\n }\n\n if (range.s.c < 10000000) ws['!ref'] = encode_range(range);\n return ws;\n}\n\nfunction aoa_to_sheet(data\n/*:AOA*/\n, opts\n/*:?any*/\n)\n/*:Worksheet*/\n{\n return sheet_add_aoa(null, data, opts);\n}\n\nfunction parse_Int32LE(data) {\n return data.read_shift(4, 'i');\n}\n\nfunction write_UInt32LE(x\n/*:number*/\n, o) {\n if (!o) o = new_buf(4);\n o.write_shift(4, x);\n return o;\n}\n/* [MS-XLSB] 2.5.168 */\n\n\nfunction parse_XLWideString(data\n/*::, length*/\n)\n/*:string*/\n{\n var cchCharacters = data.read_shift(4);\n return cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\n\nfunction write_XLWideString(data\n/*:string*/\n, o) {\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(4 + 2 * data.length);\n }\n\n o.write_shift(4, data.length);\n if (data.length > 0) o.write_shift(0, data, 'dbcs');\n return _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\n\n\nfunction parse_StrRun(data) {\n return {\n ich: data.read_shift(2),\n ifnt: data.read_shift(2)\n };\n}\n\nfunction write_StrRun(run, o) {\n if (!o) o = new_buf(4);\n o.write_shift(2, run.ich || 0);\n o.write_shift(2, run.ifnt || 0);\n return o;\n}\n/* [MS-XLSB] 2.5.121 */\n\n\nfunction parse_RichStr(data, length\n/*:number*/\n)\n/*:XLString*/\n{\n var start = data.l;\n var flags = data.read_shift(1);\n var str = parse_XLWideString(data);\n var rgsStrRun = [];\n var z = {\n t: str,\n h: str\n }\n /*:any*/\n ;\n\n if ((flags & 1) !== 0) {\n /* fRichStr */\n\n /* TODO: formatted string */\n var dwSizeStrRun = data.read_shift(4);\n\n for (var i = 0; i != dwSizeStrRun; ++i) {\n rgsStrRun.push(parse_StrRun(data));\n }\n\n z.r = rgsStrRun;\n } else z.r = [{\n ich: 0,\n ifnt: 0\n }]; //if((flags & 2) !== 0) { /* fExtStr */\n //\t/* TODO: phonetic string */\n //}\n\n\n data.l = start + length;\n return z;\n}\n\nfunction write_RichStr(str\n/*:XLString*/\n, o\n/*:?Block*/\n)\n/*:Block*/\n{\n /* TODO: formatted string */\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(15 + 4 * str.t.length);\n }\n\n o.write_shift(1, 0);\n write_XLWideString(str.t, o);\n return _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\n\n\nvar parse_BrtCommentText = parse_RichStr;\n\nfunction write_BrtCommentText(str\n/*:XLString*/\n, o\n/*:?Block*/\n)\n/*:Block*/\n{\n /* TODO: formatted string */\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(23 + 4 * str.t.length);\n }\n\n o.write_shift(1, 1);\n write_XLWideString(str.t, o);\n o.write_shift(4, 1);\n write_StrRun({\n ich: 0,\n ifnt: 0\n }, o);\n return _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.5.9 */\n\n\nfunction parse_XLSBCell(data)\n/*:any*/\n{\n var col = data.read_shift(4);\n var iStyleRef = data.read_shift(2);\n iStyleRef += data.read_shift(1) << 16;\n data.l++; //var fPhShow = data.read_shift(1);\n\n return {\n c: col,\n iStyleRef: iStyleRef\n };\n}\n\nfunction write_XLSBCell(cell\n/*:any*/\n, o\n/*:?Block*/\n) {\n if (o == null) o = new_buf(8);\n o.write_shift(-4, cell.c);\n o.write_shift(3, cell.iStyleRef || cell.s);\n o.write_shift(1, 0);\n /* fPhShow */\n\n return o;\n}\n/* Short XLSB Cell does not include column */\n\n\nfunction parse_XLSBShortCell(data)\n/*:any*/\n{\n var iStyleRef = data.read_shift(2);\n iStyleRef += data.read_shift(1) << 16;\n data.l++; //var fPhShow = data.read_shift(1);\n\n return {\n c: -1,\n iStyleRef: iStyleRef\n };\n}\n\nfunction write_XLSBShortCell(cell\n/*:any*/\n, o\n/*:?Block*/\n) {\n if (o == null) o = new_buf(4);\n o.write_shift(3, cell.iStyleRef || cell.s);\n o.write_shift(1, 0);\n /* fPhShow */\n\n return o;\n}\n/* [MS-XLSB] 2.5.21 */\n\n\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n/* [MS-XLSB] 2.5.166 */\n\nfunction parse_XLNullableWideString(data\n/*::, length*/\n)\n/*:string*/\n{\n var cchCharacters = data.read_shift(4);\n return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\n\nfunction write_XLNullableWideString(data\n/*:string*/\n, o) {\n var _null = false;\n\n if (o == null) {\n _null = true;\n o = new_buf(127);\n }\n\n o.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n if (data.length > 0) o.write_shift(0, data, 'dbcs');\n return _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.5.165 */\n\n\nvar parse_XLNameWideString = parse_XLWideString; //var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\n\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\n\nfunction parse_RkNumber(data)\n/*:number*/\n{\n var b = data.slice(data.l, data.l + 4);\n var fX100 = b[0] & 1,\n fInt = b[0] & 2;\n data.l += 4;\n var RK = fInt === 0 ? __double([0, 0, 0, 0, b[0] & 0xFC, b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n return fX100 ? RK / 100 : RK;\n}\n\nfunction write_RkNumber(data\n/*:number*/\n, o) {\n if (o == null) o = new_buf(4);\n var fX100 = 0,\n fInt = 0,\n d100 = data * 100;\n\n if (data == (data | 0) && data >= -(1 << 29) && data < 1 << 29) {\n fInt = 1;\n } else if (d100 == (d100 | 0) && d100 >= -(1 << 29) && d100 < 1 << 29) {\n fInt = 1;\n fX100 = 1;\n }\n\n if (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));else throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n/* [MS-XLSB] 2.5.117 RfX */\n\n\nfunction parse_RfX(data\n/*::, length*/\n)\n/*:Range*/\n{\n var cell\n /*:Range*/\n = {\n s: {},\n e: {}\n }\n /*:any*/\n ;\n cell.s.r = data.read_shift(4);\n cell.e.r = data.read_shift(4);\n cell.s.c = data.read_shift(4);\n cell.e.c = data.read_shift(4);\n return cell;\n}\n\nfunction write_RfX(r\n/*:Range*/\n, o) {\n if (!o) o = new_buf(16);\n o.write_shift(4, r.s.r);\n o.write_shift(4, r.e.r);\n o.write_shift(4, r.s.c);\n o.write_shift(4, r.e.c);\n return o;\n}\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\n\n\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\n\nfunction parse_Xnum(data\n/*::, length*/\n) {\n if (data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n return data.read_shift(8, 'f');\n}\n\nfunction write_Xnum(data, o) {\n return (o || new_buf(8)).write_shift(8, data, 'f');\n}\n/* [MS-XLSB] 2.4.324 BrtColor */\n\n\nfunction parse_BrtColor(data\n/*::, length*/\n) {\n var out = {};\n var d = data.read_shift(1); //var fValidRGB = d & 1;\n\n var xColorType = d >>> 1;\n var index = data.read_shift(1);\n var nTS = data.read_shift(2, 'i');\n var bR = data.read_shift(1);\n var bG = data.read_shift(1);\n var bB = data.read_shift(1);\n data.l++; //var bAlpha = data.read_shift(1);\n\n switch (xColorType) {\n case 0:\n out.auto = 1;\n break;\n\n case 1:\n out.index = index;\n var icv = XLSIcv[index];\n /* automatic pseudo index 81 */\n\n if (icv) out.rgb = rgb2Hex(icv);\n break;\n\n case 2:\n /* if(!fValidRGB) throw new Error(\"invalid\"); */\n out.rgb = rgb2Hex([bR, bG, bB]);\n break;\n\n case 3:\n out.theme = index;\n break;\n }\n\n if (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n return out;\n}\n\nfunction write_BrtColor(color, o) {\n if (!o) o = new_buf(8);\n\n if (!color || color.auto) {\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n }\n\n if (color.index != null) {\n o.write_shift(1, 0x02);\n o.write_shift(1, color.index);\n } else if (color.theme != null) {\n o.write_shift(1, 0x06);\n o.write_shift(1, color.theme);\n } else {\n o.write_shift(1, 0x05);\n o.write_shift(1, 0);\n }\n\n var nTS = color.tint || 0;\n if (nTS > 0) nTS *= 32767;else if (nTS < 0) nTS *= 32768;\n o.write_shift(2, nTS);\n\n if (!color.rgb || color.theme != null) {\n o.write_shift(2, 0);\n o.write_shift(1, 0);\n o.write_shift(1, 0);\n } else {\n var rgb = color.rgb || 'FFFFFF';\n if (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n o.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n o.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n o.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n o.write_shift(1, 0xFF);\n }\n\n return o;\n}\n/* [MS-XLSB] 2.5.52 */\n\n\nfunction parse_FontFlags(data\n/*::, length, opts*/\n) {\n var d = data.read_shift(1);\n data.l++;\n var out = {\n fBold: d & 0x01,\n fItalic: d & 0x02,\n fUnderline: d & 0x04,\n fStrikeout: d & 0x08,\n fOutline: d & 0x10,\n fShadow: d & 0x20,\n fCondense: d & 0x40,\n fExtend: d & 0x80\n };\n return out;\n}\n\nfunction write_FontFlags(font, o) {\n if (!o) o = new_buf(2);\n var grbit = (font.italic ? 0x02 : 0) | (font.strike ? 0x08 : 0) | (font.outline ? 0x10 : 0) | (font.shadow ? 0x20 : 0) | (font.condense ? 0x40 : 0) | (font.extend ? 0x80 : 0);\n o.write_shift(1, grbit);\n o.write_shift(1, 0);\n return o;\n}\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\n\n\nfunction parse_ClipboardFormatOrString(o, w\n/*:number*/\n)\n/*:string*/\n{\n // $FlowIgnore\n var ClipFmt = {\n 2: \"BITMAP\",\n 3: \"METAFILEPICT\",\n 8: \"DIB\",\n 14: \"ENHMETAFILE\"\n };\n var m\n /*:number*/\n = o.read_shift(4);\n\n switch (m) {\n case 0x00000000:\n return \"\";\n\n case 0xffffffff:\n case 0xfffffffe:\n return ClipFmt[o.read_shift(4)] || \"\";\n }\n\n if (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n o.l -= 4;\n return o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\n\nfunction parse_ClipboardFormatOrAnsiString(o) {\n return parse_ClipboardFormatOrString(o, 1);\n}\n\nfunction parse_ClipboardFormatOrUnicodeString(o) {\n return parse_ClipboardFormatOrString(o, 2);\n}\n/* [MS-OLEPS] 2.2 PropertyType */\n// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\n\n\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003; //var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\n\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C; //var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\n\nvar VT_UI4 = 0x0013; //var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\n\nvar VT_LPSTR = 0x001E; //var VT_LPWSTR = 0x001F;\n\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041; //var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\n\nvar VT_CF = 0x0047; //var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\n\nvar VT_VECTOR = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR = 0x101E; //var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\n\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\n\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\n\nvar DocSummaryPIDDSI = {\n /*::[*/\n 0x01\n /*::]*/\n : {\n n: 'CodePage',\n t: VT_I2\n },\n\n /*::[*/\n 0x02\n /*::]*/\n : {\n n: 'Category',\n t: VT_STRING\n },\n\n /*::[*/\n 0x03\n /*::]*/\n : {\n n: 'PresentationFormat',\n t: VT_STRING\n },\n\n /*::[*/\n 0x04\n /*::]*/\n : {\n n: 'ByteCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x05\n /*::]*/\n : {\n n: 'LineCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x06\n /*::]*/\n : {\n n: 'ParagraphCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x07\n /*::]*/\n : {\n n: 'SlideCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x08\n /*::]*/\n : {\n n: 'NoteCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x09\n /*::]*/\n : {\n n: 'HiddenCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x0a\n /*::]*/\n : {\n n: 'MultimediaClipCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x0b\n /*::]*/\n : {\n n: 'ScaleCrop',\n t: VT_BOOL\n },\n\n /*::[*/\n 0x0c\n /*::]*/\n : {\n n: 'HeadingPairs',\n t: VT_VECTOR_VARIANT\n /* VT_VECTOR | VT_VARIANT */\n\n },\n\n /*::[*/\n 0x0d\n /*::]*/\n : {\n n: 'TitlesOfParts',\n t: VT_VECTOR_LPSTR\n /* VT_VECTOR | VT_LPSTR */\n\n },\n\n /*::[*/\n 0x0e\n /*::]*/\n : {\n n: 'Manager',\n t: VT_STRING\n },\n\n /*::[*/\n 0x0f\n /*::]*/\n : {\n n: 'Company',\n t: VT_STRING\n },\n\n /*::[*/\n 0x10\n /*::]*/\n : {\n n: 'LinksUpToDate',\n t: VT_BOOL\n },\n\n /*::[*/\n 0x11\n /*::]*/\n : {\n n: 'CharacterCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x13\n /*::]*/\n : {\n n: 'SharedDoc',\n t: VT_BOOL\n },\n\n /*::[*/\n 0x16\n /*::]*/\n : {\n n: 'HyperlinksChanged',\n t: VT_BOOL\n },\n\n /*::[*/\n 0x17\n /*::]*/\n : {\n n: 'AppVersion',\n t: VT_I4,\n p: 'version'\n },\n\n /*::[*/\n 0x18\n /*::]*/\n : {\n n: 'DigSig',\n t: VT_BLOB\n },\n\n /*::[*/\n 0x1A\n /*::]*/\n : {\n n: 'ContentType',\n t: VT_STRING\n },\n\n /*::[*/\n 0x1B\n /*::]*/\n : {\n n: 'ContentStatus',\n t: VT_STRING\n },\n\n /*::[*/\n 0x1C\n /*::]*/\n : {\n n: 'Language',\n t: VT_STRING\n },\n\n /*::[*/\n 0x1D\n /*::]*/\n : {\n n: 'Version',\n t: VT_STRING\n },\n\n /*::[*/\n 0xFF\n /*::]*/\n : {},\n\n /* [MS-OLEPS] 2.18 */\n\n /*::[*/\n 0x80000000\n /*::]*/\n : {\n n: 'Locale',\n t: VT_UI4\n },\n\n /*::[*/\n 0x80000003\n /*::]*/\n : {\n n: 'Behavior',\n t: VT_UI4\n },\n\n /*::[*/\n 0x72627262\n /*::]*/\n : {}\n};\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\n\nvar SummaryPIDSI = {\n /*::[*/\n 0x01\n /*::]*/\n : {\n n: 'CodePage',\n t: VT_I2\n },\n\n /*::[*/\n 0x02\n /*::]*/\n : {\n n: 'Title',\n t: VT_STRING\n },\n\n /*::[*/\n 0x03\n /*::]*/\n : {\n n: 'Subject',\n t: VT_STRING\n },\n\n /*::[*/\n 0x04\n /*::]*/\n : {\n n: 'Author',\n t: VT_STRING\n },\n\n /*::[*/\n 0x05\n /*::]*/\n : {\n n: 'Keywords',\n t: VT_STRING\n },\n\n /*::[*/\n 0x06\n /*::]*/\n : {\n n: 'Comments',\n t: VT_STRING\n },\n\n /*::[*/\n 0x07\n /*::]*/\n : {\n n: 'Template',\n t: VT_STRING\n },\n\n /*::[*/\n 0x08\n /*::]*/\n : {\n n: 'LastAuthor',\n t: VT_STRING\n },\n\n /*::[*/\n 0x09\n /*::]*/\n : {\n n: 'RevNumber',\n t: VT_STRING\n },\n\n /*::[*/\n 0x0A\n /*::]*/\n : {\n n: 'EditTime',\n t: VT_FILETIME\n },\n\n /*::[*/\n 0x0B\n /*::]*/\n : {\n n: 'LastPrinted',\n t: VT_FILETIME\n },\n\n /*::[*/\n 0x0C\n /*::]*/\n : {\n n: 'CreatedDate',\n t: VT_FILETIME\n },\n\n /*::[*/\n 0x0D\n /*::]*/\n : {\n n: 'ModifiedDate',\n t: VT_FILETIME\n },\n\n /*::[*/\n 0x0E\n /*::]*/\n : {\n n: 'PageCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x0F\n /*::]*/\n : {\n n: 'WordCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x10\n /*::]*/\n : {\n n: 'CharCount',\n t: VT_I4\n },\n\n /*::[*/\n 0x11\n /*::]*/\n : {\n n: 'Thumbnail',\n t: VT_CF\n },\n\n /*::[*/\n 0x12\n /*::]*/\n : {\n n: 'Application',\n t: VT_STRING\n },\n\n /*::[*/\n 0x13\n /*::]*/\n : {\n n: 'DocSecurity',\n t: VT_I4\n },\n\n /*::[*/\n 0xFF\n /*::]*/\n : {},\n\n /* [MS-OLEPS] 2.18 */\n\n /*::[*/\n 0x80000000\n /*::]*/\n : {\n n: 'Locale',\n t: VT_UI4\n },\n\n /*::[*/\n 0x80000003\n /*::]*/\n : {\n n: 'Behavior',\n t: VT_UI4\n },\n\n /*::[*/\n 0x72627262\n /*::]*/\n : {}\n};\n/* [MS-XLS] 2.4.63 Country/Region codes */\n\nvar CountryEnum = {\n /*::[*/\n 0x0001\n /*::]*/\n : \"US\",\n // United States\n\n /*::[*/\n 0x0002\n /*::]*/\n : \"CA\",\n // Canada\n\n /*::[*/\n 0x0003\n /*::]*/\n : \"\",\n // Latin America (except Brazil)\n\n /*::[*/\n 0x0007\n /*::]*/\n : \"RU\",\n // Russia\n\n /*::[*/\n 0x0014\n /*::]*/\n : \"EG\",\n // Egypt\n\n /*::[*/\n 0x001E\n /*::]*/\n : \"GR\",\n // Greece\n\n /*::[*/\n 0x001F\n /*::]*/\n : \"NL\",\n // Netherlands\n\n /*::[*/\n 0x0020\n /*::]*/\n : \"BE\",\n // Belgium\n\n /*::[*/\n 0x0021\n /*::]*/\n : \"FR\",\n // France\n\n /*::[*/\n 0x0022\n /*::]*/\n : \"ES\",\n // Spain\n\n /*::[*/\n 0x0024\n /*::]*/\n : \"HU\",\n // Hungary\n\n /*::[*/\n 0x0027\n /*::]*/\n : \"IT\",\n // Italy\n\n /*::[*/\n 0x0029\n /*::]*/\n : \"CH\",\n // Switzerland\n\n /*::[*/\n 0x002B\n /*::]*/\n : \"AT\",\n // Austria\n\n /*::[*/\n 0x002C\n /*::]*/\n : \"GB\",\n // United Kingdom\n\n /*::[*/\n 0x002D\n /*::]*/\n : \"DK\",\n // Denmark\n\n /*::[*/\n 0x002E\n /*::]*/\n : \"SE\",\n // Sweden\n\n /*::[*/\n 0x002F\n /*::]*/\n : \"NO\",\n // Norway\n\n /*::[*/\n 0x0030\n /*::]*/\n : \"PL\",\n // Poland\n\n /*::[*/\n 0x0031\n /*::]*/\n : \"DE\",\n // Germany\n\n /*::[*/\n 0x0034\n /*::]*/\n : \"MX\",\n // Mexico\n\n /*::[*/\n 0x0037\n /*::]*/\n : \"BR\",\n // Brazil\n\n /*::[*/\n 0x003d\n /*::]*/\n : \"AU\",\n // Australia\n\n /*::[*/\n 0x0040\n /*::]*/\n : \"NZ\",\n // New Zealand\n\n /*::[*/\n 0x0042\n /*::]*/\n : \"TH\",\n // Thailand\n\n /*::[*/\n 0x0051\n /*::]*/\n : \"JP\",\n // Japan\n\n /*::[*/\n 0x0052\n /*::]*/\n : \"KR\",\n // Korea\n\n /*::[*/\n 0x0054\n /*::]*/\n : \"VN\",\n // Viet Nam\n\n /*::[*/\n 0x0056\n /*::]*/\n : \"CN\",\n // China\n\n /*::[*/\n 0x005A\n /*::]*/\n : \"TR\",\n // Turkey\n\n /*::[*/\n 0x0069\n /*::]*/\n : \"JS\",\n // Ramastan\n\n /*::[*/\n 0x00D5\n /*::]*/\n : \"DZ\",\n // Algeria\n\n /*::[*/\n 0x00D8\n /*::]*/\n : \"MA\",\n // Morocco\n\n /*::[*/\n 0x00DA\n /*::]*/\n : \"LY\",\n // Libya\n\n /*::[*/\n 0x015F\n /*::]*/\n : \"PT\",\n // Portugal\n\n /*::[*/\n 0x0162\n /*::]*/\n : \"IS\",\n // Iceland\n\n /*::[*/\n 0x0166\n /*::]*/\n : \"FI\",\n // Finland\n\n /*::[*/\n 0x01A4\n /*::]*/\n : \"CZ\",\n // Czech Republic\n\n /*::[*/\n 0x0376\n /*::]*/\n : \"TW\",\n // Taiwan\n\n /*::[*/\n 0x03C1\n /*::]*/\n : \"LB\",\n // Lebanon\n\n /*::[*/\n 0x03C2\n /*::]*/\n : \"JO\",\n // Jordan\n\n /*::[*/\n 0x03C3\n /*::]*/\n : \"SY\",\n // Syria\n\n /*::[*/\n 0x03C4\n /*::]*/\n : \"IQ\",\n // Iraq\n\n /*::[*/\n 0x03C5\n /*::]*/\n : \"KW\",\n // Kuwait\n\n /*::[*/\n 0x03C6\n /*::]*/\n : \"SA\",\n // Saudi Arabia\n\n /*::[*/\n 0x03CB\n /*::]*/\n : \"AE\",\n // United Arab Emirates\n\n /*::[*/\n 0x03CC\n /*::]*/\n : \"IL\",\n // Israel\n\n /*::[*/\n 0x03CE\n /*::]*/\n : \"QA\",\n // Qatar\n\n /*::[*/\n 0x03D5\n /*::]*/\n : \"IR\",\n // Iran\n\n /*::[*/\n 0xFFFF\n /*::]*/\n : \"US\" // United States\n\n};\n/* [MS-XLS] 2.5.127 */\n\nvar XLSFillPattern = [null, 'solid', 'mediumGray', 'darkGray', 'lightGray', 'darkHorizontal', 'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis', 'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid', 'lightTrellis', 'gray125', 'gray0625'];\n\nfunction rgbify(arr\n/*:Array*/\n)\n/*:Array<[number, number, number]>*/\n{\n return arr.map(function (x) {\n return [x >> 16 & 255, x >> 8 & 255, x & 255];\n });\n}\n/* [MS-XLS] 2.5.161 */\n\n/* [MS-XLSB] 2.5.75 Icv */\n\n\nvar _XLSIcv = /*#__PURE__*/rgbify([\n/* Color Constants */\n0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF,\n/* Overridable Defaults */\n0x000000, 0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0x800000, 0x008000, 0x000080, 0x808000, 0x800080, 0x008080, 0xC0C0C0, 0x808080, 0x9999FF, 0x993366, 0xFFFFCC, 0xCCFFFF, 0x660066, 0xFF8080, 0x0066CC, 0xCCCCFF, 0x000080, 0xFF00FF, 0xFFFF00, 0x00FFFF, 0x800080, 0x800000, 0x008080, 0x0000FF, 0x00CCFF, 0xCCFFFF, 0xCCFFCC, 0xFFFF99, 0x99CCFF, 0xFF99CC, 0xCC99FF, 0xFFCC99, 0x3366FF, 0x33CCCC, 0x99CC00, 0xFFCC00, 0xFF9900, 0xFF6600, 0x666699, 0x969696, 0x003366, 0x339966, 0x003300, 0x333300, 0x993300, 0x993366, 0x333399, 0x333333,\n/* Other entries to appease BIFF8/12 */\n0xFFFFFF,\n/* 0x40 icvForeground ?? */\n0x000000,\n/* 0x41 icvBackground ?? */\n0x000000,\n/* 0x42 icvFrame ?? */\n0x000000,\n/* 0x43 icv3D ?? */\n0x000000,\n/* 0x44 icv3DText ?? */\n0x000000,\n/* 0x45 icv3DHilite ?? */\n0x000000,\n/* 0x46 icv3DShadow ?? */\n0x000000,\n/* 0x47 icvHilite ?? */\n0x000000,\n/* 0x48 icvCtlText ?? */\n0x000000,\n/* 0x49 icvCtlScrl ?? */\n0x000000,\n/* 0x4A icvCtlInv ?? */\n0x000000,\n/* 0x4B icvCtlBody ?? */\n0x000000,\n/* 0x4C icvCtlFrame ?? */\n0x000000,\n/* 0x4D icvCtlFore ?? */\n0x000000,\n/* 0x4E icvCtlBack ?? */\n0x000000,\n/* 0x4F icvCtlNeutral */\n0x000000,\n/* 0x50 icvInfoBk ?? */\n0x000000\n/* 0x51 icvInfoText ?? */\n]);\n\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n/* [MS-XLSB] 2.5.97.2 */\n\nvar BErr = {\n /*::[*/\n 0x00\n /*::]*/\n : \"#NULL!\",\n\n /*::[*/\n 0x07\n /*::]*/\n : \"#DIV/0!\",\n\n /*::[*/\n 0x0F\n /*::]*/\n : \"#VALUE!\",\n\n /*::[*/\n 0x17\n /*::]*/\n : \"#REF!\",\n\n /*::[*/\n 0x1D\n /*::]*/\n : \"#NAME?\",\n\n /*::[*/\n 0x24\n /*::]*/\n : \"#NUM!\",\n\n /*::[*/\n 0x2A\n /*::]*/\n : \"#N/A\",\n\n /*::[*/\n 0x2B\n /*::]*/\n : \"#GETTING_DATA\",\n\n /*::[*/\n 0xFF\n /*::]*/\n : \"#WTF?\"\n}; //var RBErr = evert_num(BErr);\n\nvar RBErr = {\n \"#NULL!\": 0x00,\n \"#DIV/0!\": 0x07,\n \"#VALUE!\": 0x0F,\n \"#REF!\": 0x17,\n \"#NAME?\": 0x1D,\n \"#NUM!\": 0x24,\n \"#N/A\": 0x2A,\n \"#GETTING_DATA\": 0x2B,\n \"#WTF?\": 0xFF\n};\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n\n/* 12.3 Part Summary */\n\n/* 14.2 Part Summary */\n\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\n\nvar ct2type\n/*{[string]:string}*/\n= {\n /* Workbook */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n \"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n /* Worksheet */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n \"application/vnd.ms-excel.worksheet\": \"sheets\",\n \"application/vnd.ms-excel.binIndexWs\": \"TODO\",\n\n /* Binary Index */\n\n /* Chartsheet */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n \"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n /* Macrosheet */\n \"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n \"application/vnd.ms-excel.macrosheet\": \"macros\",\n \"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n \"application/vnd.ms-excel.binIndexMs\": \"TODO\",\n\n /* Binary Index */\n\n /* Dialogsheet */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n \"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n /* Shared Strings */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n \"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n /* Styles */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n \"application/vnd.ms-excel.styles\": \"styles\",\n\n /* File Properties */\n \"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n /* Custom Data Properties */\n \"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n /* Comments */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n \"application/vnd.ms-excel.comments\": \"comments\",\n \"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n \"application/vnd.ms-excel.person+xml\": \"people\",\n\n /* Metadata (Stock/Geography and Dynamic Array) */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n \"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n /* PivotTable */\n \"application/vnd.ms-excel.pivotTable\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n /* Chart Objects */\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n /* Chart Colors */\n \"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n /* Chart Style */\n \"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n /* Chart Advanced */\n \"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n /* Calculation Chain */\n \"application/vnd.ms-excel.calcChain\": \"calcchains\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n /* Printer Settings */\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n /* ActiveX */\n \"application/vnd.ms-office.activeX\": \"TODO\",\n \"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n /* Custom Toolbars */\n \"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n /* External Data Connections */\n \"application/vnd.ms-excel.connections\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n /* External Links */\n \"application/vnd.ms-excel.externalLink\": \"links\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n /* PivotCache */\n \"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n \"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n /* Query Table */\n \"application/vnd.ms-excel.queryTable\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n /* Shared Workbook */\n \"application/vnd.ms-excel.userNames\": \"TODO\",\n \"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n \"application/vnd.ms-excel.revisionLog\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n /* Single Cell Table */\n \"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n /* Slicer */\n \"application/vnd.ms-excel.slicer\": \"TODO\",\n \"application/vnd.ms-excel.slicerCache\": \"TODO\",\n \"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n \"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n /* Sort Map */\n \"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n /* Table */\n \"application/vnd.ms-excel.table\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n /* Themes */\n \"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n /* Theme Override */\n \"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n /* Timeline */\n \"application/vnd.ms-excel.Timeline+xml\": \"TODO\",\n\n /* verify */\n \"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\",\n\n /* verify */\n\n /* VBA */\n \"application/vnd.ms-office.vbaProject\": \"vba\",\n \"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n /* Volatile Dependencies */\n \"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n /* Control Properties */\n \"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n /* Data Model */\n \"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n /* Survey */\n \"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n /* Drawing */\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n /* VML */\n \"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n \"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n \"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n /* Image */\n \"image/png\": \"TODO\",\n \"sheet\": \"js\"\n}\n/*:any*/\n;\nvar CT_LIST = {\n workbooks: {\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n xlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n xlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n xlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n xltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n },\n strs: {\n /* Shared Strings */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n xlsb: \"application/vnd.ms-excel.sharedStrings\"\n },\n comments: {\n /* Comments */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n xlsb: \"application/vnd.ms-excel.comments\"\n },\n sheets: {\n /* Worksheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n xlsb: \"application/vnd.ms-excel.worksheet\"\n },\n charts: {\n /* Chartsheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n xlsb: \"application/vnd.ms-excel.chartsheet\"\n },\n dialogs: {\n /* Dialogsheet */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n xlsb: \"application/vnd.ms-excel.dialogsheet\"\n },\n macros: {\n /* Macrosheet (Excel 4.0 Macros) */\n xlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n xlsb: \"application/vnd.ms-excel.macrosheet\"\n },\n metadata: {\n /* Metadata (Stock/Geography and Dynamic Array) */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n xlsb: \"application/vnd.ms-excel.sheetMetadata\"\n },\n styles: {\n /* Styles */\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n xlsb: \"application/vnd.ms-excel.styles\"\n }\n};\n\nfunction new_ct()\n/*:any*/\n{\n return {\n workbooks: [],\n sheets: [],\n charts: [],\n dialogs: [],\n macros: [],\n rels: [],\n strs: [],\n comments: [],\n threadedcomments: [],\n links: [],\n coreprops: [],\n extprops: [],\n custprops: [],\n themes: [],\n styles: [],\n calcchains: [],\n vba: [],\n drawings: [],\n metadata: [],\n people: [],\n TODO: [],\n xmlns: \"\"\n }\n /*:any*/\n ;\n}\n\nfunction parse_ct(data\n/*:?string*/\n) {\n var ct = new_ct();\n if (!data || !data.match) return ct;\n var ctext = {};\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0].replace(nsregex, \"<\")) {\n case ' 0 ? ct.calcchains[0] : \"\";\n ct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n ct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n ct.defaults = ctext;\n delete ct.calcchains;\n return ct;\n}\n\nfunction write_ct(ct, opts)\n/*:string*/\n{\n var type2ct\n /*{[string]:Array}*/\n = evert_arr(ct2type);\n var o\n /*:Array*/\n = [],\n v;\n o[o.length] = XML_HEADER;\n o[o.length] = writextag('Types', null, {\n 'xmlns': XMLNS.CT,\n 'xmlns:xsd': XMLNS.xsd,\n 'xmlns:xsi': XMLNS.xsi\n });\n o = o.concat([['xml', 'application/xml'], ['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'], ['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'], ['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n /* from test files */\n ['bmp', 'image/bmp'], ['png', 'image/png'], ['gif', 'image/gif'], ['emf', 'image/x-emf'], ['wmf', 'image/x-wmf'], ['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'], ['tif', 'image/tiff'], ['tiff', 'image/tiff'], ['pdf', 'application/pdf'], ['rels', 'application/vnd.openxmlformats-package.relationships+xml']].map(function (x) {\n return writextag('Default', null, {\n 'Extension': x[0],\n 'ContentType': x[1]\n });\n }));\n /* only write first instance */\n\n var f1 = function f1(w) {\n if (ct[w] && ct[w].length > 0) {\n v = ct[w][0];\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n });\n }\n };\n /* book type-specific */\n\n\n var f2 = function f2(w) {\n (ct[w] || []).forEach(function (v) {\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n });\n });\n };\n /* standard type */\n\n\n var f3 = function f3(t) {\n (ct[t] || []).forEach(function (v) {\n o[o.length] = writextag('Override', null, {\n 'PartName': (v[0] == '/' ? \"\" : \"/\") + v,\n 'ContentType': type2ct[t][0]\n });\n });\n };\n\n f1('workbooks');\n f2('sheets');\n f2('charts');\n f3('themes');\n ['strs', 'styles'].forEach(f1);\n ['coreprops', 'extprops', 'custprops'].forEach(f3);\n f3('vba');\n f3('comments');\n f3('threadedcomments');\n f3('drawings');\n f2('metadata');\n f3('people');\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* 9.3 Relationships */\n\n\nvar RELS = {\n WB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n SHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n HLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n VML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n XPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n XMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n XLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n CXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n CXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n CMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n CORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n EXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n CUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n SST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n STY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n THEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n CHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n CHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n CS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n WS: [\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\", \"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"],\n DS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n MS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n IMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n DRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n XLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n TCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n PEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n VBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}\n/*:any*/\n;\n/* 9.3.3 Representing Relationships */\n\nfunction get_rels_path(file\n/*:string*/\n)\n/*:string*/\n{\n var n = file.lastIndexOf(\"/\");\n return file.slice(0, n + 1) + '_rels/' + file.slice(n + 1) + \".rels\";\n}\n\nfunction parse_rels(data\n/*:?string*/\n, currentFilePath\n/*:string*/\n) {\n var rels = {\n \"!id\": {}\n };\n if (!data) return rels;\n\n if (currentFilePath.charAt(0) !== '/') {\n currentFilePath = '/' + currentFilePath;\n }\n\n var hash = {};\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n /* 9.3.2.2 OPC_Relationships */\n\n if (y[0] === ' 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n\nfunction add_rels(rels, rId\n/*:number*/\n, f, type, relobj, targetmode\n/*:?string*/\n)\n/*:number*/\n{\n if (!relobj) relobj = {};\n if (!rels['!id']) rels['!id'] = {};\n if (!rels['!idx']) rels['!idx'] = 1;\n if (rId < 0) for (rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId) {\n /* empty */\n }\n rels['!idx'] = rId + 1;\n relobj.Id = 'rId' + rId;\n relobj.Type = type;\n relobj.Target = f;\n if (targetmode) relobj.TargetMode = targetmode;else if ([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n if (rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n rels['!id'][relobj.Id] = relobj;\n rels[('/' + relobj.Target).replace(\"//\", \"/\")] = relobj;\n return rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n\n/* Part 3 Section 4 Manifest File */\n\n\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\n\nfunction parse_manifest(d, opts) {\n var str = xlml_normalize(d);\n var Rn;\n var FEtag;\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3]) {\n case 'manifest':\n break;\n // 4.2 \n\n case 'file-entry':\n // 4.3 \n FEtag = parsexmltag(Rn[0], false);\n if (FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n break;\n\n case 'encryption-data': // 4.4 \n\n case 'algorithm': // 4.5 \n\n case 'start-key-generation': // 4.6 \n\n case 'key-derivation':\n // 4.7 \n throw new Error(\"Unsupported ODS Encryption\");\n\n default:\n if (opts && opts.WTF) throw Rn;\n }\n }\n}\n\nfunction write_manifest(manifest\n/*:Array >*/\n)\n/*:string*/\n{\n var o = [XML_HEADER];\n o.push('\\n');\n o.push(' \\n');\n\n for (var i = 0; i < manifest.length; ++i) {\n o.push(' \\n');\n }\n\n o.push('');\n return o.join(\"\");\n}\n/* Part 3 Section 6 Metadata Manifest File */\n\n\nfunction write_rdf_type(file\n/*:string*/\n, res\n/*:string*/\n, tag\n/*:?string*/\n) {\n return [' \\n', ' \\n', ' \\n'].join(\"\");\n}\n\nfunction write_rdf_has(base\n/*:string*/\n, file\n/*:string*/\n) {\n return [' \\n', ' \\n', ' \\n'].join(\"\");\n}\n\nfunction write_rdf(rdf) {\n var o = [XML_HEADER];\n o.push('\\n');\n\n for (var i = 0; i != rdf.length; ++i) {\n o.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n o.push(write_rdf_has(\"\", rdf[i][0]));\n }\n\n o.push(write_rdf_type(\"\", \"Document\", \"pkg\"));\n o.push('');\n return o.join(\"\");\n}\n/* TODO: pull properties */\n\n\nfunction\n /*:: wb: Workbook, opts: any*/\nwrite_meta_ods()\n/*:string*/\n{\n return 'Sheet' + 'JS ' + XLSX.version + '';\n}\n/* ECMA-376 Part II 11.1 Core Properties Part */\n\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\n\n\nvar CORE_PROPS\n/*:Array >*/\n= [[\"cp:category\", \"Category\"], [\"cp:contentStatus\", \"ContentStatus\"], [\"cp:keywords\", \"Keywords\"], [\"cp:lastModifiedBy\", \"LastAuthor\"], [\"cp:lastPrinted\", \"LastPrinted\"], [\"cp:revision\", \"RevNumber\"], [\"cp:version\", \"Version\"], [\"dc:creator\", \"Author\"], [\"dc:description\", \"Comments\"], [\"dc:identifier\", \"Identifier\"], [\"dc:language\", \"Language\"], [\"dc:subject\", \"Subject\"], [\"dc:title\", \"Title\"], [\"dcterms:created\", \"CreatedDate\", 'date'], [\"dcterms:modified\", \"ModifiedDate\", 'date']];\n\nvar CORE_PROPS_REGEX\n/*:Array*/\n= /*#__PURE__*/function () {\n var r = new Array(CORE_PROPS.length);\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i];\n var g = \"(?:\" + f[0].slice(0, f[0].indexOf(\":\")) + \":)\" + f[0].slice(f[0].indexOf(\":\") + 1);\n r[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n }\n\n return r;\n}();\n\nfunction parse_core_props(data) {\n var p = {};\n data = utf8read(data);\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i],\n cur = data.match(CORE_PROPS_REGEX[i]);\n if (cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n if (f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n }\n\n return p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n if (p[f] != null || g == null || g === \"\") return;\n p[f] = g;\n g = escapexml(g);\n o[o.length] = h ? writextag(f, g, h) : writetag(f, g);\n}\n\nfunction write_core_props(cp, _opts) {\n var opts = _opts || {};\n var o = [XML_HEADER, writextag('cp:coreProperties', null, {\n //'xmlns': XMLNS.CORE_PROPS,\n 'xmlns:cp': XMLNS.CORE_PROPS,\n 'xmlns:dc': XMLNS.dc,\n 'xmlns:dcterms': XMLNS.dcterms,\n 'xmlns:dcmitype': XMLNS.dcmitype,\n 'xmlns:xsi': XMLNS.xsi\n })],\n p = {};\n if (!cp && !opts.Props) return o.join(\"\");\n\n if (cp) {\n if (cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\n \"xsi:type\": \"dcterms:W3CDTF\"\n }, o, p);\n if (cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\n \"xsi:type\": \"dcterms:W3CDTF\"\n }, o, p);\n }\n\n for (var i = 0; i != CORE_PROPS.length; ++i) {\n var f = CORE_PROPS[i];\n var v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n if (v === true) v = \"1\";else if (v === false) v = \"0\";else if (typeof v == \"number\") v = String(v);\n if (v != null) cp_doit(f[0], v, null, o, p);\n }\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\n\n\nvar EXT_PROPS\n/*:Array >*/\n= [[\"Application\", \"Application\", \"string\"], [\"AppVersion\", \"AppVersion\", \"string\"], [\"Company\", \"Company\", \"string\"], [\"DocSecurity\", \"DocSecurity\", \"string\"], [\"Manager\", \"Manager\", \"string\"], [\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"], [\"SharedDoc\", \"SharedDoc\", \"bool\"], [\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"], [\"ScaleCrop\", \"ScaleCrop\", \"bool\"], [\"HeadingPairs\", \"HeadingPairs\", \"raw\"], [\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]];\nvar PseudoPropsPairs = [\"Worksheets\", \"SheetNames\", \"NamedRanges\", \"DefinedNames\", \"Chartsheets\", \"ChartNames\"];\n\nfunction load_props_pairs(HP\n/*:string|Array>*/\n, TOP, props, opts) {\n var v = [];\n if (typeof HP == \"string\") v = parseVector(HP, opts);else for (var j = 0; j < HP.length; ++j) {\n v = v.concat(HP[j].map(function (hp) {\n return {\n v: hp\n };\n }));\n }\n var parts = typeof TOP == \"string\" ? parseVector(TOP, opts).map(function (x) {\n return x.v;\n }) : TOP;\n var idx = 0,\n len = 0;\n if (parts.length > 0) for (var i = 0; i !== v.length; i += 2) {\n len = +v[i + 1].v;\n\n switch (v[i].v) {\n case \"Worksheets\":\n case \"工作表\":\n case \"Листы\":\n case \"أوراق العمل\":\n case \"ワークシート\":\n case \"גליונות עבודה\":\n case \"Arbeitsblätter\":\n case \"Çalışma Sayfaları\":\n case \"Feuilles de calcul\":\n case \"Fogli di lavoro\":\n case \"Folhas de cálculo\":\n case \"Planilhas\":\n case \"Regneark\":\n case \"Hojas de cálculo\":\n case \"Werkbladen\":\n props.Worksheets = len;\n props.SheetNames = parts.slice(idx, idx + len);\n break;\n\n case \"Named Ranges\":\n case \"Rangos con nombre\":\n case \"名前付き一覧\":\n case \"Benannte Bereiche\":\n case \"Navngivne områder\":\n props.NamedRanges = len;\n props.DefinedNames = parts.slice(idx, idx + len);\n break;\n\n case \"Charts\":\n case \"Diagramme\":\n props.Chartsheets = len;\n props.ChartNames = parts.slice(idx, idx + len);\n break;\n }\n\n idx += len;\n }\n}\n\nfunction parse_ext_props(data, p, opts) {\n var q = {};\n if (!p) p = {};\n data = utf8read(data);\n EXT_PROPS.forEach(function (f) {\n var xml = (data.match(matchtag(f[0])) || [])[1];\n\n switch (f[2]) {\n case \"string\":\n if (xml) p[f[1]] = unescapexml(xml);\n break;\n\n case \"bool\":\n p[f[1]] = xml === \"true\";\n break;\n\n case \"raw\":\n var cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n if (cur && cur.length > 0) q[f[1]] = cur[1];\n break;\n }\n });\n if (q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n return p;\n}\n\nfunction write_ext_props(cp\n/*::, opts*/\n)\n/*:string*/\n{\n var o\n /*:Array*/\n = [],\n W = writextag;\n if (!cp) cp = {};\n cp.Application = \"SheetJS\";\n o[o.length] = XML_HEADER;\n o[o.length] = writextag('Properties', null, {\n 'xmlns': XMLNS.EXT_PROPS,\n 'xmlns:vt': XMLNS.vt\n });\n EXT_PROPS.forEach(function (f) {\n if (cp[f[1]] === undefined) return;\n var v;\n\n switch (f[2]) {\n case 'string':\n v = escapexml(String(cp[f[1]]));\n break;\n\n case 'bool':\n v = cp[f[1]] ? 'true' : 'false';\n break;\n }\n\n if (v !== undefined) o[o.length] = W(f[0], v);\n });\n /* TODO: HeadingPairs, TitlesOfParts */\n\n o[o.length] = W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets') + W('vt:variant', W('vt:i4', String(cp.Worksheets))), {\n size: 2,\n baseType: \"variant\"\n }));\n o[o.length] = W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function (s) {\n return \"\" + escapexml(s) + \"\";\n }).join(\"\"), {\n size: cp.Worksheets,\n baseType: \"lpstr\"\n }));\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\n\n\nvar custregex = /<[^>]+>[^<]*/g;\n\nfunction parse_cust_props(data\n/*:string*/\n, opts) {\n var p = {},\n name = \"\";\n var m = data.match(custregex);\n if (m) for (var i = 0; i != m.length; ++i) {\n var x = m[i],\n y = parsexmltag(x);\n\n switch (y[0]) {\n case '':\n name = null;\n break;\n\n default:\n if (x.indexOf('');\n var type = toks[0].slice(4),\n text = toks[1];\n /* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\n switch (type) {\n case 'lpstr':\n case 'bstr':\n case 'lpwstr':\n p[name] = unescapexml(text);\n break;\n\n case 'bool':\n p[name] = parsexmlbool(text);\n break;\n\n case 'i1':\n case 'i2':\n case 'i4':\n case 'i8':\n case 'int':\n case 'uint':\n p[name] = parseInt(text, 10);\n break;\n\n case 'r4':\n case 'r8':\n case 'decimal':\n p[name] = parseFloat(text);\n break;\n\n case 'filetime':\n case 'date':\n p[name] = parseDate(text);\n break;\n\n case 'cy':\n case 'error':\n p[name] = unescapexml(text);\n break;\n\n default:\n if (type.slice(-1) == '/') break;\n if (opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n }\n } else if (x.slice(0, 2) === \" 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* Common Name -> XLML Name */\n\n\nvar XLMLDocPropsMap = {\n Title: 'Title',\n Subject: 'Subject',\n Author: 'Author',\n Keywords: 'Keywords',\n Comments: 'Description',\n LastAuthor: 'LastAuthor',\n RevNumber: 'Revision',\n Application: 'AppName',\n\n /* TotalTime: 'TotalTime', */\n LastPrinted: 'LastPrinted',\n CreatedDate: 'Created',\n ModifiedDate: 'LastSaved',\n\n /* Pages */\n\n /* Words */\n\n /* Characters */\n Category: 'Category',\n\n /* PresentationFormat */\n Manager: 'Manager',\n Company: 'Company',\n\n /* Guid */\n\n /* HyperlinkBase */\n\n /* Bytes */\n\n /* Lines */\n\n /* Paragraphs */\n\n /* CharactersWithSpaces */\n AppVersion: 'Version',\n ContentStatus: 'ContentStatus',\n\n /* NOTE: missing from schema */\n Identifier: 'Identifier',\n\n /* NOTE: missing from schema */\n Language: 'Language'\n /* NOTE: missing from schema */\n\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag\n/*:string*/\n, val) {\n if (!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n tag = evert_XLMLDPM[tag] || tag;\n Props[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n var o\n /*:Array*/\n = [];\n keys(XLMLDocPropsMap).map(function (m) {\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n if (CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n }\n\n for (i = 0; i < EXT_PROPS.length; ++i) {\n if (EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n }\n\n throw m;\n }).forEach(function (p) {\n if (Props[p[1]] == null) return;\n var m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\n switch (p[2]) {\n case 'date':\n m = new Date(m).toISOString().replace(/\\.\\d*Z/, \"Z\");\n break;\n }\n\n if (typeof m == 'number') m = String(m);else if (m === true || m === false) {\n m = m ? \"1\" : \"0\";\n } else if (m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/, \"\");\n o.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n });\n return writextag('DocumentProperties', o.join(\"\"), {\n xmlns: XLMLNS.o\n });\n}\n\nfunction xlml_write_custprops(Props, Custprops\n/*::, opts*/\n) {\n var BLACKLIST = [\"Worksheets\", \"SheetNames\"];\n var T = 'CustomDocumentProperties';\n var o\n /*:Array*/\n = [];\n if (Props) keys(Props).forEach(function (k) {\n /*:: if(!Props) return; */\n if (!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\n for (var i = 0; i < CORE_PROPS.length; ++i) {\n if (k == CORE_PROPS[i][1]) return;\n }\n\n for (i = 0; i < EXT_PROPS.length; ++i) {\n if (k == EXT_PROPS[i][1]) return;\n }\n\n for (i = 0; i < BLACKLIST.length; ++i) {\n if (k == BLACKLIST[i]) return;\n }\n\n var m = Props[k];\n var t = \"string\";\n\n if (typeof m == 'number') {\n t = \"float\";\n m = String(m);\n } else if (m === true || m === false) {\n t = \"boolean\";\n m = m ? \"1\" : \"0\";\n } else m = String(m);\n\n o.push(writextag(escapexmltag(k), m, {\n \"dt:dt\": t\n }));\n });\n if (Custprops) keys(Custprops).forEach(function (k) {\n /*:: if(!Custprops) return; */\n if (!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n if (Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n var m = Custprops[k];\n var t = \"string\";\n\n if (typeof m == 'number') {\n t = \"float\";\n m = String(m);\n } else if (m === true || m === false) {\n t = \"boolean\";\n m = m ? \"1\" : \"0\";\n } else if (m instanceof Date) {\n t = \"dateTime.tz\";\n m = m.toISOString();\n } else m = String(m);\n\n o.push(writextag(escapexmltag(k), m, {\n \"dt:dt\": t\n }));\n });\n return '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\n\n\nfunction parse_FILETIME(blob) {\n var dwLowDateTime = blob.read_shift(4),\n dwHighDateTime = blob.read_shift(4);\n return new Date((dwHighDateTime / 1e7 * Math.pow(2, 32) + dwLowDateTime / 1e7 - 11644473600) * 1000).toISOString().replace(/\\.000/, \"\");\n}\n\nfunction write_FILETIME(time\n/*:string|Date*/\n) {\n var date = typeof time == \"string\" ? new Date(Date.parse(time)) : time;\n var t = date.getTime() / 1000 + 11644473600;\n var l = t % Math.pow(2, 32),\n h = (t - l) / Math.pow(2, 32);\n l *= 1e7;\n h *= 1e7;\n var w = l / Math.pow(2, 32) | 0;\n\n if (w > 0) {\n l = l % Math.pow(2, 32);\n h += w;\n }\n\n var o = new_buf(8);\n o.write_shift(4, l);\n o.write_shift(4, h);\n return o;\n}\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\n\n\nfunction parse_lpstr(blob, type, pad\n/*:?number*/\n) {\n var start = blob.l;\n var str = blob.read_shift(0, 'lpstr-cp');\n if (pad) while (blob.l - start & 3) {\n ++blob.l;\n }\n return str;\n}\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\n\n\nfunction parse_lpwstr(blob, type, pad) {\n var str = blob.read_shift(0, 'lpwstr');\n if (pad) blob.l += 4 - (str.length + 1 & 3) & 3;\n return str;\n}\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\n\n\nfunction parse_VtStringBase(blob, stringType, pad) {\n if (stringType === 0x1F\n /*VT_LPWSTR*/\n ) return parse_lpwstr(blob);\n return parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t\n/*:number*/\n, pad\n/*:?boolean*/\n) {\n return parse_VtStringBase(blob, t, pad === false ? 0 : 4);\n}\n\nfunction parse_VtUnalignedString(blob, t\n/*:number*/\n) {\n if (!t) throw new Error(\"VtUnalignedString must have positive length\");\n return parse_VtStringBase(blob, t, 0);\n}\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\n\n\nfunction parse_VtVecLpwstrValue(blob)\n/*:Array*/\n{\n var length = blob.read_shift(4);\n var ret\n /*:Array*/\n = [];\n\n for (var i = 0; i != length; ++i) {\n var start = blob.l;\n ret[i] = blob.read_shift(0, 'lpwstr').replace(chr0, '');\n if (blob.l - start & 0x02) blob.l += 2;\n }\n\n return ret;\n}\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\n\n\nfunction parse_VtVecUnalignedLpstrValue(blob)\n/*:Array*/\n{\n var length = blob.read_shift(4);\n var ret\n /*:Array*/\n = [];\n\n for (var i = 0; i != length; ++i) {\n ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0, '');\n }\n\n return ret;\n}\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\n\n\nfunction parse_VtHeadingPair(blob) {\n var start = blob.l;\n var headingString = parse_TypedPropertyValue(blob, VT_USTR);\n if (blob[blob.l] == 0x00 && blob[blob.l + 1] == 0x00 && blob.l - start & 0x02) blob.l += 2;\n var headerParts = parse_TypedPropertyValue(blob, VT_I4);\n return [headingString, headerParts];\n}\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\n\n\nfunction parse_VtVecHeadingPairValue(blob) {\n var cElements = blob.read_shift(4);\n var out = [];\n\n for (var i = 0; i < cElements / 2; ++i) {\n out.push(parse_VtHeadingPair(blob));\n }\n\n return out;\n}\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\n\n\nfunction parse_dictionary(blob, CodePage) {\n var cnt = blob.read_shift(4);\n var dict\n /*:{[number]:string}*/\n = {}\n /*:any*/\n ;\n\n for (var j = 0; j != cnt; ++j) {\n var pid = blob.read_shift(4);\n var len = blob.read_shift(4);\n dict[pid] = blob.read_shift(len, CodePage === 0x4B0 ? 'utf16le' : 'utf8').replace(chr0, '').replace(chr1, '!');\n if (CodePage === 0x4B0 && len % 2) blob.l += 2;\n }\n\n if (blob.l & 3) blob.l = blob.l >> 2 + 1 << 2;\n return dict;\n}\n/* [MS-OLEPS] 2.9 BLOB */\n\n\nfunction parse_BLOB(blob) {\n var size = blob.read_shift(4);\n var bytes = blob.slice(blob.l, blob.l + size);\n blob.l += size;\n if ((size & 3) > 0) blob.l += 4 - (size & 3) & 3;\n return bytes;\n}\n/* [MS-OLEPS] 2.11 ClipboardData */\n\n\nfunction parse_ClipboardData(blob) {\n // TODO\n var o = {};\n o.Size = blob.read_shift(4); //o.Format = blob.read_shift(4);\n\n blob.l += o.Size + 3 - (o.Size - 1) % 4;\n return o;\n}\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\n\n\nfunction parse_TypedPropertyValue(blob, type\n/*:number*/\n, _opts)\n/*:any*/\n{\n var t = blob.read_shift(2),\n ret,\n opts = _opts || {};\n blob.l += 2;\n if (type !== VT_VARIANT) if (t !== type && VT_CUSTOM.indexOf(type) === -1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\n switch (type === VT_VARIANT ? t : type) {\n case 0x02\n /*VT_I2*/\n :\n ret = blob.read_shift(2, 'i');\n if (!opts.raw) blob.l += 2;\n return ret;\n\n case 0x03\n /*VT_I4*/\n :\n ret = blob.read_shift(4, 'i');\n return ret;\n\n case 0x0B\n /*VT_BOOL*/\n :\n return blob.read_shift(4) !== 0x0;\n\n case 0x13\n /*VT_UI4*/\n :\n ret = blob.read_shift(4);\n return ret;\n\n case 0x1E\n /*VT_LPSTR*/\n :\n return parse_lpstr(blob, t, 4).replace(chr0, '');\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n return parse_lpwstr(blob);\n\n case 0x40\n /*VT_FILETIME*/\n :\n return parse_FILETIME(blob);\n\n case 0x41\n /*VT_BLOB*/\n :\n return parse_BLOB(blob);\n\n case 0x47\n /*VT_CF*/\n :\n return parse_ClipboardData(blob);\n\n case 0x50\n /*VT_STRING*/\n :\n return parse_VtString(blob, t, !opts.raw).replace(chr0, '');\n\n case 0x51\n /*VT_USTR*/\n :\n return parse_VtUnalignedString(blob, t\n /*, 4*/\n ).replace(chr0, '');\n\n case 0x100C\n /*VT_VECTOR|VT_VARIANT*/\n :\n return parse_VtVecHeadingPairValue(blob);\n\n case 0x101E\n /*VT_VECTOR|VT_LPSTR*/\n :\n case 0x101F\n /*VT_VECTOR|VT_LPWSTR*/\n :\n return t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\n default:\n throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n }\n}\n\nfunction write_TypedPropertyValue(type\n/*:number*/\n, value) {\n var o = new_buf(4),\n p = new_buf(4);\n o.write_shift(4, type == 0x50 ? 0x1F : type);\n\n switch (type) {\n case 0x03\n /*VT_I4*/\n :\n p.write_shift(-4, value);\n break;\n\n case 0x05\n /*VT_I4*/\n :\n p = new_buf(8);\n p.write_shift(8, value, 'f');\n break;\n\n case 0x0B\n /*VT_BOOL*/\n :\n p.write_shift(4, value ? 0x01 : 0x00);\n break;\n\n case 0x40\n /*VT_FILETIME*/\n :\n /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */\n p = write_FILETIME(value);\n break;\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n case 0x50\n /*VT_STRING*/\n :\n /*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n p = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n p.write_shift(4, value.length + 1);\n p.write_shift(0, value, \"dbcs\");\n\n while (p.l != p.length) {\n p.write_shift(1, 0);\n }\n\n break;\n\n default:\n throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n }\n\n return bconcat([o, p]);\n}\n/* [MS-OLEPS] 2.20 PropertySet */\n\n\nfunction parse_PropertySet(blob, PIDSI) {\n var start_addr = blob.l;\n var size = blob.read_shift(4);\n var NumProps = blob.read_shift(4);\n var Props = [],\n i = 0;\n var CodePage = 0;\n var Dictionary = -1,\n DictObj\n /*:{[number]:string}*/\n = {}\n /*:any*/\n ;\n\n for (i = 0; i != NumProps; ++i) {\n var PropID = blob.read_shift(4);\n var Offset = blob.read_shift(4);\n Props[i] = [PropID, Offset + start_addr];\n }\n\n Props.sort(function (x, y) {\n return x[1] - y[1];\n });\n var PropH = {};\n\n for (i = 0; i != NumProps; ++i) {\n if (blob.l !== Props[i][1]) {\n var fail = true;\n if (i > 0 && PIDSI) switch (PIDSI[Props[i - 1][0]].t) {\n case 0x02\n /*VT_I2*/\n :\n if (blob.l + 2 === Props[i][1]) {\n blob.l += 2;\n fail = false;\n }\n\n break;\n\n case 0x50\n /*VT_STRING*/\n :\n if (blob.l <= Props[i][1]) {\n blob.l = Props[i][1];\n fail = false;\n }\n\n break;\n\n case 0x100C\n /*VT_VECTOR|VT_VARIANT*/\n :\n if (blob.l <= Props[i][1]) {\n blob.l = Props[i][1];\n fail = false;\n }\n\n break;\n }\n\n if ((!PIDSI || i == 0) && blob.l <= Props[i][1]) {\n fail = false;\n blob.l = Props[i][1];\n }\n\n if (fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n }\n\n if (PIDSI) {\n var piddsi = PIDSI[Props[i][0]];\n PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {\n raw: true\n });\n if (piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n if (piddsi.n == \"CodePage\") switch (PropH[piddsi.n]) {\n case 0:\n PropH[piddsi.n] = 1252;\n\n /* falls through */\n\n case 874:\n case 932:\n case 936:\n case 949:\n case 950:\n case 1250:\n case 1251:\n case 1253:\n case 1254:\n case 1255:\n case 1256:\n case 1257:\n case 1258:\n case 10000:\n case 1200:\n case 1201:\n case 1252:\n case 65000:\n case -536:\n case 65001:\n case -535:\n set_cp(CodePage = PropH[piddsi.n] >>> 0 & 0xFFFF);\n break;\n\n default:\n throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n }\n } else {\n if (Props[i][0] === 0x1) {\n CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2)\n /*:number*/\n ;\n set_cp(CodePage);\n\n if (Dictionary !== -1) {\n var oldpos = blob.l;\n blob.l = Props[Dictionary][1];\n DictObj = parse_dictionary(blob, CodePage);\n blob.l = oldpos;\n }\n } else if (Props[i][0] === 0) {\n if (CodePage === 0) {\n Dictionary = i;\n blob.l = Props[i + 1][1];\n continue;\n }\n\n DictObj = parse_dictionary(blob, CodePage);\n } else {\n var name = DictObj[Props[i][0]];\n var val;\n /* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\n switch (blob[blob.l]) {\n case 0x41\n /*VT_BLOB*/\n :\n blob.l += 4;\n val = parse_BLOB(blob);\n break;\n\n case 0x1E\n /*VT_LPSTR*/\n :\n blob.l += 4;\n val = parse_VtString(blob, blob[blob.l - 4]).replace(/\\u0000+$/, \"\");\n break;\n\n case 0x1F\n /*VT_LPWSTR*/\n :\n blob.l += 4;\n val = parse_VtString(blob, blob[blob.l - 4]).replace(/\\u0000+$/, \"\");\n break;\n\n case 0x03\n /*VT_I4*/\n :\n blob.l += 4;\n val = blob.read_shift(4, 'i');\n break;\n\n case 0x13\n /*VT_UI4*/\n :\n blob.l += 4;\n val = blob.read_shift(4);\n break;\n\n case 0x05\n /*VT_R8*/\n :\n blob.l += 4;\n val = blob.read_shift(8, 'f');\n break;\n\n case 0x0B\n /*VT_BOOL*/\n :\n blob.l += 4;\n val = parsebool(blob, 4);\n break;\n\n case 0x40\n /*VT_FILETIME*/\n :\n blob.l += 4;\n val = parseDate(parse_FILETIME(blob));\n break;\n\n default:\n throw new Error(\"unparsed value: \" + blob[blob.l]);\n }\n\n PropH[name] = val;\n }\n }\n }\n\n blob.l = start_addr + size;\n /* step ahead to skip padding */\n\n return PropH;\n}\n\nvar XLSPSSkip = [\"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\"]; //.concat(PseudoPropsPairs);\n\nfunction guess_property_type(val\n/*:any*/\n)\n/*:number*/\n{\n switch (typeof val) {\n case \"boolean\":\n return 0x0B;\n\n case \"number\":\n return (val | 0) == val ? 0x03 : 0x05;\n\n case \"string\":\n return 0x1F;\n\n case \"object\":\n if (val instanceof Date) return 0x40;\n break;\n }\n\n return -1;\n}\n\nfunction write_PropertySet(entries, RE, PIDSI) {\n var hdr = new_buf(8),\n piao = [],\n prop = [];\n var sz = 8,\n i = 0;\n var pr = new_buf(8),\n pio = new_buf(8);\n pr.write_shift(4, 0x0002);\n pr.write_shift(4, 0x04B0);\n pio.write_shift(4, 0x0001);\n prop.push(pr);\n piao.push(pio);\n sz += 8 + pr.length;\n\n if (!RE) {\n pio = new_buf(8);\n pio.write_shift(4, 0);\n piao.unshift(pio);\n var bufs = [new_buf(4)];\n bufs[0].write_shift(4, entries.length);\n\n for (i = 0; i < entries.length; ++i) {\n var value = entries[i][0];\n pr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n pr.write_shift(4, i + 2);\n pr.write_shift(4, value.length + 1);\n pr.write_shift(0, value, \"dbcs\");\n\n while (pr.l != pr.length) {\n pr.write_shift(1, 0);\n }\n\n bufs.push(pr);\n }\n\n pr = bconcat(bufs);\n prop.unshift(pr);\n sz += 8 + pr.length;\n }\n\n for (i = 0; i < entries.length; ++i) {\n if (RE && !RE[entries[i][0]]) continue;\n if (XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n if (entries[i][1] == null) continue;\n var val = entries[i][1],\n idx = 0;\n\n if (RE) {\n idx = +RE[entries[i][0]];\n var pinfo = PIDSI\n /*:: || {}*/\n [idx]\n /*:: || {} */\n ;\n\n if (pinfo.p == \"version\" && typeof val == \"string\") {\n /*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n var arr = val.split(\".\");\n val = (+arr[0] << 16) + (+arr[1] || 0);\n }\n\n pr = write_TypedPropertyValue(pinfo.t, val);\n } else {\n var T = guess_property_type(val);\n\n if (T == -1) {\n T = 0x1F;\n val = String(val);\n }\n\n pr = write_TypedPropertyValue(T, val);\n }\n\n prop.push(pr);\n pio = new_buf(8);\n pio.write_shift(4, !RE ? 2 + i : idx);\n piao.push(pio);\n sz += 8 + pr.length;\n }\n\n var w = 8 * (prop.length + 1);\n\n for (i = 0; i < prop.length; ++i) {\n piao[i].write_shift(4, w);\n w += prop[i].length;\n }\n\n hdr.write_shift(4, sz);\n hdr.write_shift(4, prop.length);\n return bconcat([hdr].concat(piao).concat(prop));\n}\n/* [MS-OLEPS] 2.21 PropertySetStream */\n\n\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n var blob = file.content;\n if (!blob) return {}\n /*:any*/\n ;\n prep_blob(blob, 0);\n var NumSets,\n FMTID0,\n FMTID1,\n Offset0,\n Offset1 = 0;\n blob.chk('feff', 'Byte Order: ');\n /*var vers = */\n\n blob.read_shift(2); // TODO: check version\n\n var SystemIdentifier = blob.read_shift(4);\n var CLSID = blob.read_shift(16);\n if (CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n NumSets = blob.read_shift(4);\n if (NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n FMTID0 = blob.read_shift(16);\n Offset0 = blob.read_shift(4);\n if (NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);else if (NumSets === 2) {\n FMTID1 = blob.read_shift(16);\n Offset1 = blob.read_shift(4);\n }\n var PSet0 = parse_PropertySet(blob, PIDSI);\n var rval = {\n SystemIdentifier: SystemIdentifier\n }\n /*:any*/\n ;\n\n for (var y in PSet0) {\n rval[y] = PSet0[y];\n } //rval.blob = blob;\n\n\n rval.FMTID = FMTID0; //rval.PSet0 = PSet0;\n\n if (NumSets === 1) return rval;\n if (Offset1 - blob.l == 2) blob.l += 2;\n if (blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n var PSet1;\n\n try {\n PSet1 = parse_PropertySet(blob, null);\n } catch (e) {\n /* empty */\n }\n\n for (y in PSet1) {\n rval[y] = PSet1[y];\n }\n\n rval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\n return rval;\n}\n\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI\n/*:{[key:string|number]:any}*/\n, entries2\n/*:?any*/\n, clsid2\n/*:?any*/\n) {\n var hdr = new_buf(entries2 ? 68 : 48);\n var bufs = [hdr];\n hdr.write_shift(2, 0xFFFE);\n hdr.write_shift(2, 0x0000);\n /* TODO: type 1 props */\n\n hdr.write_shift(4, 0x32363237);\n hdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n hdr.write_shift(4, entries2 ? 2 : 1);\n hdr.write_shift(16, clsid, \"hex\");\n hdr.write_shift(4, entries2 ? 68 : 48);\n var ps0 = write_PropertySet(entries, RE, PIDSI);\n bufs.push(ps0);\n\n if (entries2) {\n var ps1 = write_PropertySet(entries2, null, null);\n hdr.write_shift(16, clsid2, \"hex\");\n hdr.write_shift(4, 68 + ps0.length);\n bufs.push(ps1);\n }\n\n return bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) {\n blob.read_shift(length);\n return null;\n}\n\nfunction writezeroes(n, o) {\n if (!o) o = new_buf(n);\n\n for (var j = 0; j < n; ++j) {\n o.write_shift(1, 0);\n }\n\n return o;\n}\n\nfunction parslurp(blob, length, cb) {\n var arr = [],\n target = blob.l + length;\n\n while (blob.l < target) {\n arr.push(cb(blob, target - blob.l));\n }\n\n if (target !== blob.l) throw new Error(\"Slurp error\");\n return arr;\n}\n\nfunction parsebool(blob, length\n/*:number*/\n) {\n return blob.read_shift(length) === 0x1;\n}\n\nfunction writebool(v\n/*:any*/\n, o) {\n if (!o) o = new_buf(2);\n o.write_shift(2, +!!v);\n return o;\n}\n\nfunction parseuint16(blob\n/*::, length:?number, opts:?any*/\n) {\n return blob.read_shift(2, 'u');\n}\n\nfunction writeuint16(v\n/*:number*/\n, o) {\n if (!o) o = new_buf(2);\n o.write_shift(2, v);\n return o;\n}\n\nfunction parseuint16a(blob, length\n/*:: :?number, opts:?any*/\n) {\n return parslurp(blob, length, parseuint16);\n}\n/* --- 2.5 Structures --- */\n\n/* [MS-XLS] 2.5.10 Bes (boolean or error) */\n\n\nfunction parse_Bes(blob\n/*::, length*/\n) {\n var v = blob.read_shift(1),\n t = blob.read_shift(1);\n return t === 0x01 ? v : v === 0x01;\n}\n\nfunction write_Bes(v, t\n/*:string*/\n, o) {\n if (!o) o = new_buf(2);\n o.write_shift(1, t == 'e' ? +v : +!!v);\n o.write_shift(1, t == 'e' ? 1 : 0);\n return o;\n}\n/* [MS-XLS] 2.5.240 ShortXLUnicodeString */\n\n\nfunction parse_ShortXLUnicodeString(blob, length, opts) {\n var cch = blob.read_shift(opts && opts.biff >= 12 ? 2 : 1);\n var encoding = 'sbcs-cont';\n var cp = current_codepage;\n if (opts && opts.biff >= 8) current_codepage = 1200;\n\n if (!opts || opts.biff == 8) {\n var fHighByte = blob.read_shift(1);\n\n if (fHighByte) {\n encoding = 'dbcs-cont';\n }\n } else if (opts.biff == 12) {\n encoding = 'wstr';\n }\n\n if (opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n var o = cch ? blob.read_shift(cch, encoding) : \"\";\n current_codepage = cp;\n return o;\n}\n/* 2.5.293 XLUnicodeRichExtendedString */\n\n\nfunction parse_XLUnicodeRichExtendedString(blob) {\n var cp = current_codepage;\n current_codepage = 1200;\n var cch = blob.read_shift(2),\n flags = blob.read_shift(1);\n var\n /*fHighByte = flags & 0x1,*/\n fExtSt = flags & 0x4,\n fRichSt = flags & 0x8;\n var width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\n var cRun = 0,\n cbExtRst;\n var z = {};\n if (fRichSt) cRun = blob.read_shift(2);\n if (fExtSt) cbExtRst = blob.read_shift(4);\n var encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n var msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n if (fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\n if (fExtSt) blob.l += cbExtRst; //TODO: parse this\n\n z.t = msg;\n\n if (!fRichSt) {\n z.raw = \"\" + z.t + \"\";\n z.r = z.t;\n }\n\n current_codepage = cp;\n return z;\n}\n\nfunction write_XLUnicodeRichExtendedString(xlstr\n/*:: :XLString, opts*/\n) {\n var str = xlstr.t || \"\",\n nfmts = 1;\n var hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n hdr.write_shift(2, str.length);\n hdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n if (nfmts > 1) hdr.write_shift(2, nfmts);\n var otext = new_buf(2 * str.length);\n otext.write_shift(2 * str.length, str, 'utf16le');\n var out = [hdr, otext];\n return bconcat(out);\n}\n/* 2.5.296 XLUnicodeStringNoCch */\n\n\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n var retval;\n\n if (opts) {\n if (opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n if (opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n }\n\n var fHighByte = blob.read_shift(1);\n\n if (fHighByte === 0) {\n retval = blob.read_shift(cch, 'sbcs-cont');\n } else {\n retval = blob.read_shift(cch, 'dbcs-cont');\n }\n\n return retval;\n}\n/* 2.5.294 XLUnicodeString */\n\n\nfunction parse_XLUnicodeString(blob, length, opts) {\n var cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\n\n\nfunction parse_XLUnicodeString2(blob, length, opts) {\n if (opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n var cch = blob.read_shift(1);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return blob.read_shift(cch, opts.biff <= 4 || !blob.lens ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\n\n\nfunction write_XLUnicodeString(str, opts, o) {\n if (!o) o = new_buf(3 + 2 * str.length);\n o.write_shift(2, str.length);\n o.write_shift(1, 1);\n o.write_shift(31, str, 'utf16le');\n return o;\n}\n/* [MS-XLS] 2.5.61 ControlInfo */\n\n\nfunction parse_ControlInfo(blob\n/*::, length, opts*/\n) {\n var flags = blob.read_shift(1);\n blob.l++;\n var accel = blob.read_shift(2);\n blob.l += 2;\n return [flags, accel];\n}\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\n\n\nfunction parse_URLMoniker(blob\n/*::, length, opts*/\n) {\n var len = blob.read_shift(4),\n start = blob.l;\n var extra = false;\n\n if (len > 24) {\n /* look ahead */\n blob.l += len - 24;\n if (blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n blob.l = start;\n }\n\n var url = blob.read_shift((extra ? len - 24 : len) >> 1, 'utf16le').replace(chr0, \"\");\n if (extra) blob.l += 24;\n return url;\n}\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\n\n\nfunction parse_FileMoniker(blob\n/*::, length*/\n) {\n var cAnti = blob.read_shift(2);\n var preamble = \"\";\n\n while (cAnti-- > 0) {\n preamble += \"../\";\n }\n\n var ansiPath = blob.read_shift(0, 'lpstr-ansi');\n blob.l += 2; //var endServer = blob.read_shift(2);\n\n if (blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n var sz = blob.read_shift(4);\n if (sz === 0) return preamble + ansiPath.replace(/\\\\/g, \"/\");\n var bytes = blob.read_shift(4);\n if (blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n var unicodePath = blob.read_shift(bytes >> 1, 'utf16le').replace(chr0, \"\");\n return preamble + unicodePath;\n}\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\n\n\nfunction parse_HyperlinkMoniker(blob, length) {\n var clsid = blob.read_shift(16);\n length -= 16;\n\n switch (clsid) {\n case \"e0c9ea79f9bace118c8200aa004ba90b\":\n return parse_URLMoniker(blob, length);\n\n case \"0303000000000000c000000000000046\":\n return parse_FileMoniker(blob, length);\n\n default:\n throw new Error(\"Unsupported Moniker \" + clsid);\n }\n}\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\n\n\nfunction parse_HyperlinkString(blob\n/*::, length*/\n) {\n var len = blob.read_shift(4);\n var o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n return o;\n}\n\nfunction write_HyperlinkString(str\n/*:string*/\n, o) {\n if (!o) o = new_buf(6 + str.length * 2);\n o.write_shift(4, 1 + str.length);\n\n for (var i = 0; i < str.length; ++i) {\n o.write_shift(2, str.charCodeAt(i));\n }\n\n o.write_shift(2, 0);\n return o;\n}\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\n\n\nfunction parse_Hyperlink(blob, length)\n/*:Hyperlink*/\n{\n var end = blob.l + length;\n var sVer = blob.read_shift(4);\n if (sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n var flags = blob.read_shift(2);\n blob.l += 2;\n var displayName,\n targetFrameName,\n moniker,\n oleMoniker,\n Loc = \"\",\n guid,\n fileTime;\n if (flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n if (flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n if ((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n if ((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n if (flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n if (flags & 0x0020) guid = blob.read_shift(16);\n if (flags & 0x0040) fileTime = parse_FILETIME(blob\n /*, 8*/\n );\n blob.l = end;\n var target = targetFrameName || moniker || oleMoniker || \"\";\n if (target && Loc) target += \"#\" + Loc;\n if (!target) target = \"#\" + Loc;\n if (flags & 0x0002 && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n var out = {\n Target: target\n }\n /*:any*/\n ;\n if (guid) out.guid = guid;\n if (fileTime) out.time = fileTime;\n if (displayName) out.Tooltip = displayName;\n return out;\n}\n\nfunction write_Hyperlink(hl) {\n var out = new_buf(512),\n i = 0;\n var Target = hl.Target;\n if (Target.slice(0, 7) == \"file://\") Target = Target.slice(7);\n var hashidx = Target.indexOf(\"#\");\n var F = hashidx > -1 ? 0x1f : 0x17;\n\n switch (Target.charAt(0)) {\n case \"#\":\n F = 0x1c;\n break;\n\n case \".\":\n F &= ~2;\n break;\n }\n\n out.write_shift(4, 2);\n out.write_shift(4, F);\n var data = [8, 6815827, 6619237, 4849780, 83];\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(4, data[i]);\n }\n\n if (F == 0x1C) {\n Target = Target.slice(1);\n write_HyperlinkString(Target, out);\n } else if (F & 0x02) {\n data = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(1, parseInt(data[i], 16));\n }\n\n var Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n out.write_shift(4, 2 * (Pretarget.length + 1));\n\n for (i = 0; i < Pretarget.length; ++i) {\n out.write_shift(2, Pretarget.charCodeAt(i));\n }\n\n out.write_shift(2, 0);\n if (F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx + 1) : \"\", out);\n } else {\n data = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\n for (i = 0; i < data.length; ++i) {\n out.write_shift(1, parseInt(data[i], 16));\n }\n\n var P = 0;\n\n while (Target.slice(P * 3, P * 3 + 3) == \"../\" || Target.slice(P * 3, P * 3 + 3) == \"..\\\\\") {\n ++P;\n }\n\n out.write_shift(2, P);\n out.write_shift(4, Target.length - 3 * P + 1);\n\n for (i = 0; i < Target.length - 3 * P; ++i) {\n out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n }\n\n out.write_shift(1, 0);\n out.write_shift(2, 0xFFFF);\n out.write_shift(2, 0xDEAD);\n\n for (i = 0; i < 6; ++i) {\n out.write_shift(4, 0);\n }\n }\n\n return out.slice(0, out.l);\n}\n/* 2.5.178 LongRGBA */\n\n\nfunction parse_LongRGBA(blob\n/*::, length*/\n) {\n var r = blob.read_shift(1),\n g = blob.read_shift(1),\n b = blob.read_shift(1),\n a = blob.read_shift(1);\n return [r, g, b, a];\n}\n/* 2.5.177 LongRGB */\n\n\nfunction parse_LongRGB(blob, length) {\n var x = parse_LongRGBA(blob, length);\n x[3] = 0;\n return x;\n}\n/* [MS-XLS] 2.5.19 */\n\n\nfunction parse_XLSCell(blob\n/*::, length*/\n)\n/*:Cell*/\n{\n var rw = blob.read_shift(2); // 0-indexed\n\n var col = blob.read_shift(2);\n var ixfe = blob.read_shift(2);\n return {\n r: rw,\n c: col,\n ixfe: ixfe\n }\n /*:any*/\n ;\n}\n\nfunction write_XLSCell(R\n/*:number*/\n, C\n/*:number*/\n, ixfe\n/*:?number*/\n, o) {\n if (!o) o = new_buf(6);\n o.write_shift(2, R);\n o.write_shift(2, C);\n o.write_shift(2, ixfe || 0);\n return o;\n}\n/* [MS-XLS] 2.5.134 */\n\n\nfunction parse_frtHeader(blob) {\n var rt = blob.read_shift(2);\n var flags = blob.read_shift(2); // TODO: parse these flags\n\n blob.l += 8;\n return {\n type: rt,\n flags: flags\n };\n}\n\nfunction parse_OptXLUnicodeString(blob, length, opts) {\n return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts);\n}\n/* [MS-XLS] 2.5.344 */\n\n\nfunction parse_XTI(blob, length, opts) {\n var w = opts.biff > 8 ? 4 : 2;\n var iSupBook = blob.read_shift(w),\n itabFirst = blob.read_shift(w, 'i'),\n itabLast = blob.read_shift(w, 'i');\n return [iSupBook, itabFirst, itabLast];\n}\n/* [MS-XLS] 2.5.218 */\n\n\nfunction parse_RkRec(blob) {\n var ixfe = blob.read_shift(2);\n var RK = parse_RkNumber(blob);\n return [ixfe, RK];\n}\n/* [MS-XLS] 2.5.1 */\n\n\nfunction parse_AddinUdf(blob, length, opts) {\n blob.l += 4;\n length -= 4;\n var l = blob.l + length;\n var udfName = parse_ShortXLUnicodeString(blob, length, opts);\n var cb = blob.read_shift(2);\n l -= blob.l;\n if (cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n blob.l += cb;\n return udfName;\n}\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\n\n\nfunction parse_Ref8U(blob\n/*::, length*/\n) {\n var rwFirst = blob.read_shift(2);\n var rwLast = blob.read_shift(2);\n var colFirst = blob.read_shift(2);\n var colLast = blob.read_shift(2);\n return {\n s: {\n c: colFirst,\n r: rwFirst\n },\n e: {\n c: colLast,\n r: rwLast\n }\n };\n}\n\nfunction write_Ref8U(r\n/*:Range*/\n, o) {\n if (!o) o = new_buf(8);\n o.write_shift(2, r.s.r);\n o.write_shift(2, r.e.r);\n o.write_shift(2, r.s.c);\n o.write_shift(2, r.e.c);\n return o;\n}\n/* [MS-XLS] 2.5.211 */\n\n\nfunction parse_RefU(blob\n/*::, length*/\n) {\n var rwFirst = blob.read_shift(2);\n var rwLast = blob.read_shift(2);\n var colFirst = blob.read_shift(1);\n var colLast = blob.read_shift(1);\n return {\n s: {\n c: colFirst,\n r: rwFirst\n },\n e: {\n c: colLast,\n r: rwLast\n }\n };\n}\n/* [MS-XLS] 2.5.207 */\n\n\nvar parse_Ref = parse_RefU;\n/* [MS-XLS] 2.5.143 */\n\nfunction parse_FtCmo(blob\n/*::, length*/\n) {\n blob.l += 4;\n var ot = blob.read_shift(2);\n var id = blob.read_shift(2);\n var flags = blob.read_shift(2);\n blob.l += 12;\n return [id, ot, flags];\n}\n/* [MS-XLS] 2.5.149 */\n\n\nfunction parse_FtNts(blob) {\n var out = {};\n blob.l += 4;\n blob.l += 16; // GUID TODO\n\n out.fSharedNote = blob.read_shift(2);\n blob.l += 4;\n return out;\n}\n/* [MS-XLS] 2.5.142 */\n\n\nfunction parse_FtCf(blob) {\n var out = {};\n blob.l += 4;\n blob.cf = blob.read_shift(2);\n return out;\n}\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\n\n\nfunction parse_FtSkip(blob) {\n blob.l += 2;\n blob.l += blob.read_shift(2);\n}\n\nvar FtTab = {\n /*::[*/\n 0x00\n /*::]*/\n : parse_FtSkip,\n\n /* FtEnd */\n\n /*::[*/\n 0x04\n /*::]*/\n : parse_FtSkip,\n\n /* FtMacro */\n\n /*::[*/\n 0x05\n /*::]*/\n : parse_FtSkip,\n\n /* FtButton */\n\n /*::[*/\n 0x06\n /*::]*/\n : parse_FtSkip,\n\n /* FtGmo */\n\n /*::[*/\n 0x07\n /*::]*/\n : parse_FtCf,\n\n /* FtCf */\n\n /*::[*/\n 0x08\n /*::]*/\n : parse_FtSkip,\n\n /* FtPioGrbit */\n\n /*::[*/\n 0x09\n /*::]*/\n : parse_FtSkip,\n\n /* FtPictFmla */\n\n /*::[*/\n 0x0A\n /*::]*/\n : parse_FtSkip,\n\n /* FtCbls */\n\n /*::[*/\n 0x0B\n /*::]*/\n : parse_FtSkip,\n\n /* FtRbo */\n\n /*::[*/\n 0x0C\n /*::]*/\n : parse_FtSkip,\n\n /* FtSbs */\n\n /*::[*/\n 0x0D\n /*::]*/\n : parse_FtNts,\n\n /* FtNts */\n\n /*::[*/\n 0x0E\n /*::]*/\n : parse_FtSkip,\n\n /* FtSbsFmla */\n\n /*::[*/\n 0x0F\n /*::]*/\n : parse_FtSkip,\n\n /* FtGboData */\n\n /*::[*/\n 0x10\n /*::]*/\n : parse_FtSkip,\n\n /* FtEdoData */\n\n /*::[*/\n 0x11\n /*::]*/\n : parse_FtSkip,\n\n /* FtRboData */\n\n /*::[*/\n 0x12\n /*::]*/\n : parse_FtSkip,\n\n /* FtCblsData */\n\n /*::[*/\n 0x13\n /*::]*/\n : parse_FtSkip,\n\n /* FtLbsData */\n\n /*::[*/\n 0x14\n /*::]*/\n : parse_FtSkip,\n\n /* FtCblsFmla */\n\n /*::[*/\n 0x15\n /*::]*/\n : parse_FtCmo\n};\n\nfunction parse_FtArray(blob, length\n/*::, ot*/\n) {\n var tgt = blob.l + length;\n var fts = [];\n\n while (blob.l < tgt) {\n var ft = blob.read_shift(2);\n blob.l -= 2;\n\n try {\n fts.push(FtTab[ft](blob, tgt - blob.l));\n } catch (e) {\n blob.l = tgt;\n return fts;\n }\n }\n\n if (blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\n return fts;\n}\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\n\n\nfunction parse_BOF(blob, length) {\n var o = {\n BIFFVer: 0,\n dt: 0\n };\n o.BIFFVer = blob.read_shift(2);\n length -= 2;\n\n if (length >= 2) {\n o.dt = blob.read_shift(2);\n blob.l -= 2;\n }\n\n switch (o.BIFFVer) {\n case 0x0600:\n /* BIFF8 */\n\n case 0x0500:\n /* BIFF5 */\n\n case 0x0400:\n /* BIFF4 */\n\n case 0x0300:\n /* BIFF3 */\n\n case 0x0200:\n /* BIFF2 */\n\n case 0x0002:\n case 0x0007:\n /* BIFF2 */\n break;\n\n default:\n if (length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n }\n\n blob.read_shift(length);\n return o;\n}\n\nfunction write_BOF(wb\n/*:Workbook*/\n, t\n/*:number*/\n, o) {\n var h = 0x0600,\n w = 16;\n\n switch (o.bookType) {\n case 'biff8':\n break;\n\n case 'biff5':\n h = 0x0500;\n w = 8;\n break;\n\n case 'biff4':\n h = 0x0004;\n w = 6;\n break;\n\n case 'biff3':\n h = 0x0003;\n w = 6;\n break;\n\n case 'biff2':\n h = 0x0002;\n w = 4;\n break;\n\n case 'xla':\n break;\n\n default:\n throw new Error(\"unsupported BIFF version\");\n }\n\n var out = new_buf(w);\n out.write_shift(2, h);\n out.write_shift(2, t);\n if (w > 4) out.write_shift(2, 0x7262);\n if (w > 6) out.write_shift(2, 0x07CD);\n\n if (w > 8) {\n out.write_shift(2, 0xC009);\n out.write_shift(2, 0x0001);\n out.write_shift(2, 0x0706);\n out.write_shift(2, 0x0000);\n }\n\n return out;\n}\n/* [MS-XLS] 2.4.146 */\n\n\nfunction parse_InterfaceHdr(blob, length) {\n if (length === 0) return 0x04b0;\n\n if (blob.read_shift(2) !== 0x04b0) {\n /* empty */\n }\n\n return 0x04b0;\n}\n/* [MS-XLS] 2.4.349 */\n\n\nfunction parse_WriteAccess(blob, length, opts) {\n if (opts.enc) {\n blob.l += length;\n return \"\";\n }\n\n var l = blob.l; // TODO: make sure XLUnicodeString doesnt overrun\n\n var UserName = parse_XLUnicodeString2(blob, 0, opts);\n blob.read_shift(length + l - blob.l);\n return UserName;\n}\n\nfunction write_WriteAccess(s\n/*:string*/\n, opts) {\n var b8 = !opts || opts.biff == 8;\n var o = new_buf(b8 ? 112 : 54);\n o.write_shift(opts.biff == 8 ? 2 : 1, 7);\n if (b8) o.write_shift(1, 0);\n o.write_shift(4, 0x33336853);\n o.write_shift(4, 0x00534A74 | (b8 ? 0 : 0x20000000));\n\n while (o.l < o.length) {\n o.write_shift(1, b8 ? 0 : 32);\n }\n\n return o;\n}\n/* [MS-XLS] 2.4.351 */\n\n\nfunction parse_WsBool(blob, length, opts) {\n var flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n return {\n fDialog: flags & 0x10,\n fBelow: flags & 0x40,\n fRight: flags & 0x80\n };\n}\n/* [MS-XLS] 2.4.28 */\n\n\nfunction parse_BoundSheet8(blob, length, opts) {\n var pos = blob.read_shift(4);\n var hidden = blob.read_shift(1) & 0x03;\n var dt = blob.read_shift(1);\n\n switch (dt) {\n case 0:\n dt = 'Worksheet';\n break;\n\n case 1:\n dt = 'Macrosheet';\n break;\n\n case 2:\n dt = 'Chartsheet';\n break;\n\n case 6:\n dt = 'VBAModule';\n break;\n }\n\n var name = parse_ShortXLUnicodeString(blob, 0, opts);\n if (name.length === 0) name = \"Sheet1\";\n return {\n pos: pos,\n hs: hidden,\n dt: dt,\n name: name\n };\n}\n\nfunction write_BoundSheet8(data, opts) {\n var w = !opts || opts.biff >= 8 ? 2 : 1;\n var o = new_buf(8 + w * data.name.length);\n o.write_shift(4, data.pos);\n o.write_shift(1, data.hs || 0);\n o.write_shift(1, data.dt);\n o.write_shift(1, data.name.length);\n if (opts.biff >= 8) o.write_shift(1, 1);\n o.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n var out = o.slice(0, o.l);\n out.l = o.l;\n return out;\n}\n/* [MS-XLS] 2.4.265 TODO */\n\n\nfunction parse_SST(blob, length)\n/*:SST*/\n{\n var end = blob.l + length;\n var cnt = blob.read_shift(4);\n var ucnt = blob.read_shift(4);\n var strs\n /*:SST*/\n = []\n /*:any*/\n ;\n\n for (var i = 0; i != ucnt && blob.l < end; ++i) {\n strs.push(parse_XLUnicodeRichExtendedString(blob));\n }\n\n strs.Count = cnt;\n strs.Unique = ucnt;\n return strs;\n}\n\nfunction write_SST(sst, opts) {\n var header = new_buf(8);\n header.write_shift(4, sst.Count);\n header.write_shift(4, sst.Unique);\n var strs = [];\n\n for (var j = 0; j < sst.length; ++j) {\n strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n }\n\n var o = bconcat([header].concat(strs));\n /*::(*/\n\n o\n /*:: :any)*/\n .parts = [header.length].concat(strs.map(function (str) {\n return str.length;\n }));\n return o;\n}\n/* [MS-XLS] 2.4.107 */\n\n\nfunction parse_ExtSST(blob, length) {\n var extsst = {};\n extsst.dsst = blob.read_shift(2);\n blob.l += length - 2;\n return extsst;\n}\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\n\n\nfunction parse_Row(blob) {\n var z = {}\n /*:any*/\n ;\n z.r = blob.read_shift(2);\n z.c = blob.read_shift(2);\n z.cnt = blob.read_shift(2) - z.c;\n var miyRw = blob.read_shift(2);\n blob.l += 4; // reserved(2), unused(2)\n\n var flags = blob.read_shift(1); // various flags\n\n blob.l += 3; // reserved(8), ixfe(12), flags(4)\n\n if (flags & 0x07) z.level = flags & 0x07; // collapsed: flags & 0x10\n\n if (flags & 0x20) z.hidden = true;\n if (flags & 0x40) z.hpt = miyRw / 20;\n return z;\n}\n/* [MS-XLS] 2.4.125 */\n\n\nfunction parse_ForceFullCalculation(blob) {\n var header = parse_frtHeader(blob);\n if (header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n var fullcalc = blob.read_shift(4);\n return fullcalc !== 0x0;\n}\n/* [MS-XLS] 2.4.215 rt */\n\n\nfunction parse_RecalcId(blob) {\n blob.read_shift(2);\n return blob.read_shift(4);\n}\n/* [MS-XLS] 2.4.87 */\n\n\nfunction parse_DefaultRowHeight(blob, length, opts) {\n var f = 0;\n\n if (!(opts && opts.biff == 2)) {\n f = blob.read_shift(2);\n }\n\n var miyRw = blob.read_shift(2);\n\n if (opts && opts.biff == 2) {\n f = 1 - (miyRw >> 15);\n miyRw &= 0x7fff;\n }\n\n var fl = {\n Unsynced: f & 1,\n DyZero: (f & 2) >> 1,\n ExAsc: (f & 4) >> 2,\n ExDsc: (f & 8) >> 3\n };\n return [fl, miyRw];\n}\n/* [MS-XLS] 2.4.345 TODO */\n\n\nfunction parse_Window1(blob) {\n var xWn = blob.read_shift(2),\n yWn = blob.read_shift(2),\n dxWn = blob.read_shift(2),\n dyWn = blob.read_shift(2);\n var flags = blob.read_shift(2),\n iTabCur = blob.read_shift(2),\n iTabFirst = blob.read_shift(2);\n var ctabSel = blob.read_shift(2),\n wTabRatio = blob.read_shift(2);\n return {\n Pos: [xWn, yWn],\n Dim: [dxWn, dyWn],\n Flags: flags,\n CurTab: iTabCur,\n FirstTab: iTabFirst,\n Selected: ctabSel,\n TabRatio: wTabRatio\n };\n}\n\nfunction\n /*::opts*/\nwrite_Window1() {\n var o = new_buf(18);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0x7260);\n o.write_shift(2, 0x44c0);\n o.write_shift(2, 0x38);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 1);\n o.write_shift(2, 0x01f4);\n return o;\n}\n/* [MS-XLS] 2.4.346 TODO */\n\n\nfunction parse_Window2(blob, length, opts) {\n if (opts && opts.biff >= 2 && opts.biff < 5) return {};\n var f = blob.read_shift(2);\n return {\n RTL: f & 0x40\n };\n}\n\nfunction write_Window2(view) {\n var o = new_buf(18),\n f = 0x6b6;\n if (view && view.RTL) f |= 0x40;\n o.write_shift(2, f);\n o.write_shift(4, 0);\n o.write_shift(4, 64);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n}\n/* [MS-XLS] 2.4.189 TODO */\n\n\nfunction\n /*blob, length, opts*/\nparse_Pane() {}\n/* [MS-XLS] 2.4.122 TODO */\n\n\nfunction parse_Font(blob, length, opts) {\n var o\n /*:any*/\n = {\n dyHeight: blob.read_shift(2),\n fl: blob.read_shift(2)\n };\n\n switch (opts && opts.biff || 8) {\n case 2:\n break;\n\n case 3:\n case 4:\n blob.l += 2;\n break;\n\n default:\n blob.l += 10;\n break;\n }\n\n o.name = parse_ShortXLUnicodeString(blob, 0, opts);\n return o;\n}\n\nfunction write_Font(data, opts) {\n var name = data.name || \"Arial\";\n var b5 = opts && opts.biff == 5,\n w = b5 ? 15 + name.length : 16 + 2 * name.length;\n var o = new_buf(w);\n o.write_shift(2, (data.sz || 12) * 20);\n o.write_shift(4, 0);\n o.write_shift(2, 400);\n o.write_shift(4, 0);\n o.write_shift(2, 0);\n o.write_shift(1, name.length);\n if (!b5) o.write_shift(1, 1);\n o.write_shift((b5 ? 1 : 2) * name.length, name, b5 ? \"sbcs\" : \"utf16le\");\n return o;\n}\n/* [MS-XLS] 2.4.149 */\n\n\nfunction parse_LabelSst(blob) {\n var cell = parse_XLSCell(blob);\n cell.isst = blob.read_shift(4);\n return cell;\n}\n\nfunction write_LabelSst(R\n/*:number*/\n, C\n/*:number*/\n, v\n/*:number*/\n, os\n/*:number*/\n\n/*::, opts*/\n) {\n var o = new_buf(10);\n write_XLSCell(R, C, os, o);\n o.write_shift(4, v);\n return o;\n}\n/* [MS-XLS] 2.4.148 */\n\n\nfunction parse_Label(blob, length, opts) {\n if (opts.biffguess && opts.biff == 2) opts.biff = 5;\n var target = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2) blob.l++;\n var str = parse_XLUnicodeString(blob, target - blob.l, opts);\n cell.val = str;\n return cell;\n}\n\nfunction write_Label(R\n/*:number*/\n, C\n/*:number*/\n, v\n/*:string*/\n, os\n/*:number*/\n, opts) {\n var b8 = !opts || opts.biff == 8;\n var o = new_buf(6 + 2 + +b8 + (1 + b8) * v.length);\n write_XLSCell(R, C, os, o);\n o.write_shift(2, v.length);\n if (b8) o.write_shift(1, 1);\n o.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n return o;\n}\n/* [MS-XLS] 2.4.126 Number Formats */\n\n\nfunction parse_Format(blob, length, opts) {\n var numFmtId = blob.read_shift(2);\n var fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n return [numFmtId, fmtstr];\n}\n\nfunction write_Format(i\n/*:number*/\n, f\n/*:string*/\n, opts, o) {\n var b5 = opts && opts.biff == 5;\n if (!o) o = new_buf(b5 ? 3 + f.length : 5 + 2 * f.length);\n o.write_shift(2, i);\n o.write_shift(b5 ? 1 : 2, f.length);\n if (!b5) o.write_shift(1, 1);\n o.write_shift((b5 ? 1 : 2) * f.length, f, b5 ? 'sbcs' : 'utf16le');\n var out = o.length > o.l ? o.slice(0, o.l) : o;\n if (out.l == null) out.l = out.length;\n return out;\n}\n\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n/* [MS-XLS] 2.4.90 */\n\nfunction parse_Dimensions(blob, length, opts) {\n var end = blob.l + length;\n var w = opts.biff == 8 || !opts.biff ? 4 : 2;\n var r = blob.read_shift(w),\n R = blob.read_shift(w);\n var c = blob.read_shift(2),\n C = blob.read_shift(2);\n blob.l = end;\n return {\n s: {\n r: r,\n c: c\n },\n e: {\n r: R,\n c: C\n }\n };\n}\n\nfunction write_Dimensions(range, opts) {\n var w = opts.biff == 8 || !opts.biff ? 4 : 2;\n var o = new_buf(2 * w + 6);\n o.write_shift(w, range.s.r);\n o.write_shift(w, range.e.r + 1);\n o.write_shift(2, range.s.c);\n o.write_shift(2, range.e.c + 1);\n o.write_shift(2, 0);\n return o;\n}\n/* [MS-XLS] 2.4.220 */\n\n\nfunction parse_RK(blob) {\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var rkrec = parse_RkRec(blob);\n return {\n r: rw,\n c: col,\n ixfe: rkrec[0],\n rknum: rkrec[1]\n };\n}\n/* [MS-XLS] 2.4.175 */\n\n\nfunction parse_MulRk(blob, length) {\n var target = blob.l + length - 2;\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var rkrecs = [];\n\n while (blob.l < target) {\n rkrecs.push(parse_RkRec(blob));\n }\n\n if (blob.l !== target) throw new Error(\"MulRK read error\");\n var lastcol = blob.read_shift(2);\n if (rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n return {\n r: rw,\n c: col,\n C: lastcol,\n rkrec: rkrecs\n };\n}\n/* [MS-XLS] 2.4.174 */\n\n\nfunction parse_MulBlank(blob, length) {\n var target = blob.l + length - 2;\n var rw = blob.read_shift(2),\n col = blob.read_shift(2);\n var ixfes = [];\n\n while (blob.l < target) {\n ixfes.push(blob.read_shift(2));\n }\n\n if (blob.l !== target) throw new Error(\"MulBlank read error\");\n var lastcol = blob.read_shift(2);\n if (ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n return {\n r: rw,\n c: col,\n C: lastcol,\n ixfe: ixfes\n };\n}\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\n\n\nfunction parse_CellStyleXF(blob, length, style, opts) {\n var o = {};\n var a = blob.read_shift(4),\n b = blob.read_shift(4);\n var c = blob.read_shift(4),\n d = blob.read_shift(2);\n o.patternType = XLSFillPattern[c >> 26];\n if (!opts.cellStyles) return o;\n o.alc = a & 0x07;\n o.fWrap = a >> 3 & 0x01;\n o.alcV = a >> 4 & 0x07;\n o.fJustLast = a >> 7 & 0x01;\n o.trot = a >> 8 & 0xFF;\n o.cIndent = a >> 16 & 0x0F;\n o.fShrinkToFit = a >> 20 & 0x01;\n o.iReadOrder = a >> 22 & 0x02;\n o.fAtrNum = a >> 26 & 0x01;\n o.fAtrFnt = a >> 27 & 0x01;\n o.fAtrAlc = a >> 28 & 0x01;\n o.fAtrBdr = a >> 29 & 0x01;\n o.fAtrPat = a >> 30 & 0x01;\n o.fAtrProt = a >> 31 & 0x01;\n o.dgLeft = b & 0x0F;\n o.dgRight = b >> 4 & 0x0F;\n o.dgTop = b >> 8 & 0x0F;\n o.dgBottom = b >> 12 & 0x0F;\n o.icvLeft = b >> 16 & 0x7F;\n o.icvRight = b >> 23 & 0x7F;\n o.grbitDiag = b >> 30 & 0x03;\n o.icvTop = c & 0x7F;\n o.icvBottom = c >> 7 & 0x7F;\n o.icvDiag = c >> 14 & 0x7F;\n o.dgDiag = c >> 21 & 0x0F;\n o.icvFore = d & 0x7F;\n o.icvBack = d >> 7 & 0x7F;\n o.fsxButton = d >> 14 & 0x01;\n return o;\n} //function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\n\n\nfunction parse_XF(blob, length, opts) {\n var o = {};\n o.ifnt = blob.read_shift(2);\n o.numFmtId = blob.read_shift(2);\n o.flags = blob.read_shift(2);\n o.fStyle = o.flags >> 2 & 0x01;\n length -= 6;\n o.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n return o;\n}\n\nfunction write_XF(data, ixfeP, opts, o) {\n var b5 = opts && opts.biff == 5;\n if (!o) o = new_buf(b5 ? 16 : 20);\n o.write_shift(2, 0);\n\n if (data.style) {\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, 0xFFF4);\n } else {\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, ixfeP << 4);\n }\n\n var f = 0;\n if (data.numFmtId > 0 && b5) f |= 0x0400;\n o.write_shift(4, f);\n o.write_shift(4, 0);\n if (!b5) o.write_shift(4, 0);\n o.write_shift(2, 0);\n return o;\n}\n/* [MS-XLS] 2.4.134 */\n\n\nfunction parse_Guts(blob) {\n blob.l += 4;\n var out = [blob.read_shift(2), blob.read_shift(2)];\n if (out[0] !== 0) out[0]--;\n if (out[1] !== 0) out[1]--;\n if (out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n return out;\n}\n\nfunction write_Guts(guts\n/*:Array*/\n) {\n var o = new_buf(8);\n o.write_shift(4, 0);\n o.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n o.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n return o;\n}\n/* [MS-XLS] 2.4.24 */\n\n\nfunction parse_BoolErr(blob, length, opts) {\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2 || length == 9) ++blob.l;\n var val = parse_Bes(blob, 2);\n cell.val = val;\n cell.t = val === true || val === false ? 'b' : 'e';\n return cell;\n}\n\nfunction write_BoolErr(R\n/*:number*/\n, C\n/*:number*/\n, v, os\n/*:number*/\n, opts, t\n/*:string*/\n) {\n var o = new_buf(8);\n write_XLSCell(R, C, os, o);\n write_Bes(v, t, o);\n return o;\n}\n/* [MS-XLS] 2.4.180 Number */\n\n\nfunction parse_Number(blob, length, opts) {\n if (opts.biffguess && opts.biff == 2) opts.biff = 5;\n var cell = parse_XLSCell(blob, 6);\n var xnum = parse_Xnum(blob, 8);\n cell.val = xnum;\n return cell;\n}\n\nfunction write_Number(R\n/*:number*/\n, C\n/*:number*/\n, v, os\n/*:: :number, opts*/\n) {\n var o = new_buf(14);\n write_XLSCell(R, C, os, o);\n write_Xnum(v, o);\n return o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\n\nfunction parse_SupBook(blob, length, opts) {\n var end = blob.l + length;\n var ctab = blob.read_shift(2);\n var cch = blob.read_shift(2);\n opts.sbcch = cch;\n if (cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n if (cch < 0x01 || cch > 0xff) throw new Error(\"Unexpected SupBook type: \" + cch);\n var virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n /* TODO: 2.5.277 Virtual Path */\n\n var rgst = [];\n\n while (end > blob.l) {\n rgst.push(parse_XLUnicodeString(blob));\n }\n\n return [cch, ctab, virtPath, rgst];\n}\n/* [MS-XLS] 2.4.105 TODO */\n\n\nfunction parse_ExternName(blob, length, opts) {\n var flags = blob.read_shift(2);\n var body;\n var o = {\n fBuiltIn: flags & 0x01,\n fWantAdvise: flags >>> 1 & 0x01,\n fWantPict: flags >>> 2 & 0x01,\n fOle: flags >>> 3 & 0x01,\n fOleLink: flags >>> 4 & 0x01,\n cf: flags >>> 5 & 0x3FF,\n fIcon: flags >>> 15 & 0x01\n }\n /*:any*/\n ;\n if (opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length - 2, opts); //else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\n o.body = body || blob.read_shift(length - 2);\n if (typeof body === \"string\") o.Name = body;\n return o;\n}\n/* [MS-XLS] 2.4.150 TODO */\n\n\nvar XLSLblBuiltIn = [\"_xlnm.Consolidate_Area\", \"_xlnm.Auto_Open\", \"_xlnm.Auto_Close\", \"_xlnm.Extract\", \"_xlnm.Database\", \"_xlnm.Criteria\", \"_xlnm.Print_Area\", \"_xlnm.Print_Titles\", \"_xlnm.Recorder\", \"_xlnm.Data_Form\", \"_xlnm.Auto_Activate\", \"_xlnm.Auto_Deactivate\", \"_xlnm.Sheet_Title\", \"_xlnm._FilterDatabase\"];\n\nfunction parse_Lbl(blob, length, opts) {\n var target = blob.l + length;\n var flags = blob.read_shift(2);\n var chKey = blob.read_shift(1);\n var cch = blob.read_shift(1);\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n var itab = 0;\n\n if (!opts || opts.biff >= 5) {\n if (opts.biff != 5) blob.l += 2;\n itab = blob.read_shift(2);\n if (opts.biff == 5) blob.l += 2;\n blob.l += 4;\n }\n\n var name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n if (flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n var npflen = target - blob.l;\n if (opts && opts.biff == 2) --npflen;\n /*jshint -W018 */\n\n var rgce = target == blob.l || cce === 0 || !(npflen > 0) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n /*jshint +W018 */\n\n return {\n chKey: chKey,\n Name: name,\n itab: itab,\n rgce: rgce\n };\n}\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\n\n\nfunction parse_ExternSheet(blob, length, opts) {\n if (opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n var o = [],\n target = blob.l + length,\n len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\n while (len-- !== 0) {\n o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n } // [iSupBook, itabFirst, itabLast];\n\n\n if (blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n return o;\n}\n\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n if (blob[blob.l + 1] == 0x03) blob[blob.l]++;\n var o = parse_ShortXLUnicodeString(blob, length, opts);\n return o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n/* [MS-XLS] 2.4.176 TODO: check older biff */\n\n\nfunction parse_NameCmt(blob, length, opts) {\n if (opts.biff < 8) {\n blob.l += length;\n return;\n }\n\n var cchName = blob.read_shift(2);\n var cchComment = blob.read_shift(2);\n var name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n var comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n return [name, comment];\n}\n/* [MS-XLS] 2.4.260 */\n\n\nfunction parse_ShrFmla(blob, length, opts) {\n var ref = parse_RefU(blob, 6);\n blob.l++;\n var cUse = blob.read_shift(1);\n length -= 8;\n return [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n/* [MS-XLS] 2.4.4 TODO */\n\n\nfunction parse_Array(blob, length, opts) {\n var ref = parse_Ref(blob, 6);\n /* TODO: fAlwaysCalc */\n\n switch (opts.biff) {\n case 2:\n blob.l++;\n length -= 7;\n break;\n\n case 3:\n case 4:\n blob.l += 2;\n length -= 8;\n break;\n\n default:\n blob.l += 6;\n length -= 12;\n }\n\n return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n/* [MS-XLS] 2.4.173 */\n\n\nfunction parse_MTRSettings(blob) {\n var fMTREnabled = blob.read_shift(4) !== 0x00;\n var fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n var cUserThreadCount = blob.read_shift(4);\n return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\n\n\nfunction parse_NoteSh(blob, length, opts) {\n if (opts.biff < 8) return;\n var row = blob.read_shift(2),\n col = blob.read_shift(2);\n var flags = blob.read_shift(2),\n idObj = blob.read_shift(2);\n var stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n if (opts.biff < 8) blob.read_shift(1);\n return [{\n r: row,\n c: col\n }, stAuthor, idObj, flags];\n}\n/* [MS-XLS] 2.4.179 */\n\n\nfunction parse_Note(blob, length, opts) {\n /* TODO: Support revisions */\n return parse_NoteSh(blob, length, opts);\n}\n/* [MS-XLS] 2.4.168 */\n\n\nfunction parse_MergeCells(blob, length)\n/*:Array*/\n{\n var merges\n /*:Array*/\n = [];\n var cmcs = blob.read_shift(2);\n\n while (cmcs--) {\n merges.push(parse_Ref8U(blob, length));\n }\n\n return merges;\n}\n\nfunction write_MergeCells(merges\n/*:Array*/\n) {\n var o = new_buf(2 + merges.length * 8);\n o.write_shift(2, merges.length);\n\n for (var i = 0; i < merges.length; ++i) {\n write_Ref8U(merges[i], o);\n }\n\n return o;\n}\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\n\n\nfunction parse_Obj(blob, length, opts) {\n if (opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n var cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\n var fts = parse_FtArray(blob, length - 22, cmo[1]);\n return {\n cmo: cmo,\n ft: fts\n };\n}\n/* from older spec */\n\n\nvar parse_BIFF5OT = {\n 0x08: function _(blob, length) {\n var tgt = blob.l + length;\n blob.l += 10; // todo\n\n var cf = blob.read_shift(2);\n blob.l += 4;\n blob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\n blob.l += 2;\n blob.l += 2; //var grbit = blob.read_shift(2);\n\n blob.l += 4;\n var cchName = blob.read_shift(1);\n blob.l += cchName; // TODO: stName\n\n blob.l = tgt; // TODO: fmla\n\n return {\n fmt: cf\n };\n }\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n blob.l += 4; //var cnt = blob.read_shift(4);\n\n var ot = blob.read_shift(2);\n var id = blob.read_shift(2);\n var grbit = blob.read_shift(2);\n blob.l += 2; //var colL = blob.read_shift(2);\n\n blob.l += 2; //var dxL = blob.read_shift(2);\n\n blob.l += 2; //var rwT = blob.read_shift(2);\n\n blob.l += 2; //var dyT = blob.read_shift(2);\n\n blob.l += 2; //var colR = blob.read_shift(2);\n\n blob.l += 2; //var dxR = blob.read_shift(2);\n\n blob.l += 2; //var rwB = blob.read_shift(2);\n\n blob.l += 2; //var dyB = blob.read_shift(2);\n\n blob.l += 2; //var cbMacro = blob.read_shift(2);\n\n blob.l += 6;\n length -= 36;\n var fts = [];\n fts.push((parse_BIFF5OT[ot] || parsenoop)(blob, length, opts));\n return {\n cmo: [id, ot, grbit],\n ft: fts\n };\n}\n/* [MS-XLS] 2.4.329 TODO: parse properly */\n\n\nfunction parse_TxO(blob, length, opts) {\n var s = blob.l;\n var texts = \"\";\n\n try {\n blob.l += 4;\n var ot = (opts.lastobj || {\n cmo: [0, 0]\n }).cmo[1];\n var controlInfo; // eslint-disable-line no-unused-vars\n\n if ([0, 5, 7, 11, 12, 14].indexOf(ot) == -1) blob.l += 6;else controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\n var cchText = blob.read_shift(2);\n /*var cbRuns = */\n\n blob.read_shift(2);\n /*var ifntEmpty = */\n\n parseuint16(blob, 2);\n var len = blob.read_shift(2);\n blob.l += len; //var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n for (var i = 1; i < blob.lens.length - 1; ++i) {\n if (blob.l - s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n var hdr = blob[blob.l];\n var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i + 1] - blob.lens[i] - 1);\n texts += t;\n if (texts.length >= (hdr ? cchText : 2 * cchText)) break;\n }\n\n if (texts.length !== cchText && texts.length !== cchText * 2) {\n throw new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n }\n\n blob.l = s + length;\n /* [MS-XLS] 2.5.272 TxORuns */\n //\tvar rgTxoRuns = [];\n //\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n //\tvar cchText2 = blob.read_shift(2);\n //\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n //\tblob.l += 6;\n //\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\n return {\n t: texts\n };\n } catch (e) {\n blob.l = s + length;\n return {\n t: texts\n };\n }\n}\n/* [MS-XLS] 2.4.140 */\n\n\nfunction parse_HLink(blob, length) {\n var ref = parse_Ref8U(blob, 8);\n blob.l += 16;\n /* CLSID */\n\n var hlink = parse_Hyperlink(blob, length - 24);\n return [ref, hlink];\n}\n\nfunction write_HLink(hl) {\n var O = new_buf(24);\n var ref = decode_cell(hl[0]);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.c);\n O.write_shift(2, ref.c);\n var clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\n for (var i = 0; i < 16; ++i) {\n O.write_shift(1, parseInt(clsid[i], 16));\n }\n\n return bconcat([O, write_Hyperlink(hl[1])]);\n}\n/* [MS-XLS] 2.4.141 */\n\n\nfunction parse_HLinkTooltip(blob, length) {\n blob.read_shift(2);\n var ref = parse_Ref8U(blob, 8);\n var wzTooltip = blob.read_shift((length - 10) / 2, 'dbcs-cont');\n wzTooltip = wzTooltip.replace(chr0, \"\");\n return [ref, wzTooltip];\n}\n\nfunction write_HLinkTooltip(hl) {\n var TT = hl[1].Tooltip;\n var O = new_buf(10 + 2 * (TT.length + 1));\n O.write_shift(2, 0x0800);\n var ref = decode_cell(hl[0]);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.r);\n O.write_shift(2, ref.c);\n O.write_shift(2, ref.c);\n\n for (var i = 0; i < TT.length; ++i) {\n O.write_shift(2, TT.charCodeAt(i));\n }\n\n O.write_shift(2, 0);\n return O;\n}\n/* [MS-XLS] 2.4.63 */\n\n\nfunction parse_Country(blob)\n/*:[string|number, string|number]*/\n{\n var o = [0, 0],\n d;\n d = blob.read_shift(2);\n o[0] = CountryEnum[d] || d;\n d = blob.read_shift(2);\n o[1] = CountryEnum[d] || d;\n return o;\n}\n\nfunction write_Country(o) {\n if (!o) o = new_buf(4);\n o.write_shift(2, 0x01);\n o.write_shift(2, 0x01);\n return o;\n}\n/* [MS-XLS] 2.4.50 ClrtClient */\n\n\nfunction parse_ClrtClient(blob) {\n var ccv = blob.read_shift(2);\n var o = [];\n\n while (ccv-- > 0) {\n o.push(parse_LongRGB(blob, 8));\n }\n\n return o;\n}\n/* [MS-XLS] 2.4.188 */\n\n\nfunction parse_Palette(blob) {\n var ccv = blob.read_shift(2);\n var o = [];\n\n while (ccv-- > 0) {\n o.push(parse_LongRGB(blob, 8));\n }\n\n return o;\n}\n/* [MS-XLS] 2.4.354 */\n\n\nfunction parse_XFCRC(blob) {\n blob.l += 2;\n var o = {\n cxfs: 0,\n crc: 0\n };\n o.cxfs = blob.read_shift(2);\n o.crc = blob.read_shift(4);\n return o;\n}\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\n\n\nfunction parse_ColInfo(blob, length, opts) {\n if (!opts.cellStyles) return parsenoop(blob, length);\n var w = opts && opts.biff >= 12 ? 4 : 2;\n var colFirst = blob.read_shift(w);\n var colLast = blob.read_shift(w);\n var coldx = blob.read_shift(w);\n var ixfe = blob.read_shift(w);\n var flags = blob.read_shift(2);\n if (w == 2) blob.l += 2;\n var o = {\n s: colFirst,\n e: colLast,\n w: coldx,\n ixfe: ixfe,\n flags: flags\n }\n /*:any*/\n ;\n if (opts.biff >= 5 || !opts.biff) o.level = flags >> 8 & 0x7;\n return o;\n}\n\nfunction write_ColInfo(col, idx) {\n var o = new_buf(12);\n o.write_shift(2, idx);\n o.write_shift(2, idx);\n o.write_shift(2, col.width * 256);\n o.write_shift(2, 0);\n var f = 0;\n if (col.hidden) f |= 1;\n o.write_shift(1, f);\n f = col.level || 0;\n o.write_shift(1, f);\n o.write_shift(2, 0);\n return o;\n}\n/* [MS-XLS] 2.4.257 */\n\n\nfunction parse_Setup(blob, length) {\n var o = {};\n if (length < 32) return o;\n blob.l += 16;\n o.header = parse_Xnum(blob, 8);\n o.footer = parse_Xnum(blob, 8);\n blob.l += 2;\n return o;\n}\n/* [MS-XLS] 2.4.261 */\n\n\nfunction parse_ShtProps(blob, length, opts) {\n var def = {\n area: false\n };\n\n if (opts.biff != 5) {\n blob.l += length;\n return def;\n }\n\n var d = blob.read_shift(1);\n blob.l += 3;\n if (d & 0x10) def.area = true;\n return def;\n}\n/* [MS-XLS] 2.4.241 */\n\n\nfunction write_RRTabId(n\n/*:number*/\n) {\n var out = new_buf(2 * n);\n\n for (var i = 0; i < n; ++i) {\n out.write_shift(2, i + 1);\n }\n\n return out;\n}\n\nvar parse_Blank = parse_XLSCell;\n/* [MS-XLS] 2.4.20 Just the cell */\n\nvar parse_Scl = parseuint16a;\n/* [MS-XLS] 2.4.247 num, den */\n\nvar parse_String = parse_XLUnicodeString;\n/* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\n\nfunction parse_ImData(blob) {\n var cf = blob.read_shift(2);\n var env = blob.read_shift(2);\n var lcb = blob.read_shift(4);\n var o = {\n fmt: cf,\n env: env,\n len: lcb,\n data: blob.slice(blob.l, blob.l + lcb)\n };\n blob.l += lcb;\n return o;\n}\n/* BIFF2_??? where ??? is the name from [XLS] */\n\n\nfunction parse_BIFF2STR(blob, length, opts) {\n if (opts.biffguess && opts.biff == 5) opts.biff = 2;\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var str = parse_XLUnicodeString2(blob, length - 7, opts);\n cell.t = 'str';\n cell.val = str;\n return cell;\n}\n\nfunction parse_BIFF2NUM(blob\n/*::, length*/\n) {\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var num = parse_Xnum(blob, 8);\n cell.t = 'n';\n cell.val = num;\n return cell;\n}\n\nfunction write_BIFF2NUM(r\n/*:number*/\n, c\n/*:number*/\n, val\n/*:number*/\n) {\n var out = new_buf(15);\n write_BIFF2Cell(out, r, c);\n out.write_shift(8, val, 'f');\n return out;\n}\n\nfunction parse_BIFF2INT(blob) {\n var cell = parse_XLSCell(blob, 6);\n ++blob.l;\n var num = blob.read_shift(2);\n cell.t = 'n';\n cell.val = num;\n return cell;\n}\n\nfunction write_BIFF2INT(r\n/*:number*/\n, c\n/*:number*/\n, val\n/*:number*/\n) {\n var out = new_buf(9);\n write_BIFF2Cell(out, r, c);\n out.write_shift(2, val);\n return out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n var cch = blob.read_shift(1);\n\n if (cch === 0) {\n blob.l++;\n return \"\";\n }\n\n return blob.read_shift(cch, 'sbcs-cont');\n}\n/* TODO: convert to BIFF8 font struct */\n\n\nfunction parse_BIFF2FONTXTRA(blob, length) {\n blob.l += 6; // unknown\n\n blob.l += 2; // font weight \"bls\"\n\n blob.l += 1; // charset\n\n blob.l += 3; // unknown\n\n blob.l += 1; // font family\n\n blob.l += length - 13;\n}\n/* TODO: parse rich text runs */\n\n\nfunction parse_RString(blob, length, opts) {\n var end = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n var cch = blob.read_shift(2);\n var str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n blob.l = end;\n cell.t = 'str';\n cell.val = str;\n return cell;\n}\n/* from js-harb (C) 2014-present SheetJS */\n\n\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\n\nvar DBF = /*#__PURE__*/function () {\n var dbf_codepage_map = {\n /* Code Pages Supported by Visual FoxPro */\n\n /*::[*/\n 0x01\n /*::]*/\n : 437,\n\n /*::[*/\n 0x02\n /*::]*/\n : 850,\n\n /*::[*/\n 0x03\n /*::]*/\n : 1252,\n\n /*::[*/\n 0x04\n /*::]*/\n : 10000,\n\n /*::[*/\n 0x64\n /*::]*/\n : 852,\n\n /*::[*/\n 0x65\n /*::]*/\n : 866,\n\n /*::[*/\n 0x66\n /*::]*/\n : 865,\n\n /*::[*/\n 0x67\n /*::]*/\n : 861,\n\n /*::[*/\n 0x68\n /*::]*/\n : 895,\n\n /*::[*/\n 0x69\n /*::]*/\n : 620,\n\n /*::[*/\n 0x6A\n /*::]*/\n : 737,\n\n /*::[*/\n 0x6B\n /*::]*/\n : 857,\n\n /*::[*/\n 0x78\n /*::]*/\n : 950,\n\n /*::[*/\n 0x79\n /*::]*/\n : 949,\n\n /*::[*/\n 0x7A\n /*::]*/\n : 936,\n\n /*::[*/\n 0x7B\n /*::]*/\n : 932,\n\n /*::[*/\n 0x7C\n /*::]*/\n : 874,\n\n /*::[*/\n 0x7D\n /*::]*/\n : 1255,\n\n /*::[*/\n 0x7E\n /*::]*/\n : 1256,\n\n /*::[*/\n 0x96\n /*::]*/\n : 10007,\n\n /*::[*/\n 0x97\n /*::]*/\n : 10029,\n\n /*::[*/\n 0x98\n /*::]*/\n : 10006,\n\n /*::[*/\n 0xC8\n /*::]*/\n : 1250,\n\n /*::[*/\n 0xC9\n /*::]*/\n : 1251,\n\n /*::[*/\n 0xCA\n /*::]*/\n : 1254,\n\n /*::[*/\n 0xCB\n /*::]*/\n : 1253,\n\n /* shapefile DBF extension */\n\n /*::[*/\n 0x00\n /*::]*/\n : 20127,\n\n /*::[*/\n 0x08\n /*::]*/\n : 865,\n\n /*::[*/\n 0x09\n /*::]*/\n : 437,\n\n /*::[*/\n 0x0A\n /*::]*/\n : 850,\n\n /*::[*/\n 0x0B\n /*::]*/\n : 437,\n\n /*::[*/\n 0x0D\n /*::]*/\n : 437,\n\n /*::[*/\n 0x0E\n /*::]*/\n : 850,\n\n /*::[*/\n 0x0F\n /*::]*/\n : 437,\n\n /*::[*/\n 0x10\n /*::]*/\n : 850,\n\n /*::[*/\n 0x11\n /*::]*/\n : 437,\n\n /*::[*/\n 0x12\n /*::]*/\n : 850,\n\n /*::[*/\n 0x13\n /*::]*/\n : 932,\n\n /*::[*/\n 0x14\n /*::]*/\n : 850,\n\n /*::[*/\n 0x15\n /*::]*/\n : 437,\n\n /*::[*/\n 0x16\n /*::]*/\n : 850,\n\n /*::[*/\n 0x17\n /*::]*/\n : 865,\n\n /*::[*/\n 0x18\n /*::]*/\n : 437,\n\n /*::[*/\n 0x19\n /*::]*/\n : 437,\n\n /*::[*/\n 0x1A\n /*::]*/\n : 850,\n\n /*::[*/\n 0x1B\n /*::]*/\n : 437,\n\n /*::[*/\n 0x1C\n /*::]*/\n : 863,\n\n /*::[*/\n 0x1D\n /*::]*/\n : 850,\n\n /*::[*/\n 0x1F\n /*::]*/\n : 852,\n\n /*::[*/\n 0x22\n /*::]*/\n : 852,\n\n /*::[*/\n 0x23\n /*::]*/\n : 852,\n\n /*::[*/\n 0x24\n /*::]*/\n : 860,\n\n /*::[*/\n 0x25\n /*::]*/\n : 850,\n\n /*::[*/\n 0x26\n /*::]*/\n : 866,\n\n /*::[*/\n 0x37\n /*::]*/\n : 850,\n\n /*::[*/\n 0x40\n /*::]*/\n : 852,\n\n /*::[*/\n 0x4D\n /*::]*/\n : 936,\n\n /*::[*/\n 0x4E\n /*::]*/\n : 949,\n\n /*::[*/\n 0x4F\n /*::]*/\n : 950,\n\n /*::[*/\n 0x50\n /*::]*/\n : 874,\n\n /*::[*/\n 0x57\n /*::]*/\n : 1252,\n\n /*::[*/\n 0x58\n /*::]*/\n : 1252,\n\n /*::[*/\n 0x59\n /*::]*/\n : 1252,\n\n /*::[*/\n 0x6C\n /*::]*/\n : 863,\n\n /*::[*/\n 0x86\n /*::]*/\n : 737,\n\n /*::[*/\n 0x87\n /*::]*/\n : 852,\n\n /*::[*/\n 0x88\n /*::]*/\n : 857,\n\n /*::[*/\n 0xCC\n /*::]*/\n : 1257,\n\n /*::[*/\n 0xFF\n /*::]*/\n : 16969\n };\n var dbf_reverse_map = evert({\n /*::[*/\n 0x01\n /*::]*/\n : 437,\n\n /*::[*/\n 0x02\n /*::]*/\n : 850,\n\n /*::[*/\n 0x03\n /*::]*/\n : 1252,\n\n /*::[*/\n 0x04\n /*::]*/\n : 10000,\n\n /*::[*/\n 0x64\n /*::]*/\n : 852,\n\n /*::[*/\n 0x65\n /*::]*/\n : 866,\n\n /*::[*/\n 0x66\n /*::]*/\n : 865,\n\n /*::[*/\n 0x67\n /*::]*/\n : 861,\n\n /*::[*/\n 0x68\n /*::]*/\n : 895,\n\n /*::[*/\n 0x69\n /*::]*/\n : 620,\n\n /*::[*/\n 0x6A\n /*::]*/\n : 737,\n\n /*::[*/\n 0x6B\n /*::]*/\n : 857,\n\n /*::[*/\n 0x78\n /*::]*/\n : 950,\n\n /*::[*/\n 0x79\n /*::]*/\n : 949,\n\n /*::[*/\n 0x7A\n /*::]*/\n : 936,\n\n /*::[*/\n 0x7B\n /*::]*/\n : 932,\n\n /*::[*/\n 0x7C\n /*::]*/\n : 874,\n\n /*::[*/\n 0x7D\n /*::]*/\n : 1255,\n\n /*::[*/\n 0x7E\n /*::]*/\n : 1256,\n\n /*::[*/\n 0x96\n /*::]*/\n : 10007,\n\n /*::[*/\n 0x97\n /*::]*/\n : 10029,\n\n /*::[*/\n 0x98\n /*::]*/\n : 10006,\n\n /*::[*/\n 0xC8\n /*::]*/\n : 1250,\n\n /*::[*/\n 0xC9\n /*::]*/\n : 1251,\n\n /*::[*/\n 0xCA\n /*::]*/\n : 1254,\n\n /*::[*/\n 0xCB\n /*::]*/\n : 1253,\n\n /*::[*/\n 0x00\n /*::]*/\n : 20127\n });\n /* TODO: find an actual specification */\n\n function dbf_to_aoa(buf, opts)\n /*:AOA*/\n {\n var out\n /*:AOA*/\n = [];\n var d\n /*:Block*/\n = new_raw_buf(1)\n /*:any*/\n ;\n\n switch (opts.type) {\n case 'base64':\n d = s2a(Base64_decode(buf));\n break;\n\n case 'binary':\n d = s2a(buf);\n break;\n\n case 'buffer':\n case 'array':\n d = buf;\n break;\n }\n\n prep_blob(d, 0);\n /* header */\n\n var ft = d.read_shift(1);\n var memo = !!(ft & 0x88);\n var vfp = false,\n l7 = false;\n\n switch (ft) {\n case 0x02:\n break;\n // dBASE II\n\n case 0x03:\n break;\n // dBASE III\n\n case 0x30:\n vfp = true;\n memo = true;\n break;\n // VFP\n\n case 0x31:\n vfp = true;\n memo = true;\n break;\n // VFP with autoincrement\n // 0x43 dBASE IV SQL table files\n // 0x63 dBASE IV SQL system files\n\n case 0x83:\n break;\n // dBASE III with memo\n\n case 0x8B:\n break;\n // dBASE IV with memo\n\n case 0x8C:\n l7 = true;\n break;\n // dBASE Level 7 with memo\n // case 0xCB dBASE IV SQL table files with memo\n\n case 0xF5:\n break;\n // FoxPro 2.x with memo\n // case 0xFB FoxBASE\n\n default:\n throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n }\n\n var nrow = 0,\n fpos = 0x0209;\n if (ft == 0x02) nrow = d.read_shift(2);\n d.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\n if (ft != 0x02) nrow = d.read_shift(4);\n if (nrow > 1048576) nrow = 1e6;\n if (ft != 0x02) fpos = d.read_shift(2); // header length\n\n var rlen = d.read_shift(2); // record length\n\n var\n /*flags = 0,*/\n current_cp = opts.codepage || 1252;\n\n if (ft != 0x02) {\n // 20 reserved bytes\n d.l += 16;\n /*flags = */\n\n d.read_shift(1); //if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n /* codepage present in FoxPro and dBASE Level 7 */\n\n if (d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n d.l += 1;\n d.l += 2;\n }\n\n if (l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n /*:: type DBFField = { name:string; len:number; type:string; } */\n\n var fields\n /*:Array*/\n = [],\n field\n /*:DBFField*/\n = {}\n /*:any*/\n ;\n var hend = Math.min(d.length, ft == 0x02 ? 0x209 : fpos - 10 - (vfp ? 264 : 0));\n var ww = l7 ? 32 : 11;\n\n while (d.l < hend && d[d.l] != 0x0d) {\n field = {}\n /*:any*/\n ;\n field.name = $cptable.utils.decode(current_cp, d.slice(d.l, d.l + ww)).replace(/[\\u0000\\r\\n].*$/g, \"\");\n d.l += ww;\n field.type = String.fromCharCode(d.read_shift(1));\n if (ft != 0x02 && !l7) field.offset = d.read_shift(4);\n field.len = d.read_shift(1);\n if (ft == 0x02) field.offset = d.read_shift(2);\n field.dec = d.read_shift(1);\n if (field.name.length) fields.push(field);\n if (ft != 0x02) d.l += l7 ? 13 : 14;\n\n switch (field.type) {\n case 'B':\n // Double (VFP) / Binary (dBASE L7)\n if ((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n break;\n\n case 'G': // General (FoxPro and dBASE L7)\n\n case 'P':\n // Picture (FoxPro and dBASE L7)\n if (opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n break;\n\n case '+': // Autoincrement (dBASE L7 only)\n\n case '0': // _NullFlags (VFP only)\n\n case '@': // Timestamp (dBASE L7 only)\n\n case 'C': // Character (dBASE II)\n\n case 'D': // Date (dBASE III)\n\n case 'F': // Float (dBASE IV)\n\n case 'I': // Long (VFP and dBASE L7)\n\n case 'L': // Logical (dBASE II)\n\n case 'M': // Memo (dBASE III)\n\n case 'N': // Number (dBASE II)\n\n case 'O': // Double (dBASE L7 only)\n\n case 'T': // Datetime (VFP only)\n\n case 'Y':\n // Currency (VFP only)\n break;\n\n default:\n throw new Error('Unknown Field Type: ' + field.type);\n }\n }\n\n if (d[d.l] !== 0x0D) d.l = fpos - 1;\n if (d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n d.l = fpos;\n /* data */\n\n var R = 0,\n C = 0;\n out[0] = [];\n\n for (C = 0; C != fields.length; ++C) {\n out[0][C] = fields[C].name;\n }\n\n while (nrow-- > 0) {\n if (d[d.l] === 0x2A) {\n // TODO: record marked as deleted -- create a hidden row?\n d.l += rlen;\n continue;\n }\n\n ++d.l;\n out[++R] = [];\n C = 0;\n\n for (C = 0; C != fields.length; ++C) {\n var dd = d.slice(d.l, d.l + fields[C].len);\n d.l += fields[C].len;\n prep_blob(dd, 0);\n var s = $cptable.utils.decode(current_cp, dd);\n\n switch (fields[C].type) {\n case 'C':\n // NOTE: it is conventional to write ' / / ' for empty dates\n if (s.trim().length) out[R][C] = s.replace(/\\s+$/, \"\");\n break;\n\n case 'D':\n if (s.length === 8) out[R][C] = new Date(+s.slice(0, 4), +s.slice(4, 6) - 1, +s.slice(6, 8));else out[R][C] = s;\n break;\n\n case 'F':\n out[R][C] = parseFloat(s.trim());\n break;\n\n case '+':\n case 'I':\n out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i');\n break;\n\n case 'L':\n switch (s.trim().toUpperCase()) {\n case 'Y':\n case 'T':\n out[R][C] = true;\n break;\n\n case 'N':\n case 'F':\n out[R][C] = false;\n break;\n\n case '':\n case '?':\n break;\n\n default:\n throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n }\n\n break;\n\n case 'M':\n /* TODO: handle memo files */\n if (!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n out[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10) : dd.read_shift(4));\n break;\n\n case 'N':\n s = s.replace(/\\u0000/g, \"\").trim(); // NOTE: dBASE II interprets \" . \" as 0\n\n if (s && s != \".\") out[R][C] = +s || 0;\n break;\n\n case '@':\n // NOTE: dBASE specs appear to be incorrect\n out[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n break;\n\n case 'T':\n out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4));\n break;\n\n case 'Y':\n out[R][C] = dd.read_shift(4, 'i') / 1e4 + dd.read_shift(4, 'i') / 1e4 * Math.pow(2, 32);\n break;\n\n case 'O':\n out[R][C] = -dd.read_shift(-8, 'f');\n break;\n\n case 'B':\n if (vfp && fields[C].len == 8) {\n out[R][C] = dd.read_shift(8, 'f');\n break;\n }\n\n /* falls through */\n\n case 'G':\n case 'P':\n dd.l += fields[C].len;\n break;\n\n case '0':\n if (fields[C].name === '_NullFlags') break;\n\n /* falls through */\n\n default:\n throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n }\n }\n }\n\n if (ft != 0x02) if (d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l - 1) + \" of \" + d.length + \" \" + d[d.l - 1].toString(16));\n if (opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n opts.DBF = fields;\n return out;\n }\n\n function dbf_to_sheet(buf, opts)\n /*:Worksheet*/\n {\n var o = opts || {};\n if (!o.dateNF) o.dateNF = \"yyyymmdd\";\n var ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n ws[\"!cols\"] = o.DBF.map(function (field) {\n return {\n wch: field.len,\n DBF: field\n };\n });\n delete o.DBF;\n return ws;\n }\n\n function dbf_to_workbook(buf, opts)\n /*:Workbook*/\n {\n try {\n return sheet_to_workbook(dbf_to_sheet(buf, opts), opts);\n } catch (e) {\n if (opts && opts.WTF) throw e;\n }\n\n return {\n SheetNames: [],\n Sheets: {}\n };\n }\n\n var _RLEN = {\n 'B': 8,\n 'C': 250,\n 'L': 1,\n 'D': 8,\n '?': 0,\n '': 0\n };\n\n function sheet_to_dbf(ws\n /*:Worksheet*/\n , opts\n /*:WriteOpts*/\n ) {\n var o = opts || {};\n if (+o.codepage >= 0) set_cp(+o.codepage);\n if (o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n var ba = buf_array();\n var aoa\n /*:AOA*/\n = sheet_to_json(ws, {\n header: 1,\n raw: true,\n cellDates: true\n });\n var headers = aoa[0],\n data = aoa.slice(1),\n cols = ws[\"!cols\"] || [];\n var i = 0,\n j = 0,\n hcnt = 0,\n rlen = 1;\n\n for (i = 0; i < headers.length; ++i) {\n if (((cols[i] || {}).DBF || {}).name) {\n headers[i] = cols[i].DBF.name;\n ++hcnt;\n continue;\n }\n\n if (headers[i] == null) continue;\n ++hcnt;\n if (typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n if (typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + typeof headers[i] + \"|\");\n if (headers.indexOf(headers[i]) !== i) for (j = 0; j < 1024; ++j) {\n if (headers.indexOf(headers[i] + \"_\" + j) == -1) {\n headers[i] += \"_\" + j;\n break;\n }\n }\n }\n\n var range = safe_decode_range(ws['!ref']);\n var coltypes\n /*:Array*/\n = [];\n var colwidths\n /*:Array*/\n = [];\n var coldecimals\n /*:Array*/\n = [];\n\n for (i = 0; i <= range.e.c - range.s.c; ++i) {\n var guess = '',\n _guess = '',\n maxlen = 0;\n var col\n /*:Array*/\n = [];\n\n for (j = 0; j < data.length; ++j) {\n if (data[j][i] != null) col.push(data[j][i]);\n }\n\n if (col.length == 0 || headers[i] == null) {\n coltypes[i] = '?';\n continue;\n }\n\n for (j = 0; j < col.length; ++j) {\n switch (typeof col[j]) {\n /* TODO: check if L2 compat is desired */\n case 'number':\n _guess = 'B';\n break;\n\n case 'string':\n _guess = 'C';\n break;\n\n case 'boolean':\n _guess = 'L';\n break;\n\n case 'object':\n _guess = col[j] instanceof Date ? 'D' : 'C';\n break;\n\n default:\n _guess = 'C';\n }\n\n maxlen = Math.max(maxlen, String(col[j]).length);\n guess = guess && guess != _guess ? 'C' : _guess; //if(guess == 'C') break;\n }\n\n if (maxlen > 250) maxlen = 250;\n _guess = ((cols[i] || {}).DBF || {}).type;\n /* TODO: more fine grained control over DBF type resolution */\n\n if (_guess == 'C') {\n if (cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n }\n\n if (guess == 'B' && _guess == 'N') {\n guess = 'N';\n coldecimals[i] = cols[i].DBF.dec;\n maxlen = cols[i].DBF.len;\n }\n\n colwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : _RLEN[guess] || 0;\n rlen += colwidths[i];\n coltypes[i] = guess;\n }\n\n var h = ba.next(32);\n h.write_shift(4, 0x13021130);\n h.write_shift(4, data.length);\n h.write_shift(2, 296 + 32 * hcnt);\n h.write_shift(2, rlen);\n\n for (i = 0; i < 4; ++i) {\n h.write_shift(4, 0);\n }\n\n h.write_shift(4, 0x00000000 | (+dbf_reverse_map[\n /*::String(*/\n current_ansi\n /*::)*/\n ] || 0x03) << 8);\n\n for (i = 0, j = 0; i < headers.length; ++i) {\n if (headers[i] == null) continue;\n var hf = ba.next(32);\n\n var _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\n hf.write_shift(1, _f, \"sbcs\");\n hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n hf.write_shift(4, j);\n hf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n hf.write_shift(1, coldecimals[i] || 0);\n hf.write_shift(1, 0x02);\n hf.write_shift(4, 0);\n hf.write_shift(1, 0);\n hf.write_shift(4, 0);\n hf.write_shift(4, 0);\n j += colwidths[i] || _RLEN[coltypes[i]] || 0;\n }\n\n var hb = ba.next(264);\n hb.write_shift(4, 0x0000000D);\n\n for (i = 0; i < 65; ++i) {\n hb.write_shift(4, 0x00000000);\n }\n\n for (i = 0; i < data.length; ++i) {\n var rout = ba.next(rlen);\n rout.write_shift(1, 0);\n\n for (j = 0; j < headers.length; ++j) {\n if (headers[j] == null) continue;\n\n switch (coltypes[j]) {\n case 'L':\n rout.write_shift(1, data[i][j] == null ? 0x3F : data[i][j] ? 0x54 : 0x46);\n break;\n\n case 'B':\n rout.write_shift(8, data[i][j] || 0, 'f');\n break;\n\n case 'N':\n var _n = \"0\";\n if (typeof data[i][j] == \"number\") _n = data[i][j].toFixed(coldecimals[j] || 0);\n\n for (hcnt = 0; hcnt < colwidths[j] - _n.length; ++hcnt) {\n rout.write_shift(1, 0x20);\n }\n\n rout.write_shift(1, _n, \"sbcs\");\n break;\n\n case 'D':\n if (!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");else {\n rout.write_shift(4, (\"0000\" + data[i][j].getFullYear()).slice(-4), \"sbcs\");\n rout.write_shift(2, (\"00\" + (data[i][j].getMonth() + 1)).slice(-2), \"sbcs\");\n rout.write_shift(2, (\"00\" + data[i][j].getDate()).slice(-2), \"sbcs\");\n }\n break;\n\n case 'C':\n var _s = String(data[i][j] != null ? data[i][j] : \"\").slice(0, colwidths[j]);\n\n rout.write_shift(1, _s, \"sbcs\");\n\n for (hcnt = 0; hcnt < colwidths[j] - _s.length; ++hcnt) {\n rout.write_shift(1, 0x20);\n }\n\n break;\n }\n } // data\n\n }\n\n ba.next(1).write_shift(1, 0x1A);\n return ba.end();\n }\n\n return {\n to_workbook: dbf_to_workbook,\n to_sheet: dbf_to_sheet,\n from_sheet: sheet_to_dbf\n };\n}();\n\nvar SYLK = /*#__PURE__*/function () {\n /* TODO: stress test sequences */\n var sylk_escapes = {\n AA: 'À',\n BA: 'Á',\n CA: 'Â',\n DA: 195,\n HA: 'Ä',\n JA: 197,\n AE: 'È',\n BE: 'É',\n CE: 'Ê',\n HE: 'Ë',\n AI: 'Ì',\n BI: 'Í',\n CI: 'Î',\n HI: 'Ï',\n AO: 'Ò',\n BO: 'Ó',\n CO: 'Ô',\n DO: 213,\n HO: 'Ö',\n AU: 'Ù',\n BU: 'Ú',\n CU: 'Û',\n HU: 'Ü',\n Aa: 'à',\n Ba: 'á',\n Ca: 'â',\n Da: 227,\n Ha: 'ä',\n Ja: 229,\n Ae: 'è',\n Be: 'é',\n Ce: 'ê',\n He: 'ë',\n Ai: 'ì',\n Bi: 'í',\n Ci: 'î',\n Hi: 'ï',\n Ao: 'ò',\n Bo: 'ó',\n Co: 'ô',\n Do: 245,\n Ho: 'ö',\n Au: 'ù',\n Bu: 'ú',\n Cu: 'û',\n Hu: 'ü',\n KC: 'Ç',\n Kc: 'ç',\n q: 'æ',\n z: 'œ',\n a: 'Æ',\n j: 'Œ',\n DN: 209,\n Dn: 241,\n Hy: 255,\n S: 169,\n c: 170,\n R: 174,\n \"B \": 180,\n\n /*::[*/\n 0\n /*::]*/\n : 176,\n\n /*::[*/\n 1\n /*::]*/\n : 177,\n\n /*::[*/\n 2\n /*::]*/\n : 178,\n\n /*::[*/\n 3\n /*::]*/\n : 179,\n\n /*::[*/\n 5\n /*::]*/\n : 181,\n\n /*::[*/\n 6\n /*::]*/\n : 182,\n\n /*::[*/\n 7\n /*::]*/\n : 183,\n Q: 185,\n k: 186,\n b: 208,\n i: 216,\n l: 222,\n s: 240,\n y: 248,\n \"!\": 161,\n '\"': 162,\n \"#\": 163,\n \"(\": 164,\n \"%\": 165,\n \"'\": 167,\n \"H \": 168,\n \"+\": 171,\n \";\": 187,\n \"<\": 188,\n \"=\": 189,\n \">\": 190,\n \"?\": 191,\n \"{\": 223\n }\n /*:any*/\n ;\n var sylk_char_regex = new RegExp(\"\\x1BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g, \"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\n var sylk_char_fn = function sylk_char_fn(_, $1) {\n var o = sylk_escapes[$1];\n return typeof o == \"number\" ? _getansi(o) : o;\n };\n\n var decode_sylk_char = function decode_sylk_char($$, $1, $2) {\n var newcc = $1.charCodeAt(0) - 0x20 << 4 | $2.charCodeAt(0) - 0x30;\n return newcc == 59 ? $$ : _getansi(newcc);\n };\n\n sylk_escapes[\"|\"] = 254;\n /* TODO: find an actual specification */\n\n function sylk_to_aoa(d\n /*:RawData*/\n , opts)\n /*:[AOA, Worksheet]*/\n {\n switch (opts.type) {\n case 'base64':\n return sylk_to_aoa_str(Base64_decode(d), opts);\n\n case 'binary':\n return sylk_to_aoa_str(d, opts);\n\n case 'buffer':\n return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n case 'array':\n return sylk_to_aoa_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function sylk_to_aoa_str(str\n /*:string*/\n , opts)\n /*:[AOA, Worksheet]*/\n {\n var records = str.split(/[\\n\\r]+/),\n R = -1,\n C = -1,\n ri = 0,\n rj = 0,\n arr\n /*:AOA*/\n = [];\n var formats\n /*:Array*/\n = [];\n var next_cell_format\n /*:string|null*/\n = null;\n var sht = {},\n rowinfo\n /*:Array*/\n = [],\n colinfo\n /*:Array*/\n = [],\n cw\n /*:Array*/\n = [];\n var Mval = 0,\n j;\n if (+opts.codepage >= 0) set_cp(+opts.codepage);\n\n for (; ri !== records.length; ++ri) {\n Mval = 0;\n var rstr = records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n var record = rstr.replace(/;;/g, \"\\0\").split(\";\").map(function (x) {\n return x.replace(/\\u0000/g, \";\");\n });\n var RT = record[0],\n val;\n if (rstr.length > 0) switch (RT) {\n case 'ID':\n break;\n\n /* header */\n\n case 'E':\n break;\n\n /* EOF */\n\n case 'B':\n break;\n\n /* dimensions */\n\n case 'O':\n break;\n\n /* options? */\n\n case 'W':\n break;\n\n /* window? */\n\n case 'P':\n if (record[1].charAt(0) == 'P') formats.push(rstr.slice(3).replace(/;;/g, \";\"));\n break;\n\n case 'C':\n var C_seen_K = false,\n C_seen_X = false,\n C_seen_S = false,\n C_seen_E = false,\n _R = -1,\n _C = -1;\n\n for (rj = 1; rj < record.length; ++rj) {\n switch (record[rj].charAt(0)) {\n case 'A':\n break;\n // TODO: comment\n\n case 'X':\n C = parseInt(record[rj].slice(1)) - 1;\n C_seen_X = true;\n break;\n\n case 'Y':\n R = parseInt(record[rj].slice(1)) - 1;\n if (!C_seen_X) C = 0;\n\n for (j = arr.length; j <= R; ++j) {\n arr[j] = [];\n }\n\n break;\n\n case 'K':\n val = record[rj].slice(1);\n if (val.charAt(0) === '\"') val = val.slice(1, val.length - 1);else if (val === 'TRUE') val = true;else if (val === 'FALSE') val = false;else if (!isNaN(fuzzynum(val))) {\n val = fuzzynum(val);\n if (next_cell_format !== null && fmt_is_date(next_cell_format)) val = numdate(val);\n } else if (!isNaN(fuzzydate(val).getDate())) {\n val = parseDate(val);\n }\n if (typeof $cptable !== 'undefined' && typeof val == \"string\" && (opts || {}).type != \"string\" && (opts || {}).codepage) val = $cptable.utils.decode(opts.codepage, val);\n C_seen_K = true;\n break;\n\n case 'E':\n C_seen_E = true;\n var formula = rc_to_a1(record[rj].slice(1), {\n r: R,\n c: C\n });\n arr[R][C] = [arr[R][C], formula];\n break;\n\n case 'S':\n C_seen_S = true;\n arr[R][C] = [arr[R][C], \"S5S\"];\n break;\n\n case 'G':\n break;\n // unknown\n\n case 'R':\n _R = parseInt(record[rj].slice(1)) - 1;\n break;\n\n case 'C':\n _C = parseInt(record[rj].slice(1)) - 1;\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (C_seen_K) {\n if (arr[R][C] && arr[R][C].length == 2) arr[R][C][0] = val;else arr[R][C] = val;\n next_cell_format = null;\n }\n\n if (C_seen_S) {\n if (C_seen_E) throw new Error(\"SYLK shared formula cannot have own formula\");\n var shrbase = _R > -1 && arr[_R][_C];\n if (!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n arr[R][C][1] = shift_formula_str(shrbase[1], {\n r: R - _R,\n c: C - _C\n });\n }\n\n break;\n\n case 'F':\n var F_seen = 0;\n\n for (rj = 1; rj < record.length; ++rj) {\n switch (record[rj].charAt(0)) {\n case 'X':\n C = parseInt(record[rj].slice(1)) - 1;\n ++F_seen;\n break;\n\n case 'Y':\n R = parseInt(record[rj].slice(1)) - 1;\n /*C = 0;*/\n\n for (j = arr.length; j <= R; ++j) {\n arr[j] = [];\n }\n\n break;\n\n case 'M':\n Mval = parseInt(record[rj].slice(1)) / 20;\n break;\n\n case 'F':\n break;\n\n /* ??? */\n\n case 'G':\n break;\n\n /* hide grid */\n\n case 'P':\n next_cell_format = formats[parseInt(record[rj].slice(1))];\n break;\n\n case 'S':\n break;\n\n /* cell style */\n\n case 'D':\n break;\n\n /* column */\n\n case 'N':\n break;\n\n /* font */\n\n case 'W':\n cw = record[rj].slice(1).split(\" \");\n\n for (j = parseInt(cw[0], 10); j <= parseInt(cw[1], 10); ++j) {\n Mval = parseInt(cw[2], 10);\n colinfo[j - 1] = Mval === 0 ? {\n hidden: true\n } : {\n wch: Mval\n };\n process_col(colinfo[j - 1]);\n }\n\n break;\n\n case 'C':\n /* default column format */\n C = parseInt(record[rj].slice(1)) - 1;\n if (!colinfo[C]) colinfo[C] = {};\n break;\n\n case 'R':\n /* row properties */\n R = parseInt(record[rj].slice(1)) - 1;\n if (!rowinfo[R]) rowinfo[R] = {};\n\n if (Mval > 0) {\n rowinfo[R].hpt = Mval;\n rowinfo[R].hpx = pt2px(Mval);\n } else if (Mval === 0) rowinfo[R].hidden = true;\n\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (F_seen < 1) next_cell_format = null;\n break;\n\n default:\n if (opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n }\n }\n\n if (rowinfo.length > 0) sht['!rows'] = rowinfo;\n if (colinfo.length > 0) sht['!cols'] = colinfo;\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return [arr, sht];\n }\n\n function sylk_to_sheet(d\n /*:RawData*/\n , opts)\n /*:Worksheet*/\n {\n var aoasht = sylk_to_aoa(d, opts);\n var aoa = aoasht[0],\n ws = aoasht[1];\n var o = aoa_to_sheet(aoa, opts);\n keys(ws).forEach(function (k) {\n o[k] = ws[k];\n });\n return o;\n }\n\n function sylk_to_workbook(d\n /*:RawData*/\n , opts)\n /*:Workbook*/\n {\n return sheet_to_workbook(sylk_to_sheet(d, opts), opts);\n }\n\n function write_ws_cell_sylk(cell\n /*:Cell*/\n , ws\n /*:Worksheet*/\n , R\n /*:number*/\n , C\n /*:number*/\n\n /*::, opts*/\n )\n /*:string*/\n {\n var o = \"C;Y\" + (R + 1) + \";X\" + (C + 1) + \";K\";\n\n switch (cell.t) {\n case 'n':\n o += cell.v || 0;\n if (cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {\n r: R,\n c: C\n });\n break;\n\n case 'b':\n o += cell.v ? \"TRUE\" : \"FALSE\";\n break;\n\n case 'e':\n o += cell.w || cell.v;\n break;\n\n case 'd':\n o += '\"' + (cell.w || cell.v) + '\"';\n break;\n\n case 's':\n o += '\"' + cell.v.replace(/\"/g, \"\").replace(/;/g, \";;\") + '\"';\n break;\n }\n\n return o;\n }\n\n function write_ws_cols_sylk(out, cols) {\n cols.forEach(function (col, i) {\n var rec = \"F;W\" + (i + 1) + \" \" + (i + 1) + \" \";\n if (col.hidden) rec += \"0\";else {\n if (typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n if (typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n if (typeof col.wch == 'number') rec += Math.round(col.wch);\n }\n if (rec.charAt(rec.length - 1) != \" \") out.push(rec);\n });\n }\n\n function write_ws_rows_sylk(out\n /*:Array*/\n , rows\n /*:Array*/\n ) {\n rows.forEach(function (row, i) {\n var rec = \"F;\";\n if (row.hidden) rec += \"M0;\";else if (row.hpt) rec += \"M\" + 20 * row.hpt + \";\";else if (row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n if (rec.length > 2) out.push(rec + \"R\" + (i + 1));\n });\n }\n\n function sheet_to_sylk(ws\n /*:Worksheet*/\n , opts\n /*:?any*/\n )\n /*:string*/\n {\n var preamble\n /*:Array*/\n = [\"ID;PWXL;N;E\"],\n o\n /*:Array*/\n = [];\n var r = safe_decode_range(ws['!ref']),\n cell\n /*:Cell*/\n ;\n var dense = Array.isArray(ws);\n var RS = \"\\r\\n\";\n preamble.push(\"P;PGeneral\");\n preamble.push(\"F;P0;DG0G8;M255\");\n if (ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n if (ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n preamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c, r.s.r, r.e.c, r.e.r].join(\" \"));\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) continue;\n o.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n }\n }\n\n return preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n }\n\n return {\n to_workbook: sylk_to_workbook,\n to_sheet: sylk_to_sheet,\n from_sheet: sheet_to_sylk\n };\n}();\n\nvar DIF = /*#__PURE__*/function () {\n function dif_to_aoa(d\n /*:RawData*/\n , opts)\n /*:AOA*/\n {\n switch (opts.type) {\n case 'base64':\n return dif_to_aoa_str(Base64_decode(d), opts);\n\n case 'binary':\n return dif_to_aoa_str(d, opts);\n\n case 'buffer':\n return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n case 'array':\n return dif_to_aoa_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n function dif_to_aoa_str(str\n /*:string*/\n , opts)\n /*:AOA*/\n {\n var records = str.split('\\n'),\n R = -1,\n C = -1,\n ri = 0,\n arr\n /*:AOA*/\n = [];\n\n for (; ri !== records.length; ++ri) {\n if (records[ri].trim() === 'BOT') {\n arr[++R] = [];\n C = 0;\n continue;\n }\n\n if (R < 0) continue;\n var metadata = records[ri].trim().split(\",\");\n var type = metadata[0],\n value = metadata[1];\n ++ri;\n var data = records[ri] || \"\";\n\n while ((data.match(/[\"]/g) || []).length & 1 && ri < records.length - 1) {\n data += \"\\n\" + records[++ri];\n }\n\n data = data.trim();\n\n switch (+type) {\n case -1:\n if (data === 'BOT') {\n arr[++R] = [];\n C = 0;\n continue;\n } else if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\n break;\n\n case 0:\n if (data === 'TRUE') arr[R][C] = true;else if (data === 'FALSE') arr[R][C] = false;else if (!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);else if (!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);else arr[R][C] = value;\n ++C;\n break;\n\n case 1:\n data = data.slice(1, data.length - 1);\n data = data.replace(/\"\"/g, '\"');\n if (DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n arr[R][C++] = data !== '' ? data : null;\n break;\n }\n\n if (data === 'EOD') break;\n }\n\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return arr;\n }\n\n function dif_to_sheet(str\n /*:string*/\n , opts)\n /*:Worksheet*/\n {\n return aoa_to_sheet(dif_to_aoa(str, opts), opts);\n }\n\n function dif_to_workbook(str\n /*:string*/\n , opts)\n /*:Workbook*/\n {\n return sheet_to_workbook(dif_to_sheet(str, opts), opts);\n }\n\n var sheet_to_dif = /*#__PURE__*/function () {\n var push_field = function pf(o\n /*:Array*/\n , topic\n /*:string*/\n , v\n /*:number*/\n , n\n /*:number*/\n , s\n /*:string*/\n ) {\n o.push(topic);\n o.push(v + \",\" + n);\n o.push('\"' + s.replace(/\"/g, '\"\"') + '\"');\n };\n\n var push_value = function po(o\n /*:Array*/\n , type\n /*:number*/\n , v\n /*:any*/\n , s\n /*:string*/\n ) {\n o.push(type + \",\" + v);\n o.push(type == 1 ? '\"' + s.replace(/\"/g, '\"\"') + '\"' : s);\n };\n\n return function sheet_to_dif(ws\n /*:Worksheet*/\n\n /*::, opts:?any*/\n )\n /*:string*/\n {\n var o\n /*:Array*/\n = [];\n var r = safe_decode_range(ws['!ref']),\n cell\n /*:Cell*/\n ;\n var dense = Array.isArray(ws);\n push_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n push_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1, \"\");\n push_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1, \"\");\n push_field(o, \"DATA\", 0, 0, \"\");\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n push_value(o, -1, 0, \"BOT\");\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n\n if (!cell) {\n push_value(o, 1, 0, \"\");\n continue;\n }\n\n switch (cell.t) {\n case 'n':\n var val = DIF_XL ? cell.w : cell.v;\n if (!val && cell.v != null) val = cell.v;\n\n if (val == null) {\n if (DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);else push_value(o, 1, 0, \"\");\n } else push_value(o, 0, val, \"V\");\n\n break;\n\n case 'b':\n push_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n break;\n\n case 's':\n push_value(o, 1, 0, !DIF_XL || isNaN(cell.v) ? cell.v : '=\"' + cell.v + '\"');\n break;\n\n case 'd':\n if (!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n if (DIF_XL) push_value(o, 0, cell.w, \"V\");else push_value(o, 1, 0, cell.w);\n break;\n\n default:\n push_value(o, 1, 0, \"\");\n }\n }\n }\n\n push_value(o, -1, 0, \"EOD\");\n var RS = \"\\r\\n\";\n var oo = o.join(RS); //while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\n return oo;\n };\n }();\n\n return {\n to_workbook: dif_to_workbook,\n to_sheet: dif_to_sheet,\n from_sheet: sheet_to_dif\n };\n}();\n\nvar ETH = /*#__PURE__*/function () {\n function decode(s\n /*:string*/\n )\n /*:string*/\n {\n return s.replace(/\\\\b/g, \"\\\\\").replace(/\\\\c/g, \":\").replace(/\\\\n/g, \"\\n\");\n }\n\n function encode(s\n /*:string*/\n )\n /*:string*/\n {\n return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g, \"\\\\n\");\n }\n\n function eth_to_aoa(str\n /*:string*/\n , opts)\n /*:AOA*/\n {\n var records = str.split('\\n'),\n R = -1,\n C = -1,\n ri = 0,\n arr\n /*:AOA*/\n = [];\n\n for (; ri !== records.length; ++ri) {\n var record = records[ri].trim().split(\":\");\n if (record[0] !== 'cell') continue;\n var addr = decode_cell(record[1]);\n if (arr.length <= addr.r) for (R = arr.length; R <= addr.r; ++R) {\n if (!arr[R]) arr[R] = [];\n }\n R = addr.r;\n C = addr.c;\n\n switch (record[2]) {\n case 't':\n arr[R][C] = decode(record[3]);\n break;\n\n case 'v':\n arr[R][C] = +record[3];\n break;\n\n case 'vtf':\n var _f = record[record.length - 1];\n\n /* falls through */\n\n case 'vtc':\n switch (record[3]) {\n case 'nl':\n arr[R][C] = +record[4] ? true : false;\n break;\n\n default:\n arr[R][C] = +record[4];\n break;\n }\n\n if (record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n }\n }\n\n if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n return arr;\n }\n\n function eth_to_sheet(d\n /*:string*/\n , opts)\n /*:Worksheet*/\n {\n return aoa_to_sheet(eth_to_aoa(d, opts), opts);\n }\n\n function eth_to_workbook(d\n /*:string*/\n , opts)\n /*:Workbook*/\n {\n return sheet_to_workbook(eth_to_sheet(d, opts), opts);\n }\n\n var header = [\"socialcalc:version:1.5\", \"MIME-Version: 1.0\", \"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"].join(\"\\n\");\n var sep = [\"--SocialCalcSpreadsheetControlSave\", \"Content-type: text/plain; charset=UTF-8\"].join(\"\\n\") + \"\\n\";\n /* TODO: the other parts */\n\n var meta = [\"# SocialCalc Spreadsheet Control Save\", \"part:sheet\"].join(\"\\n\");\n var end = \"--SocialCalcSpreadsheetControlSave--\";\n\n function sheet_to_eth_data(ws\n /*:Worksheet*/\n )\n /*:string*/\n {\n if (!ws || !ws['!ref']) return \"\";\n var o\n /*:Array*/\n = [],\n oo\n /*:Array*/\n = [],\n cell,\n coord = \"\";\n var r = decode_range(ws['!ref']);\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n for (var C = r.s.c; C <= r.e.c; ++C) {\n coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null || cell.t === 'z') continue;\n oo = [\"cell\", coord, 't'];\n\n switch (cell.t) {\n case 's':\n case 'str':\n oo.push(encode(cell.v));\n break;\n\n case 'n':\n if (!cell.f) {\n oo[2] = 'v';\n oo[3] = cell.v;\n } else {\n oo[2] = 'vtf';\n oo[3] = 'n';\n oo[4] = cell.v;\n oo[5] = encode(cell.f);\n }\n\n break;\n\n case 'b':\n oo[2] = 'vt' + (cell.f ? 'f' : 'c');\n oo[3] = 'nl';\n oo[4] = cell.v ? \"1\" : \"0\";\n oo[5] = encode(cell.f || (cell.v ? 'TRUE' : 'FALSE'));\n break;\n\n case 'd':\n var t = datenum(parseDate(cell.v));\n oo[2] = 'vtc';\n oo[3] = 'nd';\n oo[4] = \"\" + t;\n oo[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n break;\n\n case 'e':\n continue;\n }\n\n o.push(oo.join(\":\"));\n }\n }\n\n o.push(\"sheet:c:\" + (r.e.c - r.s.c + 1) + \":r:\" + (r.e.r - r.s.r + 1) + \":tvf:1\");\n o.push(\"valueformat:1:text-wiki\"); //o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\n return o.join(\"\\n\");\n }\n\n function sheet_to_eth(ws\n /*:Worksheet*/\n\n /*::, opts:?any*/\n )\n /*:string*/\n {\n return [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\"); // return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n }\n\n return {\n to_workbook: eth_to_workbook,\n to_sheet: eth_to_sheet,\n from_sheet: sheet_to_eth\n };\n}();\n\nvar PRN = /*#__PURE__*/function () {\n function set_text_arr(data\n /*:string*/\n , arr\n /*:AOA*/\n , R\n /*:number*/\n , C\n /*:number*/\n , o\n /*:any*/\n ) {\n if (o.raw) arr[R][C] = data;else if (data === \"\") {\n /* empty */\n } else if (data === 'TRUE') arr[R][C] = true;else if (data === 'FALSE') arr[R][C] = false;else if (!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);else if (!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);else arr[R][C] = data;\n }\n\n function prn_to_aoa_str(f\n /*:string*/\n , opts)\n /*:AOA*/\n {\n var o = opts || {};\n var arr\n /*:AOA*/\n = []\n /*:any*/\n ;\n if (!f || f.length === 0) return arr;\n var lines = f.split(/[\\r\\n]/);\n var L = lines.length - 1;\n\n while (L >= 0 && lines[L].length === 0) {\n --L;\n }\n\n var start = 10,\n idx = 0;\n var R = 0;\n\n for (; R <= L; ++R) {\n idx = lines[R].indexOf(\" \");\n if (idx == -1) idx = lines[R].length;else idx++;\n start = Math.max(start, idx);\n }\n\n for (R = 0; R <= L; ++R) {\n arr[R] = [];\n /* TODO: confirm that widths are always 10 */\n\n var C = 0;\n set_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\n for (C = 1; C <= (lines[R].length - start) / 10 + 1; ++C) {\n set_text_arr(lines[R].slice(start + (C - 1) * 10, start + C * 10).trim(), arr, R, C, o);\n }\n }\n\n if (o.sheetRows) arr = arr.slice(0, o.sheetRows);\n return arr;\n } // List of accepted CSV separators\n\n\n var guess_seps = {\n /*::[*/\n 0x2C\n /*::]*/\n : ',',\n\n /*::[*/\n 0x09\n /*::]*/\n : \"\\t\",\n\n /*::[*/\n 0x3B\n /*::]*/\n : ';',\n\n /*::[*/\n 0x7C\n /*::]*/\n : '|'\n }; // CSV separator weights to be used in case of equal numbers\n\n var guess_sep_weights = {\n /*::[*/\n 0x2C\n /*::]*/\n : 3,\n\n /*::[*/\n 0x09\n /*::]*/\n : 2,\n\n /*::[*/\n 0x3B\n /*::]*/\n : 1,\n\n /*::[*/\n 0x7C\n /*::]*/\n : 0\n };\n\n function guess_sep(str) {\n var cnt = {},\n instr = false,\n end = 0,\n cc = 0;\n\n for (; end < str.length; ++end) {\n if ((cc = str.charCodeAt(end)) == 0x22) instr = !instr;else if (!instr && cc in guess_seps) cnt[cc] = (cnt[cc] || 0) + 1;\n }\n\n cc = [];\n\n for (end in cnt) {\n if (Object.prototype.hasOwnProperty.call(cnt, end)) {\n cc.push([cnt[end], end]);\n }\n }\n\n if (!cc.length) {\n cnt = guess_sep_weights;\n\n for (end in cnt) {\n if (Object.prototype.hasOwnProperty.call(cnt, end)) {\n cc.push([cnt[end], end]);\n }\n }\n }\n\n cc.sort(function (a, b) {\n return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]];\n });\n return guess_seps[cc.pop()[1]] || 0x2C;\n }\n\n function dsv_to_sheet_str(str\n /*:string*/\n , opts)\n /*:Worksheet*/\n {\n var o = opts || {};\n var sep = \"\";\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var ws\n /*:Worksheet*/\n = o.dense ? []\n /*:any*/\n : {}\n /*:any*/\n ;\n var range\n /*:Range*/\n = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n }\n /*:any*/\n ;\n\n if (str.slice(0, 4) == \"sep=\") {\n // If the line ends in \\r\\n\n if (str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10) {\n sep = str.charAt(4);\n str = str.slice(7);\n } // If line ends in \\r OR \\n\n else if (str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10) {\n sep = str.charAt(4);\n str = str.slice(6);\n } else sep = guess_sep(str.slice(0, 1024));\n } else if (o && o.FS) sep = o.FS;else sep = guess_sep(str.slice(0, 1024));\n\n var R = 0,\n C = 0,\n v = 0;\n var start = 0,\n end = 0,\n sepcc = sep.charCodeAt(0),\n instr = false,\n cc = 0,\n startcc = str.charCodeAt(0);\n str = str.replace(/\\r\\n/mg, \"\\n\");\n\n var _re\n /*:?RegExp*/\n = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\n function finish_cell() {\n var s = str.slice(start, end);\n var cell = {}\n /*:any*/\n ;\n if (s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1, -1).replace(/\"\"/g, '\"');\n if (s.length === 0) cell.t = 'z';else if (o.raw) {\n cell.t = 's';\n cell.v = s;\n } else if (s.trim().length === 0) {\n cell.t = 's';\n cell.v = s;\n } else if (s.charCodeAt(0) == 0x3D) {\n if (s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) {\n cell.t = 's';\n cell.v = s.slice(2, -1).replace(/\"\"/g, '\"');\n } else if (fuzzyfmla(s)) {\n cell.t = 'n';\n cell.f = s.slice(1);\n } else {\n cell.t = 's';\n cell.v = s;\n }\n } else if (s == \"TRUE\") {\n cell.t = 'b';\n cell.v = true;\n } else if (s == \"FALSE\") {\n cell.t = 'b';\n cell.v = false;\n } else if (!isNaN(v = fuzzynum(s))) {\n cell.t = 'n';\n if (o.cellText !== false) cell.w = s;\n cell.v = v;\n } else if (!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n cell.z = o.dateNF || table_fmt[14];\n var k = 0;\n\n if (_re && s.match(_re)) {\n s = dateNF_fix(s, o.dateNF, s.match(_re) || []);\n k = 1;\n }\n\n if (o.cellDates) {\n cell.t = 'd';\n cell.v = parseDate(s, k);\n } else {\n cell.t = 'n';\n cell.v = datenum(parseDate(s, k));\n }\n\n if (o.cellText !== false) cell.w = SSF_format(cell.z, cell.v instanceof Date ? datenum(cell.v) : cell.v);\n if (!o.cellNF) delete cell.z;\n } else {\n cell.t = 's';\n cell.v = s;\n }\n\n if (cell.t == 'z') {} else if (o.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = cell;\n } else ws[encode_cell({\n c: C,\n r: R\n })] = cell;\n\n start = end + 1;\n startcc = str.charCodeAt(start);\n if (range.e.c < C) range.e.c = C;\n if (range.e.r < R) range.e.r = R;\n if (cc == sepcc) ++C;else {\n C = 0;\n ++R;\n if (o.sheetRows && o.sheetRows <= R) return true;\n }\n }\n\n outer: for (; end < str.length; ++end) {\n switch (cc = str.charCodeAt(end)) {\n case 0x22:\n if (startcc === 0x22) instr = !instr;\n break;\n\n case sepcc:\n case 0x0a:\n case 0x0d:\n if (!instr && finish_cell()) break outer;\n break;\n\n default:\n break;\n }\n }\n\n if (end - start > 0) finish_cell();\n ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function prn_to_sheet_str(str\n /*:string*/\n , opts)\n /*:Worksheet*/\n {\n if (!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n if (opts.FS) return dsv_to_sheet_str(str, opts);\n if (str.slice(0, 4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n if (str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n return aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n }\n\n function prn_to_sheet(d\n /*:RawData*/\n , opts)\n /*:Worksheet*/\n {\n var str = \"\",\n bytes = opts.type == 'string' ? [0, 0, 0, 0] : firstbyte(d, opts);\n\n switch (opts.type) {\n case 'base64':\n str = Base64_decode(d);\n break;\n\n case 'binary':\n str = d;\n break;\n\n case 'buffer':\n if (opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n else if (opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);else str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n break;\n\n case 'array':\n str = cc2str(d);\n break;\n\n case 'string':\n str = d;\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n\n if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));else if (opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);else if (opts.type == 'binary' && typeof $cptable !== 'undefined' && opts.codepage) str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591, str));\n if (str.slice(0, 19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n return prn_to_sheet_str(str, opts);\n }\n\n function prn_to_workbook(d\n /*:RawData*/\n , opts)\n /*:Workbook*/\n {\n return sheet_to_workbook(prn_to_sheet(d, opts), opts);\n }\n\n function sheet_to_prn(ws\n /*:Worksheet*/\n\n /*::, opts:?any*/\n )\n /*:string*/\n {\n var o\n /*:Array*/\n = [];\n var r = safe_decode_range(ws['!ref']),\n cell\n /*:Cell*/\n ;\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n var oo\n /*:Array*/\n = [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n\n if (!cell || cell.v == null) {\n oo.push(\" \");\n continue;\n }\n\n var w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0, 10);\n\n while (w.length < 10) {\n w += \" \";\n }\n\n oo.push(w + (C === 0 ? \" \" : \"\"));\n }\n\n o.push(oo.join(\"\"));\n }\n\n return o.join(\"\\n\");\n }\n\n return {\n to_workbook: prn_to_workbook,\n to_sheet: prn_to_sheet,\n from_sheet: sheet_to_prn\n };\n}();\n/* Excel defaults to SYLK but warns if data is not valid */\n\n\nfunction read_wb_ID(d, opts) {\n var o = opts || {},\n OLD_WTF = !!o.WTF;\n o.WTF = true;\n\n try {\n var out = SYLK.to_workbook(d, o);\n o.WTF = OLD_WTF;\n return out;\n } catch (e) {\n o.WTF = OLD_WTF;\n if (!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n return PRN.to_workbook(d, opts);\n }\n}\n\nvar WK_ = /*#__PURE__*/function () {\n function lotushopper(data, cb\n /*:RecordHopperCB*/\n , opts\n /*:any*/\n ) {\n if (!data) return;\n prep_blob(data, data.l || 0);\n var Enum = opts.Enum || WK1Enum;\n\n while (data.l < data.length) {\n var RT = data.read_shift(2);\n var R = Enum[RT] || Enum[0xFFFF];\n var length = data.read_shift(2);\n var tgt = data.l + length;\n var d = R.f && R.f(data, length, opts);\n data.l = tgt;\n if (cb(d, R, RT)) return;\n }\n }\n\n function lotus_to_workbook(d\n /*:RawData*/\n , opts) {\n switch (opts.type) {\n case 'base64':\n return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\n case 'binary':\n return lotus_to_workbook_buf(s2a(d), opts);\n\n case 'buffer':\n case 'array':\n return lotus_to_workbook_buf(d, opts);\n }\n\n throw \"Unsupported type \" + opts.type;\n }\n\n function lotus_to_workbook_buf(d, opts)\n /*:Workbook*/\n {\n if (!d) return d;\n var o = opts || {};\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var s\n /*:Worksheet*/\n = o.dense ? [] : {}\n /*:any*/\n ,\n n = \"Sheet1\",\n next_n = \"\",\n sidx = 0;\n var sheets = {},\n snames = [],\n realnames = [];\n var refguess = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var sheetRows = o.sheetRows || 0;\n\n if (d[2] == 0x00) {\n if (d[3] == 0x08 || d[3] == 0x09) {\n if (d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n }\n }\n\n if (d[2] == 0x02) {\n o.Enum = WK1Enum;\n lotushopper(d, function (val, R, RT) {\n switch (RT) {\n case 0x00:\n /* BOF */\n o.vers = val;\n if (val >= 0x1000) o.qpro = true;\n break;\n\n case 0x06:\n refguess = val;\n break;\n\n /* RANGE */\n\n case 0xCC:\n if (val) next_n = val;\n break;\n\n /* SHEETNAMECS */\n\n case 0xDE:\n next_n = val;\n break;\n\n /* SHEETNAMELP */\n\n case 0x0F:\n /* LABEL */\n\n case 0x33:\n /* STRING */\n if (!o.qpro) val[1].v = val[1].v.slice(1);\n\n /* falls through */\n\n case 0x0D:\n /* INTEGER */\n\n case 0x0E:\n /* NUMBER */\n\n case 0x10:\n /* FORMULA */\n\n /* TODO: actual translation of the format code */\n if (RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n val[1].z = o.dateNF || table_fmt[14];\n\n if (o.cellDates) {\n val[1].t = 'd';\n val[1].v = numdate(val[1].v);\n }\n }\n\n if (o.qpro) {\n if (val[3] > sidx) {\n s[\"!ref\"] = encode_range(refguess);\n sheets[n] = s;\n snames.push(n);\n s = o.dense ? [] : {};\n refguess = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n sidx = val[3];\n n = next_n || \"Sheet\" + (sidx + 1);\n next_n = \"\";\n }\n }\n\n var tmpcell = o.dense ? (s[val[0].r] || [])[val[0].c] : s[encode_cell(val[0])];\n\n if (tmpcell) {\n tmpcell.t = val[1].t;\n tmpcell.v = val[1].v;\n if (val[1].z != null) tmpcell.z = val[1].z;\n if (val[1].f != null) tmpcell.f = val[1].f;\n break;\n }\n\n if (o.dense) {\n if (!s[val[0].r]) s[val[0].r] = [];\n s[val[0].r][val[0].c] = val[1];\n } else s[encode_cell(val[0])] = val[1];\n\n break;\n\n default:\n }\n }, o);\n } else if (d[2] == 0x1A || d[2] == 0x0E) {\n o.Enum = WK3Enum;\n\n if (d[2] == 0x0E) {\n o.qpro = true;\n d.l = 0;\n }\n\n lotushopper(d, function (val, R, RT) {\n switch (RT) {\n case 0xCC:\n n = val;\n break;\n\n /* SHEETNAMECS */\n\n case 0x16:\n /* LABEL16 */\n val[1].v = val[1].v.slice(1);\n\n /* falls through */\n\n case 0x17:\n /* NUMBER17 */\n\n case 0x18:\n /* NUMBER18 */\n\n case 0x19:\n /* FORMULA19 */\n\n case 0x25:\n /* NUMBER25 */\n\n case 0x27:\n /* NUMBER27 */\n\n case 0x28:\n /* FORMULA28 */\n if (val[3] > sidx) {\n s[\"!ref\"] = encode_range(refguess);\n sheets[n] = s;\n snames.push(n);\n s = o.dense ? [] : {};\n refguess = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n sidx = val[3];\n n = \"Sheet\" + (sidx + 1);\n }\n\n if (sheetRows > 0 && val[0].r >= sheetRows) break;\n\n if (o.dense) {\n if (!s[val[0].r]) s[val[0].r] = [];\n s[val[0].r][val[0].c] = val[1];\n } else s[encode_cell(val[0])] = val[1];\n\n if (refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n if (refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n break;\n\n case 0x1B:\n /* XFORMAT */\n if (val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n break;\n\n case 0x0601:\n /* SHEETINFOQP */\n realnames[val[0]] = val[1];\n if (val[0] == sidx) n = val[1];\n break;\n\n default:\n break;\n }\n }, o);\n } else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\n s[\"!ref\"] = encode_range(refguess);\n sheets[next_n || n] = s;\n snames.push(next_n || n);\n if (!realnames.length) return {\n SheetNames: snames,\n Sheets: sheets\n };\n var osheets = {},\n rnames = [];\n /* TODO: verify no collisions */\n\n for (var i = 0; i < realnames.length; ++i) {\n if (sheets[snames[i]]) {\n rnames.push(realnames[i] || snames[i]);\n osheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n } else {\n rnames.push(realnames[i]);\n osheets[realnames[i]] = {\n \"!ref\": \"A1\"\n };\n }\n }\n\n return {\n SheetNames: rnames,\n Sheets: osheets\n };\n }\n\n function sheet_to_wk1(ws\n /*:Worksheet*/\n , opts\n /*:WriteOpts*/\n ) {\n var o = opts || {};\n if (+o.codepage >= 0) set_cp(+o.codepage);\n if (o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n var ba = buf_array();\n var range = safe_decode_range(ws[\"!ref\"]);\n var dense = Array.isArray(ws);\n var cols = [];\n write_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n write_biff_rec(ba, 0x06, write_RANGE(range));\n var max_R = Math.min(range.e.r, 8191);\n\n for (var R = range.s.r; R <= max_R; ++R) {\n var rr = encode_row(R);\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n if (R === range.s.r) cols[C] = encode_col(C);\n var ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell || cell.t == \"z\") continue;\n /* TODO: formula records */\n\n if (cell.t == \"n\") {\n if ((cell.v | 0) == cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell.v));else write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell.v));\n } else {\n var str = format_cell(cell);\n write_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n }\n }\n }\n\n write_biff_rec(ba, 0x01);\n return ba.end();\n }\n\n function book_to_wk3(wb\n /*:Workbook*/\n , opts\n /*:WriteOpts*/\n ) {\n var o = opts || {};\n if (+o.codepage >= 0) set_cp(+o.codepage);\n if (o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n var ba = buf_array();\n write_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n for (var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) {\n if ((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n }\n\n var wsidx = 0;\n\n for (i = 0; i < wb.SheetNames.length; ++i) {\n var ws = wb.Sheets[wb.SheetNames[i]];\n if (!ws || !ws[\"!ref\"]) continue;\n var range = safe_decode_range(ws[\"!ref\"]);\n var dense = Array.isArray(ws);\n var cols = [];\n var max_R = Math.min(range.e.r, 8191);\n\n for (var R = range.s.r; R <= max_R; ++R) {\n var rr = encode_row(R);\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n if (R === range.s.r) cols[C] = encode_col(C);\n var ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell || cell.t == \"z\") continue;\n /* TODO: FORMULA19 NUMBER18 records */\n\n if (cell.t == \"n\") {\n write_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n } else {\n var str = format_cell(cell);\n /* TODO: max len? */\n\n write_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n }\n }\n }\n\n ++wsidx;\n }\n\n write_biff_rec(ba, 0x01);\n return ba.end();\n }\n\n function write_BOF_WK1(v\n /*:number*/\n ) {\n var out = new_buf(2);\n out.write_shift(2, v);\n return out;\n }\n\n function write_BOF_WK3(wb\n /*:Workbook*/\n ) {\n var out = new_buf(26);\n out.write_shift(2, 0x1000);\n out.write_shift(2, 0x0004);\n out.write_shift(4, 0x0000);\n var rows = 0,\n cols = 0,\n wscnt = 0;\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n var name = wb.SheetNames[i];\n var ws = wb.Sheets[name];\n if (!ws || !ws[\"!ref\"]) continue;\n ++wscnt;\n var range = decode_range(ws[\"!ref\"]);\n if (rows < range.e.r) rows = range.e.r;\n if (cols < range.e.c) cols = range.e.c;\n }\n\n if (rows > 8191) rows = 8191;\n out.write_shift(2, rows);\n out.write_shift(1, wscnt);\n out.write_shift(1, cols);\n out.write_shift(2, 0x00);\n out.write_shift(2, 0x00);\n out.write_shift(1, 0x01);\n out.write_shift(1, 0x02);\n out.write_shift(4, 0);\n out.write_shift(4, 0);\n return out;\n }\n\n function parse_RANGE(blob, length, opts) {\n var o = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n\n if (length == 8 && opts.qpro) {\n o.s.c = blob.read_shift(1);\n blob.l++;\n o.s.r = blob.read_shift(2);\n o.e.c = blob.read_shift(1);\n blob.l++;\n o.e.r = blob.read_shift(2);\n return o;\n }\n\n o.s.c = blob.read_shift(2);\n o.s.r = blob.read_shift(2);\n if (length == 12 && opts.qpro) blob.l += 2;\n o.e.c = blob.read_shift(2);\n o.e.r = blob.read_shift(2);\n if (length == 12 && opts.qpro) blob.l += 2;\n if (o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n return o;\n }\n\n function write_RANGE(range) {\n var out = new_buf(8);\n out.write_shift(2, range.s.c);\n out.write_shift(2, range.s.r);\n out.write_shift(2, range.e.c);\n out.write_shift(2, range.e.r);\n return out;\n }\n\n function parse_cell(blob, length, opts) {\n var o = [{\n c: 0,\n r: 0\n }, {\n t: 'n',\n v: 0\n }, 0, 0];\n\n if (opts.qpro && opts.vers != 0x5120) {\n o[0].c = blob.read_shift(1);\n o[3] = blob.read_shift(1);\n o[0].r = blob.read_shift(2);\n blob.l += 2;\n } else {\n o[2] = blob.read_shift(1);\n o[0].c = blob.read_shift(2);\n o[0].r = blob.read_shift(2);\n }\n\n return o;\n }\n\n function parse_LABEL(blob, length, opts) {\n var tgt = blob.l + length;\n var o = parse_cell(blob, length, opts);\n o[1].t = 's';\n\n if (opts.vers == 0x5120) {\n blob.l++;\n var len = blob.read_shift(1);\n o[1].v = blob.read_shift(len, 'utf8');\n return o;\n }\n\n if (opts.qpro) blob.l++;\n o[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n return o;\n }\n\n function write_LABEL(R, C, s) {\n /* TODO: encoding */\n var o = new_buf(7 + s.length);\n o.write_shift(1, 0xFF);\n o.write_shift(2, C);\n o.write_shift(2, R);\n o.write_shift(1, 0x27); // ??\n\n for (var i = 0; i < o.length; ++i) {\n var cc = s.charCodeAt(i);\n o.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n }\n\n o.write_shift(1, 0);\n return o;\n }\n\n function parse_INTEGER(blob, length, opts) {\n var o = parse_cell(blob, length, opts);\n o[1].v = blob.read_shift(2, 'i');\n return o;\n }\n\n function write_INTEGER(R, C, v) {\n var o = new_buf(7);\n o.write_shift(1, 0xFF);\n o.write_shift(2, C);\n o.write_shift(2, R);\n o.write_shift(2, v, 'i');\n return o;\n }\n\n function parse_NUMBER(blob, length, opts) {\n var o = parse_cell(blob, length, opts);\n o[1].v = blob.read_shift(8, 'f');\n return o;\n }\n\n function write_NUMBER(R, C, v) {\n var o = new_buf(13);\n o.write_shift(1, 0xFF);\n o.write_shift(2, C);\n o.write_shift(2, R);\n o.write_shift(8, v, 'f');\n return o;\n }\n\n function parse_FORMULA(blob, length, opts) {\n var tgt = blob.l + length;\n var o = parse_cell(blob, length, opts);\n /* TODO: formula */\n\n o[1].v = blob.read_shift(8, 'f');\n if (opts.qpro) blob.l = tgt;else {\n var flen = blob.read_shift(2);\n wk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n blob.l += flen;\n }\n return o;\n }\n\n function wk1_parse_rc(B, V, col) {\n var rel = V & 0x8000;\n V &= ~0x8000;\n V = (rel ? B : 0) + (V >= 0x2000 ? V - 0x4000 : V);\n return (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n }\n /* var oprec = [\n \t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n \t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n ]; */\n\n /* TODO: flesh out */\n\n\n var FuncTab = {\n 0x33: [\"FALSE\", 0],\n 0x34: [\"TRUE\", 0],\n 0x46: [\"LEN\", 1],\n 0x50: [\"SUM\", 69],\n 0x51: [\"AVERAGEA\", 69],\n 0x52: [\"COUNTA\", 69],\n 0x53: [\"MINA\", 69],\n 0x54: [\"MAXA\", 69],\n 0x6F: [\"T\", 1]\n };\n var BinOpTab = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n \"\", \"+\", \"-\", \"*\", \"/\", \"^\", \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n \"<=\", \">=\", \"<\", \">\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n \"&\", \"\", \"\", \"\", \"\", \"\", \"\", \"\" // eslint-disable-line no-mixed-spaces-and-tabs\n ];\n\n function wk1_fmla_to_csf(blob, o) {\n prep_blob(blob, 0);\n var out = [],\n argc = 0,\n R = \"\",\n C = \"\",\n argL = \"\",\n argR = \"\";\n\n while (blob.l < blob.length) {\n var cc = blob[blob.l++];\n\n switch (cc) {\n case 0x00:\n out.push(blob.read_shift(8, 'f'));\n break;\n\n case 0x01:\n {\n C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n out.push(C + R);\n }\n break;\n\n case 0x02:\n {\n var c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n var r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n out.push(c + r + \":\" + C + R);\n }\n break;\n\n case 0x03:\n if (blob.l < blob.length) {\n console.error(\"WK1 premature formula end\");\n return;\n }\n\n break;\n\n case 0x04:\n out.push(\"(\" + out.pop() + \")\");\n break;\n\n case 0x05:\n out.push(blob.read_shift(2));\n break;\n\n case 0x06:\n {\n /* TODO: text encoding */\n var Z = \"\";\n\n while (cc = blob[blob.l++]) {\n Z += String.fromCharCode(cc);\n }\n\n out.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n }\n break;\n\n case 0x08:\n out.push(\"-\" + out.pop());\n break;\n\n case 0x17:\n out.push(\"+\" + out.pop());\n break;\n\n case 0x16:\n out.push(\"NOT(\" + out.pop() + \")\");\n break;\n\n case 0x14:\n case 0x15:\n {\n argR = out.pop();\n argL = out.pop();\n out.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n }\n break;\n\n default:\n if (cc < 0x20 && BinOpTab[cc]) {\n argR = out.pop();\n argL = out.pop();\n out.push(argL + BinOpTab[cc] + argR);\n } else if (FuncTab[cc]) {\n argc = FuncTab[cc][1];\n if (argc == 69) argc = blob[blob.l++];\n\n if (argc > out.length) {\n console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\");\n return;\n }\n\n var args = out.slice(-argc);\n out.length -= argc;\n out.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n } else if (cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));else if (cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));else if (cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));else if (cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16)); // possible future functions ??\n else return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\n }\n }\n\n if (out.length == 1) o[1].f = \"\" + out[0];else console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n }\n\n function parse_cell_3(blob\n /*::, length*/\n ) {\n var o = [{\n c: 0,\n r: 0\n }, {\n t: 'n',\n v: 0\n }, 0];\n o[0].r = blob.read_shift(2);\n o[3] = blob[blob.l++];\n o[0].c = blob[blob.l++];\n return o;\n }\n\n function parse_LABEL_16(blob, length) {\n var o = parse_cell_3(blob, length);\n o[1].t = 's';\n o[1].v = blob.read_shift(length - 4, 'cstr');\n return o;\n }\n\n function write_LABEL_16(R, C, wsidx, s) {\n /* TODO: encoding */\n var o = new_buf(6 + s.length);\n o.write_shift(2, R);\n o.write_shift(1, wsidx);\n o.write_shift(1, C);\n o.write_shift(1, 0x27);\n\n for (var i = 0; i < s.length; ++i) {\n var cc = s.charCodeAt(i);\n o.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n }\n\n o.write_shift(1, 0);\n return o;\n }\n\n function parse_NUMBER_18(blob, length) {\n var o = parse_cell_3(blob, length);\n o[1].v = blob.read_shift(2);\n var v = o[1].v >> 1;\n\n if (o[1].v & 0x1) {\n switch (v & 0x07) {\n case 0:\n v = (v >> 3) * 5000;\n break;\n\n case 1:\n v = (v >> 3) * 500;\n break;\n\n case 2:\n v = (v >> 3) / 20;\n break;\n\n case 3:\n v = (v >> 3) / 200;\n break;\n\n case 4:\n v = (v >> 3) / 2000;\n break;\n\n case 5:\n v = (v >> 3) / 20000;\n break;\n\n case 6:\n v = (v >> 3) / 16;\n break;\n\n case 7:\n v = (v >> 3) / 64;\n break;\n }\n }\n\n o[1].v = v;\n return o;\n }\n\n function parse_NUMBER_17(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(4);\n var v2 = blob.read_shift(4);\n var e = blob.read_shift(2);\n\n if (e == 0xFFFF) {\n if (v1 === 0 && v2 === 0xC0000000) {\n o[1].t = \"e\";\n o[1].v = 0x0F;\n } // ERR -> #VALUE!\n else if (v1 === 0 && v2 === 0xD0000000) {\n o[1].t = \"e\";\n o[1].v = 0x2A;\n } // NA -> #N/A\n else o[1].v = 0;\n\n return o;\n }\n\n var s = e & 0x8000;\n e = (e & 0x7FFF) - 16446;\n o[1].v = (1 - s * 2) * (v2 * Math.pow(2, e + 32) + v1 * Math.pow(2, e));\n return o;\n }\n\n function write_NUMBER_17(R, C, wsidx, v) {\n var o = new_buf(14);\n o.write_shift(2, R);\n o.write_shift(1, wsidx);\n o.write_shift(1, C);\n\n if (v == 0) {\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 0xFFFF);\n return o;\n }\n\n var s = 0,\n e = 0,\n v1 = 0,\n v2 = 0;\n\n if (v < 0) {\n s = 1;\n v = -v;\n }\n\n e = Math.log2(v) | 0;\n v /= Math.pow(2, e - 31);\n v2 = v >>> 0;\n\n if ((v2 & 0x80000000) == 0) {\n v /= 2;\n ++e;\n v2 = v >>> 0;\n }\n\n v -= v2;\n v2 |= 0x80000000;\n v2 >>>= 0;\n v *= Math.pow(2, 32);\n v1 = v >>> 0;\n o.write_shift(4, v1);\n o.write_shift(4, v2);\n e += 0x3FFF + (s ? 0x8000 : 0);\n o.write_shift(2, e);\n return o;\n }\n\n function parse_FORMULA_19(blob, length) {\n var o = parse_NUMBER_17(blob, 14);\n blob.l += length - 14;\n /* TODO: WK3 formula */\n\n return o;\n }\n\n function parse_NUMBER_25(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(4);\n o[1].v = v1 >> 6;\n return o;\n }\n\n function parse_NUMBER_27(blob, length) {\n var o = parse_cell_3(blob, length);\n var v1 = blob.read_shift(8, 'f');\n o[1].v = v1;\n return o;\n }\n\n function parse_FORMULA_28(blob, length) {\n var o = parse_NUMBER_27(blob, 14);\n blob.l += length - 10;\n /* TODO: formula */\n\n return o;\n }\n\n function parse_SHEETNAMECS(blob, length) {\n return blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n }\n\n function parse_SHEETNAMELP(blob, length) {\n var len = blob[blob.l++];\n if (len > length - 1) len = length - 1;\n var o = \"\";\n\n while (o.length < len) {\n o += String.fromCharCode(blob[blob.l++]);\n }\n\n return o;\n }\n\n function parse_SHEETINFOQP(blob, length, opts) {\n if (!opts.qpro || length < 21) return;\n var id = blob.read_shift(1);\n blob.l += 17;\n blob.l += 1; //var len = blob.read_shift(1);\n\n blob.l += 2;\n var nm = blob.read_shift(length - 21, 'cstr');\n return [id, nm];\n }\n\n function parse_XFORMAT(blob, length) {\n var o = {},\n tgt = blob.l + length;\n\n while (blob.l < tgt) {\n var dt = blob.read_shift(2);\n\n if (dt == 0x36b0) {\n o[dt] = [0, \"\"];\n o[dt][0] = blob.read_shift(2);\n\n while (blob[blob.l]) {\n o[dt][1] += String.fromCharCode(blob[blob.l]);\n blob.l++;\n }\n\n blob.l++;\n } // TODO: 0x3a99 ??\n\n }\n\n return o;\n }\n\n function write_XFORMAT_SHEETNAME(name, wsidx) {\n var out = new_buf(5 + name.length);\n out.write_shift(2, 0x36b0);\n out.write_shift(2, wsidx);\n\n for (var i = 0; i < name.length; ++i) {\n var cc = name.charCodeAt(i);\n out[out.l++] = cc > 0x7F ? 0x5F : cc;\n }\n\n out[out.l++] = 0;\n return out;\n }\n\n var WK1Enum = {\n /*::[*/\n 0x0000\n /*::]*/\n : {\n n: \"BOF\",\n f: parseuint16\n },\n\n /*::[*/\n 0x0001\n /*::]*/\n : {\n n: \"EOF\"\n },\n\n /*::[*/\n 0x0002\n /*::]*/\n : {\n n: \"CALCMODE\"\n },\n\n /*::[*/\n 0x0003\n /*::]*/\n : {\n n: \"CALCORDER\"\n },\n\n /*::[*/\n 0x0004\n /*::]*/\n : {\n n: \"SPLIT\"\n },\n\n /*::[*/\n 0x0005\n /*::]*/\n : {\n n: \"SYNC\"\n },\n\n /*::[*/\n 0x0006\n /*::]*/\n : {\n n: \"RANGE\",\n f: parse_RANGE\n },\n\n /*::[*/\n 0x0007\n /*::]*/\n : {\n n: \"WINDOW1\"\n },\n\n /*::[*/\n 0x0008\n /*::]*/\n : {\n n: \"COLW1\"\n },\n\n /*::[*/\n 0x0009\n /*::]*/\n : {\n n: \"WINTWO\"\n },\n\n /*::[*/\n 0x000A\n /*::]*/\n : {\n n: \"COLW2\"\n },\n\n /*::[*/\n 0x000B\n /*::]*/\n : {\n n: \"NAME\"\n },\n\n /*::[*/\n 0x000C\n /*::]*/\n : {\n n: \"BLANK\"\n },\n\n /*::[*/\n 0x000D\n /*::]*/\n : {\n n: \"INTEGER\",\n f: parse_INTEGER\n },\n\n /*::[*/\n 0x000E\n /*::]*/\n : {\n n: \"NUMBER\",\n f: parse_NUMBER\n },\n\n /*::[*/\n 0x000F\n /*::]*/\n : {\n n: \"LABEL\",\n f: parse_LABEL\n },\n\n /*::[*/\n 0x0010\n /*::]*/\n : {\n n: \"FORMULA\",\n f: parse_FORMULA\n },\n\n /*::[*/\n 0x0018\n /*::]*/\n : {\n n: \"TABLE\"\n },\n\n /*::[*/\n 0x0019\n /*::]*/\n : {\n n: \"ORANGE\"\n },\n\n /*::[*/\n 0x001A\n /*::]*/\n : {\n n: \"PRANGE\"\n },\n\n /*::[*/\n 0x001B\n /*::]*/\n : {\n n: \"SRANGE\"\n },\n\n /*::[*/\n 0x001C\n /*::]*/\n : {\n n: \"FRANGE\"\n },\n\n /*::[*/\n 0x001D\n /*::]*/\n : {\n n: \"KRANGE1\"\n },\n\n /*::[*/\n 0x0020\n /*::]*/\n : {\n n: \"HRANGE\"\n },\n\n /*::[*/\n 0x0023\n /*::]*/\n : {\n n: \"KRANGE2\"\n },\n\n /*::[*/\n 0x0024\n /*::]*/\n : {\n n: \"PROTEC\"\n },\n\n /*::[*/\n 0x0025\n /*::]*/\n : {\n n: \"FOOTER\"\n },\n\n /*::[*/\n 0x0026\n /*::]*/\n : {\n n: \"HEADER\"\n },\n\n /*::[*/\n 0x0027\n /*::]*/\n : {\n n: \"SETUP\"\n },\n\n /*::[*/\n 0x0028\n /*::]*/\n : {\n n: \"MARGINS\"\n },\n\n /*::[*/\n 0x0029\n /*::]*/\n : {\n n: \"LABELFMT\"\n },\n\n /*::[*/\n 0x002A\n /*::]*/\n : {\n n: \"TITLES\"\n },\n\n /*::[*/\n 0x002B\n /*::]*/\n : {\n n: \"SHEETJS\"\n },\n\n /*::[*/\n 0x002D\n /*::]*/\n : {\n n: \"GRAPH\"\n },\n\n /*::[*/\n 0x002E\n /*::]*/\n : {\n n: \"NGRAPH\"\n },\n\n /*::[*/\n 0x002F\n /*::]*/\n : {\n n: \"CALCCOUNT\"\n },\n\n /*::[*/\n 0x0030\n /*::]*/\n : {\n n: \"UNFORMATTED\"\n },\n\n /*::[*/\n 0x0031\n /*::]*/\n : {\n n: \"CURSORW12\"\n },\n\n /*::[*/\n 0x0032\n /*::]*/\n : {\n n: \"WINDOW\"\n },\n\n /*::[*/\n 0x0033\n /*::]*/\n : {\n n: \"STRING\",\n f: parse_LABEL\n },\n\n /*::[*/\n 0x0037\n /*::]*/\n : {\n n: \"PASSWORD\"\n },\n\n /*::[*/\n 0x0038\n /*::]*/\n : {\n n: \"LOCKED\"\n },\n\n /*::[*/\n 0x003C\n /*::]*/\n : {\n n: \"QUERY\"\n },\n\n /*::[*/\n 0x003D\n /*::]*/\n : {\n n: \"QUERYNAME\"\n },\n\n /*::[*/\n 0x003E\n /*::]*/\n : {\n n: \"PRINT\"\n },\n\n /*::[*/\n 0x003F\n /*::]*/\n : {\n n: \"PRINTNAME\"\n },\n\n /*::[*/\n 0x0040\n /*::]*/\n : {\n n: \"GRAPH2\"\n },\n\n /*::[*/\n 0x0041\n /*::]*/\n : {\n n: \"GRAPHNAME\"\n },\n\n /*::[*/\n 0x0042\n /*::]*/\n : {\n n: \"ZOOM\"\n },\n\n /*::[*/\n 0x0043\n /*::]*/\n : {\n n: \"SYMSPLIT\"\n },\n\n /*::[*/\n 0x0044\n /*::]*/\n : {\n n: \"NSROWS\"\n },\n\n /*::[*/\n 0x0045\n /*::]*/\n : {\n n: \"NSCOLS\"\n },\n\n /*::[*/\n 0x0046\n /*::]*/\n : {\n n: \"RULER\"\n },\n\n /*::[*/\n 0x0047\n /*::]*/\n : {\n n: \"NNAME\"\n },\n\n /*::[*/\n 0x0048\n /*::]*/\n : {\n n: \"ACOMM\"\n },\n\n /*::[*/\n 0x0049\n /*::]*/\n : {\n n: \"AMACRO\"\n },\n\n /*::[*/\n 0x004A\n /*::]*/\n : {\n n: \"PARSE\"\n },\n\n /*::[*/\n 0x0066\n /*::]*/\n : {\n n: \"PRANGES??\"\n },\n\n /*::[*/\n 0x0067\n /*::]*/\n : {\n n: \"RRANGES??\"\n },\n\n /*::[*/\n 0x0068\n /*::]*/\n : {\n n: \"FNAME??\"\n },\n\n /*::[*/\n 0x0069\n /*::]*/\n : {\n n: \"MRANGES??\"\n },\n\n /*::[*/\n 0x00CC\n /*::]*/\n : {\n n: \"SHEETNAMECS\",\n f: parse_SHEETNAMECS\n },\n\n /*::[*/\n 0x00DE\n /*::]*/\n : {\n n: \"SHEETNAMELP\",\n f: parse_SHEETNAMELP\n },\n\n /*::[*/\n 0xFFFF\n /*::]*/\n : {\n n: \"\"\n }\n };\n var WK3Enum = {\n /*::[*/\n 0x0000\n /*::]*/\n : {\n n: \"BOF\"\n },\n\n /*::[*/\n 0x0001\n /*::]*/\n : {\n n: \"EOF\"\n },\n\n /*::[*/\n 0x0002\n /*::]*/\n : {\n n: \"PASSWORD\"\n },\n\n /*::[*/\n 0x0003\n /*::]*/\n : {\n n: \"CALCSET\"\n },\n\n /*::[*/\n 0x0004\n /*::]*/\n : {\n n: \"WINDOWSET\"\n },\n\n /*::[*/\n 0x0005\n /*::]*/\n : {\n n: \"SHEETCELLPTR\"\n },\n\n /*::[*/\n 0x0006\n /*::]*/\n : {\n n: \"SHEETLAYOUT\"\n },\n\n /*::[*/\n 0x0007\n /*::]*/\n : {\n n: \"COLUMNWIDTH\"\n },\n\n /*::[*/\n 0x0008\n /*::]*/\n : {\n n: \"HIDDENCOLUMN\"\n },\n\n /*::[*/\n 0x0009\n /*::]*/\n : {\n n: \"USERRANGE\"\n },\n\n /*::[*/\n 0x000A\n /*::]*/\n : {\n n: \"SYSTEMRANGE\"\n },\n\n /*::[*/\n 0x000B\n /*::]*/\n : {\n n: \"ZEROFORCE\"\n },\n\n /*::[*/\n 0x000C\n /*::]*/\n : {\n n: \"SORTKEYDIR\"\n },\n\n /*::[*/\n 0x000D\n /*::]*/\n : {\n n: \"FILESEAL\"\n },\n\n /*::[*/\n 0x000E\n /*::]*/\n : {\n n: \"DATAFILLNUMS\"\n },\n\n /*::[*/\n 0x000F\n /*::]*/\n : {\n n: \"PRINTMAIN\"\n },\n\n /*::[*/\n 0x0010\n /*::]*/\n : {\n n: \"PRINTSTRING\"\n },\n\n /*::[*/\n 0x0011\n /*::]*/\n : {\n n: \"GRAPHMAIN\"\n },\n\n /*::[*/\n 0x0012\n /*::]*/\n : {\n n: \"GRAPHSTRING\"\n },\n\n /*::[*/\n 0x0013\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0014\n /*::]*/\n : {\n n: \"ERRCELL\"\n },\n\n /*::[*/\n 0x0015\n /*::]*/\n : {\n n: \"NACELL\"\n },\n\n /*::[*/\n 0x0016\n /*::]*/\n : {\n n: \"LABEL16\",\n f: parse_LABEL_16\n },\n\n /*::[*/\n 0x0017\n /*::]*/\n : {\n n: \"NUMBER17\",\n f: parse_NUMBER_17\n },\n\n /*::[*/\n 0x0018\n /*::]*/\n : {\n n: \"NUMBER18\",\n f: parse_NUMBER_18\n },\n\n /*::[*/\n 0x0019\n /*::]*/\n : {\n n: \"FORMULA19\",\n f: parse_FORMULA_19\n },\n\n /*::[*/\n 0x001A\n /*::]*/\n : {\n n: \"FORMULA1A\"\n },\n\n /*::[*/\n 0x001B\n /*::]*/\n : {\n n: \"XFORMAT\",\n f: parse_XFORMAT\n },\n\n /*::[*/\n 0x001C\n /*::]*/\n : {\n n: \"DTLABELMISC\"\n },\n\n /*::[*/\n 0x001D\n /*::]*/\n : {\n n: \"DTLABELCELL\"\n },\n\n /*::[*/\n 0x001E\n /*::]*/\n : {\n n: \"GRAPHWINDOW\"\n },\n\n /*::[*/\n 0x001F\n /*::]*/\n : {\n n: \"CPA\"\n },\n\n /*::[*/\n 0x0020\n /*::]*/\n : {\n n: \"LPLAUTO\"\n },\n\n /*::[*/\n 0x0021\n /*::]*/\n : {\n n: \"QUERY\"\n },\n\n /*::[*/\n 0x0022\n /*::]*/\n : {\n n: \"HIDDENSHEET\"\n },\n\n /*::[*/\n 0x0023\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0025\n /*::]*/\n : {\n n: \"NUMBER25\",\n f: parse_NUMBER_25\n },\n\n /*::[*/\n 0x0026\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0027\n /*::]*/\n : {\n n: \"NUMBER27\",\n f: parse_NUMBER_27\n },\n\n /*::[*/\n 0x0028\n /*::]*/\n : {\n n: \"FORMULA28\",\n f: parse_FORMULA_28\n },\n\n /*::[*/\n 0x008E\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0093\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0096\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0097\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0098\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0099\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x009A\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x009B\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x009C\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00A3\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00AE\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00AF\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00B0\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00B1\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00B8\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00B9\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00BA\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00BB\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00BC\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00C3\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00C9\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00CC\n /*::]*/\n : {\n n: \"SHEETNAMECS\",\n f: parse_SHEETNAMECS\n },\n\n /*::[*/\n 0x00CD\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00CE\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00CF\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x00D0\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0100\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0103\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0104\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0105\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0106\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0107\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0109\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x010A\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x010B\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x010C\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x010E\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x010F\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0180\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0185\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0186\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0189\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x018C\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0200\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0202\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0201\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0204\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0205\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0280\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0281\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0282\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0283\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0284\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0285\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0286\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0287\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0288\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0292\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0293\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0294\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0295\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0296\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0299\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x029A\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0300\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0304\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0601\n /*::]*/\n : {\n n: \"SHEETINFOQP\",\n f: parse_SHEETINFOQP\n },\n\n /*::[*/\n 0x0640\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0642\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0701\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0702\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0703\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0704\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0780\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0800\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0801\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0804\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x0A80\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x2AF6\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x3231\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x6E49\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0x6F44\n /*::]*/\n : {\n n: \"??\"\n },\n\n /*::[*/\n 0xFFFF\n /*::]*/\n : {\n n: \"\"\n }\n };\n return {\n sheet_to_wk1: sheet_to_wk1,\n book_to_wk3: book_to_wk3,\n to_workbook: lotus_to_workbook\n };\n}();\n/* 18.4.7 rPr CT_RPrElt */\n\n\nfunction parse_rpr(rpr) {\n var font = {},\n m = rpr.match(tagregex),\n i = 0;\n var pass = false;\n if (m) for (; i != m.length; ++i) {\n var y = parsexmltag(m[i]);\n\n switch (y[0].replace(/\\w*:/g, \"\")) {\n /* 18.8.12 condense CT_BooleanProperty */\n\n /* ** not required . */\n case '':\n case '':\n font.shadow = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.1 charset CT_IntProperty TODO */\n\n case '':\n case '':\n font.outline = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.5 rFont CT_FontName */\n\n case '':\n case '':\n font.strike = 1;\n break;\n\n case '':\n break;\n\n /* 18.4.13 u CT_UnderlineProperty */\n\n case '':\n case '':\n font.u = 1;\n break;\n\n case '':\n break;\n\n /* 18.8.2 b */\n\n case '':\n case '':\n font.b = 1;\n break;\n\n case '':\n break;\n\n /* 18.8.26 i */\n\n case '':\n case '':\n font.i = 1;\n break;\n\n case '':\n break;\n\n /* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.8.18 family ST_FontFamily */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.8.35 scheme CT_FontScheme TODO */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n }\n }\n return font;\n}\n\nvar parse_rs = /*#__PURE__*/function () {\n var tregex = matchtag(\"t\"),\n rpregex = matchtag(\"rPr\");\n /* 18.4.4 r CT_RElt */\n\n function parse_r(r) {\n /* 18.4.12 t ST_Xstring */\n var t = r.match(tregex)\n /*, cp = 65001*/\n ;\n if (!t) return {\n t: \"s\",\n v: \"\"\n };\n var o\n /*:Cell*/\n = {\n t: 's',\n v: unescapexml(t[1])\n }\n /*:any*/\n ;\n var rpr = r.match(rpregex);\n if (rpr) o.s = parse_rpr(rpr[1]);\n return o;\n }\n\n var rregex = /<(?:\\w+:)?r>/g,\n rend = /<\\/(?:\\w+:)?r>/;\n return function parse_rs(rs) {\n return rs.replace(rregex, \"\").split(rend).map(parse_r).filter(function (r) {\n return r.v;\n });\n };\n}();\n/* Parse a list of tags */\n\n\nvar rs_to_html = /*#__PURE__*/function parse_rs_factory() {\n var nlregex = /(\\r\\n|\\n)/g;\n\n function parse_rpr2(font, intro, outro) {\n var style\n /*:Array*/\n = [];\n if (font.u) style.push(\"text-decoration: underline;\");\n if (font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n if (font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n if (font.outline) style.push(\"text-effect: outline;\");\n if (font.shadow) style.push(\"text-shadow: auto;\");\n intro.push('');\n\n if (font.b) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n if (font.i) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n if (font.strike) {\n intro.push(\"\");\n outro.push(\"\");\n }\n\n var align = font.valign || \"\";\n if (align == \"superscript\" || align == \"super\") align = \"sup\";else if (align == \"subscript\") align = \"sub\";\n\n if (align != \"\") {\n intro.push(\"<\" + align + \">\");\n outro.push(\"\");\n }\n\n outro.push(\"\");\n return font;\n }\n /* 18.4.4 r CT_RElt */\n\n\n function r_to_html(r) {\n var terms\n /*:[Array, string, Array]*/\n = [[], r.v, []];\n if (!r.v) return \"\";\n if (r.s) parse_rpr2(r.s, terms[0], terms[2]);\n return terms[0].join(\"\") + terms[1].replace(nlregex, '
') + terms[2].join(\"\");\n }\n\n return function parse_rs(rs) {\n return rs.map(r_to_html).join(\"\");\n };\n}();\n/* 18.4.8 si CT_Rst */\n\n\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g,\n sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\n\nfunction parse_si(x, opts) {\n var html = opts ? opts.cellHTML : true;\n var z = {};\n if (!x) return {\n t: \"\"\n }; //var y;\n\n /* 18.4.12 t ST_Xstring (Plaintext String) */\n // TODO: is whitespace actually valid here?\n\n if (x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n z.t = unescapexml(utf8read(x.slice(x.indexOf(\">\") + 1).split(/<\\/(?:\\w+:)?t>/)[0] || \"\"));\n z.r = utf8read(x);\n if (html) z.h = escapehtml(z.t);\n }\n /* 18.4.4 r CT_RElt (Rich Text Run) */\n else if (\n /*y = */\n x.match(sirregex)) {\n z.r = utf8read(x);\n z.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex) || []).join(\"\").replace(tagregex, \"\")));\n if (html) z.h = rs_to_html(parse_rs(z.r));\n }\n /* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\n /* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\n\n return z;\n}\n/* 18.4 Shared String Table */\n\n\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\n\nfunction parse_sst_xml(data\n/*:string*/\n, opts)\n/*:SST*/\n{\n var s\n /*:SST*/\n = []\n /*:any*/\n ,\n ss = \"\";\n if (!data) return s;\n /* 18.4.9 sst CT_Sst */\n\n var sst = data.match(sstr0);\n\n if (sst) {\n ss = sst[2].replace(sstr1, \"\").split(sstr2);\n\n for (var i = 0; i != ss.length; ++i) {\n var o = parse_si(ss[i].trim(), opts);\n if (o != null) s[s.length] = o;\n }\n\n sst = parsexmltag(sst[1]);\n s.Count = sst.count;\n s.Unique = sst.uniqueCount;\n }\n\n return s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\n\nfunction write_sst_xml(sst\n/*:SST*/\n, opts)\n/*:string*/\n{\n if (!opts.bookSST) return \"\";\n var o = [XML_HEADER];\n o[o.length] = writextag('sst', null, {\n xmlns: XMLNS_main[0],\n count: sst.Count,\n uniqueCount: sst.Unique\n });\n\n for (var i = 0; i != sst.length; ++i) {\n if (sst[i] == null) continue;\n var s\n /*:XLString*/\n = sst[i];\n var sitag = \"\";\n if (s.r) sitag += s.r;else {\n sitag += \"\" + escapexml(s.t) + \"\";\n }\n sitag += \"\";\n o[o.length] = sitag;\n }\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\n\n\nfunction parse_BrtBeginSst(data) {\n return [data.read_shift(4), data.read_shift(4)];\n}\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\n\n\nfunction parse_sst_bin(data, opts)\n/*:SST*/\n{\n var s\n /*:SST*/\n = []\n /*:any*/\n ;\n var pass = false;\n recordhopper(data, function hopper_sst(val, R, RT) {\n switch (RT) {\n case 0x009F:\n /* BrtBeginSst */\n s.Count = val[0];\n s.Unique = val[1];\n break;\n\n case 0x0013:\n /* BrtSSTItem */\n s.push(val);\n break;\n\n case 0x00A0:\n /* BrtEndSst */\n return true;\n\n case 0x0023:\n /* BrtFRTBegin */\n pass = true;\n break;\n\n case 0x0024:\n /* BrtFRTEnd */\n pass = false;\n break;\n\n default:\n if (R.T) {}\n\n if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n }\n });\n return s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n if (!o) o = new_buf(8);\n o.write_shift(4, sst.Count);\n o.write_shift(4, sst.Unique);\n return o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst\n/*::, opts*/\n) {\n var ba = buf_array();\n write_record(ba, 0x009F\n /* BrtBeginSst */\n , write_BrtBeginSst(sst));\n\n for (var i = 0; i < sst.length; ++i) {\n write_record(ba, 0x0013\n /* BrtSSTItem */\n , write_BrtSSTItem(sst[i]));\n }\n /* FRTSST */\n\n\n write_record(ba, 0x00A0\n /* BrtEndSst */\n );\n return ba.end();\n}\n\nfunction _JS2ANSI(str\n/*:string*/\n)\n/*:Array*/\n{\n if (typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n var o\n /*:Array*/\n = [],\n oo = str.split(\"\");\n\n for (var i = 0; i < oo.length; ++i) {\n o[i] = oo[i].charCodeAt(0);\n }\n\n return o;\n}\n/* [MS-OFFCRYPTO] 2.1.4 Version */\n\n\nfunction parse_CRYPTOVersion(blob, length\n/*:?number*/\n) {\n var o\n /*:any*/\n = {};\n o.Major = blob.read_shift(2);\n o.Minor = blob.read_shift(2);\n /*:: if(length == null) return o; */\n\n if (length >= 4) blob.l += length - 4;\n return o;\n}\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\n\n\nfunction parse_DataSpaceVersionInfo(blob) {\n var o = {};\n o.id = blob.read_shift(0, 'lpp4');\n o.R = parse_CRYPTOVersion(blob, 4);\n o.U = parse_CRYPTOVersion(blob, 4);\n o.W = parse_CRYPTOVersion(blob, 4);\n return o;\n}\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\n\n\nfunction parse_DataSpaceMapEntry(blob) {\n var len = blob.read_shift(4);\n var end = blob.l + len - 4;\n var o = {};\n var cnt = blob.read_shift(4);\n var comps\n /*:Array<{t:number, v:string}>*/\n = [];\n /* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\n while (cnt-- > 0) {\n comps.push({\n t: blob.read_shift(4),\n v: blob.read_shift(0, 'lpp4')\n });\n }\n\n o.name = blob.read_shift(0, 'lpp4');\n o.comps = comps;\n if (blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n return o;\n}\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\n\n\nfunction parse_DataSpaceMap(blob) {\n var o = [];\n blob.l += 4; // must be 0x8\n\n var cnt = blob.read_shift(4);\n\n while (cnt-- > 0) {\n o.push(parse_DataSpaceMapEntry(blob));\n }\n\n return o;\n}\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\n\n\nfunction parse_DataSpaceDefinition(blob)\n/*:Array*/\n{\n var o\n /*:Array*/\n = [];\n blob.l += 4; // must be 0x8\n\n var cnt = blob.read_shift(4);\n\n while (cnt-- > 0) {\n o.push(blob.read_shift(0, 'lpp4'));\n }\n\n return o;\n}\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\n\n\nfunction parse_TransformInfoHeader(blob) {\n var o = {};\n /*var len = */\n\n blob.read_shift(4);\n blob.l += 4; // must be 0x1\n\n o.id = blob.read_shift(0, 'lpp4');\n o.name = blob.read_shift(0, 'lpp4');\n o.R = parse_CRYPTOVersion(blob, 4);\n o.U = parse_CRYPTOVersion(blob, 4);\n o.W = parse_CRYPTOVersion(blob, 4);\n return o;\n}\n\nfunction parse_Primary(blob) {\n /* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n var hdr = parse_TransformInfoHeader(blob);\n /* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\n hdr.ename = blob.read_shift(0, '8lpp4');\n hdr.blksz = blob.read_shift(4);\n hdr.cmode = blob.read_shift(4);\n if (blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n return hdr;\n}\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\n\n\nfunction parse_EncryptionHeader(blob, length\n/*:number*/\n) {\n var tgt = blob.l + length;\n var o = {};\n o.Flags = blob.read_shift(4) & 0x3F;\n blob.l += 4;\n o.AlgID = blob.read_shift(4);\n var valid = false;\n\n switch (o.AlgID) {\n case 0x660E:\n case 0x660F:\n case 0x6610:\n valid = o.Flags == 0x24;\n break;\n\n case 0x6801:\n valid = o.Flags == 0x04;\n break;\n\n case 0:\n valid = o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24;\n break;\n\n default:\n throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n }\n\n if (!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n o.AlgIDHash = blob.read_shift(4);\n o.KeySize = blob.read_shift(4);\n o.ProviderType = blob.read_shift(4);\n blob.l += 8;\n o.CSPName = blob.read_shift(tgt - blob.l >> 1, 'utf16le');\n blob.l = tgt;\n return o;\n}\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\n\n\nfunction parse_EncryptionVerifier(blob, length\n/*:number*/\n) {\n var o = {},\n tgt = blob.l + length;\n blob.l += 4; // SaltSize must be 0x10\n\n o.Salt = blob.slice(blob.l, blob.l + 16);\n blob.l += 16;\n o.Verifier = blob.slice(blob.l, blob.l + 16);\n blob.l += 16;\n /*var sz = */\n\n blob.read_shift(4);\n o.VerifierHash = blob.slice(blob.l, tgt);\n blob.l = tgt;\n return o;\n}\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\n\n\nfunction parse_EncryptionInfo(blob) {\n var vers = parse_CRYPTOVersion(blob);\n\n switch (vers.Minor) {\n case 0x02:\n return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\n case 0x03:\n return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\n case 0x04:\n return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n }\n\n throw new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\n\n\nfunction parse_EncInfoStd(blob\n/*::, vers*/\n) {\n var flags = blob.read_shift(4);\n if ((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n var sz = blob.read_shift(4); //var tgt = blob.l + sz;\n\n var hdr = parse_EncryptionHeader(blob, sz);\n var verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n return {\n t: \"Std\",\n h: hdr,\n v: verifier\n };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\n\n\nfunction\n /*::blob, vers*/\nparse_EncInfoExt() {\n throw new Error(\"File is password-protected: ECMA-376 Extensible\");\n}\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\n\n\nfunction parse_EncInfoAgl(blob\n/*::, vers*/\n) {\n var KeyData = [\"saltSize\", \"blockSize\", \"keyBits\", \"hashSize\", \"cipherAlgorithm\", \"cipherChaining\", \"hashAlgorithm\", \"saltValue\"];\n blob.l += 4;\n var xml = blob.read_shift(blob.length - blob.l, 'utf8');\n var o = {};\n xml.replace(tagregex, function xml_agile(x) {\n var y\n /*:any*/\n = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n break;\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n case ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n o.Flags = blob.read_shift(4);\n length -= 4;\n var sz = blob.read_shift(4);\n length -= 4;\n o.EncryptionHeader = parse_EncryptionHeader(blob, sz);\n length -= sz;\n o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n return o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\n\n\nfunction parse_RC4Header(blob\n/*::, length*/\n) {\n var o = {};\n var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n if (vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n o.Salt = blob.read_shift(16);\n o.EncryptedVerifier = blob.read_shift(16);\n o.EncryptedVerifierHash = blob.read_shift(16);\n return o;\n}\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\n\n\nfunction crypto_CreatePasswordVerifier_Method1(Password\n/*:string*/\n) {\n var Verifier = 0x0000,\n PasswordArray;\n\n var PasswordDecoded = _JS2ANSI(Password);\n\n var len = PasswordDecoded.length + 1,\n i,\n PasswordByte;\n var Intermediate1, Intermediate2, Intermediate3;\n PasswordArray = new_raw_buf(len);\n PasswordArray[0] = PasswordDecoded.length;\n\n for (i = 1; i != len; ++i) {\n PasswordArray[i] = PasswordDecoded[i - 1];\n }\n\n for (i = len - 1; i >= 0; --i) {\n PasswordByte = PasswordArray[i];\n Intermediate1 = (Verifier & 0x4000) === 0x0000 ? 0 : 1;\n Intermediate2 = Verifier << 1 & 0x7FFF;\n Intermediate3 = Intermediate1 | Intermediate2;\n Verifier = Intermediate3 ^ PasswordByte;\n }\n\n return Verifier ^ 0xCE4B;\n}\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\n\n\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/function () {\n var PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n var InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n var XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\n var Ror = function Ror(Byte) {\n return (Byte / 2 | Byte * 128) & 0xFF;\n };\n\n var XorRor = function XorRor(byte1, byte2) {\n return Ror(byte1 ^ byte2);\n };\n\n var CreateXorKey_Method1 = function CreateXorKey_Method1(Password) {\n var XorKey = InitialCode[Password.length - 1];\n var CurrentElement = 0x68;\n\n for (var i = Password.length - 1; i >= 0; --i) {\n var Char = Password[i];\n\n for (var j = 0; j != 7; ++j) {\n if (Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n Char *= 2;\n --CurrentElement;\n }\n }\n\n return XorKey;\n };\n\n return function (password\n /*:string*/\n ) {\n var Password = _JS2ANSI(password);\n\n var XorKey = CreateXorKey_Method1(Password);\n var Index = Password.length;\n var ObfuscationArray = new_raw_buf(16);\n\n for (var i = 0; i != 16; ++i) {\n ObfuscationArray[i] = 0x00;\n }\n\n var Temp, PasswordLastChar, PadIndex;\n\n if ((Index & 1) === 1) {\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n --Index;\n Temp = XorKey & 0xFF;\n PasswordLastChar = Password[Password.length - 1];\n ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n }\n\n while (Index > 0) {\n --Index;\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n --Index;\n Temp = XorKey & 0xFF;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n }\n\n Index = 15;\n PadIndex = 15 - Password.length;\n\n while (PadIndex > 0) {\n Temp = XorKey >> 8;\n ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n --Index;\n --PadIndex;\n Temp = XorKey & 0xFF;\n ObfuscationArray[Index] = XorRor(Password[Index], Temp);\n --Index;\n --PadIndex;\n }\n\n return ObfuscationArray;\n };\n}();\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\n\n\nvar crypto_DecryptData_Method1 = function crypto_DecryptData_Method1(password\n/*:string*/\n, Data, XorArrayIndex, XorArray, O) {\n /* If XorArray is set, use it; if O is not set, make changes in-place */\n if (!O) O = Data;\n if (!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n var Index, Value;\n\n for (Index = 0; Index != Data.length; ++Index) {\n Value = Data[Index];\n Value ^= XorArray[XorArrayIndex];\n Value = (Value >> 5 | Value << 3) & 0xFF;\n O[Index] = Value;\n ++XorArrayIndex;\n }\n\n return [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function crypto_MakeXorDecryptor(password\n/*:string*/\n) {\n var XorArrayIndex = 0,\n XorArray = crypto_CreateXorArray_Method1(password);\n return function (Data) {\n var O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n XorArrayIndex = O[1];\n return O[0];\n };\n};\n/* 2.5.343 */\n\n\nfunction parse_XORObfuscation(blob, length, opts, out) {\n var o = {\n key: parseuint16(blob),\n verificationBytes: parseuint16(blob)\n }\n /*:any*/\n ;\n if (opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n out.valid = o.verificationBytes === o.verifier;\n if (out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n return o;\n}\n/* 2.4.117 */\n\n\nfunction parse_FilePassHeader(blob, length\n/*:number*/\n, oo) {\n var o = oo || {};\n o.Info = blob.read_shift(2);\n blob.l -= 2;\n if (o.Info === 1) o.Data = parse_RC4Header(blob, length);else o.Data = parse_RC4CryptoHeader(blob, length);\n return o;\n}\n\nfunction parse_FilePass(blob, length\n/*:number*/\n, opts) {\n var o = {\n Type: opts.biff >= 8 ? blob.read_shift(2) : 0\n }\n /*:any*/\n ;\n /* wEncryptionType */\n\n if (o.Type) parse_FilePassHeader(blob, length - 2, o);else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n return o;\n}\n\nvar RTF = /*#__PURE__*/function () {\n function rtf_to_sheet(d\n /*:RawData*/\n , opts)\n /*:Worksheet*/\n {\n switch (opts.type) {\n case 'base64':\n return rtf_to_sheet_str(Base64_decode(d), opts);\n\n case 'binary':\n return rtf_to_sheet_str(d, opts);\n\n case 'buffer':\n return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\n case 'array':\n return rtf_to_sheet_str(cc2str(d), opts);\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n /* TODO: this is a stub */\n\n\n function rtf_to_sheet_str(str\n /*:string*/\n , opts)\n /*:Worksheet*/\n {\n var o = opts || {};\n var ws\n /*:Worksheet*/\n = o.dense ? []\n /*:any*/\n : {}\n /*:any*/\n ;\n var rows = str.match(/\\\\trowd.*?\\\\row\\b/g);\n if (!rows.length) throw new Error(\"RTF missing table\");\n var range\n /*:Range*/\n = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: rows.length - 1\n }\n }\n /*:any*/\n ;\n rows.forEach(function (rowtf, R) {\n if (Array.isArray(ws)) ws[R] = [];\n var rtfre = /\\\\\\w+\\b/g;\n var last_index = 0;\n var res;\n var C = -1;\n\n while (res = rtfre.exec(rowtf)) {\n switch (res[0]) {\n case \"\\\\cell\":\n var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n if (data[0] == \" \") data = data.slice(1);\n ++C;\n\n if (data.length) {\n // TODO: value parsing, including codepage adjustments\n var cell = {\n v: data,\n t: \"s\"\n };\n if (Array.isArray(ws)) ws[R][C] = cell;else ws[encode_cell({\n r: R,\n c: C\n })] = cell;\n }\n\n break;\n }\n\n last_index = rtfre.lastIndex;\n }\n\n if (C > range.e.c) range.e.c = C;\n });\n ws['!ref'] = encode_range(range);\n return ws;\n }\n\n function rtf_to_workbook(d\n /*:RawData*/\n , opts)\n /*:Workbook*/\n {\n return sheet_to_workbook(rtf_to_sheet(d, opts), opts);\n }\n /* TODO: this is a stub */\n\n\n function sheet_to_rtf(ws\n /*:Worksheet*/\n\n /*::, opts*/\n )\n /*:string*/\n {\n var o = [\"{\\\\rtf1\\\\ansi\"];\n var r = safe_decode_range(ws['!ref']),\n cell\n /*:Cell*/\n ;\n var dense = Array.isArray(ws);\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n o.push(\"\\\\trowd\\\\trautofit1\");\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n o.push(\"\\\\cellx\" + (C + 1));\n }\n\n o.push(\"\\\\pard\\\\intbl\");\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({\n r: R,\n c: C\n });\n cell = dense ? (ws[R] || [])[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) continue;\n o.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n o.push(\"\\\\cell\");\n }\n\n o.push(\"\\\\pard\\\\intbl\\\\row\");\n }\n\n return o.join(\"\") + \"}\";\n }\n\n return {\n to_workbook: rtf_to_workbook,\n to_sheet: rtf_to_sheet,\n from_sheet: sheet_to_rtf\n };\n}();\n\nfunction hex2RGB(h) {\n var o = h.slice(h[0] === \"#\" ? 1 : 0).slice(0, 6);\n return [parseInt(o.slice(0, 2), 16), parseInt(o.slice(2, 4), 16), parseInt(o.slice(4, 6), 16)];\n}\n\nfunction rgb2Hex(rgb) {\n for (var i = 0, o = 1; i != 3; ++i) {\n o = o * 256 + (rgb[i] > 255 ? 255 : rgb[i] < 0 ? 0 : rgb[i]);\n }\n\n return o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n var R = rgb[0] / 255,\n G = rgb[1] / 255,\n B = rgb[2] / 255;\n var M = Math.max(R, G, B),\n m = Math.min(R, G, B),\n C = M - m;\n if (C === 0) return [0, 0, R];\n var H6 = 0,\n S = 0,\n L2 = M + m;\n S = C / (L2 > 1 ? 2 - L2 : L2);\n\n switch (M) {\n case R:\n H6 = ((G - B) / C + 6) % 6;\n break;\n\n case G:\n H6 = (B - R) / C + 2;\n break;\n\n case B:\n H6 = (R - G) / C + 4;\n break;\n }\n\n return [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl) {\n var H = hsl[0],\n S = hsl[1],\n L = hsl[2];\n var C = S * 2 * (L < 0.5 ? L : 1 - L),\n m = L - C / 2;\n var rgb = [m, m, m],\n h6 = 6 * H;\n var X;\n if (S !== 0) switch (h6 | 0) {\n case 0:\n case 6:\n X = C * h6;\n rgb[0] += C;\n rgb[1] += X;\n break;\n\n case 1:\n X = C * (2 - h6);\n rgb[0] += X;\n rgb[1] += C;\n break;\n\n case 2:\n X = C * (h6 - 2);\n rgb[1] += C;\n rgb[2] += X;\n break;\n\n case 3:\n X = C * (4 - h6);\n rgb[1] += X;\n rgb[2] += C;\n break;\n\n case 4:\n X = C * (h6 - 4);\n rgb[2] += C;\n rgb[0] += X;\n break;\n\n case 5:\n X = C * (6 - h6);\n rgb[2] += X;\n rgb[0] += C;\n break;\n }\n\n for (var i = 0; i != 3; ++i) {\n rgb[i] = Math.round(rgb[i] * 255);\n }\n\n return rgb;\n}\n/* 18.8.3 bgColor tint algorithm */\n\n\nfunction rgb_tint(hex, tint) {\n if (tint === 0) return hex;\n var hsl = rgb2HSL(hex2RGB(hex));\n if (tint < 0) hsl[2] = hsl[2] * (1 + tint);else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n return rgb2Hex(hsl2RGB(hsl));\n}\n/* 18.3.1.13 width calculations */\n\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\n\n\nvar DEF_MDW = 6,\n MAX_MDW = 15,\n MIN_MDW = 1,\n MDW = DEF_MDW;\n\nfunction width2px(width) {\n return Math.floor((width + Math.round(128 / MDW) / 256) * MDW);\n}\n\nfunction px2char(px) {\n return Math.floor((px - 5) / MDW * 100 + 0.5) / 100;\n}\n\nfunction char2width(chr) {\n return Math.round((chr * MDW + 5) / MDW * 256) / 256;\n} //function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\n\n\nfunction cycle_width(collw) {\n return char2width(px2char(width2px(collw)));\n}\n/* XLSX/XLSB/XLS specify width in units of MDW */\n\n\nfunction find_mdw_colw(collw) {\n var delta = Math.abs(collw - cycle_width(collw)),\n _MDW = MDW;\n if (delta > 0.005) for (MDW = MIN_MDW; MDW < MAX_MDW; ++MDW) {\n if (Math.abs(collw - cycle_width(collw)) <= delta) {\n delta = Math.abs(collw - cycle_width(collw));\n _MDW = MDW;\n }\n }\n MDW = _MDW;\n}\n/* XLML specifies width in terms of pixels */\n\n/*function find_mdw_wpx(wpx) {\n\tvar delta = Infinity, guess = 0, _MDW = MIN_MDW;\n\tfor(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\n\nfunction process_col(coll\n/*:ColInfo*/\n) {\n if (coll.width) {\n coll.wpx = width2px(coll.width);\n coll.wch = px2char(coll.wpx);\n coll.MDW = MDW;\n } else if (coll.wpx) {\n coll.wch = px2char(coll.wpx);\n coll.width = char2width(coll.wch);\n coll.MDW = MDW;\n } else if (typeof coll.wch == 'number') {\n coll.width = char2width(coll.wch);\n coll.wpx = width2px(coll.width);\n coll.MDW = MDW;\n }\n\n if (coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96,\n PPI = DEF_PPI;\n\nfunction px2pt(px) {\n return px * 96 / PPI;\n}\n\nfunction pt2px(pt) {\n return pt * PPI / 96;\n}\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\n\n\nvar XLMLPatternTypeMap = {\n \"None\": \"none\",\n \"Solid\": \"solid\",\n \"Gray50\": \"mediumGray\",\n \"Gray75\": \"darkGray\",\n \"Gray25\": \"lightGray\",\n \"HorzStripe\": \"darkHorizontal\",\n \"VertStripe\": \"darkVertical\",\n \"ReverseDiagStripe\": \"darkDown\",\n \"DiagStripe\": \"darkUp\",\n \"DiagCross\": \"darkGrid\",\n \"ThickDiagCross\": \"darkTrellis\",\n \"ThinHorzStripe\": \"lightHorizontal\",\n \"ThinVertStripe\": \"lightVertical\",\n \"ThinReverseDiagStripe\": \"lightDown\",\n \"ThinHorzCross\": \"lightGrid\"\n};\n/* 18.8.5 borders CT_Borders */\n\nfunction parse_borders(t, styles, themes, opts) {\n styles.Borders = [];\n var border = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.4 border CT_Border */\n\n case '':\n case '':\n border =\n /*::(*/\n {}\n /*:: :any)*/\n ;\n if (y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n if (y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n styles.Borders.push(border);\n break;\n\n case '':\n break;\n\n /* note: not in spec, appears to be CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* note: not in spec, appears to be CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.43 top CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.6 bottom CT_BorderPr */\n\n case '':\n break;\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.13 diagonal CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.25 horizontal CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.44 vertical CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.37 start CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.16 end CT_BorderPr */\n\n case '':\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.? color CT_Color */\n\n case '':\n break;\n\n case '':\n case '':\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n }\n\n }\n });\n}\n/* 18.8.21 fills CT_Fills */\n\n\nfunction parse_fills(t, styles, themes, opts) {\n styles.Fills = [];\n var fill = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.20 fill CT_Fill */\n\n case '':\n case '':\n fill = {};\n styles.Fills.push(fill);\n break;\n\n case '':\n break;\n\n /* 18.8.24 gradientFill CT_GradientFill */\n\n case '':\n break;\n\n case '':\n styles.Fills.push(fill);\n fill = {};\n break;\n\n /* 18.8.32 patternFill CT_PatternFill */\n\n case '':\n if (y.patternType) fill.patternType = y.patternType;\n break;\n\n case '':\n case '':\n break;\n\n /* 18.8.3 bgColor CT_Color */\n\n case '':\n case '':\n break;\n\n /* 18.8.19 fgColor CT_Color */\n\n case '':\n case '':\n break;\n\n /* 18.8.38 stop CT_GradientStop */\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.8.? color CT_Color */\n\n case '':\n break;\n\n case '':\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n }\n\n }\n });\n}\n/* 18.8.23 fonts CT_Fonts */\n\n\nfunction parse_fonts(t, styles, themes, opts) {\n styles.Fonts = [];\n var font = {};\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n break;\n\n /* 18.8.22 font CT_Font */\n\n case '':\n break;\n\n case '':\n case '':\n styles.Fonts.push(font);\n font = {};\n break;\n\n /* 18.8.29 name CT_FontName */\n\n case '':\n case '':\n break;\n\n /* 18.8.2 b CT_BooleanProperty */\n\n case '':\n font.bold = 1;\n break;\n\n /* 18.8.26 i CT_BooleanProperty */\n\n case '':\n font.italic = 1;\n break;\n\n /* 18.4.13 u CT_UnderlineProperty */\n\n case '':\n font.underline = 1;\n break;\n\n /* 18.4.10 strike CT_BooleanProperty */\n\n case '':\n font.strike = 1;\n break;\n\n /* 18.4.2 outline CT_BooleanProperty */\n\n case '':\n font.outline = 1;\n break;\n\n /* 18.8.36 shadow CT_BooleanProperty */\n\n case '':\n font.shadow = 1;\n break;\n\n /* 18.8.12 condense CT_BooleanProperty */\n\n case '':\n font.condense = 1;\n break;\n\n /* 18.8.17 extend CT_BooleanProperty */\n\n case '':\n font.extend = 1;\n break;\n\n /* 18.4.11 sz CT_FontSize */\n\n case '':\n case '':\n break;\n\n /* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\n case '':\n case '':\n break;\n\n /* 18.8.18 family CT_FontFamily */\n\n case '':\n case '':\n break;\n\n /* 18.8.35 scheme CT_FontScheme */\n\n case '':\n case '':\n break;\n\n /* 18.4.1 charset CT_IntProperty */\n\n case '':\n case '':\n break;\n\n /* note: sometimes mc:AlternateContent appears bare */\n\n case '':\n pass = false;\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n }\n\n }\n });\n}\n/* 18.8.31 numFmts CT_NumFmts */\n\n\nfunction parse_numFmts(t, styles, opts) {\n styles.NumberFmt = [];\n var k\n /*Array*/\n = keys(table_fmt)\n /*:any*/\n ;\n\n for (var i = 0; i < k.length; ++i) {\n styles.NumberFmt[k[i]] = table_fmt[k[i]];\n }\n\n var m = t[0].match(tagregex);\n if (!m) return;\n\n for (i = 0; i < m.length; ++i) {\n var y = parsexmltag(m[i]);\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n case '':\n break;\n\n case ' 0) {\n if (j > 0x188) {\n for (j = 0x188; j > 0x3c; --j) {\n if (styles.NumberFmt[j] == null) break;\n }\n\n styles.NumberFmt[j] = f;\n }\n\n SSF_load(f, j);\n }\n }\n break;\n\n case '':\n break;\n\n default:\n if (opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n }\n }\n}\n\nfunction write_numFmts(NF\n/*:{[n:number|string]:string}*/\n\n/*::, opts*/\n) {\n var o = [\"\"];\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) o[o.length] = writextag('numFmt', null, {\n numFmtId: i,\n formatCode: escapexml(NF[i])\n });\n }\n });\n if (o.length === 1) return \"\";\n o[o.length] = \"\";\n o[0] = writextag('numFmts', null, {\n count: o.length - 2\n }).replace(\"/>\", \">\");\n return o.join(\"\");\n}\n/* 18.8.10 cellXfs CT_CellXfs */\n\n\nvar cellXF_uint = [\"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\"];\nvar cellXF_bool = [\"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\"];\n\nfunction parse_cellXfs(t, styles, opts) {\n styles.CellXf = [];\n var xf;\n var pass = false;\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x),\n i = 0;\n\n switch (strip_ns(y[0])) {\n case '':\n case '':\n case '':\n break;\n\n /* 18.8.45 xf CT_Xf */\n\n case '':\n xf = y;\n delete xf[0];\n\n for (i = 0; i < cellXF_uint.length; ++i) {\n if (xf[cellXF_uint[i]]) xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n }\n\n for (i = 0; i < cellXF_bool.length; ++i) {\n if (xf[cellXF_bool[i]]) xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n }\n\n if (styles.NumberFmt && xf.numFmtId > 0x188) {\n for (i = 0x188; i > 0x3c; --i) {\n if (styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) {\n xf.numFmtId = i;\n break;\n }\n }\n }\n\n styles.CellXf.push(xf);\n break;\n\n case '':\n break;\n\n /* 18.8.1 alignment CT_CellAlignment */\n\n case '':\n var alignment = {};\n if (y.vertical) alignment.vertical = y.vertical;\n if (y.horizontal) alignment.horizontal = y.horizontal;\n if (y.textRotation != null) alignment.textRotation = y.textRotation;\n if (y.indent) alignment.indent = y.indent;\n if (y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n xf.alignment = alignment;\n break;\n\n case '':\n break;\n\n /* 18.8.33 protection CT_CellProtection */\n\n case '':\n case '':\n break;\n\n /* note: sometimes mc:AlternateContent appears bare */\n\n case '':\n pass = false;\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n break;\n\n case '':\n pass = false;\n break;\n\n default:\n if (opts && opts.WTF) {\n if (!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n }\n\n }\n });\n}\n\nfunction write_cellXfs(cellXfs)\n/*:string*/\n{\n var o\n /*:Array*/\n = [];\n o[o.length] = writextag('cellXfs', null);\n cellXfs.forEach(function (c) {\n o[o.length] = writextag('xf', null, c);\n });\n o[o.length] = \"\";\n if (o.length === 2) return \"\";\n o[0] = writextag('cellXfs', null, {\n count: o.length - 2\n }).replace(\"/>\", \">\");\n return o.join(\"\");\n}\n/* 18.8 Styles CT_Stylesheet*/\n\n\nvar parse_sty_xml = /*#__PURE__*/function make_pstyx() {\n var numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\n var cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\n var fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\n var fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\n var bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n return function parse_sty_xml(data, themes, opts) {\n var styles = {};\n if (!data) return styles;\n data = data.replace(//mg, \"\").replace(//gm, \"\");\n /* 18.8.39 styleSheet CT_Stylesheet */\n\n var t;\n /* 18.8.31 numFmts CT_NumFmts ? */\n\n if (t = data.match(numFmtRegex)) parse_numFmts(t, styles, opts);\n /* 18.8.23 fonts CT_Fonts ? */\n\n if (t = data.match(fontsRegex)) parse_fonts(t, styles, themes, opts);\n /* 18.8.21 fills CT_Fills ? */\n\n if (t = data.match(fillsRegex)) parse_fills(t, styles, themes, opts);\n /* 18.8.5 borders CT_Borders ? */\n\n if (t = data.match(bordersRegex)) parse_borders(t, styles, themes, opts);\n /* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\n /* 18.8.8 cellStyles CT_CellStyles ? */\n\n /* 18.8.10 cellXfs CT_CellXfs ? */\n\n if (t = data.match(cellXfRegex)) parse_cellXfs(t, styles, opts);\n /* 18.8.15 dxfs CT_Dxfs ? */\n\n /* 18.8.42 tableStyles CT_TableStyles ? */\n\n /* 18.8.11 colors CT_Colors ? */\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n return styles;\n };\n}();\n\nfunction write_sty_xml(wb\n/*:Workbook*/\n, opts)\n/*:string*/\n{\n var o = [XML_HEADER, writextag('styleSheet', null, {\n 'xmlns': XMLNS_main[0],\n 'xmlns:vt': XMLNS.vt\n })],\n w;\n if (wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n if (w = write_cellXfs(opts.cellXfs)) o[o.length] = w;\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\n\n\nfunction parse_BrtFmt(data, length\n/*:number*/\n) {\n var numFmtId = data.read_shift(2);\n var stFmtCode = parse_XLWideString(data, length - 2);\n return [numFmtId, stFmtCode];\n}\n\nfunction write_BrtFmt(i\n/*:number*/\n, f\n/*:string*/\n, o) {\n if (!o) o = new_buf(6 + 4 * f.length);\n o.write_shift(2, i);\n write_XLWideString(f, o);\n var out = o.length > o.l ? o.slice(0, o.l) : o;\n if (o.l == null) o.l = o.length;\n return out;\n}\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\n\n\nfunction parse_BrtFont(data, length\n/*:number*/\n, opts) {\n var out = {}\n /*:any*/\n ;\n out.sz = data.read_shift(2) / 20;\n var grbit = parse_FontFlags(data, 2, opts);\n if (grbit.fItalic) out.italic = 1;\n if (grbit.fCondense) out.condense = 1;\n if (grbit.fExtend) out.extend = 1;\n if (grbit.fShadow) out.shadow = 1;\n if (grbit.fOutline) out.outline = 1;\n if (grbit.fStrikeout) out.strike = 1;\n var bls = data.read_shift(2);\n if (bls === 0x02BC) out.bold = 1;\n\n switch (data.read_shift(2)) {\n /* case 0: out.vertAlign = \"baseline\"; break; */\n case 1:\n out.vertAlign = \"superscript\";\n break;\n\n case 2:\n out.vertAlign = \"subscript\";\n break;\n }\n\n var underline = data.read_shift(1);\n if (underline != 0) out.underline = underline;\n var family = data.read_shift(1);\n if (family > 0) out.family = family;\n var bCharSet = data.read_shift(1);\n if (bCharSet > 0) out.charset = bCharSet;\n data.l++;\n out.color = parse_BrtColor(data, 8);\n\n switch (data.read_shift(1)) {\n /* case 0: out.scheme = \"none\": break; */\n case 1:\n out.scheme = \"major\";\n break;\n\n case 2:\n out.scheme = \"minor\";\n break;\n }\n\n out.name = parse_XLWideString(data, length - 21);\n return out;\n}\n\nfunction write_BrtFont(font\n/*:any*/\n, o) {\n if (!o) o = new_buf(25 + 4 * 32);\n o.write_shift(2, font.sz * 20);\n write_FontFlags(font, o);\n o.write_shift(2, font.bold ? 0x02BC : 0x0190);\n var sss = 0;\n if (font.vertAlign == \"superscript\") sss = 1;else if (font.vertAlign == \"subscript\") sss = 2;\n o.write_shift(2, sss);\n o.write_shift(1, font.underline || 0);\n o.write_shift(1, font.family || 0);\n o.write_shift(1, font.charset || 0);\n o.write_shift(1, 0);\n write_BrtColor(font.color, o);\n var scheme = 0;\n if (font.scheme == \"major\") scheme = 1;\n if (font.scheme == \"minor\") scheme = 2;\n o.write_shift(1, scheme);\n write_XLWideString(font.name, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.650 BrtFill */\n\n\nvar XLSBFillPTNames = [\"none\", \"solid\", \"mediumGray\", \"darkGray\", \"lightGray\", \"darkHorizontal\", \"darkVertical\", \"darkDown\", \"darkUp\", \"darkGrid\", \"darkTrellis\", \"lightHorizontal\", \"lightVertical\", \"lightDown\", \"lightUp\", \"lightGrid\", \"lightTrellis\", \"gray125\", \"gray0625\"];\nvar rev_XLSBFillPTNames\n/*:EvertNumType*/\n;\n/* TODO: gradient fill representation */\n\nvar parse_BrtFill = parsenoop;\n\nfunction write_BrtFill(fill, o) {\n if (!o) o = new_buf(4 * 3 + 8 * 7 + 16 * 1);\n if (!rev_XLSBFillPTNames) rev_XLSBFillPTNames = evert(XLSBFillPTNames)\n /*:any*/\n ;\n var fls\n /*:number*/\n = rev_XLSBFillPTNames[fill.patternType];\n if (fls == null) fls = 0x28;\n o.write_shift(4, fls);\n var j = 0;\n\n if (fls != 0x28) {\n /* TODO: custom FG Color */\n write_BrtColor({\n auto: 1\n }, o);\n /* TODO: custom BG Color */\n\n write_BrtColor({\n auto: 1\n }, o);\n\n for (; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n } else {\n for (; j < 4; ++j) {\n o.write_shift(4, 0);\n }\n\n for (; j < 12; ++j) {\n o.write_shift(4, 0);\n }\n /* TODO */\n\n /* iGradientType */\n\n /* xnumDegree */\n\n /* xnumFillToLeft */\n\n /* xnumFillToRight */\n\n /* xnumFillToTop */\n\n /* xnumFillToBottom */\n\n /* cNumStop */\n\n /* xfillGradientStop */\n\n }\n\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.824 BrtXF */\n\n\nfunction parse_BrtXF(data, length\n/*:number*/\n) {\n var tgt = data.l + length;\n var ixfeParent = data.read_shift(2);\n var ifmt = data.read_shift(2);\n data.l = tgt;\n return {\n ixfe: ixfeParent,\n numFmtId: ifmt\n };\n}\n\nfunction write_BrtXF(data, ixfeP, o) {\n if (!o) o = new_buf(16);\n o.write_shift(2, ixfeP || 0);\n o.write_shift(2, data.numFmtId || 0);\n o.write_shift(2, 0);\n /* iFont */\n\n o.write_shift(2, 0);\n /* iFill */\n\n o.write_shift(2, 0);\n /* ixBorder */\n\n o.write_shift(1, 0);\n /* trot */\n\n o.write_shift(1, 0);\n /* indent */\n\n var flow = 0;\n o.write_shift(1, flow);\n /* flags */\n\n o.write_shift(1, 0);\n /* flags */\n\n o.write_shift(1, 0);\n /* xfGrbitAtr */\n\n o.write_shift(1, 0);\n return o;\n}\n/* [MS-XLSB] 2.5.4 Blxf TODO */\n\n\nfunction write_Blxf(data, o) {\n if (!o) o = new_buf(10);\n o.write_shift(1, 0);\n /* dg */\n\n o.write_shift(1, 0);\n o.write_shift(4, 0);\n /* color */\n\n o.write_shift(4, 0);\n /* color */\n\n return o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\n\n\nvar parse_BrtBorder = parsenoop;\n\nfunction write_BrtBorder(border, o) {\n if (!o) o = new_buf(51);\n o.write_shift(1, 0);\n /* diagonal */\n\n write_Blxf(null, o);\n /* top */\n\n write_Blxf(null, o);\n /* bottom */\n\n write_Blxf(null, o);\n /* left */\n\n write_Blxf(null, o);\n /* right */\n\n write_Blxf(null, o);\n /* diag */\n\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\n\n\nfunction write_BrtStyle(style, o) {\n if (!o) o = new_buf(12 + 4 * 10);\n o.write_shift(4, style.xfId);\n o.write_shift(2, 1);\n o.write_shift(1, +style.builtinId);\n o.write_shift(1, 0);\n /* iLevel */\n\n write_XLNullableWideString(style.name || \"\", o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\n\n\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n var o = new_buf(4 + 256 * 2 * 4);\n o.write_shift(4, cnt);\n write_XLNullableWideString(defTableStyle, o);\n write_XLNullableWideString(defPivotStyle, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.1.7.50 Styles */\n\n\nfunction parse_sty_bin(data, themes, opts) {\n var styles = {};\n styles.NumberFmt = []\n /*:any*/\n ;\n\n for (var y in table_fmt) {\n styles.NumberFmt[y] = table_fmt[y];\n }\n\n styles.CellXf = [];\n styles.Fonts = [];\n var state\n /*:Array*/\n = [];\n var pass = false;\n recordhopper(data, function hopper_sty(val, R, RT) {\n switch (RT) {\n case 0x002C:\n /* BrtFmt */\n styles.NumberFmt[val[0]] = val[1];\n SSF_load(val[1], val[0]);\n break;\n\n case 0x002B:\n /* BrtFont */\n styles.Fonts.push(val);\n\n if (val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n val.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n }\n\n break;\n\n case 0x0401:\n /* BrtKnownFonts */\n break;\n\n case 0x002D:\n /* BrtFill */\n break;\n\n case 0x002E:\n /* BrtBorder */\n break;\n\n case 0x002F:\n /* BrtXF */\n if (state[state.length - 1] == 0x0269\n /* BrtBeginCellXFs */\n ) {\n styles.CellXf.push(val);\n }\n\n break;\n\n case 0x0030:\n /* BrtStyle */\n\n case 0x01FB:\n /* BrtDXF */\n\n case 0x023C:\n /* BrtMRUColor */\n\n case 0x01DB:\n /* BrtIndexedColor */\n break;\n\n case 0x0493:\n /* BrtDXF14 */\n\n case 0x0836:\n /* BrtDXF15 */\n\n case 0x046A:\n /* BrtSlicerStyleElement */\n\n case 0x0200:\n /* BrtTableStyleElement */\n\n case 0x082F:\n /* BrtTimelineStyleElement */\n\n case 0x0C00:\n /* BrtUid */\n break;\n\n case 0x0023:\n /* BrtFRTBegin */\n pass = true;\n break;\n\n case 0x0024:\n /* BrtFRTEnd */\n pass = false;\n break;\n\n case 0x0025:\n /* BrtACBegin */\n state.push(RT);\n pass = true;\n break;\n\n case 0x0026:\n /* BrtACEnd */\n state.pop();\n pass = false;\n break;\n\n default:\n if (R.T > 0) state.push(RT);else if (R.T < 0) state.pop();else if (!pass || opts.WTF && state[state.length - 1] != 0x0025\n /* BrtACBegin */\n ) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n }\n });\n return styles;\n}\n\nfunction write_FMTS_bin(ba, NF\n/*:?SSFTable*/\n) {\n if (!NF) return;\n var cnt = 0;\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n /*:: if(!NF) return; */\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) ++cnt;\n }\n });\n if (cnt == 0) return;\n write_record(ba, 0x0267\n /* BrtBeginFmts */\n , write_UInt32LE(cnt));\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n /*:: if(!NF) return; */\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) write_record(ba, 0x002C\n /* BrtFmt */\n , write_BrtFmt(i, NF[i]));\n }\n });\n write_record(ba, 0x0268\n /* BrtEndFmts */\n );\n}\n\nfunction write_FONTS_bin(ba\n/*::, data*/\n) {\n var cnt = 1;\n if (cnt == 0) return;\n write_record(ba, 0x0263\n /* BrtBeginFonts */\n , write_UInt32LE(cnt));\n write_record(ba, 0x002B\n /* BrtFont */\n , write_BrtFont({\n sz: 12,\n color: {\n theme: 1\n },\n name: \"Calibri\",\n family: 2,\n scheme: \"minor\"\n }));\n /* 1*65491BrtFont [ACFONTS] */\n\n write_record(ba, 0x0264\n /* BrtEndFonts */\n );\n}\n\nfunction write_FILLS_bin(ba\n/*::, data*/\n) {\n var cnt = 2;\n if (cnt == 0) return;\n write_record(ba, 0x025B\n /* BrtBeginFills */\n , write_UInt32LE(cnt));\n write_record(ba, 0x002D\n /* BrtFill */\n , write_BrtFill({\n patternType: \"none\"\n }));\n write_record(ba, 0x002D\n /* BrtFill */\n , write_BrtFill({\n patternType: \"gray125\"\n }));\n /* 1*65431BrtFill */\n\n write_record(ba, 0x025C\n /* BrtEndFills */\n );\n}\n\nfunction write_BORDERS_bin(ba\n/*::, data*/\n) {\n var cnt = 1;\n if (cnt == 0) return;\n write_record(ba, 0x0265\n /* BrtBeginBorders */\n , write_UInt32LE(cnt));\n write_record(ba, 0x002E\n /* BrtBorder */\n , write_BrtBorder({}));\n /* 1*65430BrtBorder */\n\n write_record(ba, 0x0266\n /* BrtEndBorders */\n );\n}\n\nfunction write_CELLSTYLEXFS_bin(ba\n/*::, data*/\n) {\n var cnt = 1;\n write_record(ba, 0x0272\n /* BrtBeginCellStyleXFs */\n , write_UInt32LE(cnt));\n write_record(ba, 0x002F\n /* BrtXF */\n , write_BrtXF({\n numFmtId: 0,\n fontId: 0,\n fillId: 0,\n borderId: 0\n }, 0xFFFF));\n /* 1*65430(BrtXF *FRT) */\n\n write_record(ba, 0x0273\n /* BrtEndCellStyleXFs */\n );\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n write_record(ba, 0x0269\n /* BrtBeginCellXFs */\n , write_UInt32LE(data.length));\n data.forEach(function (c) {\n write_record(ba, 0x002F\n /* BrtXF */\n , write_BrtXF(c, 0));\n });\n /* 1*65430(BrtXF *FRT) */\n\n write_record(ba, 0x026A\n /* BrtEndCellXFs */\n );\n}\n\nfunction write_STYLES_bin(ba\n/*::, data*/\n) {\n var cnt = 1;\n write_record(ba, 0x026B\n /* BrtBeginStyles */\n , write_UInt32LE(cnt));\n write_record(ba, 0x0030\n /* BrtStyle */\n , write_BrtStyle({\n xfId: 0,\n builtinId: 0,\n name: \"Normal\"\n }));\n /* 1*65430(BrtStyle *FRT) */\n\n write_record(ba, 0x026C\n /* BrtEndStyles */\n );\n}\n\nfunction write_DXFS_bin(ba\n/*::, data*/\n) {\n var cnt = 0;\n write_record(ba, 0x01F9\n /* BrtBeginDXFs */\n , write_UInt32LE(cnt));\n /* *2147483647(BrtDXF *FRT) */\n\n write_record(ba, 0x01FA\n /* BrtEndDXFs */\n );\n}\n\nfunction write_TABLESTYLES_bin(ba\n/*::, data*/\n) {\n var cnt = 0;\n write_record(ba, 0x01FC\n /* BrtBeginTableStyles */\n , write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n /* *TABLESTYLE */\n\n write_record(ba, 0x01FD\n /* BrtEndTableStyles */\n );\n}\n\nfunction\n /*::ba, data*/\nwrite_COLORPALETTE_bin() {\n return;\n /* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n/* [MS-XLSB] 2.1.7.50 Styles */\n\n\nfunction write_sty_bin(wb, opts) {\n var ba = buf_array();\n write_record(ba, 0x0116\n /* BrtBeginStyleSheet */\n );\n write_FMTS_bin(ba, wb.SSF);\n write_FONTS_bin(ba, wb);\n write_FILLS_bin(ba, wb);\n write_BORDERS_bin(ba, wb);\n write_CELLSTYLEXFS_bin(ba, wb);\n write_CELLXFS_bin(ba, opts.cellXfs);\n write_STYLES_bin(ba, wb);\n write_DXFS_bin(ba, wb);\n write_TABLESTYLES_bin(ba, wb);\n write_COLORPALETTE_bin(ba, wb);\n /* FRTSTYLESHEET*/\n\n write_record(ba, 0x0117\n /* BrtEndStyleSheet */\n );\n return ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\n\n\nvar XLSXThemeClrScheme = ['', '', '', '', '', '', '', '', '', '', '', ''];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\n\nfunction parse_clrScheme(t, themes, opts) {\n themes.themeElements.clrScheme = [];\n var color = {};\n (t[0].match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0]) {\n /* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n case '':\n break;\n\n /* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n case '':\n if (y[0].charAt(1) === '/') {\n themes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n color = {};\n } else {\n color.name = y[0].slice(3, y[0].length - 1);\n }\n\n break;\n\n default:\n if (opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n }\n });\n}\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\n\n\nfunction\n /*::t, themes, opts*/\nparse_fontScheme() {}\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\n\n\nfunction\n /*::t, themes, opts*/\nparse_fmtScheme() {}\n\nvar clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n/* 20.1.6.10 themeElements CT_BaseStyles */\n\nfunction parse_themeElements(data, themes, opts) {\n themes.themeElements = {};\n var t;\n [\n /* clrScheme CT_ColorScheme */\n ['clrScheme', clrsregex, parse_clrScheme],\n /* fontScheme CT_FontScheme */\n ['fontScheme', fntsregex, parse_fontScheme],\n /* fmtScheme CT_StyleMatrix */\n ['fmtScheme', fmtsregex, parse_fmtScheme]].forEach(function (m) {\n if (!(t = data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n m[2](t, themes, opts);\n });\n}\n\nvar themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n/* 14.2.7 Theme Part */\n\nfunction parse_theme_xml(data\n/*:string*/\n, opts) {\n /* 20.1.6.9 theme CT_OfficeStyleSheet */\n if (!data || data.length === 0) data = write_theme();\n var t;\n var themes = {};\n /* themeElements CT_BaseStyles */\n\n if (!(t = data.match(themeltregex))) throw new Error('themeElements not found in theme');\n parse_themeElements(t[0], themes, opts);\n themes.raw = data;\n return themes;\n}\n\nfunction write_theme(Themes, opts)\n/*:string*/\n{\n if (opts && opts.themeXLSX) return opts.themeXLSX;\n if (Themes && typeof Themes.raw == \"string\") return Themes.raw;\n var o = [XML_HEADER];\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n o[o.length] = '';\n return o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\n\n\nfunction parse_Theme(blob, length, opts) {\n var end = blob.l + length;\n var dwThemeVersion = blob.read_shift(4);\n if (dwThemeVersion === 124226) return;\n\n if (!opts.cellStyles) {\n blob.l = end;\n return;\n }\n\n var data = blob.slice(blob.l);\n blob.l = end;\n var zip;\n\n try {\n zip = zip_read(data, {\n type: \"array\"\n });\n } catch (e) {\n return;\n }\n\n var themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n if (!themeXML) return;\n return parse_theme_xml(themeXML, opts);\n}\n/* 2.5.49 */\n\n\nfunction parse_ColorTheme(blob\n/*::, length*/\n) {\n return blob.read_shift(4);\n}\n/* 2.5.155 */\n\n\nfunction parse_FullColorExt(blob\n/*::, length*/\n) {\n var o = {};\n o.xclrType = blob.read_shift(2);\n o.nTintShade = blob.read_shift(2);\n\n switch (o.xclrType) {\n case 0:\n blob.l += 4;\n break;\n\n case 1:\n o.xclrValue = parse_IcvXF(blob, 4);\n break;\n\n case 2:\n o.xclrValue = parse_LongRGBA(blob, 4);\n break;\n\n case 3:\n o.xclrValue = parse_ColorTheme(blob, 4);\n break;\n\n case 4:\n blob.l += 4;\n break;\n }\n\n blob.l += 8;\n return o;\n}\n/* 2.5.164 TODO: read 7 bits*/\n\n\nfunction parse_IcvXF(blob, length) {\n return parsenoop(blob, length);\n}\n/* 2.5.280 */\n\n\nfunction parse_XFExtGradient(blob, length) {\n return parsenoop(blob, length);\n}\n/* [MS-XLS] 2.5.108 */\n\n\nfunction parse_ExtProp(blob\n/*::, length*/\n)\n/*:Array*/\n{\n var extType = blob.read_shift(2);\n var cb = blob.read_shift(2) - 4;\n var o = [extType];\n\n switch (extType) {\n case 0x04:\n case 0x05:\n case 0x07:\n case 0x08:\n case 0x09:\n case 0x0A:\n case 0x0B:\n case 0x0D:\n o[1] = parse_FullColorExt(blob, cb);\n break;\n\n case 0x06:\n o[1] = parse_XFExtGradient(blob, cb);\n break;\n\n case 0x0E:\n case 0x0F:\n o[1] = blob.read_shift(cb === 1 ? 1 : 2);\n break;\n\n default:\n throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n }\n\n return o;\n}\n/* 2.4.355 */\n\n\nfunction parse_XFExt(blob, length) {\n var end = blob.l + length;\n blob.l += 2;\n var ixfe = blob.read_shift(2);\n blob.l += 2;\n var cexts = blob.read_shift(2);\n var ext\n /*:AOA*/\n = [];\n\n while (cexts-- > 0) {\n ext.push(parse_ExtProp(blob, end - blob.l));\n }\n\n return {\n ixfe: ixfe,\n ext: ext\n };\n}\n/* xf is an XF, see parse_XFExt for xfext */\n\n\nfunction update_xfext(xf, xfext) {\n xfext.forEach(function (xfe) {\n switch (xfe[0]) {\n /* 2.5.108 extPropData */\n case 0x04:\n break;\n\n /* foreground color */\n\n case 0x05:\n break;\n\n /* background color */\n\n case 0x06:\n break;\n\n /* gradient fill */\n\n case 0x07:\n break;\n\n /* top cell border color */\n\n case 0x08:\n break;\n\n /* bottom cell border color */\n\n case 0x09:\n break;\n\n /* left cell border color */\n\n case 0x0a:\n break;\n\n /* right cell border color */\n\n case 0x0b:\n break;\n\n /* diagonal cell border color */\n\n case 0x0d:\n /* text color */\n break;\n\n case 0x0e:\n break;\n\n /* font scheme */\n\n case 0x0f:\n break;\n\n /* indentation level */\n }\n });\n}\n\nfunction parse_BrtMdtinfo(data, length) {\n return {\n flags: data.read_shift(4),\n version: data.read_shift(4),\n name: parse_XLWideString(data, length - 8)\n };\n}\n\nfunction write_BrtMdtinfo(data) {\n var o = new_buf(12 + 2 * data.name.length);\n o.write_shift(4, data.flags);\n o.write_shift(4, data.version);\n write_XLWideString(data.name, o);\n return o.slice(0, o.l);\n}\n\nfunction parse_BrtMdb(data) {\n var out = [];\n var cnt = data.read_shift(4);\n\n while (cnt-- > 0) {\n out.push([data.read_shift(4), data.read_shift(4)]);\n }\n\n return out;\n}\n\nfunction write_BrtMdb(mdb) {\n var o = new_buf(4 + 8 * mdb.length);\n o.write_shift(4, mdb.length);\n\n for (var i = 0; i < mdb.length; ++i) {\n o.write_shift(4, mdb[i][0]);\n o.write_shift(4, mdb[i][1]);\n }\n\n return o;\n}\n\nfunction write_BrtBeginEsfmd(cnt, name) {\n var o = new_buf(8 + 2 * name.length);\n o.write_shift(4, cnt);\n write_XLWideString(name, o);\n return o.slice(0, o.l);\n}\n\nfunction parse_BrtBeginEsmdb(data) {\n data.l += 4;\n return data.read_shift(4) != 0;\n}\n\nfunction write_BrtBeginEsmdb(cnt, cm) {\n var o = new_buf(8);\n o.write_shift(4, cnt);\n o.write_shift(4, cm ? 1 : 0);\n return o;\n}\n\nfunction parse_xlmeta_bin(data, name, _opts) {\n var out = {\n Types: [],\n Cell: [],\n Value: []\n };\n var opts = _opts || {};\n var state = [];\n var pass = false;\n var metatype = 2;\n recordhopper(data, function (val, R, RT) {\n switch (RT) {\n case 335:\n out.Types.push({\n name: val.name\n });\n break;\n\n case 51:\n val.forEach(function (r) {\n if (metatype == 1) out.Cell.push({\n type: out.Types[r[0] - 1].name,\n index: r[1]\n });else if (metatype == 0) out.Value.push({\n type: out.Types[r[0] - 1].name,\n index: r[1]\n });\n });\n break;\n\n case 337:\n metatype = val ? 1 : 0;\n break;\n\n case 338:\n metatype = 2;\n break;\n\n case 35:\n state.push(RT);\n pass = true;\n break;\n\n case 36:\n state.pop();\n pass = false;\n break;\n\n default:\n if (R.T) {} else if (!pass || opts.WTF && state[state.length - 1] != 35) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n }\n });\n return out;\n}\n\nfunction write_xlmeta_bin() {\n var ba = buf_array();\n write_record(ba, 332);\n write_record(ba, 334, write_UInt32LE(1));\n write_record(ba, 335, write_BrtMdtinfo({\n name: \"XLDAPR\",\n version: 12e4,\n flags: 3496657072\n }));\n write_record(ba, 336);\n write_record(ba, 339, write_BrtBeginEsfmd(1, \"XLDAPR\"));\n write_record(ba, 52);\n write_record(ba, 35, write_UInt32LE(514));\n write_record(ba, 4096, write_UInt32LE(0));\n write_record(ba, 4097, writeuint16(1));\n write_record(ba, 36);\n write_record(ba, 53);\n write_record(ba, 340);\n write_record(ba, 337, write_BrtBeginEsmdb(1, true));\n write_record(ba, 51, write_BrtMdb([[1, 0]]));\n write_record(ba, 338);\n write_record(ba, 333);\n return ba.end();\n}\n\nfunction parse_xlmeta_xml(data, name, opts) {\n var out = {\n Types: [],\n Cell: [],\n Value: []\n };\n if (!data) return out;\n var pass = false;\n var metatype = 2;\n var lastmeta;\n data.replace(tagregex, function (x) {\n var y = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case \"\":\n break;\n\n case \"\":\n break;\n\n case \"\":\n break;\n\n case \"\":\n break;\n\n case \"\":\n break;\n\n case \"\":\n break;\n\n case \"\":\n break;\n\n case \"\":\n metatype = 2;\n break;\n\n case \"\":\n metatype = 2;\n break;\n\n case \"\":\n case \"\":\n case \"\":\n break;\n\n case \"\":\n pass = false;\n break;\n\n case \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n');\n return o.join(\"\");\n}\n/* 18.6 Calculation Chain */\n\n\nfunction parse_cc_xml(data\n/*::, name, opts*/\n)\n/*:Array*/\n{\n var d = [];\n if (!data) return d;\n var i = 1;\n (data.match(tagregex) || []).forEach(function (x) {\n var y = parsexmltag(x);\n\n switch (y[0]) {\n case '':\n case '':\n break;\n\n /* 18.6.1 c CT_CalcCell 1 */\n\n case ']*r:id=\"([^\"]*)\"/) || [\"\", \"\"])[1];\n return rels['!id'][id].Target;\n}\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\n\n\nvar _shapeid = 1024;\n\nfunction write_comments_vml(rId\n/*:number*/\n, comments) {\n var csize = [21600, 21600];\n /* L.5.2.1.2 Path Attribute */\n\n var bbox = [\"m0,0l0\", csize[1], csize[0], csize[1], csize[0], \"0xe\"].join(\",\");\n var o = [writextag(\"xml\", null, {\n 'xmlns:v': XLMLNS.v,\n 'xmlns:o': XLMLNS.o,\n 'xmlns:x': XLMLNS.x,\n 'xmlns:mv': XLMLNS.mv\n }).replace(/\\/>/, \">\"), writextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {\n 'v:ext': \"edit\",\n 'data': rId\n }), {\n 'v:ext': \"edit\"\n }), writextag(\"v:shapetype\", [writextag(\"v:stroke\", null, {\n joinstyle: \"miter\"\n }), writextag(\"v:path\", null, {\n gradientshapeok: \"t\",\n 'o:connecttype': \"rect\"\n })].join(\"\"), {\n id: \"_x0000_t202\",\n 'o:spt': 202,\n coordsize: csize.join(\",\"),\n path: bbox\n })];\n\n while (_shapeid < rId * 1000) {\n _shapeid += 1000;\n }\n\n comments.forEach(function (x) {\n var c = decode_cell(x[0]);\n var fillopts =\n /*::(*/\n {\n 'color2': \"#BEFF82\",\n 'type': \"gradient\"\n }\n /*:: :any)*/\n ;\n if (fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n var fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {\n type: \"gradientUnscaled\",\n 'v:ext': \"view\"\n }) : null;\n var fillxml = writextag('v:fill', fillparm, fillopts);\n var shadata = {\n on: \"t\",\n 'obscured': \"t\"\n }\n /*:any*/\n ;\n ++_shapeid;\n o = o.concat(['', fillxml, writextag(\"v:shadow\", null, shadata), writextag(\"v:path\", null, {\n 'o:connecttype': \"none\"\n }), '
', '', '', '',\n /* Part 4 19.4.2.3 Anchor (Anchor) */\n writetag('x:Anchor', [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(\",\")), writetag('x:AutoFill', \"False\"), writetag('x:Row', String(c.r)), writetag('x:Column', String(c.c)), x[1].hidden ? '' : '', '', '']);\n });\n o.push('');\n return o.join(\"\");\n}\n\nfunction sheet_insert_comments(sheet, comments\n/*:Array*/\n, threaded\n/*:boolean*/\n, people\n/*:?Array*/\n) {\n var dense = Array.isArray(sheet);\n var cell\n /*:Cell*/\n ;\n comments.forEach(function (comment) {\n var r = decode_cell(comment.ref);\n\n if (dense) {\n if (!sheet[r.r]) sheet[r.r] = [];\n cell = sheet[r.r][r.c];\n } else cell = sheet[comment.ref];\n\n if (!cell) {\n cell = {\n t: \"z\"\n }\n /*:any*/\n ;\n if (dense) sheet[r.r][r.c] = cell;else sheet[comment.ref] = cell;\n var range = safe_decode_range(sheet[\"!ref\"] || \"BDWGO1000001:A1\");\n if (range.s.r > r.r) range.s.r = r.r;\n if (range.e.r < r.r) range.e.r = r.r;\n if (range.s.c > r.c) range.s.c = r.c;\n if (range.e.c < r.c) range.e.c = r.c;\n var encoded = encode_range(range);\n if (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n }\n\n if (!cell.c) cell.c = [];\n var o\n /*:Comment*/\n = {\n a: comment.author,\n t: comment.t,\n r: comment.r,\n T: threaded\n };\n if (comment.h) o.h = comment.h;\n /* threaded comments always override */\n\n for (var i = cell.c.length - 1; i >= 0; --i) {\n if (!threaded && cell.c[i].T) return;\n if (threaded && !cell.c[i].T) cell.c.splice(i, 1);\n }\n\n if (threaded && people) for (i = 0; i < people.length; ++i) {\n if (o.a == people[i].id) {\n o.a = people[i].name || o.a;\n break;\n }\n }\n cell.c.push(o);\n });\n}\n/* 18.7 Comments */\n\n\nfunction parse_comments_xml(data\n/*:string*/\n, opts)\n/*:Array*/\n{\n /* 18.7.6 CT_Comments */\n if (data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n var authors\n /*:Array*/\n = [];\n var commentList\n /*:Array*/\n = [];\n var authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n if (authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function (x) {\n if (x === \"\" || x.trim() === \"\") return;\n var a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n if (a) authors.push(a[1]);\n });\n var cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n if (cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function (x) {\n if (x === \"\" || x.trim() === \"\") return;\n var cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n if (!cm) return;\n var y = parsexmltag(cm[0]);\n var comment\n /*:RawComment*/\n = {\n author: y.authorId && authors[y.authorId] || \"sheetjsghost\",\n ref: y.ref,\n guid: y.guid\n }\n /*:any*/\n ;\n var cell = decode_cell(y.ref);\n if (opts.sheetRows && opts.sheetRows <= cell.r) return;\n var textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {\n r: \"\",\n t: \"\",\n h: \"\"\n };\n comment.r = rt.r;\n if (rt.r == \"\") rt.t = rt.h = \"\";\n comment.t = (rt.t || \"\").replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n if (opts.cellHTML) comment.h = rt.h;\n commentList.push(comment);\n });\n return commentList;\n}\n\nfunction write_comments_xml(data\n/*::, opts*/\n) {\n var o = [XML_HEADER, writextag('comments', null, {\n 'xmlns': XMLNS_main[0]\n })];\n var iauthor\n /*:Array*/\n = [];\n o.push(\"\");\n data.forEach(function (x) {\n x[1].forEach(function (w) {\n var a = escapexml(w.a);\n\n if (iauthor.indexOf(a) == -1) {\n iauthor.push(a);\n o.push(\"\" + a + \"\");\n }\n\n if (w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n iauthor.push(\"tc=\" + w.ID);\n o.push(\"\" + \"tc=\" + w.ID + \"\");\n }\n });\n });\n\n if (iauthor.length == 0) {\n iauthor.push(\"SheetJ5\");\n o.push(\"SheetJ5\");\n }\n\n o.push(\"\");\n o.push(\"\");\n data.forEach(function (d) {\n /* 18.7.3 CT_Comment */\n var lastauthor = 0,\n ts = [];\n if (d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);else d[1].forEach(function (c) {\n if (c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n ts.push(c.t || \"\");\n });\n o.push('');\n if (ts.length <= 1) o.push(writetag(\"t\", escapexml(ts[0] || \"\")));else {\n /* based on Threaded Comments -> Comments projection */\n var t = \"Comment:\\n \" + ts[0] + \"\\n\";\n\n for (var i = 1; i < ts.length; ++i) {\n t += \"Reply:\\n \" + ts[i] + \"\\n\";\n }\n\n o.push(writetag(\"t\", escapexml(t)));\n }\n o.push('');\n });\n o.push(\"\");\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* [MS-XLSX] 2.1.17 */\n\n\nfunction parse_tcmnt_xml(data\n/*:string*/\n, opts)\n/*:Array*/\n{\n var out = [];\n var pass = false,\n comment = {},\n tidx = 0;\n data.replace(tagregex, function xml_tcmnt(x, idx) {\n var y\n /*:any*/\n = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n break;\n\n /* 2.6.205 threadedComment CT_ThreadedComment */\n\n case '':\n if (comment.t != null) out.push(comment);\n break;\n\n case '':\n case '':\n comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n break;\n\n /* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\n case '':\n pass = true;\n break;\n\n case '':\n pass = false;\n break;\n\n /* 2.6.202 mention CT_Mention TODO */\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '
':\n case '':\n break;\n\n /* 18.2.7 ext CT_Extension + */\n\n case '':\n pass = false;\n break;\n\n default:\n if (!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n }\n\n return x;\n });\n return out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n var o = [XML_HEADER, writextag('ThreadedComments', null, {\n 'xmlns': XMLNS.TCMNT\n }).replace(/[\\/]>/, \">\")];\n comments.forEach(function (carr) {\n var rootid = \"\";\n (carr[1] || []).forEach(function (c, idx) {\n if (!c.T) {\n delete c.ID;\n return;\n }\n\n if (c.a && people.indexOf(c.a) == -1) people.push(c.a);\n var tcopts = {\n ref: carr[0],\n id: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n };\n if (idx == 0) rootid = tcopts.id;else tcopts.parentId = rootid;\n c.ID = tcopts.id;\n if (c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n o.push(writextag('threadedComment', writetag('text', c.t || \"\"), tcopts));\n });\n });\n o.push('');\n return o.join(\"\");\n}\n/* [MS-XLSX] 2.1.18 */\n\n\nfunction parse_people_xml(data\n/*:string*/\n, opts) {\n var out = [];\n var pass = false;\n data.replace(tagregex, function xml_tcmnt(x) {\n var y\n /*:any*/\n = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n break;\n\n /* 2.6.203 person CT_Person TODO: providers */\n\n case '':\n break;\n\n /* 18.2.10 extLst CT_ExtensionList ? */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.7 ext CT_Extension + */\n\n case '':\n pass = false;\n break;\n\n default:\n if (!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n }\n\n return x;\n });\n return out;\n}\n\nfunction write_people_xml(people\n/*, opts*/\n) {\n var o = [XML_HEADER, writextag('personList', null, {\n 'xmlns': XMLNS.TCMNT,\n 'xmlns:x': XMLNS_main[0]\n }).replace(/[\\/]>/, \">\")];\n people.forEach(function (person, idx) {\n o.push(writextag('person', null, {\n displayName: person,\n id: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n userId: person,\n providerId: \"None\"\n }));\n });\n o.push(\"\");\n return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\n\n\nfunction parse_BrtBeginComment(data) {\n var out = {};\n out.iauthor = data.read_shift(4);\n var rfx = parse_UncheckedRfX(data, 16);\n out.rfx = rfx.s;\n out.ref = encode_cell(rfx.s);\n data.l += 16;\n /*var guid = parse_GUID(data); */\n\n return out;\n}\n\nfunction write_BrtBeginComment(data, o) {\n if (o == null) o = new_buf(36);\n o.write_shift(4, data[1].iauthor);\n write_UncheckedRfX(data[0]\n /*:any*/\n , o);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n return o;\n}\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\n\n\nvar parse_BrtCommentAuthor = parse_XLWideString;\n\nfunction write_BrtCommentAuthor(data) {\n return write_XLWideString(data.slice(0, 54));\n}\n/* [MS-XLSB] 2.1.7.8 Comments */\n\n\nfunction parse_comments_bin(data, opts)\n/*:Array*/\n{\n var out\n /*:Array*/\n = [];\n var authors\n /*:Array*/\n = [];\n var c = {};\n var pass = false;\n recordhopper(data, function hopper_cmnt(val, R, RT) {\n switch (RT) {\n case 0x0278:\n /* 'BrtCommentAuthor' */\n authors.push(val);\n break;\n\n case 0x027B:\n /* 'BrtBeginComment' */\n c = val;\n break;\n\n case 0x027D:\n /* 'BrtCommentText' */\n c.t = val.t;\n c.h = val.h;\n c.r = val.r;\n break;\n\n case 0x027C:\n /* 'BrtEndComment' */\n c.author = authors[c.iauthor];\n delete c\n /*:any*/\n .iauthor;\n if (opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n if (!c.t) c.t = \"\";\n delete c.rfx;\n out.push(c);\n break;\n\n case 0x0C00:\n /* 'BrtUid' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n break;\n\n default:\n if (R.T) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n }\n });\n return out;\n}\n\nfunction write_comments_bin(data\n/*::, opts*/\n) {\n var ba = buf_array();\n var iauthor\n /*:Array*/\n = [];\n write_record(ba, 0x0274\n /* BrtBeginComments */\n );\n write_record(ba, 0x0276\n /* BrtBeginCommentAuthors */\n );\n data.forEach(function (comment) {\n comment[1].forEach(function (c) {\n if (iauthor.indexOf(c.a) > -1) return;\n iauthor.push(c.a.slice(0, 54));\n write_record(ba, 0x0278\n /* BrtCommentAuthor */\n , write_BrtCommentAuthor(c.a));\n });\n });\n write_record(ba, 0x0277\n /* BrtEndCommentAuthors */\n );\n write_record(ba, 0x0279\n /* BrtBeginCommentList */\n );\n data.forEach(function (comment) {\n comment[1].forEach(function (c) {\n c.iauthor = iauthor.indexOf(c.a);\n var range = {\n s: decode_cell(comment[0]),\n e: decode_cell(comment[0])\n };\n write_record(ba, 0x027B\n /* BrtBeginComment */\n , write_BrtBeginComment([range, c]));\n if (c.t && c.t.length > 0) write_record(ba, 0x027D\n /* BrtCommentText */\n , write_BrtCommentText(c));\n write_record(ba, 0x027C\n /* BrtEndComment */\n );\n delete c.iauthor;\n });\n });\n write_record(ba, 0x027A\n /* BrtEndCommentList */\n );\n write_record(ba, 0x0275\n /* BrtEndComments */\n );\n return ba.end();\n}\n\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\n\nfunction make_vba_xls(cfb) {\n var newcfb = CFB.utils.cfb_new({\n root: \"R\"\n });\n cfb.FullPaths.forEach(function (p, i) {\n if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/)) return;\n var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n });\n return CFB.write(newcfb);\n}\n\nfunction fill_vba_xls(cfb, vba) {\n vba.FullPaths.forEach(function (p, i) {\n if (i == 0) return;\n var newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n if (newpath.slice(-1) !== \"/\") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n });\n}\n\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\n\nfunction\n /*::data:any, opts, idx:number, rels, wb, themes, styles*/\nparse_ds_bin()\n/*:Worksheet*/\n{\n return {\n '!type': 'dialog'\n };\n}\n\nfunction\n /*::data:any, opts, idx:number, rels, wb, themes, styles*/\nparse_ds_xml()\n/*:Worksheet*/\n{\n return {\n '!type': 'dialog'\n };\n}\n\nfunction\n /*::data:any, opts, idx:number, rels, wb, themes, styles*/\nparse_ms_bin()\n/*:Worksheet*/\n{\n return {\n '!type': 'macro'\n };\n}\n\nfunction\n /*::data:any, opts, idx:number, rels, wb, themes, styles*/\nparse_ms_xml()\n/*:Worksheet*/\n{\n return {\n '!type': 'macro'\n };\n}\n/* TODO: it will be useful to parse the function str */\n\n\nvar rc_to_a1 = /*#__PURE__*/function () {\n var rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n var rcbase\n /*:Cell*/\n = {\n r: 0,\n c: 0\n }\n /*:any*/\n ;\n\n function rcfunc($$, $1, $2, $3) {\n var cRel = false,\n rRel = false;\n if ($2.length == 0) rRel = true;else if ($2.charAt(0) == \"[\") {\n rRel = true;\n $2 = $2.slice(1, -1);\n }\n if ($3.length == 0) cRel = true;else if ($3.charAt(0) == \"[\") {\n cRel = true;\n $3 = $3.slice(1, -1);\n }\n var R = $2.length > 0 ? parseInt($2, 10) | 0 : 0,\n C = $3.length > 0 ? parseInt($3, 10) | 0 : 0;\n if (cRel) C += rcbase.c;else --C;\n if (rRel) R += rcbase.r;else --R;\n return $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n }\n\n return function rc_to_a1(fstr\n /*:string*/\n , base\n /*:Cell*/\n )\n /*:string*/\n {\n rcbase = base;\n return fstr.replace(rcregex, rcfunc);\n };\n}();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\n\nvar a1_to_rc = /*#__PURE__*/function () {\n return function a1_to_rc(fstr\n /*:string*/\n , base\n /*:CellAddress*/\n ) {\n return fstr.replace(crefregex, function ($0, $1, $2, $3, $4, $5) {\n var c = decode_col($3) - ($2 ? 0 : base.c);\n var r = decode_row($5) - ($4 ? 0 : base.r);\n var R = r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : r + 1;\n var C = c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : c + 1;\n return $1 + \"R\" + R + \"C\" + C;\n });\n };\n}();\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\n\n\nfunction shift_formula_str(f\n/*:string*/\n, delta\n/*:Cell*/\n)\n/*:string*/\n{\n return f.replace(crefregex, function ($0, $1, $2, $3, $4, $5) {\n return $1 + ($2 == \"$\" ? $2 + $3 : encode_col(decode_col($3) + delta.c)) + ($4 == \"$\" ? $4 + $5 : encode_row(decode_row($5) + delta.r));\n });\n}\n\nfunction shift_formula_xlsx(f\n/*:string*/\n, range\n/*:string*/\n, cell\n/*:string*/\n)\n/*:string*/\n{\n var r = decode_range(range),\n s = r.s,\n c = decode_cell(cell);\n var delta = {\n r: c.r - s.r,\n c: c.c - s.c\n };\n return shift_formula_str(f, delta);\n}\n/* TODO: parse formula */\n\n\nfunction fuzzyfmla(f\n/*:string*/\n)\n/*:boolean*/\n{\n if (f.length == 1) return false;\n return true;\n}\n\nfunction _xlfn(f\n/*:string*/\n)\n/*:string*/\n{\n return f.replace(/_xlfn\\./g, \"\");\n}\n\nfunction parseread1(blob) {\n blob.l += 1;\n return;\n}\n/* [MS-XLS] 2.5.51 */\n\n\nfunction parse_ColRelU(blob, length) {\n var c = blob.read_shift(length == 1 ? 1 : 2);\n return [c & 0x3FFF, c >> 14 & 1, c >> 15 & 1];\n}\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\n\n\nfunction parse_RgceArea(blob, length, opts) {\n var w = 2;\n\n if (opts) {\n if (opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);else if (opts.biff == 12) w = 4;\n }\n\n var r = blob.read_shift(w),\n R = blob.read_shift(w);\n var c = parse_ColRelU(blob, 2);\n var C = parse_ColRelU(blob, 2);\n return {\n s: {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n },\n e: {\n r: R,\n c: C[0],\n cRel: C[1],\n rRel: C[2]\n }\n };\n}\n/* BIFF 2-5 encodes flags in the row field */\n\n\nfunction parse_RgceArea_BIFF2(blob\n/*::, length, opts*/\n) {\n var r = parse_ColRelU(blob, 2),\n R = parse_ColRelU(blob, 2);\n var c = blob.read_shift(1);\n var C = blob.read_shift(1);\n return {\n s: {\n r: r[0],\n c: c,\n cRel: r[1],\n rRel: r[2]\n },\n e: {\n r: R[0],\n c: C,\n cRel: R[1],\n rRel: R[2]\n }\n };\n}\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\n\n\nfunction parse_RgceAreaRel(blob, length, opts) {\n if (opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n var r = blob.read_shift(opts.biff == 12 ? 4 : 2),\n R = blob.read_shift(opts.biff == 12 ? 4 : 2);\n var c = parse_ColRelU(blob, 2);\n var C = parse_ColRelU(blob, 2);\n return {\n s: {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n },\n e: {\n r: R,\n c: C[0],\n cRel: C[1],\n rRel: C[2]\n }\n };\n}\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\n\n\nfunction parse_RgceLoc(blob, length, opts) {\n if (opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n var r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n var c = parse_ColRelU(blob, 2);\n return {\n r: r,\n c: c[0],\n cRel: c[1],\n rRel: c[2]\n };\n}\n\nfunction parse_RgceLoc_BIFF2(blob\n/*::, length, opts*/\n) {\n var r = parse_ColRelU(blob, 2);\n var c = blob.read_shift(1);\n return {\n r: r[0],\n c: c,\n cRel: r[1],\n rRel: r[2]\n };\n}\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\n\n\nfunction parse_RgceElfLoc(blob\n/*::, length, opts*/\n) {\n var r = blob.read_shift(2);\n var c = blob.read_shift(2);\n return {\n r: r,\n c: c & 0xFF,\n fQuoted: !!(c & 0x4000),\n cRel: c >> 15,\n rRel: c >> 15\n };\n}\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\n\n\nfunction parse_RgceLocRel(blob, length, opts) {\n var biff = opts && opts.biff ? opts.biff : 8;\n if (biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n var r = blob.read_shift(biff >= 12 ? 4 : 2);\n var cl = blob.read_shift(2);\n var cRel = (cl & 0x4000) >> 14,\n rRel = (cl & 0x8000) >> 15;\n cl &= 0x3FFF;\n if (rRel == 1) while (r > 0x7FFFF) {\n r -= 0x100000;\n }\n if (cRel == 1) while (cl > 0x1FFF) {\n cl = cl - 0x4000;\n }\n return {\n r: r,\n c: cl,\n cRel: cRel,\n rRel: rRel\n };\n}\n\nfunction parse_RgceLocRel_BIFF2(blob\n/*::, length:number, opts*/\n) {\n var rl = blob.read_shift(2);\n var c = blob.read_shift(1);\n var rRel = (rl & 0x8000) >> 15,\n cRel = (rl & 0x4000) >> 14;\n rl &= 0x3FFF;\n if (rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n if (cRel == 1 && c >= 0x80) c = c - 0x100;\n return {\n r: rl,\n c: c,\n cRel: cRel,\n rRel: rRel\n };\n}\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\n\n\nfunction parse_PtgArea(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n return [type, area];\n}\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\n\n\nfunction parse_PtgArea3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2, 'i');\n var w = 8;\n if (opts) switch (opts.biff) {\n case 5:\n blob.l += 12;\n w = 6;\n break;\n\n case 12:\n w = 12;\n break;\n }\n var area = parse_RgceArea(blob, w, opts);\n return [type, ixti, area];\n}\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\n\n\nfunction parse_PtgAreaErr(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n blob.l += opts && opts.biff > 8 ? 12 : opts.biff < 8 ? 6 : 8;\n return [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\n\n\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2);\n var w = 8;\n if (opts) switch (opts.biff) {\n case 5:\n blob.l += 12;\n w = 6;\n break;\n\n case 12:\n w = 12;\n break;\n }\n blob.l += w;\n return [type, ixti];\n}\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\n\n\nfunction parse_PtgAreaN(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var area = parse_RgceAreaRel(blob, length - 1, opts);\n return [type, area];\n}\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\n\n\nfunction parse_PtgArray(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n blob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n return [type];\n}\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\n\n\nfunction parse_PtgAttrBaxcel(blob) {\n var bitSemi = blob[blob.l + 1] & 0x01;\n /* 1 = volatile */\n\n var bitBaxcel = 1;\n blob.l += 4;\n return [bitSemi, bitBaxcel];\n}\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\n\n\nfunction parse_PtgAttrChoose(blob, length, opts)\n/*:Array*/\n{\n blob.l += 2;\n var offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n var o\n /*:Array*/\n = [];\n /* offset is 1 less than the number of elements */\n\n for (var i = 0; i <= offset; ++i) {\n o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n }\n\n return o;\n}\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\n\n\nfunction parse_PtgAttrGoto(blob, length, opts) {\n var bitGoto = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\n\n\nfunction parse_PtgAttrIf(blob, length, opts) {\n var bitIf = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n/* [MS-XLSB] 2.5.97.28 */\n\n\nfunction parse_PtgAttrIfError(blob) {\n var bitIf = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += 2;\n return [bitIf, blob.read_shift(2)];\n}\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\n\n\nfunction parse_PtgAttrSemi(blob, length, opts) {\n var bitSemi = blob[blob.l + 1] & 0xFF ? 1 : 0;\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n return [bitSemi];\n}\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\n\n\nfunction parse_PtgAttrSpaceType(blob\n/*::, length*/\n) {\n var type = blob.read_shift(1),\n cch = blob.read_shift(1);\n return [type, cch];\n}\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\n\n\nfunction parse_PtgAttrSpace(blob) {\n blob.read_shift(2);\n return parse_PtgAttrSpaceType(blob, 2);\n}\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\n\n\nfunction parse_PtgAttrSpaceSemi(blob) {\n blob.read_shift(2);\n return parse_PtgAttrSpaceType(blob, 2);\n}\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\n\n\nfunction parse_PtgRef(blob, length, opts) {\n //var ptg = blob[blob.l] & 0x1F;\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var loc = parse_RgceLoc(blob, 0, opts);\n return [type, loc];\n}\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\n\n\nfunction parse_PtgRefN(blob, length, opts) {\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var loc = parse_RgceLocRel(blob, 0, opts);\n return [type, loc];\n}\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\n\n\nfunction parse_PtgRef3d(blob, length, opts) {\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var ixti = blob.read_shift(2); // XtiIndex\n\n if (opts && opts.biff == 5) blob.l += 12;\n var loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\n return [type, ixti, loc];\n}\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\n\n\nfunction parse_PtgFunc(blob, length, opts) {\n //var ptg = blob[blob.l] & 0x1F;\n var type = (blob[blob.l] & 0x60) >> 5;\n blob.l += 1;\n var iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n return [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\n\n\nfunction parse_PtgFuncVar(blob, length, opts) {\n var type = blob[blob.l++];\n var cparams = blob.read_shift(1),\n tab = opts && opts.biff <= 3 ? [type == 0x58 ? -1 : 0, blob.read_shift(1)] : parsetab(blob);\n return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n return [blob[blob.l + 1] >> 7, blob.read_shift(2) & 0x7FFF];\n}\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\n\n\nfunction parse_PtgAttrSum(blob, length, opts) {\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n return;\n}\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\n\n\nfunction parse_PtgExp(blob, length, opts) {\n blob.l++;\n if (opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n var row = blob.read_shift(2);\n var col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [row, col];\n}\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\n\n\nfunction parse_PtgErr(blob) {\n blob.l++;\n return BErr[blob.read_shift(1)];\n}\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\n\n\nfunction parse_PtgInt(blob) {\n blob.l++;\n return blob.read_shift(2);\n}\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\n\n\nfunction parse_PtgBool(blob) {\n blob.l++;\n return blob.read_shift(1) !== 0;\n}\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\n\n\nfunction parse_PtgNum(blob) {\n blob.l++;\n return parse_Xnum(blob, 8);\n}\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\n\n\nfunction parse_PtgStr(blob, length, opts) {\n blob.l++;\n return parse_ShortXLUnicodeString(blob, length - 1, opts);\n}\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\n\n\nfunction parse_SerAr(blob, biff\n/*:number*/\n) {\n var val = [blob.read_shift(1)];\n if (biff == 12) switch (val[0]) {\n case 0x02:\n val[0] = 0x04;\n break;\n\n /* SerBool */\n\n case 0x04:\n val[0] = 0x10;\n break;\n\n /* SerErr */\n\n case 0x00:\n val[0] = 0x01;\n break;\n\n /* SerNum */\n\n case 0x01:\n val[0] = 0x02;\n break;\n\n /* SerStr */\n }\n\n switch (val[0]) {\n case 0x04:\n /* SerBool -- boolean */\n val[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n if (biff != 12) blob.l += 7;\n break;\n\n case 0x25:\n /* appears to be an alias */\n\n case 0x10:\n /* SerErr -- error */\n val[1] = BErr[blob[blob.l]];\n blob.l += biff == 12 ? 4 : 8;\n break;\n\n case 0x00:\n /* SerNil -- honestly, I'm not sure how to reproduce this */\n blob.l += 8;\n break;\n\n case 0x01:\n /* SerNum -- Xnum */\n val[1] = parse_Xnum(blob, 8);\n break;\n\n case 0x02:\n /* SerStr -- XLUnicodeString (<256 chars) */\n val[1] = parse_XLUnicodeString2(blob, 0, {\n biff: biff > 0 && biff < 8 ? 2 : biff\n });\n break;\n\n default:\n throw new Error(\"Bad SerAr: \" + val[0]);\n\n /* Unreachable */\n }\n\n return val;\n}\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\n\n\nfunction parse_PtgExtraMem(blob, cce, opts) {\n var count = blob.read_shift(opts.biff == 12 ? 4 : 2);\n var out\n /*:Array*/\n = [];\n\n for (var i = 0; i != count; ++i) {\n out.push((opts.biff == 12 ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n }\n\n return out;\n}\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\n\n\nfunction parse_PtgExtraArray(blob, length, opts) {\n var rows = 0,\n cols = 0;\n\n if (opts.biff == 12) {\n rows = blob.read_shift(4); // DRw\n\n cols = blob.read_shift(4); // DCol\n } else {\n cols = 1 + blob.read_shift(1); //DColByteU\n\n rows = 1 + blob.read_shift(2); //DRw\n }\n\n if (opts.biff >= 2 && opts.biff < 8) {\n --rows;\n if (--cols == 0) cols = 0x100;\n } // $FlowIgnore\n\n\n for (var i = 0, o\n /*:Array>*/\n = []; i != rows && (o[i] = []); ++i) {\n for (var j = 0; j != cols; ++j) {\n o[i][j] = parse_SerAr(blob, opts.biff);\n }\n }\n\n return o;\n}\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\n\n\nfunction parse_PtgName(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var w = !opts || opts.biff >= 8 ? 4 : 2;\n var nameindex = blob.read_shift(w);\n\n switch (opts.biff) {\n case 2:\n blob.l += 5;\n break;\n\n case 3:\n case 4:\n blob.l += 8;\n break;\n\n case 5:\n blob.l += 12;\n break;\n }\n\n return [type, 0, nameindex];\n}\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\n\n\nfunction parse_PtgNameX(blob, length, opts) {\n if (opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var ixti = blob.read_shift(2); // XtiIndex\n\n var nameindex = blob.read_shift(4);\n return [type, ixti, nameindex];\n}\n\nfunction parse_PtgNameX_BIFF5(blob\n/*::, length, opts*/\n) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var ixti = blob.read_shift(2, 'i'); // XtiIndex\n\n blob.l += 8;\n var nameindex = blob.read_shift(2);\n blob.l += 12;\n return [type, ixti, nameindex];\n}\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\n\n\nfunction parse_PtgMemArea(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n blob.l += opts && opts.biff == 2 ? 3 : 4;\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [type, cce];\n}\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\n\n\nfunction parse_PtgMemFunc(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n return [type, cce];\n}\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\n\n\nfunction parse_PtgRefErr(blob, length, opts) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n blob.l += 4;\n if (opts.biff < 8) blob.l--;\n if (opts.biff == 12) blob.l += 2;\n return [type];\n}\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\n\n\nfunction parse_PtgRefErr3d(blob, length, opts) {\n var type = (blob[blob.l++] & 0x60) >> 5;\n var ixti = blob.read_shift(2);\n var w = 4;\n if (opts) switch (opts.biff) {\n case 5:\n w = 15;\n break;\n\n case 12:\n w = 6;\n break;\n }\n blob.l += w;\n return [type, ixti];\n}\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\n\n\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\n\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\n\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n blob.l += 2;\n return [parse_RgceElfLoc(blob, 4, opts)];\n}\n\nfunction parse_PtgElfNoop(blob\n/*::, length, opts*/\n) {\n blob.l += 6;\n return [];\n}\n/* [MS-XLS] 2.5.198.46 */\n\n\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\n\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\n\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\n\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\n\nfunction parse_PtgElfLel(blob\n/*::, length, opts*/\n) {\n blob.l += 2;\n return [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\n\n\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\n\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\n\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\n\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\n\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n/* [MS-XLSB] 2.5.97.52 TODO */\n\nvar PtgListRT = [\"Data\", \"All\", \"Headers\", \"??\", \"?Data2\", \"??\", \"?DataHeaders\", \"??\", \"Totals\", \"??\", \"??\", \"??\", \"?DataTotals\", \"??\", \"??\", \"??\", \"?Current\"];\n\nfunction parse_PtgList(blob\n/*::, length, opts*/\n) {\n blob.l += 2;\n var ixti = blob.read_shift(2);\n var flags = blob.read_shift(2);\n var idx = blob.read_shift(4);\n var c = blob.read_shift(2);\n var C = blob.read_shift(2);\n var rt = PtgListRT[flags >> 2 & 0x1F];\n return {\n ixti: ixti,\n coltype: flags & 0x3,\n rt: rt,\n idx: idx,\n c: c,\n C: C\n };\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\n\n\nfunction parse_PtgSxName(blob\n/*::, length, opts*/\n) {\n blob.l += 2;\n return [blob.read_shift(4)];\n}\n/* [XLS] old spec */\n\n\nfunction parse_PtgSheet(blob, length, opts) {\n blob.l += 5;\n blob.l += 2;\n blob.l += opts.biff == 2 ? 1 : 4;\n return [\"PTGSHEET\"];\n}\n\nfunction parse_PtgEndSheet(blob, length, opts) {\n blob.l += opts.biff == 2 ? 4 : 5;\n return [\"PTGENDSHEET\"];\n}\n\nfunction parse_PtgMemAreaN(blob\n/*::, length, opts*/\n) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(2);\n return [type, cce];\n}\n\nfunction parse_PtgMemNoMemN(blob\n/*::, length, opts*/\n) {\n var type = blob.read_shift(1) >>> 5 & 0x03;\n var cce = blob.read_shift(2);\n return [type, cce];\n}\n\nfunction parse_PtgAttrNoop(blob\n/*::, length, opts*/\n) {\n blob.l += 4;\n return [0, 0];\n}\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\n\n\nvar PtgTypes = {\n /*::[*/\n 0x01\n /*::]*/\n : {\n n: 'PtgExp',\n f: parse_PtgExp\n },\n\n /*::[*/\n 0x02\n /*::]*/\n : {\n n: 'PtgTbl',\n f: parse_PtgTbl\n },\n\n /*::[*/\n 0x03\n /*::]*/\n : {\n n: 'PtgAdd',\n f: parseread1\n },\n\n /*::[*/\n 0x04\n /*::]*/\n : {\n n: 'PtgSub',\n f: parseread1\n },\n\n /*::[*/\n 0x05\n /*::]*/\n : {\n n: 'PtgMul',\n f: parseread1\n },\n\n /*::[*/\n 0x06\n /*::]*/\n : {\n n: 'PtgDiv',\n f: parseread1\n },\n\n /*::[*/\n 0x07\n /*::]*/\n : {\n n: 'PtgPower',\n f: parseread1\n },\n\n /*::[*/\n 0x08\n /*::]*/\n : {\n n: 'PtgConcat',\n f: parseread1\n },\n\n /*::[*/\n 0x09\n /*::]*/\n : {\n n: 'PtgLt',\n f: parseread1\n },\n\n /*::[*/\n 0x0A\n /*::]*/\n : {\n n: 'PtgLe',\n f: parseread1\n },\n\n /*::[*/\n 0x0B\n /*::]*/\n : {\n n: 'PtgEq',\n f: parseread1\n },\n\n /*::[*/\n 0x0C\n /*::]*/\n : {\n n: 'PtgGe',\n f: parseread1\n },\n\n /*::[*/\n 0x0D\n /*::]*/\n : {\n n: 'PtgGt',\n f: parseread1\n },\n\n /*::[*/\n 0x0E\n /*::]*/\n : {\n n: 'PtgNe',\n f: parseread1\n },\n\n /*::[*/\n 0x0F\n /*::]*/\n : {\n n: 'PtgIsect',\n f: parseread1\n },\n\n /*::[*/\n 0x10\n /*::]*/\n : {\n n: 'PtgUnion',\n f: parseread1\n },\n\n /*::[*/\n 0x11\n /*::]*/\n : {\n n: 'PtgRange',\n f: parseread1\n },\n\n /*::[*/\n 0x12\n /*::]*/\n : {\n n: 'PtgUplus',\n f: parseread1\n },\n\n /*::[*/\n 0x13\n /*::]*/\n : {\n n: 'PtgUminus',\n f: parseread1\n },\n\n /*::[*/\n 0x14\n /*::]*/\n : {\n n: 'PtgPercent',\n f: parseread1\n },\n\n /*::[*/\n 0x15\n /*::]*/\n : {\n n: 'PtgParen',\n f: parseread1\n },\n\n /*::[*/\n 0x16\n /*::]*/\n : {\n n: 'PtgMissArg',\n f: parseread1\n },\n\n /*::[*/\n 0x17\n /*::]*/\n : {\n n: 'PtgStr',\n f: parse_PtgStr\n },\n\n /*::[*/\n 0x1A\n /*::]*/\n : {\n n: 'PtgSheet',\n f: parse_PtgSheet\n },\n\n /*::[*/\n 0x1B\n /*::]*/\n : {\n n: 'PtgEndSheet',\n f: parse_PtgEndSheet\n },\n\n /*::[*/\n 0x1C\n /*::]*/\n : {\n n: 'PtgErr',\n f: parse_PtgErr\n },\n\n /*::[*/\n 0x1D\n /*::]*/\n : {\n n: 'PtgBool',\n f: parse_PtgBool\n },\n\n /*::[*/\n 0x1E\n /*::]*/\n : {\n n: 'PtgInt',\n f: parse_PtgInt\n },\n\n /*::[*/\n 0x1F\n /*::]*/\n : {\n n: 'PtgNum',\n f: parse_PtgNum\n },\n\n /*::[*/\n 0x20\n /*::]*/\n : {\n n: 'PtgArray',\n f: parse_PtgArray\n },\n\n /*::[*/\n 0x21\n /*::]*/\n : {\n n: 'PtgFunc',\n f: parse_PtgFunc\n },\n\n /*::[*/\n 0x22\n /*::]*/\n : {\n n: 'PtgFuncVar',\n f: parse_PtgFuncVar\n },\n\n /*::[*/\n 0x23\n /*::]*/\n : {\n n: 'PtgName',\n f: parse_PtgName\n },\n\n /*::[*/\n 0x24\n /*::]*/\n : {\n n: 'PtgRef',\n f: parse_PtgRef\n },\n\n /*::[*/\n 0x25\n /*::]*/\n : {\n n: 'PtgArea',\n f: parse_PtgArea\n },\n\n /*::[*/\n 0x26\n /*::]*/\n : {\n n: 'PtgMemArea',\n f: parse_PtgMemArea\n },\n\n /*::[*/\n 0x27\n /*::]*/\n : {\n n: 'PtgMemErr',\n f: parse_PtgMemErr\n },\n\n /*::[*/\n 0x28\n /*::]*/\n : {\n n: 'PtgMemNoMem',\n f: parse_PtgMemNoMem\n },\n\n /*::[*/\n 0x29\n /*::]*/\n : {\n n: 'PtgMemFunc',\n f: parse_PtgMemFunc\n },\n\n /*::[*/\n 0x2A\n /*::]*/\n : {\n n: 'PtgRefErr',\n f: parse_PtgRefErr\n },\n\n /*::[*/\n 0x2B\n /*::]*/\n : {\n n: 'PtgAreaErr',\n f: parse_PtgAreaErr\n },\n\n /*::[*/\n 0x2C\n /*::]*/\n : {\n n: 'PtgRefN',\n f: parse_PtgRefN\n },\n\n /*::[*/\n 0x2D\n /*::]*/\n : {\n n: 'PtgAreaN',\n f: parse_PtgAreaN\n },\n\n /*::[*/\n 0x2E\n /*::]*/\n : {\n n: 'PtgMemAreaN',\n f: parse_PtgMemAreaN\n },\n\n /*::[*/\n 0x2F\n /*::]*/\n : {\n n: 'PtgMemNoMemN',\n f: parse_PtgMemNoMemN\n },\n\n /*::[*/\n 0x39\n /*::]*/\n : {\n n: 'PtgNameX',\n f: parse_PtgNameX\n },\n\n /*::[*/\n 0x3A\n /*::]*/\n : {\n n: 'PtgRef3d',\n f: parse_PtgRef3d\n },\n\n /*::[*/\n 0x3B\n /*::]*/\n : {\n n: 'PtgArea3d',\n f: parse_PtgArea3d\n },\n\n /*::[*/\n 0x3C\n /*::]*/\n : {\n n: 'PtgRefErr3d',\n f: parse_PtgRefErr3d\n },\n\n /*::[*/\n 0x3D\n /*::]*/\n : {\n n: 'PtgAreaErr3d',\n f: parse_PtgAreaErr3d\n },\n\n /*::[*/\n 0xFF\n /*::]*/\n : {}\n};\n/* These are duplicated in the PtgTypes table */\n\nvar PtgDupes = {\n /*::[*/\n 0x40\n /*::]*/\n : 0x20,\n\n /*::[*/\n 0x60\n /*::]*/\n : 0x20,\n\n /*::[*/\n 0x41\n /*::]*/\n : 0x21,\n\n /*::[*/\n 0x61\n /*::]*/\n : 0x21,\n\n /*::[*/\n 0x42\n /*::]*/\n : 0x22,\n\n /*::[*/\n 0x62\n /*::]*/\n : 0x22,\n\n /*::[*/\n 0x43\n /*::]*/\n : 0x23,\n\n /*::[*/\n 0x63\n /*::]*/\n : 0x23,\n\n /*::[*/\n 0x44\n /*::]*/\n : 0x24,\n\n /*::[*/\n 0x64\n /*::]*/\n : 0x24,\n\n /*::[*/\n 0x45\n /*::]*/\n : 0x25,\n\n /*::[*/\n 0x65\n /*::]*/\n : 0x25,\n\n /*::[*/\n 0x46\n /*::]*/\n : 0x26,\n\n /*::[*/\n 0x66\n /*::]*/\n : 0x26,\n\n /*::[*/\n 0x47\n /*::]*/\n : 0x27,\n\n /*::[*/\n 0x67\n /*::]*/\n : 0x27,\n\n /*::[*/\n 0x48\n /*::]*/\n : 0x28,\n\n /*::[*/\n 0x68\n /*::]*/\n : 0x28,\n\n /*::[*/\n 0x49\n /*::]*/\n : 0x29,\n\n /*::[*/\n 0x69\n /*::]*/\n : 0x29,\n\n /*::[*/\n 0x4A\n /*::]*/\n : 0x2A,\n\n /*::[*/\n 0x6A\n /*::]*/\n : 0x2A,\n\n /*::[*/\n 0x4B\n /*::]*/\n : 0x2B,\n\n /*::[*/\n 0x6B\n /*::]*/\n : 0x2B,\n\n /*::[*/\n 0x4C\n /*::]*/\n : 0x2C,\n\n /*::[*/\n 0x6C\n /*::]*/\n : 0x2C,\n\n /*::[*/\n 0x4D\n /*::]*/\n : 0x2D,\n\n /*::[*/\n 0x6D\n /*::]*/\n : 0x2D,\n\n /*::[*/\n 0x4E\n /*::]*/\n : 0x2E,\n\n /*::[*/\n 0x6E\n /*::]*/\n : 0x2E,\n\n /*::[*/\n 0x4F\n /*::]*/\n : 0x2F,\n\n /*::[*/\n 0x6F\n /*::]*/\n : 0x2F,\n\n /*::[*/\n 0x58\n /*::]*/\n : 0x22,\n\n /*::[*/\n 0x78\n /*::]*/\n : 0x22,\n\n /*::[*/\n 0x59\n /*::]*/\n : 0x39,\n\n /*::[*/\n 0x79\n /*::]*/\n : 0x39,\n\n /*::[*/\n 0x5A\n /*::]*/\n : 0x3A,\n\n /*::[*/\n 0x7A\n /*::]*/\n : 0x3A,\n\n /*::[*/\n 0x5B\n /*::]*/\n : 0x3B,\n\n /*::[*/\n 0x7B\n /*::]*/\n : 0x3B,\n\n /*::[*/\n 0x5C\n /*::]*/\n : 0x3C,\n\n /*::[*/\n 0x7C\n /*::]*/\n : 0x3C,\n\n /*::[*/\n 0x5D\n /*::]*/\n : 0x3D,\n\n /*::[*/\n 0x7D\n /*::]*/\n : 0x3D\n};\nvar Ptg18 = {\n /*::[*/\n 0x01\n /*::]*/\n : {\n n: 'PtgElfLel',\n f: parse_PtgElfLel\n },\n\n /*::[*/\n 0x02\n /*::]*/\n : {\n n: 'PtgElfRw',\n f: parse_PtgElfRw\n },\n\n /*::[*/\n 0x03\n /*::]*/\n : {\n n: 'PtgElfCol',\n f: parse_PtgElfCol\n },\n\n /*::[*/\n 0x06\n /*::]*/\n : {\n n: 'PtgElfRwV',\n f: parse_PtgElfRwV\n },\n\n /*::[*/\n 0x07\n /*::]*/\n : {\n n: 'PtgElfColV',\n f: parse_PtgElfColV\n },\n\n /*::[*/\n 0x0A\n /*::]*/\n : {\n n: 'PtgElfRadical',\n f: parse_PtgElfRadical\n },\n\n /*::[*/\n 0x0B\n /*::]*/\n : {\n n: 'PtgElfRadicalS',\n f: parse_PtgElfRadicalS\n },\n\n /*::[*/\n 0x0D\n /*::]*/\n : {\n n: 'PtgElfColS',\n f: parse_PtgElfColS\n },\n\n /*::[*/\n 0x0F\n /*::]*/\n : {\n n: 'PtgElfColSV',\n f: parse_PtgElfColSV\n },\n\n /*::[*/\n 0x10\n /*::]*/\n : {\n n: 'PtgElfRadicalLel',\n f: parse_PtgElfRadicalLel\n },\n\n /*::[*/\n 0x19\n /*::]*/\n : {\n n: 'PtgList',\n f: parse_PtgList\n },\n\n /*::[*/\n 0x1D\n /*::]*/\n : {\n n: 'PtgSxName',\n f: parse_PtgSxName\n },\n\n /*::[*/\n 0xFF\n /*::]*/\n : {}\n};\nvar Ptg19 = {\n /*::[*/\n 0x00\n /*::]*/\n : {\n n: 'PtgAttrNoop',\n f: parse_PtgAttrNoop\n },\n\n /*::[*/\n 0x01\n /*::]*/\n : {\n n: 'PtgAttrSemi',\n f: parse_PtgAttrSemi\n },\n\n /*::[*/\n 0x02\n /*::]*/\n : {\n n: 'PtgAttrIf',\n f: parse_PtgAttrIf\n },\n\n /*::[*/\n 0x04\n /*::]*/\n : {\n n: 'PtgAttrChoose',\n f: parse_PtgAttrChoose\n },\n\n /*::[*/\n 0x08\n /*::]*/\n : {\n n: 'PtgAttrGoto',\n f: parse_PtgAttrGoto\n },\n\n /*::[*/\n 0x10\n /*::]*/\n : {\n n: 'PtgAttrSum',\n f: parse_PtgAttrSum\n },\n\n /*::[*/\n 0x20\n /*::]*/\n : {\n n: 'PtgAttrBaxcel',\n f: parse_PtgAttrBaxcel\n },\n\n /*::[*/\n 0x21\n /*::]*/\n : {\n n: 'PtgAttrBaxcel',\n f: parse_PtgAttrBaxcel\n },\n\n /*::[*/\n 0x40\n /*::]*/\n : {\n n: 'PtgAttrSpace',\n f: parse_PtgAttrSpace\n },\n\n /*::[*/\n 0x41\n /*::]*/\n : {\n n: 'PtgAttrSpaceSemi',\n f: parse_PtgAttrSpaceSemi\n },\n\n /*::[*/\n 0x80\n /*::]*/\n : {\n n: 'PtgAttrIfError',\n f: parse_PtgAttrIfError\n },\n\n /*::[*/\n 0xFF\n /*::]*/\n : {}\n};\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\n\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n if (opts.biff < 8) return parsenoop(blob, length);\n var target = blob.l + length;\n var o = [];\n\n for (var i = 0; i !== rgce.length; ++i) {\n switch (rgce[i][0]) {\n case 'PtgArray':\n /* PtgArray -> PtgExtraArray */\n rgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n o.push(rgce[i][1]);\n break;\n\n case 'PtgMemArea':\n /* PtgMemArea -> PtgExtraMem */\n rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n o.push(rgce[i][2]);\n break;\n\n case 'PtgExp':\n /* PtgExp -> PtgExtraCol */\n if (opts && opts.biff == 12) {\n rgce[i][1][1] = blob.read_shift(4);\n o.push(rgce[i][1]);\n }\n\n break;\n\n case 'PtgList':\n /* TODO: PtgList -> PtgExtraList */\n\n case 'PtgElfRadicalS':\n /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\n case 'PtgElfColS':\n /* TODO: PtgElfColS -> PtgExtraElf */\n\n case 'PtgElfColSV':\n /* TODO: PtgElfColSV -> PtgExtraElf */\n throw \"Unsupported \" + rgce[i][0];\n\n default:\n break;\n }\n }\n\n length = target - blob.l;\n /* note: this is technically an error but Excel disregards */\n //if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\n if (length !== 0) o.push(parsenoop(blob, length));\n return o;\n}\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\n\n\nfunction parse_Rgce(blob, length, opts) {\n var target = blob.l + length;\n var R,\n id,\n ptgs = [];\n\n while (target != blob.l) {\n length = target - blob.l;\n id = blob[blob.l];\n R = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n if (id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\n if (!R || !R.f) {\n /*ptgs.push*/\n parsenoop(blob, length);\n } else {\n ptgs.push([R.n, R.f(blob, length, opts)]);\n }\n }\n\n return ptgs;\n}\n\nfunction stringify_array(f\n/*:Array>*/\n)\n/*:string*/\n{\n var o\n /*:Array*/\n = [];\n\n for (var i = 0; i < f.length; ++i) {\n var x = f[i],\n r\n /*:Array*/\n = [];\n\n for (var j = 0; j < x.length; ++j) {\n var y = x[j];\n if (y) switch (y[0]) {\n // TODO: handle embedded quotes\n case 0x02:\n /*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n r.push('\"' + y[1].replace(/\"/g, '\"\"') + '\"');\n break;\n\n default:\n r.push(y[1]);\n } else r.push(\"\");\n }\n\n o.push(r.join(\",\"));\n }\n\n return o.join(\";\");\n}\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\n\n\nvar PtgBinOp = {\n PtgAdd: \"+\",\n PtgConcat: \"&\",\n PtgDiv: \"/\",\n PtgEq: \"=\",\n PtgGe: \">=\",\n PtgGt: \">\",\n PtgLe: \"<=\",\n PtgLt: \"<\",\n PtgMul: \"*\",\n PtgNe: \"<>\",\n PtgPower: \"^\",\n PtgSub: \"-\"\n}; // List of invalid characters needs to be tested further\n\nfunction formula_quote_sheet_name(sname\n/*:string*/\n, opts)\n/*:string*/\n{\n if (!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n if (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname + \"'\";\n return sname;\n}\n\nfunction get_ixti_raw(supbooks, ixti\n/*:number*/\n, opts)\n/*:string*/\n{\n if (!supbooks) return \"SH33TJSERR0\";\n if (opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n if (!supbooks.XTI) return \"SH33TJSERR6\";\n var XTI = supbooks.XTI[ixti];\n\n if (opts.biff < 8) {\n if (ixti > 10000) ixti -= 65536;\n if (ixti < 0) ixti = -ixti;\n return ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n }\n\n if (!XTI) return \"SH33TJSERR1\";\n var o = \"\";\n if (opts.biff > 8) switch (supbooks[XTI[0]][0]) {\n case 0x0165:\n /* 'BrtSupSelf' */\n o = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\n case 0x0166:\n /* 'BrtSupSame' */\n if (opts.SID != null) return supbooks.SheetNames[opts.SID];\n return \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\n case 0x0163:\n /* 'BrtSupBookSrc' */\n\n /* falls through */\n\n default:\n return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n }\n\n switch (supbooks[XTI[0]][0][0]) {\n case 0x0401:\n o = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\";\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\n case 0x3A01:\n return supbooks[XTI[0]].slice(1).map(function (name) {\n return name.Name;\n }).join(\";;\");\n //return \"SH33TJSERR8\";\n\n default:\n if (!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n o = XTI[1] == -1 ? \"#REF\" : supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\";\n return XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n }\n}\n\nfunction get_ixti(supbooks, ixti\n/*:number*/\n, opts)\n/*:string*/\n{\n var ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n return ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\n\nfunction stringify_formula(formula\n/*Array*/\n, range, cell\n/*:any*/\n, supbooks, opts)\n/*:string*/\n{\n var biff = opts && opts.biff || 8;\n var _range =\n /*range != null ? range :*/\n {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: 0,\n r: 0\n }\n };\n var stack\n /*:Array*/\n = [],\n e1,\n e2,\n\n /*::type,*/\n c\n /*:CellAddress*/\n ,\n ixti = 0,\n nameidx = 0,\n r,\n sname = \"\";\n if (!formula[0] || !formula[0][0]) return \"\";\n var last_sp = -1,\n sp = \"\";\n\n for (var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n var f = formula[0][ff];\n\n switch (f[0]) {\n case 'PtgUminus':\n /* [MS-XLS] 2.5.198.93 */\n stack.push(\"-\" + stack.pop());\n break;\n\n case 'PtgUplus':\n /* [MS-XLS] 2.5.198.95 */\n stack.push(\"+\" + stack.pop());\n break;\n\n case 'PtgPercent':\n /* [MS-XLS] 2.5.198.81 */\n stack.push(stack.pop() + \"%\");\n break;\n\n case 'PtgAdd':\n /* [MS-XLS] 2.5.198.26 */\n\n case 'PtgConcat':\n /* [MS-XLS] 2.5.198.43 */\n\n case 'PtgDiv':\n /* [MS-XLS] 2.5.198.45 */\n\n case 'PtgEq':\n /* [MS-XLS] 2.5.198.56 */\n\n case 'PtgGe':\n /* [MS-XLS] 2.5.198.64 */\n\n case 'PtgGt':\n /* [MS-XLS] 2.5.198.65 */\n\n case 'PtgLe':\n /* [MS-XLS] 2.5.198.68 */\n\n case 'PtgLt':\n /* [MS-XLS] 2.5.198.69 */\n\n case 'PtgMul':\n /* [MS-XLS] 2.5.198.75 */\n\n case 'PtgNe':\n /* [MS-XLS] 2.5.198.78 */\n\n case 'PtgPower':\n /* [MS-XLS] 2.5.198.82 */\n\n case 'PtgSub':\n /* [MS-XLS] 2.5.198.90 */\n e1 = stack.pop();\n e2 = stack.pop();\n\n if (last_sp >= 0) {\n switch (formula[0][last_sp][1][0]) {\n case 0:\n // $FlowIgnore\n sp = fill(\" \", formula[0][last_sp][1][1]);\n break;\n\n case 1:\n // $FlowIgnore\n sp = fill(\"\\r\", formula[0][last_sp][1][1]);\n break;\n\n default:\n sp = \"\"; // $FlowIgnore\n\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n }\n\n e2 = e2 + sp;\n last_sp = -1;\n }\n\n stack.push(e2 + PtgBinOp[f[0]] + e1);\n break;\n\n case 'PtgIsect':\n /* [MS-XLS] 2.5.198.67 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \" \" + e1);\n break;\n\n case 'PtgUnion':\n /* [MS-XLS] 2.5.198.94 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \",\" + e1);\n break;\n\n case 'PtgRange':\n /* [MS-XLS] 2.5.198.83 */\n e1 = stack.pop();\n e2 = stack.pop();\n stack.push(e2 + \":\" + e1);\n break;\n\n case 'PtgAttrChoose':\n /* [MS-XLS] 2.5.198.34 */\n break;\n\n case 'PtgAttrGoto':\n /* [MS-XLS] 2.5.198.35 */\n break;\n\n case 'PtgAttrIf':\n /* [MS-XLS] 2.5.198.36 */\n break;\n\n case 'PtgAttrIfError':\n /* [MS-XLSB] 2.5.97.28 */\n break;\n\n case 'PtgRef':\n /* [MS-XLS] 2.5.198.84 */\n\n /*::type = f[1][0]; */\n c = shift_cell_xls(f[1][1]\n /*:any*/\n , _range, opts);\n stack.push(encode_cell_xls(c, biff));\n break;\n\n case 'PtgRefN':\n /* [MS-XLS] 2.5.198.88 */\n\n /*::type = f[1][0]; */\n c = cell ? shift_cell_xls(f[1][1]\n /*:any*/\n , cell, opts) : f[1][1]\n /*:any*/\n ;\n stack.push(encode_cell_xls(c, biff));\n break;\n\n case 'PtgRef3d':\n /* [MS-XLS] 2.5.198.85 */\n\n /*::type = f[1][0]; */\n ixti =\n /*::Number(*/\n f[1][1]\n /*::)*/\n ;\n c = shift_cell_xls(f[1][2]\n /*:any*/\n , _range, opts);\n sname = get_ixti(supbooks, ixti, opts);\n var w = sname;\n /* IE9 fails on defined names */\n // eslint-disable-line no-unused-vars\n\n stack.push(sname + \"!\" + encode_cell_xls(c, biff));\n break;\n\n case 'PtgFunc':\n /* [MS-XLS] 2.5.198.62 */\n\n case 'PtgFuncVar':\n /* [MS-XLS] 2.5.198.63 */\n\n /* f[1] = [argc, func, type] */\n var argc\n /*:number*/\n = f[1][0]\n /*:any*/\n ,\n func\n /*:string*/\n = f[1][1]\n /*:any*/\n ;\n if (!argc) argc = 0;\n argc &= 0x7F;\n var args = argc == 0 ? [] : stack.slice(-argc);\n stack.length -= argc;\n if (func === 'User') func = args.shift();\n stack.push(func + \"(\" + args.join(\",\") + \")\");\n break;\n\n case 'PtgBool':\n /* [MS-XLS] 2.5.198.42 */\n stack.push(f[1] ? \"TRUE\" : \"FALSE\");\n break;\n\n case 'PtgInt':\n /* [MS-XLS] 2.5.198.66 */\n stack.push(\n /*::String(*/\n f[1]\n /*::)*/\n );\n break;\n\n case 'PtgNum':\n /* [MS-XLS] 2.5.198.79 TODO: precision? */\n stack.push(String(f[1]));\n break;\n\n case 'PtgStr':\n /* [MS-XLS] 2.5.198.89 */\n // $FlowIgnore\n stack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"');\n break;\n\n case 'PtgErr':\n /* [MS-XLS] 2.5.198.57 */\n stack.push(\n /*::String(*/\n f[1]\n /*::)*/\n );\n break;\n\n case 'PtgAreaN':\n /* [MS-XLS] 2.5.198.31 TODO */\n\n /*::type = f[1][0]; */\n r = shift_range_xls(f[1][1], cell ? {\n s: cell\n } : _range, opts);\n stack.push(encode_range_xls(r\n /*:any*/\n , opts));\n break;\n\n case 'PtgArea':\n /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\n /*::type = f[1][0]; */\n r = shift_range_xls(f[1][1], _range, opts);\n stack.push(encode_range_xls(r\n /*:any*/\n , opts));\n break;\n\n case 'PtgArea3d':\n /* [MS-XLS] 2.5.198.28 TODO */\n\n /*::type = f[1][0]; */\n ixti =\n /*::Number(*/\n f[1][1]\n /*::)*/\n ;\n r = f[1][2];\n sname = get_ixti(supbooks, ixti, opts);\n stack.push(sname + \"!\" + encode_range_xls(r\n /*:any*/\n , opts));\n break;\n\n case 'PtgAttrSum':\n /* [MS-XLS] 2.5.198.41 */\n stack.push(\"SUM(\" + stack.pop() + \")\");\n break;\n\n case 'PtgAttrBaxcel':\n /* [MS-XLS] 2.5.198.33 */\n\n case 'PtgAttrSemi':\n /* [MS-XLS] 2.5.198.37 */\n break;\n\n case 'PtgName':\n /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\n /* f[1] = type, 0, nameindex */\n nameidx = f[1][2]\n /*:any*/\n ;\n var lbl = (supbooks.names || [])[nameidx - 1] || (supbooks[0] || [])[nameidx];\n var name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n /* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\n if (name && name.slice(0, 6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n stack.push(name);\n break;\n\n case 'PtgNameX':\n /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\n /* f[1] = type, ixti, nameindex */\n var bookidx\n /*:number*/\n = f[1][1]\n /*:any*/\n ;\n nameidx = f[1][2]\n /*:any*/\n ;\n var externbook;\n /* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\n if (opts.biff <= 5) {\n if (bookidx < 0) bookidx = -bookidx;\n if (supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n } else {\n var o = \"\";\n\n if (((supbooks[bookidx] || [])[0] || [])[0] == 0x3A01) {\n /* empty */\n } else if (((supbooks[bookidx] || [])[0] || [])[0] == 0x0401) {\n if (supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n o = supbooks.SheetNames[supbooks[bookidx][nameidx].itab - 1] + \"!\";\n }\n } else o = supbooks.SheetNames[nameidx - 1] + \"!\";\n\n if (supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;else if (supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;else {\n var ixtidata = (get_ixti_raw(supbooks, bookidx, opts) || \"\").split(\";;\");\n if (ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n else o += \"SH33TJSERRX\";\n }\n stack.push(o);\n break;\n }\n\n if (!externbook) externbook = {\n Name: \"SH33TJSERRY\"\n };\n stack.push(externbook.Name);\n break;\n\n case 'PtgParen':\n /* [MS-XLS] 2.5.198.80 */\n var lp = '(',\n rp = ')';\n\n if (last_sp >= 0) {\n sp = \"\";\n\n switch (formula[0][last_sp][1][0]) {\n // $FlowIgnore\n case 2:\n lp = fill(\" \", formula[0][last_sp][1][1]) + lp;\n break;\n // $FlowIgnore\n\n case 3:\n lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp;\n break;\n // $FlowIgnore\n\n case 4:\n rp = fill(\" \", formula[0][last_sp][1][1]) + rp;\n break;\n // $FlowIgnore\n\n case 5:\n rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp;\n break;\n\n default:\n // $FlowIgnore\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n }\n\n last_sp = -1;\n }\n\n stack.push(lp + stack.pop() + rp);\n break;\n\n case 'PtgRefErr':\n /* [MS-XLS] 2.5.198.86 */\n stack.push('#REF!');\n break;\n\n case 'PtgRefErr3d':\n /* [MS-XLS] 2.5.198.87 */\n stack.push('#REF!');\n break;\n\n case 'PtgExp':\n /* [MS-XLS] 2.5.198.58 TODO */\n c = {\n c: f[1][1]\n /*:any*/\n ,\n r: f[1][0]\n /*:any*/\n\n };\n var q = {\n c: cell.c,\n r: cell.r\n }\n /*:any*/\n ;\n\n if (supbooks.sharedf[encode_cell(c)]) {\n var parsedf = supbooks.sharedf[encode_cell(c)];\n stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n } else {\n var fnd = false;\n\n for (e1 = 0; e1 != supbooks.arrayf.length; ++e1) {\n /* TODO: should be something like range_has */\n e2 = supbooks.arrayf[e1];\n if (c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n if (c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n fnd = true;\n break;\n }\n\n if (!fnd) stack.push(\n /*::String(*/\n f[1]\n /*::)*/\n );\n }\n\n break;\n\n case 'PtgArray':\n /* [MS-XLS] 2.5.198.32 TODO */\n stack.push(\"{\" + stringify_array(\n /*::(*/\n f[1]\n /*:: :any)*/\n ) + \"}\");\n break;\n\n case 'PtgMemArea':\n /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n //stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n break;\n\n case 'PtgAttrSpace':\n /* [MS-XLS] 2.5.198.38 */\n\n case 'PtgAttrSpaceSemi':\n /* [MS-XLS] 2.5.198.39 */\n last_sp = ff;\n break;\n\n case 'PtgTbl':\n /* [MS-XLS] 2.5.198.92 TODO */\n break;\n\n case 'PtgMemErr':\n /* [MS-XLS] 2.5.198.71 */\n break;\n\n case 'PtgMissArg':\n /* [MS-XLS] 2.5.198.74 */\n stack.push(\"\");\n break;\n\n case 'PtgAreaErr':\n /* [MS-XLS] 2.5.198.29 */\n stack.push(\"#REF!\");\n break;\n\n case 'PtgAreaErr3d':\n /* [MS-XLS] 2.5.198.30 */\n stack.push(\"#REF!\");\n break;\n\n case 'PtgList':\n /* [MS-XLSB] 2.5.97.52 */\n // $FlowIgnore\n stack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n break;\n\n case 'PtgMemAreaN':\n case 'PtgMemNoMemN':\n case 'PtgAttrNoop':\n case 'PtgSheet':\n case 'PtgEndSheet':\n break;\n\n case 'PtgMemFunc':\n /* [MS-XLS] 2.5.198.72 TODO */\n break;\n\n case 'PtgMemNoMem':\n /* [MS-XLS] 2.5.198.73 TODO */\n break;\n\n case 'PtgElfCol':\n /* [MS-XLS] 2.5.198.46 */\n\n case 'PtgElfColS':\n /* [MS-XLS] 2.5.198.47 */\n\n case 'PtgElfColSV':\n /* [MS-XLS] 2.5.198.48 */\n\n case 'PtgElfColV':\n /* [MS-XLS] 2.5.198.49 */\n\n case 'PtgElfLel':\n /* [MS-XLS] 2.5.198.50 */\n\n case 'PtgElfRadical':\n /* [MS-XLS] 2.5.198.51 */\n\n case 'PtgElfRadicalLel':\n /* [MS-XLS] 2.5.198.52 */\n\n case 'PtgElfRadicalS':\n /* [MS-XLS] 2.5.198.53 */\n\n case 'PtgElfRw':\n /* [MS-XLS] 2.5.198.54 */\n\n case 'PtgElfRwV':\n /* [MS-XLS] 2.5.198.55 */\n throw new Error(\"Unsupported ELFs\");\n\n case 'PtgSxName':\n /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n throw new Error('Unrecognized Formula Token: ' + String(f));\n\n default:\n throw new Error('Unrecognized Formula Token: ' + String(f));\n }\n\n var PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n if (opts.biff != 3) if (last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n f = formula[0][last_sp];\n var _left = true;\n\n switch (f[1][0]) {\n /* note: some bad XLSB files omit the PtgParen */\n case 4:\n _left = false;\n\n /* falls through */\n\n case 0:\n // $FlowIgnore\n sp = fill(\" \", f[1][1]);\n break;\n\n case 5:\n _left = false;\n\n /* falls through */\n\n case 1:\n // $FlowIgnore\n sp = fill(\"\\r\", f[1][1]);\n break;\n\n default:\n sp = \"\"; // $FlowIgnore\n\n if (opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n }\n\n stack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n last_sp = -1;\n }\n }\n\n if (stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n return stack[0];\n}\n/* [MS-XLS] 2.5.198.1 TODO */\n\n\nfunction parse_ArrayParsedFormula(blob, length, opts\n/*::, ref*/\n) {\n var target = blob.l + length,\n len = opts.biff == 2 ? 1 : 2;\n var rgcb,\n cce = blob.read_shift(len); // length of rgce\n\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n var rgce = parse_Rgce(blob, cce, opts);\n if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n blob.l = target;\n return [rgce, rgcb];\n}\n/* [MS-XLS] 2.5.198.3 TODO */\n\n\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n var target = blob.l + length,\n len = opts.biff == 2 ? 1 : 2;\n var rgcb,\n cce = blob.read_shift(len); // length of rgce\n\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n var rgce = parse_Rgce(blob, cce, opts);\n if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n blob.l = target;\n return [rgce, rgcb];\n}\n/* [MS-XLS] 2.5.198.21 */\n\n\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n var target = blob.l + length;\n var rgce = parse_Rgce(blob, cce, opts);\n var rgcb;\n if (target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n return [rgce, rgcb];\n}\n/* [MS-XLS] 2.5.198.118 TODO */\n\n\nfunction parse_SharedParsedFormula(blob, length, opts) {\n var target = blob.l + length;\n var rgcb,\n cce = blob.read_shift(2); // length of rgce\n\n var rgce = parse_Rgce(blob, cce, opts);\n if (cce == 0xFFFF) return [[], parsenoop(blob, length - 2)];\n if (length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n return [rgce, rgcb];\n}\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\n\n\nfunction parse_FormulaValue(blob\n/*::, length*/\n) {\n var b;\n if (__readUInt16LE(blob, blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob), 'n'];\n\n switch (blob[blob.l]) {\n case 0x00:\n blob.l += 8;\n return [\"String\", 's'];\n\n case 0x01:\n b = blob[blob.l + 2] === 0x1;\n blob.l += 8;\n return [b, 'b'];\n\n case 0x02:\n b = blob[blob.l + 2];\n blob.l += 8;\n return [b, 'e'];\n\n case 0x03:\n blob.l += 8;\n return [\"\", 's'];\n }\n\n return [];\n}\n\nfunction write_FormulaValue(value) {\n if (value == null) {\n // Blank String Value\n var o = new_buf(8);\n o.write_shift(1, 0x03);\n o.write_shift(1, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0xFFFF);\n return o;\n } else if (typeof value == \"number\") return write_Xnum(value);\n\n return write_Xnum(0);\n}\n/* [MS-XLS] 2.4.127 TODO */\n\n\nfunction parse_Formula(blob, length, opts) {\n var end = blob.l + length;\n var cell = parse_XLSCell(blob, 6);\n if (opts.biff == 2) ++blob.l;\n var val = parse_FormulaValue(blob, 8);\n var flags = blob.read_shift(1);\n\n if (opts.biff != 2) {\n blob.read_shift(1);\n\n if (opts.biff >= 5) {\n /*var chn = */\n blob.read_shift(4);\n }\n }\n\n var cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n return {\n cell: cell,\n val: val[0],\n formula: cbf,\n shared: flags >> 3 & 1,\n tt: val[1]\n };\n}\n\nfunction write_Formula(cell\n/*:Cell*/\n, R\n/*:number*/\n, C\n/*:number*/\n, opts, os\n/*:number*/\n) {\n // Cell\n var o1 = write_XLSCell(R, C, os); // FormulaValue\n\n var o2 = write_FormulaValue(cell.v); // flags + cache\n\n var o3 = new_buf(6);\n var flags = 0x01 | 0x20;\n o3.write_shift(2, flags);\n o3.write_shift(4, 0); // CellParsedFormula\n\n var bf = new_buf(cell.bf.length);\n\n for (var i = 0; i < cell.bf.length; ++i) {\n bf[i] = cell.bf[i];\n }\n\n var out = bconcat([o1, o2, o3, bf]);\n return out;\n}\n/* XLSB Parsed Formula records have the same shape */\n\n\nfunction parse_XLSBParsedFormula(data, length, opts) {\n var cce = data.read_shift(4);\n var rgce = parse_Rgce(data, cce, opts);\n var cb = data.read_shift(4);\n var rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n return [rgce, rgcb];\n}\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\n\n\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\n\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\n\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\n\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\nvar Cetab = {\n 0: \"BEEP\",\n 1: \"OPEN\",\n 2: \"OPEN.LINKS\",\n 3: \"CLOSE.ALL\",\n 4: \"SAVE\",\n 5: \"SAVE.AS\",\n 6: \"FILE.DELETE\",\n 7: \"PAGE.SETUP\",\n 8: \"PRINT\",\n 9: \"PRINTER.SETUP\",\n 10: \"QUIT\",\n 11: \"NEW.WINDOW\",\n 12: \"ARRANGE.ALL\",\n 13: \"WINDOW.SIZE\",\n 14: \"WINDOW.MOVE\",\n 15: \"FULL\",\n 16: \"CLOSE\",\n 17: \"RUN\",\n 22: \"SET.PRINT.AREA\",\n 23: \"SET.PRINT.TITLES\",\n 24: \"SET.PAGE.BREAK\",\n 25: \"REMOVE.PAGE.BREAK\",\n 26: \"FONT\",\n 27: \"DISPLAY\",\n 28: \"PROTECT.DOCUMENT\",\n 29: \"PRECISION\",\n 30: \"A1.R1C1\",\n 31: \"CALCULATE.NOW\",\n 32: \"CALCULATION\",\n 34: \"DATA.FIND\",\n 35: \"EXTRACT\",\n 36: \"DATA.DELETE\",\n 37: \"SET.DATABASE\",\n 38: \"SET.CRITERIA\",\n 39: \"SORT\",\n 40: \"DATA.SERIES\",\n 41: \"TABLE\",\n 42: \"FORMAT.NUMBER\",\n 43: \"ALIGNMENT\",\n 44: \"STYLE\",\n 45: \"BORDER\",\n 46: \"CELL.PROTECTION\",\n 47: \"COLUMN.WIDTH\",\n 48: \"UNDO\",\n 49: \"CUT\",\n 50: \"COPY\",\n 51: \"PASTE\",\n 52: \"CLEAR\",\n 53: \"PASTE.SPECIAL\",\n 54: \"EDIT.DELETE\",\n 55: \"INSERT\",\n 56: \"FILL.RIGHT\",\n 57: \"FILL.DOWN\",\n 61: \"DEFINE.NAME\",\n 62: \"CREATE.NAMES\",\n 63: \"FORMULA.GOTO\",\n 64: \"FORMULA.FIND\",\n 65: \"SELECT.LAST.CELL\",\n 66: \"SHOW.ACTIVE.CELL\",\n 67: \"GALLERY.AREA\",\n 68: \"GALLERY.BAR\",\n 69: \"GALLERY.COLUMN\",\n 70: \"GALLERY.LINE\",\n 71: \"GALLERY.PIE\",\n 72: \"GALLERY.SCATTER\",\n 73: \"COMBINATION\",\n 74: \"PREFERRED\",\n 75: \"ADD.OVERLAY\",\n 76: \"GRIDLINES\",\n 77: \"SET.PREFERRED\",\n 78: \"AXES\",\n 79: \"LEGEND\",\n 80: \"ATTACH.TEXT\",\n 81: \"ADD.ARROW\",\n 82: \"SELECT.CHART\",\n 83: \"SELECT.PLOT.AREA\",\n 84: \"PATTERNS\",\n 85: \"MAIN.CHART\",\n 86: \"OVERLAY\",\n 87: \"SCALE\",\n 88: \"FORMAT.LEGEND\",\n 89: \"FORMAT.TEXT\",\n 90: \"EDIT.REPEAT\",\n 91: \"PARSE\",\n 92: \"JUSTIFY\",\n 93: \"HIDE\",\n 94: \"UNHIDE\",\n 95: \"WORKSPACE\",\n 96: \"FORMULA\",\n 97: \"FORMULA.FILL\",\n 98: \"FORMULA.ARRAY\",\n 99: \"DATA.FIND.NEXT\",\n 100: \"DATA.FIND.PREV\",\n 101: \"FORMULA.FIND.NEXT\",\n 102: \"FORMULA.FIND.PREV\",\n 103: \"ACTIVATE\",\n 104: \"ACTIVATE.NEXT\",\n 105: \"ACTIVATE.PREV\",\n 106: \"UNLOCKED.NEXT\",\n 107: \"UNLOCKED.PREV\",\n 108: \"COPY.PICTURE\",\n 109: \"SELECT\",\n 110: \"DELETE.NAME\",\n 111: \"DELETE.FORMAT\",\n 112: \"VLINE\",\n 113: \"HLINE\",\n 114: \"VPAGE\",\n 115: \"HPAGE\",\n 116: \"VSCROLL\",\n 117: \"HSCROLL\",\n 118: \"ALERT\",\n 119: \"NEW\",\n 120: \"CANCEL.COPY\",\n 121: \"SHOW.CLIPBOARD\",\n 122: \"MESSAGE\",\n 124: \"PASTE.LINK\",\n 125: \"APP.ACTIVATE\",\n 126: \"DELETE.ARROW\",\n 127: \"ROW.HEIGHT\",\n 128: \"FORMAT.MOVE\",\n 129: \"FORMAT.SIZE\",\n 130: \"FORMULA.REPLACE\",\n 131: \"SEND.KEYS\",\n 132: \"SELECT.SPECIAL\",\n 133: \"APPLY.NAMES\",\n 134: \"REPLACE.FONT\",\n 135: \"FREEZE.PANES\",\n 136: \"SHOW.INFO\",\n 137: \"SPLIT\",\n 138: \"ON.WINDOW\",\n 139: \"ON.DATA\",\n 140: \"DISABLE.INPUT\",\n 142: \"OUTLINE\",\n 143: \"LIST.NAMES\",\n 144: \"FILE.CLOSE\",\n 145: \"SAVE.WORKBOOK\",\n 146: \"DATA.FORM\",\n 147: \"COPY.CHART\",\n 148: \"ON.TIME\",\n 149: \"WAIT\",\n 150: \"FORMAT.FONT\",\n 151: \"FILL.UP\",\n 152: \"FILL.LEFT\",\n 153: \"DELETE.OVERLAY\",\n 155: \"SHORT.MENUS\",\n 159: \"SET.UPDATE.STATUS\",\n 161: \"COLOR.PALETTE\",\n 162: \"DELETE.STYLE\",\n 163: \"WINDOW.RESTORE\",\n 164: \"WINDOW.MAXIMIZE\",\n 166: \"CHANGE.LINK\",\n 167: \"CALCULATE.DOCUMENT\",\n 168: \"ON.KEY\",\n 169: \"APP.RESTORE\",\n 170: \"APP.MOVE\",\n 171: \"APP.SIZE\",\n 172: \"APP.MINIMIZE\",\n 173: \"APP.MAXIMIZE\",\n 174: \"BRING.TO.FRONT\",\n 175: \"SEND.TO.BACK\",\n 185: \"MAIN.CHART.TYPE\",\n 186: \"OVERLAY.CHART.TYPE\",\n 187: \"SELECT.END\",\n 188: \"OPEN.MAIL\",\n 189: \"SEND.MAIL\",\n 190: \"STANDARD.FONT\",\n 191: \"CONSOLIDATE\",\n 192: \"SORT.SPECIAL\",\n 193: \"GALLERY.3D.AREA\",\n 194: \"GALLERY.3D.COLUMN\",\n 195: \"GALLERY.3D.LINE\",\n 196: \"GALLERY.3D.PIE\",\n 197: \"VIEW.3D\",\n 198: \"GOAL.SEEK\",\n 199: \"WORKGROUP\",\n 200: \"FILL.GROUP\",\n 201: \"UPDATE.LINK\",\n 202: \"PROMOTE\",\n 203: \"DEMOTE\",\n 204: \"SHOW.DETAIL\",\n 206: \"UNGROUP\",\n 207: \"OBJECT.PROPERTIES\",\n 208: \"SAVE.NEW.OBJECT\",\n 209: \"SHARE\",\n 210: \"SHARE.NAME\",\n 211: \"DUPLICATE\",\n 212: \"APPLY.STYLE\",\n 213: \"ASSIGN.TO.OBJECT\",\n 214: \"OBJECT.PROTECTION\",\n 215: \"HIDE.OBJECT\",\n 216: \"SET.EXTRACT\",\n 217: \"CREATE.PUBLISHER\",\n 218: \"SUBSCRIBE.TO\",\n 219: \"ATTRIBUTES\",\n 220: \"SHOW.TOOLBAR\",\n 222: \"PRINT.PREVIEW\",\n 223: \"EDIT.COLOR\",\n 224: \"SHOW.LEVELS\",\n 225: \"FORMAT.MAIN\",\n 226: \"FORMAT.OVERLAY\",\n 227: \"ON.RECALC\",\n 228: \"EDIT.SERIES\",\n 229: \"DEFINE.STYLE\",\n 240: \"LINE.PRINT\",\n 243: \"ENTER.DATA\",\n 249: \"GALLERY.RADAR\",\n 250: \"MERGE.STYLES\",\n 251: \"EDITION.OPTIONS\",\n 252: \"PASTE.PICTURE\",\n 253: \"PASTE.PICTURE.LINK\",\n 254: \"SPELLING\",\n 256: \"ZOOM\",\n 259: \"INSERT.OBJECT\",\n 260: \"WINDOW.MINIMIZE\",\n 265: \"SOUND.NOTE\",\n 266: \"SOUND.PLAY\",\n 267: \"FORMAT.SHAPE\",\n 268: \"EXTEND.POLYGON\",\n 269: \"FORMAT.AUTO\",\n 272: \"GALLERY.3D.BAR\",\n 273: \"GALLERY.3D.SURFACE\",\n 274: \"FILL.AUTO\",\n 276: \"CUSTOMIZE.TOOLBAR\",\n 277: \"ADD.TOOL\",\n 278: \"EDIT.OBJECT\",\n 279: \"ON.DOUBLECLICK\",\n 280: \"ON.ENTRY\",\n 281: \"WORKBOOK.ADD\",\n 282: \"WORKBOOK.MOVE\",\n 283: \"WORKBOOK.COPY\",\n 284: \"WORKBOOK.OPTIONS\",\n 285: \"SAVE.WORKSPACE\",\n 288: \"CHART.WIZARD\",\n 289: \"DELETE.TOOL\",\n 290: \"MOVE.TOOL\",\n 291: \"WORKBOOK.SELECT\",\n 292: \"WORKBOOK.ACTIVATE\",\n 293: \"ASSIGN.TO.TOOL\",\n 295: \"COPY.TOOL\",\n 296: \"RESET.TOOL\",\n 297: \"CONSTRAIN.NUMERIC\",\n 298: \"PASTE.TOOL\",\n 302: \"WORKBOOK.NEW\",\n 305: \"SCENARIO.CELLS\",\n 306: \"SCENARIO.DELETE\",\n 307: \"SCENARIO.ADD\",\n 308: \"SCENARIO.EDIT\",\n 309: \"SCENARIO.SHOW\",\n 310: \"SCENARIO.SHOW.NEXT\",\n 311: \"SCENARIO.SUMMARY\",\n 312: \"PIVOT.TABLE.WIZARD\",\n 313: \"PIVOT.FIELD.PROPERTIES\",\n 314: \"PIVOT.FIELD\",\n 315: \"PIVOT.ITEM\",\n 316: \"PIVOT.ADD.FIELDS\",\n 318: \"OPTIONS.CALCULATION\",\n 319: \"OPTIONS.EDIT\",\n 320: \"OPTIONS.VIEW\",\n 321: \"ADDIN.MANAGER\",\n 322: \"MENU.EDITOR\",\n 323: \"ATTACH.TOOLBARS\",\n 324: \"VBAActivate\",\n 325: \"OPTIONS.CHART\",\n 328: \"VBA.INSERT.FILE\",\n 330: \"VBA.PROCEDURE.DEFINITION\",\n 336: \"ROUTING.SLIP\",\n 338: \"ROUTE.DOCUMENT\",\n 339: \"MAIL.LOGON\",\n 342: \"INSERT.PICTURE\",\n 343: \"EDIT.TOOL\",\n 344: \"GALLERY.DOUGHNUT\",\n 350: \"CHART.TREND\",\n 352: \"PIVOT.ITEM.PROPERTIES\",\n 354: \"WORKBOOK.INSERT\",\n 355: \"OPTIONS.TRANSITION\",\n 356: \"OPTIONS.GENERAL\",\n 370: \"FILTER.ADVANCED\",\n 373: \"MAIL.ADD.MAILER\",\n 374: \"MAIL.DELETE.MAILER\",\n 375: \"MAIL.REPLY\",\n 376: \"MAIL.REPLY.ALL\",\n 377: \"MAIL.FORWARD\",\n 378: \"MAIL.NEXT.LETTER\",\n 379: \"DATA.LABEL\",\n 380: \"INSERT.TITLE\",\n 381: \"FONT.PROPERTIES\",\n 382: \"MACRO.OPTIONS\",\n 383: \"WORKBOOK.HIDE\",\n 384: \"WORKBOOK.UNHIDE\",\n 385: \"WORKBOOK.DELETE\",\n 386: \"WORKBOOK.NAME\",\n 388: \"GALLERY.CUSTOM\",\n 390: \"ADD.CHART.AUTOFORMAT\",\n 391: \"DELETE.CHART.AUTOFORMAT\",\n 392: \"CHART.ADD.DATA\",\n 393: \"AUTO.OUTLINE\",\n 394: \"TAB.ORDER\",\n 395: \"SHOW.DIALOG\",\n 396: \"SELECT.ALL\",\n 397: \"UNGROUP.SHEETS\",\n 398: \"SUBTOTAL.CREATE\",\n 399: \"SUBTOTAL.REMOVE\",\n 400: \"RENAME.OBJECT\",\n 412: \"WORKBOOK.SCROLL\",\n 413: \"WORKBOOK.NEXT\",\n 414: \"WORKBOOK.PREV\",\n 415: \"WORKBOOK.TAB.SPLIT\",\n 416: \"FULL.SCREEN\",\n 417: \"WORKBOOK.PROTECT\",\n 420: \"SCROLLBAR.PROPERTIES\",\n 421: \"PIVOT.SHOW.PAGES\",\n 422: \"TEXT.TO.COLUMNS\",\n 423: \"FORMAT.CHARTTYPE\",\n 424: \"LINK.FORMAT\",\n 425: \"TRACER.DISPLAY\",\n 430: \"TRACER.NAVIGATE\",\n 431: \"TRACER.CLEAR\",\n 432: \"TRACER.ERROR\",\n 433: \"PIVOT.FIELD.GROUP\",\n 434: \"PIVOT.FIELD.UNGROUP\",\n 435: \"CHECKBOX.PROPERTIES\",\n 436: \"LABEL.PROPERTIES\",\n 437: \"LISTBOX.PROPERTIES\",\n 438: \"EDITBOX.PROPERTIES\",\n 439: \"PIVOT.REFRESH\",\n 440: \"LINK.COMBO\",\n 441: \"OPEN.TEXT\",\n 442: \"HIDE.DIALOG\",\n 443: \"SET.DIALOG.FOCUS\",\n 444: \"ENABLE.OBJECT\",\n 445: \"PUSHBUTTON.PROPERTIES\",\n 446: \"SET.DIALOG.DEFAULT\",\n 447: \"FILTER\",\n 448: \"FILTER.SHOW.ALL\",\n 449: \"CLEAR.OUTLINE\",\n 450: \"FUNCTION.WIZARD\",\n 451: \"ADD.LIST.ITEM\",\n 452: \"SET.LIST.ITEM\",\n 453: \"REMOVE.LIST.ITEM\",\n 454: \"SELECT.LIST.ITEM\",\n 455: \"SET.CONTROL.VALUE\",\n 456: \"SAVE.COPY.AS\",\n 458: \"OPTIONS.LISTS.ADD\",\n 459: \"OPTIONS.LISTS.DELETE\",\n 460: \"SERIES.AXES\",\n 461: \"SERIES.X\",\n 462: \"SERIES.Y\",\n 463: \"ERRORBAR.X\",\n 464: \"ERRORBAR.Y\",\n 465: \"FORMAT.CHART\",\n 466: \"SERIES.ORDER\",\n 467: \"MAIL.LOGOFF\",\n 468: \"CLEAR.ROUTING.SLIP\",\n 469: \"APP.ACTIVATE.MICROSOFT\",\n 470: \"MAIL.EDIT.MAILER\",\n 471: \"ON.SHEET\",\n 472: \"STANDARD.WIDTH\",\n 473: \"SCENARIO.MERGE\",\n 474: \"SUMMARY.INFO\",\n 475: \"FIND.FILE\",\n 476: \"ACTIVE.CELL.FONT\",\n 477: \"ENABLE.TIPWIZARD\",\n 478: \"VBA.MAKE.ADDIN\",\n 480: \"INSERTDATATABLE\",\n 481: \"WORKGROUP.OPTIONS\",\n 482: \"MAIL.SEND.MAILER\",\n 485: \"AUTOCORRECT\",\n 489: \"POST.DOCUMENT\",\n 491: \"PICKLIST\",\n 493: \"VIEW.SHOW\",\n 494: \"VIEW.DEFINE\",\n 495: \"VIEW.DELETE\",\n 509: \"SHEET.BACKGROUND\",\n 510: \"INSERT.MAP.OBJECT\",\n 511: \"OPTIONS.MENONO\",\n 517: \"MSOCHECKS\",\n 518: \"NORMAL\",\n 519: \"LAYOUT\",\n 520: \"RM.PRINT.AREA\",\n 521: \"CLEAR.PRINT.AREA\",\n 522: \"ADD.PRINT.AREA\",\n 523: \"MOVE.BRK\",\n 545: \"HIDECURR.NOTE\",\n 546: \"HIDEALL.NOTES\",\n 547: \"DELETE.NOTE\",\n 548: \"TRAVERSE.NOTES\",\n 549: \"ACTIVATE.NOTES\",\n 620: \"PROTECT.REVISIONS\",\n 621: \"UNPROTECT.REVISIONS\",\n 647: \"OPTIONS.ME\",\n 653: \"WEB.PUBLISH\",\n 667: \"NEWWEBQUERY\",\n 673: \"PIVOT.TABLE.CHART\",\n 753: \"OPTIONS.SAVE\",\n 755: \"OPTIONS.SPELL\",\n 808: \"HIDEALL.INKANNOTS\"\n};\nvar Ftab = {\n 0: \"COUNT\",\n 1: \"IF\",\n 2: \"ISNA\",\n 3: \"ISERROR\",\n 4: \"SUM\",\n 5: \"AVERAGE\",\n 6: \"MIN\",\n 7: \"MAX\",\n 8: \"ROW\",\n 9: \"COLUMN\",\n 10: \"NA\",\n 11: \"NPV\",\n 12: \"STDEV\",\n 13: \"DOLLAR\",\n 14: \"FIXED\",\n 15: \"SIN\",\n 16: \"COS\",\n 17: \"TAN\",\n 18: \"ATAN\",\n 19: \"PI\",\n 20: \"SQRT\",\n 21: \"EXP\",\n 22: \"LN\",\n 23: \"LOG10\",\n 24: \"ABS\",\n 25: \"INT\",\n 26: \"SIGN\",\n 27: \"ROUND\",\n 28: \"LOOKUP\",\n 29: \"INDEX\",\n 30: \"REPT\",\n 31: \"MID\",\n 32: \"LEN\",\n 33: \"VALUE\",\n 34: \"TRUE\",\n 35: \"FALSE\",\n 36: \"AND\",\n 37: \"OR\",\n 38: \"NOT\",\n 39: \"MOD\",\n 40: \"DCOUNT\",\n 41: \"DSUM\",\n 42: \"DAVERAGE\",\n 43: \"DMIN\",\n 44: \"DMAX\",\n 45: \"DSTDEV\",\n 46: \"VAR\",\n 47: \"DVAR\",\n 48: \"TEXT\",\n 49: \"LINEST\",\n 50: \"TREND\",\n 51: \"LOGEST\",\n 52: \"GROWTH\",\n 53: \"GOTO\",\n 54: \"HALT\",\n 55: \"RETURN\",\n 56: \"PV\",\n 57: \"FV\",\n 58: \"NPER\",\n 59: \"PMT\",\n 60: \"RATE\",\n 61: \"MIRR\",\n 62: \"IRR\",\n 63: \"RAND\",\n 64: \"MATCH\",\n 65: \"DATE\",\n 66: \"TIME\",\n 67: \"DAY\",\n 68: \"MONTH\",\n 69: \"YEAR\",\n 70: \"WEEKDAY\",\n 71: \"HOUR\",\n 72: \"MINUTE\",\n 73: \"SECOND\",\n 74: \"NOW\",\n 75: \"AREAS\",\n 76: \"ROWS\",\n 77: \"COLUMNS\",\n 78: \"OFFSET\",\n 79: \"ABSREF\",\n 80: \"RELREF\",\n 81: \"ARGUMENT\",\n 82: \"SEARCH\",\n 83: \"TRANSPOSE\",\n 84: \"ERROR\",\n 85: \"STEP\",\n 86: \"TYPE\",\n 87: \"ECHO\",\n 88: \"SET.NAME\",\n 89: \"CALLER\",\n 90: \"DEREF\",\n 91: \"WINDOWS\",\n 92: \"SERIES\",\n 93: \"DOCUMENTS\",\n 94: \"ACTIVE.CELL\",\n 95: \"SELECTION\",\n 96: \"RESULT\",\n 97: \"ATAN2\",\n 98: \"ASIN\",\n 99: \"ACOS\",\n 100: \"CHOOSE\",\n 101: \"HLOOKUP\",\n 102: \"VLOOKUP\",\n 103: \"LINKS\",\n 104: \"INPUT\",\n 105: \"ISREF\",\n 106: \"GET.FORMULA\",\n 107: \"GET.NAME\",\n 108: \"SET.VALUE\",\n 109: \"LOG\",\n 110: \"EXEC\",\n 111: \"CHAR\",\n 112: \"LOWER\",\n 113: \"UPPER\",\n 114: \"PROPER\",\n 115: \"LEFT\",\n 116: \"RIGHT\",\n 117: \"EXACT\",\n 118: \"TRIM\",\n 119: \"REPLACE\",\n 120: \"SUBSTITUTE\",\n 121: \"CODE\",\n 122: \"NAMES\",\n 123: \"DIRECTORY\",\n 124: \"FIND\",\n 125: \"CELL\",\n 126: \"ISERR\",\n 127: \"ISTEXT\",\n 128: \"ISNUMBER\",\n 129: \"ISBLANK\",\n 130: \"T\",\n 131: \"N\",\n 132: \"FOPEN\",\n 133: \"FCLOSE\",\n 134: \"FSIZE\",\n 135: \"FREADLN\",\n 136: \"FREAD\",\n 137: \"FWRITELN\",\n 138: \"FWRITE\",\n 139: \"FPOS\",\n 140: \"DATEVALUE\",\n 141: \"TIMEVALUE\",\n 142: \"SLN\",\n 143: \"SYD\",\n 144: \"DDB\",\n 145: \"GET.DEF\",\n 146: \"REFTEXT\",\n 147: \"TEXTREF\",\n 148: \"INDIRECT\",\n 149: \"REGISTER\",\n 150: \"CALL\",\n 151: \"ADD.BAR\",\n 152: \"ADD.MENU\",\n 153: \"ADD.COMMAND\",\n 154: \"ENABLE.COMMAND\",\n 155: \"CHECK.COMMAND\",\n 156: \"RENAME.COMMAND\",\n 157: \"SHOW.BAR\",\n 158: \"DELETE.MENU\",\n 159: \"DELETE.COMMAND\",\n 160: \"GET.CHART.ITEM\",\n 161: \"DIALOG.BOX\",\n 162: \"CLEAN\",\n 163: \"MDETERM\",\n 164: \"MINVERSE\",\n 165: \"MMULT\",\n 166: \"FILES\",\n 167: \"IPMT\",\n 168: \"PPMT\",\n 169: \"COUNTA\",\n 170: \"CANCEL.KEY\",\n 171: \"FOR\",\n 172: \"WHILE\",\n 173: \"BREAK\",\n 174: \"NEXT\",\n 175: \"INITIATE\",\n 176: \"REQUEST\",\n 177: \"POKE\",\n 178: \"EXECUTE\",\n 179: \"TERMINATE\",\n 180: \"RESTART\",\n 181: \"HELP\",\n 182: \"GET.BAR\",\n 183: \"PRODUCT\",\n 184: \"FACT\",\n 185: \"GET.CELL\",\n 186: \"GET.WORKSPACE\",\n 187: \"GET.WINDOW\",\n 188: \"GET.DOCUMENT\",\n 189: \"DPRODUCT\",\n 190: \"ISNONTEXT\",\n 191: \"GET.NOTE\",\n 192: \"NOTE\",\n 193: \"STDEVP\",\n 194: \"VARP\",\n 195: \"DSTDEVP\",\n 196: \"DVARP\",\n 197: \"TRUNC\",\n 198: \"ISLOGICAL\",\n 199: \"DCOUNTA\",\n 200: \"DELETE.BAR\",\n 201: \"UNREGISTER\",\n 204: \"USDOLLAR\",\n 205: \"FINDB\",\n 206: \"SEARCHB\",\n 207: \"REPLACEB\",\n 208: \"LEFTB\",\n 209: \"RIGHTB\",\n 210: \"MIDB\",\n 211: \"LENB\",\n 212: \"ROUNDUP\",\n 213: \"ROUNDDOWN\",\n 214: \"ASC\",\n 215: \"DBCS\",\n 216: \"RANK\",\n 219: \"ADDRESS\",\n 220: \"DAYS360\",\n 221: \"TODAY\",\n 222: \"VDB\",\n 223: \"ELSE\",\n 224: \"ELSE.IF\",\n 225: \"END.IF\",\n 226: \"FOR.CELL\",\n 227: \"MEDIAN\",\n 228: \"SUMPRODUCT\",\n 229: \"SINH\",\n 230: \"COSH\",\n 231: \"TANH\",\n 232: \"ASINH\",\n 233: \"ACOSH\",\n 234: \"ATANH\",\n 235: \"DGET\",\n 236: \"CREATE.OBJECT\",\n 237: \"VOLATILE\",\n 238: \"LAST.ERROR\",\n 239: \"CUSTOM.UNDO\",\n 240: \"CUSTOM.REPEAT\",\n 241: \"FORMULA.CONVERT\",\n 242: \"GET.LINK.INFO\",\n 243: \"TEXT.BOX\",\n 244: \"INFO\",\n 245: \"GROUP\",\n 246: \"GET.OBJECT\",\n 247: \"DB\",\n 248: \"PAUSE\",\n 251: \"RESUME\",\n 252: \"FREQUENCY\",\n 253: \"ADD.TOOLBAR\",\n 254: \"DELETE.TOOLBAR\",\n 255: \"User\",\n 256: \"RESET.TOOLBAR\",\n 257: \"EVALUATE\",\n 258: \"GET.TOOLBAR\",\n 259: \"GET.TOOL\",\n 260: \"SPELLING.CHECK\",\n 261: \"ERROR.TYPE\",\n 262: \"APP.TITLE\",\n 263: \"WINDOW.TITLE\",\n 264: \"SAVE.TOOLBAR\",\n 265: \"ENABLE.TOOL\",\n 266: \"PRESS.TOOL\",\n 267: \"REGISTER.ID\",\n 268: \"GET.WORKBOOK\",\n 269: \"AVEDEV\",\n 270: \"BETADIST\",\n 271: \"GAMMALN\",\n 272: \"BETAINV\",\n 273: \"BINOMDIST\",\n 274: \"CHIDIST\",\n 275: \"CHIINV\",\n 276: \"COMBIN\",\n 277: \"CONFIDENCE\",\n 278: \"CRITBINOM\",\n 279: \"EVEN\",\n 280: \"EXPONDIST\",\n 281: \"FDIST\",\n 282: \"FINV\",\n 283: \"FISHER\",\n 284: \"FISHERINV\",\n 285: \"FLOOR\",\n 286: \"GAMMADIST\",\n 287: \"GAMMAINV\",\n 288: \"CEILING\",\n 289: \"HYPGEOMDIST\",\n 290: \"LOGNORMDIST\",\n 291: \"LOGINV\",\n 292: \"NEGBINOMDIST\",\n 293: \"NORMDIST\",\n 294: \"NORMSDIST\",\n 295: \"NORMINV\",\n 296: \"NORMSINV\",\n 297: \"STANDARDIZE\",\n 298: \"ODD\",\n 299: \"PERMUT\",\n 300: \"POISSON\",\n 301: \"TDIST\",\n 302: \"WEIBULL\",\n 303: \"SUMXMY2\",\n 304: \"SUMX2MY2\",\n 305: \"SUMX2PY2\",\n 306: \"CHITEST\",\n 307: \"CORREL\",\n 308: \"COVAR\",\n 309: \"FORECAST\",\n 310: \"FTEST\",\n 311: \"INTERCEPT\",\n 312: \"PEARSON\",\n 313: \"RSQ\",\n 314: \"STEYX\",\n 315: \"SLOPE\",\n 316: \"TTEST\",\n 317: \"PROB\",\n 318: \"DEVSQ\",\n 319: \"GEOMEAN\",\n 320: \"HARMEAN\",\n 321: \"SUMSQ\",\n 322: \"KURT\",\n 323: \"SKEW\",\n 324: \"ZTEST\",\n 325: \"LARGE\",\n 326: \"SMALL\",\n 327: \"QUARTILE\",\n 328: \"PERCENTILE\",\n 329: \"PERCENTRANK\",\n 330: \"MODE\",\n 331: \"TRIMMEAN\",\n 332: \"TINV\",\n 334: \"MOVIE.COMMAND\",\n 335: \"GET.MOVIE\",\n 336: \"CONCATENATE\",\n 337: \"POWER\",\n 338: \"PIVOT.ADD.DATA\",\n 339: \"GET.PIVOT.TABLE\",\n 340: \"GET.PIVOT.FIELD\",\n 341: \"GET.PIVOT.ITEM\",\n 342: \"RADIANS\",\n 343: \"DEGREES\",\n 344: \"SUBTOTAL\",\n 345: \"SUMIF\",\n 346: \"COUNTIF\",\n 347: \"COUNTBLANK\",\n 348: \"SCENARIO.GET\",\n 349: \"OPTIONS.LISTS.GET\",\n 350: \"ISPMT\",\n 351: \"DATEDIF\",\n 352: \"DATESTRING\",\n 353: \"NUMBERSTRING\",\n 354: \"ROMAN\",\n 355: \"OPEN.DIALOG\",\n 356: \"SAVE.DIALOG\",\n 357: \"VIEW.GET\",\n 358: \"GETPIVOTDATA\",\n 359: \"HYPERLINK\",\n 360: \"PHONETIC\",\n 361: \"AVERAGEA\",\n 362: \"MAXA\",\n 363: \"MINA\",\n 364: \"STDEVPA\",\n 365: \"VARPA\",\n 366: \"STDEVA\",\n 367: \"VARA\",\n 368: \"BAHTTEXT\",\n 369: \"THAIDAYOFWEEK\",\n 370: \"THAIDIGIT\",\n 371: \"THAIMONTHOFYEAR\",\n 372: \"THAINUMSOUND\",\n 373: \"THAINUMSTRING\",\n 374: \"THAISTRINGLENGTH\",\n 375: \"ISTHAIDIGIT\",\n 376: \"ROUNDBAHTDOWN\",\n 377: \"ROUNDBAHTUP\",\n 378: \"THAIYEAR\",\n 379: \"RTD\",\n 380: \"CUBEVALUE\",\n 381: \"CUBEMEMBER\",\n 382: \"CUBEMEMBERPROPERTY\",\n 383: \"CUBERANKEDMEMBER\",\n 384: \"HEX2BIN\",\n 385: \"HEX2DEC\",\n 386: \"HEX2OCT\",\n 387: \"DEC2BIN\",\n 388: \"DEC2HEX\",\n 389: \"DEC2OCT\",\n 390: \"OCT2BIN\",\n 391: \"OCT2HEX\",\n 392: \"OCT2DEC\",\n 393: \"BIN2DEC\",\n 394: \"BIN2OCT\",\n 395: \"BIN2HEX\",\n 396: \"IMSUB\",\n 397: \"IMDIV\",\n 398: \"IMPOWER\",\n 399: \"IMABS\",\n 400: \"IMSQRT\",\n 401: \"IMLN\",\n 402: \"IMLOG2\",\n 403: \"IMLOG10\",\n 404: \"IMSIN\",\n 405: \"IMCOS\",\n 406: \"IMEXP\",\n 407: \"IMARGUMENT\",\n 408: \"IMCONJUGATE\",\n 409: \"IMAGINARY\",\n 410: \"IMREAL\",\n 411: \"COMPLEX\",\n 412: \"IMSUM\",\n 413: \"IMPRODUCT\",\n 414: \"SERIESSUM\",\n 415: \"FACTDOUBLE\",\n 416: \"SQRTPI\",\n 417: \"QUOTIENT\",\n 418: \"DELTA\",\n 419: \"GESTEP\",\n 420: \"ISEVEN\",\n 421: \"ISODD\",\n 422: \"MROUND\",\n 423: \"ERF\",\n 424: \"ERFC\",\n 425: \"BESSELJ\",\n 426: \"BESSELK\",\n 427: \"BESSELY\",\n 428: \"BESSELI\",\n 429: \"XIRR\",\n 430: \"XNPV\",\n 431: \"PRICEMAT\",\n 432: \"YIELDMAT\",\n 433: \"INTRATE\",\n 434: \"RECEIVED\",\n 435: \"DISC\",\n 436: \"PRICEDISC\",\n 437: \"YIELDDISC\",\n 438: \"TBILLEQ\",\n 439: \"TBILLPRICE\",\n 440: \"TBILLYIELD\",\n 441: \"PRICE\",\n 442: \"YIELD\",\n 443: \"DOLLARDE\",\n 444: \"DOLLARFR\",\n 445: \"NOMINAL\",\n 446: \"EFFECT\",\n 447: \"CUMPRINC\",\n 448: \"CUMIPMT\",\n 449: \"EDATE\",\n 450: \"EOMONTH\",\n 451: \"YEARFRAC\",\n 452: \"COUPDAYBS\",\n 453: \"COUPDAYS\",\n 454: \"COUPDAYSNC\",\n 455: \"COUPNCD\",\n 456: \"COUPNUM\",\n 457: \"COUPPCD\",\n 458: \"DURATION\",\n 459: \"MDURATION\",\n 460: \"ODDLPRICE\",\n 461: \"ODDLYIELD\",\n 462: \"ODDFPRICE\",\n 463: \"ODDFYIELD\",\n 464: \"RANDBETWEEN\",\n 465: \"WEEKNUM\",\n 466: \"AMORDEGRC\",\n 467: \"AMORLINC\",\n 468: \"CONVERT\",\n 724: \"SHEETJS\",\n 469: \"ACCRINT\",\n 470: \"ACCRINTM\",\n 471: \"WORKDAY\",\n 472: \"NETWORKDAYS\",\n 473: \"GCD\",\n 474: \"MULTINOMIAL\",\n 475: \"LCM\",\n 476: \"FVSCHEDULE\",\n 477: \"CUBEKPIMEMBER\",\n 478: \"CUBESET\",\n 479: \"CUBESETCOUNT\",\n 480: \"IFERROR\",\n 481: \"COUNTIFS\",\n 482: \"SUMIFS\",\n 483: \"AVERAGEIF\",\n 484: \"AVERAGEIFS\"\n};\nvar FtabArgc = {\n 2: 1,\n 3: 1,\n 10: 0,\n 15: 1,\n 16: 1,\n 17: 1,\n 18: 1,\n 19: 0,\n 20: 1,\n 21: 1,\n 22: 1,\n 23: 1,\n 24: 1,\n 25: 1,\n 26: 1,\n 27: 2,\n 30: 2,\n 31: 3,\n 32: 1,\n 33: 1,\n 34: 0,\n 35: 0,\n 38: 1,\n 39: 2,\n 40: 3,\n 41: 3,\n 42: 3,\n 43: 3,\n 44: 3,\n 45: 3,\n 47: 3,\n 48: 2,\n 53: 1,\n 61: 3,\n 63: 0,\n 65: 3,\n 66: 3,\n 67: 1,\n 68: 1,\n 69: 1,\n 70: 1,\n 71: 1,\n 72: 1,\n 73: 1,\n 74: 0,\n 75: 1,\n 76: 1,\n 77: 1,\n 79: 2,\n 80: 2,\n 83: 1,\n 85: 0,\n 86: 1,\n 89: 0,\n 90: 1,\n 94: 0,\n 95: 0,\n 97: 2,\n 98: 1,\n 99: 1,\n 101: 3,\n 102: 3,\n 105: 1,\n 106: 1,\n 108: 2,\n 111: 1,\n 112: 1,\n 113: 1,\n 114: 1,\n 117: 2,\n 118: 1,\n 119: 4,\n 121: 1,\n 126: 1,\n 127: 1,\n 128: 1,\n 129: 1,\n 130: 1,\n 131: 1,\n 133: 1,\n 134: 1,\n 135: 1,\n 136: 2,\n 137: 2,\n 138: 2,\n 140: 1,\n 141: 1,\n 142: 3,\n 143: 4,\n 144: 4,\n 161: 1,\n 162: 1,\n 163: 1,\n 164: 1,\n 165: 2,\n 172: 1,\n 175: 2,\n 176: 2,\n 177: 3,\n 178: 2,\n 179: 1,\n 184: 1,\n 186: 1,\n 189: 3,\n 190: 1,\n 195: 3,\n 196: 3,\n 197: 1,\n 198: 1,\n 199: 3,\n 201: 1,\n 207: 4,\n 210: 3,\n 211: 1,\n 212: 2,\n 213: 2,\n 214: 1,\n 215: 1,\n 225: 0,\n 229: 1,\n 230: 1,\n 231: 1,\n 232: 1,\n 233: 1,\n 234: 1,\n 235: 3,\n 244: 1,\n 247: 4,\n 252: 2,\n 257: 1,\n 261: 1,\n 271: 1,\n 273: 4,\n 274: 2,\n 275: 2,\n 276: 2,\n 277: 3,\n 278: 3,\n 279: 1,\n 280: 3,\n 281: 3,\n 282: 3,\n 283: 1,\n 284: 1,\n 285: 2,\n 286: 4,\n 287: 3,\n 288: 2,\n 289: 4,\n 290: 3,\n 291: 3,\n 292: 3,\n 293: 4,\n 294: 1,\n 295: 3,\n 296: 1,\n 297: 3,\n 298: 1,\n 299: 2,\n 300: 3,\n 301: 3,\n 302: 4,\n 303: 2,\n 304: 2,\n 305: 2,\n 306: 2,\n 307: 2,\n 308: 2,\n 309: 3,\n 310: 2,\n 311: 2,\n 312: 2,\n 313: 2,\n 314: 2,\n 315: 2,\n 316: 4,\n 325: 2,\n 326: 2,\n 327: 2,\n 328: 2,\n 331: 2,\n 332: 2,\n 337: 2,\n 342: 1,\n 343: 1,\n 346: 2,\n 347: 1,\n 350: 4,\n 351: 3,\n 352: 1,\n 353: 2,\n 360: 1,\n 368: 1,\n 369: 1,\n 370: 1,\n 371: 1,\n 372: 1,\n 373: 1,\n 374: 1,\n 375: 1,\n 376: 1,\n 377: 1,\n 378: 1,\n 382: 3,\n 385: 1,\n 392: 1,\n 393: 1,\n 396: 2,\n 397: 2,\n 398: 2,\n 399: 1,\n 400: 1,\n 401: 1,\n 402: 1,\n 403: 1,\n 404: 1,\n 405: 1,\n 406: 1,\n 407: 1,\n 408: 1,\n 409: 1,\n 410: 1,\n 414: 4,\n 415: 1,\n 416: 1,\n 417: 2,\n 420: 1,\n 421: 1,\n 422: 2,\n 424: 1,\n 425: 2,\n 426: 2,\n 427: 2,\n 428: 2,\n 430: 3,\n 438: 3,\n 439: 3,\n 440: 3,\n 443: 2,\n 444: 2,\n 445: 2,\n 446: 2,\n 447: 6,\n 448: 6,\n 449: 2,\n 450: 2,\n 464: 2,\n 468: 3,\n 476: 2,\n 479: 1,\n 480: 2,\n 65535: 0\n};\n/* Part 3 TODO: actually parse formulae */\n\nfunction ods_to_csf_formula(f\n/*:string*/\n)\n/*:string*/\n{\n if (f.slice(0, 3) == \"of:\") f = f.slice(3);\n /* 5.2 Basic Expressions */\n\n if (f.charCodeAt(0) == 61) {\n f = f.slice(1);\n if (f.charCodeAt(0) == 61) f = f.slice(1);\n }\n\n f = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n /* Part 3 Section 5.8 References */\n\n f = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function ($$, $1) {\n return $1.replace(/\\./g, \"\");\n });\n /* TODO: something other than this */\n\n f = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n return f.replace(/[;~]/g, \",\").replace(/\\|/g, \";\");\n}\n\nfunction csf_to_ods_formula(f\n/*:string*/\n)\n/*:string*/\n{\n var o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g, \":\");\n /* TODO: something other than this */\n\n return o.replace(/;/g, \"|\").replace(/,/g, \";\");\n}\n\nfunction ods_to_csf_3D(r\n/*:string*/\n)\n/*:[string, string]*/\n{\n var a = r.split(\":\");\n var s = a[0].split(\".\")[0];\n return [s, a[0].split(\".\")[1] + (a.length > 1 ? \":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0]) : \"\")];\n}\n\nfunction csf_to_ods_3D(r\n/*:string*/\n)\n/*:string*/\n{\n return r.replace(/\\./, \"!\");\n}\n\nvar strs = {}; // shared strings\n\nvar _ssfopts = {}; // spreadsheet formatting options\n\n/*global Map */\n\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst\n/*:SST*/\n, str\n/*:string*/\n, rev)\n/*:number*/\n{\n var i = 0,\n len = sst.length;\n\n if (rev) {\n if (browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n var revarr = browser_has_Map ? rev.get(str) : rev[str];\n\n for (; i < revarr.length; ++i) {\n if (sst[revarr[i]].t === str) {\n sst.Count++;\n return revarr[i];\n }\n }\n }\n } else for (; i < len; ++i) {\n if (sst[i].t === str) {\n sst.Count++;\n return i;\n }\n }\n\n sst[len] = {\n t: str\n }\n /*:any*/\n ;\n sst.Count++;\n sst.Unique++;\n\n if (rev) {\n if (browser_has_Map) {\n if (!rev.has(str)) rev.set(str, []);\n rev.get(str).push(len);\n } else {\n if (!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n rev[str].push(len);\n }\n }\n\n return len;\n}\n\nfunction col_obj_w(C\n/*:number*/\n, col) {\n var p = {\n min: C + 1,\n max: C + 1\n }\n /*:any*/\n ;\n /* wch (chars), wpx (pixels) */\n\n var wch = -1;\n if (col.MDW) MDW = col.MDW;\n if (col.width != null) p.customWidth = 1;else if (col.wpx != null) wch = px2char(col.wpx);else if (col.wch != null) wch = col.wch;\n\n if (wch > -1) {\n p.width = char2width(wch);\n p.customWidth = 1;\n } else if (col.width != null) p.width = col.width;\n\n if (col.hidden) p.hidden = true;\n\n if (col.level != null) {\n p.outlineLevel = p.level = col.level;\n }\n\n return p;\n}\n\nfunction default_margins(margins\n/*:Margins*/\n, mode\n/*:?string*/\n) {\n if (!margins) return;\n var defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n if (mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n if (margins.left == null) margins.left = defs[0];\n if (margins.right == null) margins.right = defs[1];\n if (margins.top == null) margins.top = defs[2];\n if (margins.bottom == null) margins.bottom = defs[3];\n if (margins.header == null) margins.header = defs[4];\n if (margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles\n/*:Array*/\n, cell\n/*:Cell*/\n, opts) {\n var z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n var i = 0x3c,\n len = styles.length;\n\n if (z == null && opts.ssf) {\n for (; i < 0x188; ++i) {\n if (opts.ssf[i] == null) {\n SSF_load(cell.z, i); // $FlowIgnore\n\n opts.ssf[i] = cell.z;\n opts.revssf[cell.z] = z = i;\n break;\n }\n }\n }\n\n for (i = 0; i != len; ++i) {\n if (styles[i].numFmtId === z) return i;\n }\n\n styles[len] = {\n numFmtId: z,\n fontId: 0,\n fillId: 0,\n borderId: 0,\n xfId: 0,\n applyNumberFormat: 1\n };\n return len;\n}\n\nfunction safe_format(p\n/*:Cell*/\n, fmtid\n/*:number*/\n, fillid\n/*:?number*/\n, opts, themes, styles) {\n try {\n if (opts.cellNF) p.z = table_fmt[fmtid];\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (p.t === 'z' && !opts.cellStyles) return;\n if (p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n if ((!opts || opts.cellText !== false) && p.t !== 'z') try {\n if (table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || \"General\", fmtid);\n if (p.t === 'e') p.w = p.w || BErr[p.v];else if (fmtid === 0) {\n if (p.t === 'n') {\n if ((p.v | 0) === p.v) p.w = p.v.toString(10);else p.w = SSF_general_num(p.v);\n } else if (p.t === 'd') {\n var dd = datenum(p.v);\n if ((dd | 0) === dd) p.w = dd.toString(10);else p.w = SSF_general_num(dd);\n } else if (p.v === undefined) return \"\";else p.w = SSF_general(p.v, _ssfopts);\n } else if (p.t === 'd') p.w = SSF_format(fmtid, datenum(p.v), _ssfopts);else p.w = SSF_format(fmtid, p.v, _ssfopts);\n } catch (e) {\n if (opts.WTF) throw e;\n }\n if (!opts.cellStyles) return;\n if (fillid != null) try {\n p.s = styles.Fills[fillid];\n\n if (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n p.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n if (opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n }\n\n if (p.s.bgColor && p.s.bgColor.theme) {\n p.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n if (opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n }\n } catch (e) {\n if (opts.WTF && styles.Fills) throw e;\n }\n}\n\nfunction check_ws(ws\n/*:Worksheet*/\n, sname\n/*:string*/\n, i\n/*:number*/\n) {\n if (ws && ws['!ref']) {\n var range = safe_decode_range(ws['!ref']);\n if (range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n }\n}\n\nfunction parse_ws_xml_dim(ws\n/*:Worksheet*/\n, s\n/*:string*/\n) {\n var d = safe_decode_range(s);\n if (d.s.r <= d.e.r && d.s.c <= d.e.c && d.s.r >= 0 && d.s.c >= 0) ws[\"!ref\"] = encode_range(d);\n}\n\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex = /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar sheetprregex2 = /<(?:\\w:)?sheetPr[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetPr)>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n/* 18.3 Worksheets */\n\nfunction parse_ws_xml(data\n/*:?string*/\n, opts, idx\n/*:number*/\n, rels, wb\n/*:WBWBProps*/\n, themes, styles)\n/*:Worksheet*/\n{\n if (!data) return data;\n if (!rels) rels = {\n '!id': {}\n };\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n /* 18.3.1.99 worksheet CT_Worksheet */\n\n var s = opts.dense ? []\n /*:any*/\n : {}\n /*:any*/\n ;\n var refguess\n /*:Range*/\n = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n }\n /*:any*/\n ;\n var data1 = \"\",\n data2 = \"\";\n var mtch\n /*:?any*/\n = data.match(sheetdataregex);\n\n if (mtch) {\n data1 = data.slice(0, mtch.index);\n data2 = data.slice(mtch.index + mtch[0].length);\n } else data1 = data2 = data;\n /* 18.3.1.82 sheetPr CT_SheetPr */\n\n\n var sheetPr = data1.match(sheetprregex);\n if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);else if (sheetPr = data1.match(sheetprregex2)) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1] || \"\", s, wb, idx, styles, themes);\n /* 18.3.1.35 dimension CT_SheetDimension */\n\n var ridx = (data1.match(/<(?:\\w*:)?dimension/) || {\n index: -1\n }).index;\n\n if (ridx > 0) {\n var ref = data1.slice(ridx, ridx + 50).match(dimregex);\n if (ref) parse_ws_xml_dim(s, ref[1]);\n }\n /* 18.3.1.88 sheetViews CT_SheetViews */\n\n\n var svs = data1.match(svsregex);\n if (svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n /* 18.3.1.17 cols CT_Cols */\n\n var columns\n /*:Array*/\n = [];\n\n if (opts.cellStyles) {\n /* 18.3.1.13 col CT_Col */\n var cols = data1.match(colregex);\n if (cols) parse_ws_xml_cols(columns, cols);\n }\n /* 18.3.1.80 sheetData CT_SheetData ? */\n\n\n if (mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n /* 18.3.1.2 autoFilter CT_AutoFilter */\n\n var afilter = data2.match(afregex);\n if (afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n /* 18.3.1.55 mergeCells CT_MergeCells */\n\n var merges\n /*:Array*/\n = [];\n\n var _merge = data2.match(mergecregex);\n\n if (_merge) for (ridx = 0; ridx != _merge.length; ++ridx) {\n merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\") + 1));\n }\n /* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\n var hlink = data2.match(hlinkregex);\n if (hlink) parse_ws_xml_hlinks(s, hlink, rels);\n /* 18.3.1.62 pageMargins CT_PageMargins */\n\n var margins = data2.match(marginregex);\n if (margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n if (!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\n if (opts.sheetRows > 0 && s[\"!ref\"]) {\n var tmpref = safe_decode_range(s[\"!ref\"]);\n\n if (opts.sheetRows <= +tmpref.e.r) {\n tmpref.e.r = opts.sheetRows - 1;\n if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n s[\"!fullref\"] = s[\"!ref\"];\n s[\"!ref\"] = encode_range(tmpref);\n }\n }\n\n if (columns.length > 0) s[\"!cols\"] = columns;\n if (merges.length > 0) s[\"!merges\"] = merges;\n return s;\n}\n\nfunction write_ws_xml_merges(merges\n/*:Array*/\n)\n/*:string*/\n{\n if (merges.length === 0) return \"\";\n var o = '';\n\n for (var i = 0; i != merges.length; ++i) {\n o += '';\n }\n\n return o + '';\n}\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\n\n\nfunction parse_ws_xml_sheetpr(sheetPr\n/*:string*/\n, s, wb\n/*:WBWBProps*/\n, idx\n/*:number*/\n) {\n var data = parsexmltag(sheetPr);\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\n\nfunction parse_ws_xml_sheetpr2(sheetPr\n/*:string*/\n, body\n/*:string*/\n, s, wb\n/*:WBWBProps*/\n, idx\n/*:number*/\n) {\n parse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\n\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n var needed = false;\n var props = {},\n payload = null;\n\n if (opts.bookType !== 'xlsx' && wb.vbaraw) {\n var cname = wb.SheetNames[idx];\n\n try {\n if (wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname;\n } catch (e) {}\n\n needed = true;\n props.codeName = utf8write(escapexml(cname));\n }\n\n if (ws && ws[\"!outline\"]) {\n var outlineprops = {\n summaryBelow: 1,\n summaryRight: 1\n };\n if (ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n if (ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n payload = (payload || \"\") + writextag('outlinePr', null, outlineprops);\n }\n\n if (!needed && !payload) return;\n o[o.length] = writextag('sheetPr', payload, props);\n}\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\n\n\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\"formatColumns\", \"formatRows\", \"formatCells\", \"insertColumns\", \"insertRows\", \"insertHyperlinks\", \"deleteColumns\", \"deleteRows\", \"sort\", \"autoFilter\", \"pivotTables\"];\n\nfunction write_ws_xml_protection(sp)\n/*:string*/\n{\n // algorithmName, hashValue, saltValue, spinCount\n var o = {\n sheet: 1\n }\n /*:any*/\n ;\n sheetprot_deffalse.forEach(function (n) {\n if (sp[n] != null && sp[n]) o[n] = \"1\";\n });\n sheetprot_deftrue.forEach(function (n) {\n if (sp[n] != null && !sp[n]) o[n] = \"0\";\n });\n /* TODO: algorithm */\n\n if (sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n return writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data\n/*:Array*/\n, rels) {\n var dense = Array.isArray(s);\n\n for (var i = 0; i != data.length; ++i) {\n var val = parsexmltag(utf8read(data[i]), true);\n if (!val.ref) return;\n var rel = ((rels || {})['!id'] || [])[val.id];\n\n if (rel) {\n val.Target = rel.Target;\n if (val.location) val.Target += \"#\" + unescapexml(val.location);\n } else {\n val.Target = \"#\" + unescapexml(val.location);\n rel = {\n Target: val.Target,\n TargetMode: 'Internal'\n };\n }\n\n val.Rel = rel;\n\n if (val.tooltip) {\n val.Tooltip = val.tooltip;\n delete val.tooltip;\n }\n\n var rng = safe_decode_range(val.ref);\n\n for (var R = rng.s.r; R <= rng.e.r; ++R) {\n for (var C = rng.s.c; C <= rng.e.c; ++C) {\n var addr = encode_cell({\n c: C,\n r: R\n });\n\n if (dense) {\n if (!s[R]) s[R] = [];\n if (!s[R][C]) s[R][C] = {\n t: \"z\",\n v: undefined\n };\n s[R][C].l = val;\n } else {\n if (!s[addr]) s[addr] = {\n t: \"z\",\n v: undefined\n };\n s[addr].l = val;\n }\n }\n }\n }\n}\n\nfunction parse_ws_xml_margins(margin) {\n var o = {};\n [\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function (k) {\n if (margin[k]) o[k] = parseFloat(margin[k]);\n });\n return o;\n}\n\nfunction write_ws_xml_margins(margin)\n/*:string*/\n{\n default_margins(margin);\n return writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n var seencol = false;\n\n for (var coli = 0; coli != cols.length; ++coli) {\n var coll = parsexmltag(cols[coli], true);\n if (coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n var colm = parseInt(coll.min, 10) - 1,\n colM = parseInt(coll.max, 10) - 1;\n if (coll.outlineLevel) coll.level = +coll.outlineLevel || 0;\n delete coll.min;\n delete coll.max;\n coll.width = +coll.width;\n\n if (!seencol && coll.width) {\n seencol = true;\n find_mdw_colw(coll.width);\n }\n\n process_col(coll);\n\n while (colm <= colM) {\n columns[colm++] = dup(coll);\n }\n }\n}\n\nfunction write_ws_xml_cols(ws, cols)\n/*:string*/\n{\n var o = [\"\"],\n col;\n\n for (var i = 0; i != cols.length; ++i) {\n if (!(col = cols[i])) continue;\n o[o.length] = writextag('col', null, col_obj_w(i, col));\n }\n\n o[o.length] = \"\";\n return o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data\n/*:string*/\n) {\n var o = {\n ref: (data.match(/ref=\"([^\"]*)\"/) || [])[1]\n };\n return o;\n}\n\nfunction write_ws_xml_autofilter(data, ws, wb, idx)\n/*:string*/\n{\n var ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n if (!wb.Workbook) wb.Workbook = {\n Sheets: []\n }\n /*:any*/\n ;\n if (!wb.Workbook.Names) wb.Workbook.Names = [];\n var names\n /*: Array */\n = wb.Workbook.Names;\n var range = decode_range(ref);\n\n if (range.s.r == range.e.r) {\n range.e.r = decode_range(ws[\"!ref\"]).e.r;\n ref = encode_range(range);\n }\n\n for (var i = 0; i < names.length; ++i) {\n var name = names[i];\n if (name.Name != '_xlnm._FilterDatabase') continue;\n if (name.Sheet != idx) continue;\n name.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref;\n break;\n }\n\n if (i == names.length) names.push({\n Name: '_xlnm._FilterDatabase',\n Sheet: idx,\n Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref\n });\n return writextag(\"autoFilter\", null, {\n ref: ref\n });\n}\n/* 18.3.1.88 sheetViews CT_SheetViews */\n\n/* 18.3.1.87 sheetView CT_SheetView */\n\n\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\n\nfunction parse_ws_xml_sheetviews(data, wb\n/*:WBWBProps*/\n) {\n if (!wb.Views) wb.Views = [{}];\n (data.match(sviewregex) || []).forEach(function (r\n /*:string*/\n , i\n /*:number*/\n ) {\n var tag = parsexmltag(r); // $FlowIgnore\n\n if (!wb.Views[i]) wb.Views[i] = {}; // $FlowIgnore\n\n if (+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale; // $FlowIgnore\n\n if (parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n });\n}\n\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)\n/*:string*/\n{\n var sview = {\n workbookViewId: \"0\"\n }\n /*:any*/\n ; // $FlowIgnore\n\n if ((((wb || {}).Workbook || {}).Views || [])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n return writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell\n/*:Cell*/\n, ref, ws, opts\n/*::, idx, wb*/\n)\n/*:string*/\n{\n if (cell.c) ws['!comments'].push([ref, cell.c]);\n if (cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z' && !cell.f) return \"\";\n var vv = \"\";\n var oldt = cell.t,\n oldv = cell.v;\n if (cell.t !== \"z\") switch (cell.t) {\n case 'b':\n vv = cell.v ? \"1\" : \"0\";\n break;\n\n case 'n':\n vv = '' + cell.v;\n break;\n\n case 'e':\n vv = BErr[cell.v];\n break;\n\n case 'd':\n if (opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();else {\n cell = dup(cell);\n cell.t = 'n';\n vv = '' + (cell.v = datenum(parseDate(cell.v)));\n }\n if (typeof cell.z === 'undefined') cell.z = table_fmt[14];\n break;\n\n default:\n vv = cell.v;\n break;\n }\n var v = writetag('v', escapexml(vv)),\n o = {\n r: ref\n }\n /*:any*/\n ;\n /* TODO: cell style */\n\n var os = get_cell_style(opts.cellXfs, cell, opts);\n if (os !== 0) o.s = os;\n\n switch (cell.t) {\n case 'n':\n break;\n\n case 'd':\n o.t = \"d\";\n break;\n\n case 'b':\n o.t = \"b\";\n break;\n\n case 'e':\n o.t = \"e\";\n break;\n\n case 'z':\n break;\n\n default:\n if (cell.v == null) {\n delete cell.t;\n break;\n }\n\n if (cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\n if (opts && opts.bookSST) {\n v = writetag('v', '' + get_sst_id(opts.Strings, cell.v, opts.revStrings));\n o.t = \"s\";\n break;\n }\n\n o.t = \"str\";\n break;\n }\n\n if (cell.t != oldt) {\n cell.t = oldt;\n cell.v = oldv;\n }\n\n if (typeof cell.f == \"string\" && cell.f) {\n var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {\n t: \"array\",\n ref: cell.F\n } : null;\n v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n }\n\n if (cell.l) ws['!links'].push([ref, cell.l]);\n if (cell.D) o.cm = 1;\n return writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/function () {\n var cellregex = /<(?:\\w+:)?c[ \\/>]/,\n rowregex = /<\\/(?:\\w+:)?row>/;\n var rregex = /r=[\"']([^\"']*)[\"']/,\n isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n var refregex = /ref=[\"']([^\"']*)[\"']/;\n var match_v = matchtag(\"v\"),\n match_f = matchtag(\"f\");\n return function parse_ws_xml_data(sdata\n /*:string*/\n , s, opts, guess\n /*:Range*/\n , themes, styles) {\n var ri = 0,\n x = \"\",\n cells\n /*:Array*/\n = [],\n cref\n /*:?Array*/\n = [],\n idx = 0,\n i = 0,\n cc = 0,\n d = \"\",\n p\n /*:any*/\n ;\n var tag,\n tagr = 0,\n tagc = 0;\n var sstr, ftag;\n var fmtid = 0,\n fillid = 0;\n var do_format = Array.isArray(styles.CellXf),\n cf;\n var arrayf\n /*:Array<[Range, string]>*/\n = [];\n var sharedf = [];\n var dense = Array.isArray(s);\n var rows\n /*:Array*/\n = [],\n rowobj = {},\n rowrite = false;\n var sheetStubs = !!opts.sheetStubs;\n\n for (var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n x = marr[mt].trim();\n var xlen = x.length;\n if (xlen === 0) continue;\n /* 18.3.1.73 row CT_Row */\n\n var rstarti = 0;\n\n outa: for (ri = 0; ri < xlen; ++ri) {\n switch (\n /*x.charCodeAt(ri)*/\n x[ri]) {\n case \">\"\n /*62*/\n :\n if (\n /*x.charCodeAt(ri-1) != 47*/\n x[ri - 1] != \"/\") {\n ++ri;\n break outa;\n }\n\n if (opts && opts.cellStyles) {\n // TODO: avoid duplication\n tag = parsexmltag(x.slice(rstarti, ri), true);\n tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;\n tagc = -1;\n if (opts.sheetRows && opts.sheetRows < tagr) continue;\n rowobj = {};\n rowrite = false;\n\n if (tag.ht) {\n rowrite = true;\n rowobj.hpt = parseFloat(tag.ht);\n rowobj.hpx = pt2px(rowobj.hpt);\n }\n\n if (tag.hidden == \"1\") {\n rowrite = true;\n rowobj.hidden = true;\n }\n\n if (tag.outlineLevel != null) {\n rowrite = true;\n rowobj.level = +tag.outlineLevel;\n }\n\n if (rowrite) rows[tagr - 1] = rowobj;\n }\n\n break;\n\n case \"<\"\n /*60*/\n :\n rstarti = ri;\n break;\n }\n }\n\n if (rstarti >= ri) break;\n tag = parsexmltag(x.slice(rstarti, ri), true);\n tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;\n tagc = -1;\n if (opts.sheetRows && opts.sheetRows < tagr) continue;\n if (guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n if (guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n if (opts && opts.cellStyles) {\n rowobj = {};\n rowrite = false;\n\n if (tag.ht) {\n rowrite = true;\n rowobj.hpt = parseFloat(tag.ht);\n rowobj.hpx = pt2px(rowobj.hpt);\n }\n\n if (tag.hidden == \"1\") {\n rowrite = true;\n rowobj.hidden = true;\n }\n\n if (tag.outlineLevel != null) {\n rowrite = true;\n rowobj.level = +tag.outlineLevel;\n }\n\n if (rowrite) rows[tagr - 1] = rowobj;\n }\n /* 18.3.1.4 c CT_Cell */\n\n\n cells = x.slice(ri).split(cellregex);\n\n for (var rslice = 0; rslice != cells.length; ++rslice) {\n if (cells[rslice].trim().charAt(0) != \"<\") break;\n }\n\n cells = cells.slice(rslice);\n\n for (ri = 0; ri != cells.length; ++ri) {\n x = cells[ri].trim();\n if (x.length === 0) continue;\n cref = x.match(rregex);\n idx = ri;\n i = 0;\n cc = 0;\n x = \"\" : \"\") + x;\n\n if (cref != null && cref.length === 2) {\n idx = 0;\n d = cref[1];\n\n for (i = 0; i != d.length; ++i) {\n if ((cc = d.charCodeAt(i) - 64) < 1 || cc > 26) break;\n idx = 26 * idx + cc;\n }\n\n --idx;\n tagc = idx;\n } else ++tagc;\n\n for (i = 0; i != x.length; ++i) {\n if (x.charCodeAt(i) === 62) break;\n }\n\n ++i;\n tag = parsexmltag(x.slice(0, i), true);\n if (!tag.r) tag.r = encode_cell({\n r: tagr - 1,\n c: tagc\n });\n d = x.slice(i);\n p = {\n t: \"\"\n }\n /*:any*/\n ;\n if ((cref = d.match(match_v)) != null &&\n /*::cref != null && */\n cref[1] !== '') p.v = unescapexml(cref[1]);\n\n if (opts.cellFormula) {\n if ((cref = d.match(match_f)) != null &&\n /*::cref != null && */\n cref[1] !== '') {\n /* TODO: match against XLSXFutureFunctions */\n p.f = unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n if (!opts.xlfn) p.f = _xlfn(p.f);\n\n if (\n /*::cref != null && cref[0] != null && */\n cref[0].indexOf('t=\"array\"') > -1) {\n p.F = (d.match(refregex) || [])[1];\n if (p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n } else if (\n /*::cref != null && cref[0] != null && */\n cref[0].indexOf('t=\"shared\"') > -1) {\n // TODO: parse formula\n ftag = parsexmltag(cref[0]);\n\n var ___f = unescapexml(utf8read(cref[1]));\n\n if (!opts.xlfn) ___f = _xlfn(___f);\n sharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n }\n } else if (cref = d.match(/]*\\/>/)) {\n ftag = parsexmltag(cref[0]);\n if (sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]\n /*[0].ref*/\n , tag.r);\n }\n /* TODO: factor out contains logic */\n\n\n var _tag = decode_cell(tag.r);\n\n for (i = 0; i < arrayf.length; ++i) {\n if (_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r) if (_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c) p.F = arrayf[i][1];\n }\n }\n\n if (tag.t == null && p.v === undefined) {\n if (p.f || p.F) {\n p.v = 0;\n p.t = \"n\";\n } else if (!sheetStubs) continue;else p.t = \"z\";\n } else p.t = tag.t || \"n\";\n\n if (guess.s.c > tagc) guess.s.c = tagc;\n if (guess.e.c < tagc) guess.e.c = tagc;\n /* 18.18.11 t ST_CellType */\n\n switch (p.t) {\n case 'n':\n if (p.v == \"\" || p.v == null) {\n if (!sheetStubs) continue;\n p.t = 'z';\n } else p.v = parseFloat(p.v);\n\n break;\n\n case 's':\n if (typeof p.v == 'undefined') {\n if (!sheetStubs) continue;\n p.t = 'z';\n } else {\n sstr = strs[parseInt(p.v, 10)];\n p.v = sstr.t;\n p.r = sstr.r;\n if (opts.cellHTML) p.h = sstr.h;\n }\n\n break;\n\n case 'str':\n p.t = \"s\";\n p.v = p.v != null ? utf8read(p.v) : '';\n if (opts.cellHTML) p.h = escapehtml(p.v);\n break;\n\n case 'inlineStr':\n cref = d.match(isregex);\n p.t = 's';\n\n if (cref != null && (sstr = parse_si(cref[1]))) {\n p.v = sstr.t;\n if (opts.cellHTML) p.h = sstr.h;\n } else p.v = \"\";\n\n break;\n\n case 'b':\n p.v = parsexmlbool(p.v);\n break;\n\n case 'd':\n if (opts.cellDates) p.v = parseDate(p.v, 1);else {\n p.v = datenum(parseDate(p.v, 1));\n p.t = 'n';\n }\n break;\n\n /* error string in .w, number in .v */\n\n case 'e':\n if (!opts || opts.cellText !== false) p.w = p.v;\n p.v = RBErr[p.v];\n break;\n }\n /* formatting */\n\n\n fmtid = fillid = 0;\n cf = null;\n\n if (do_format && tag.s !== undefined) {\n cf = styles.CellXf[tag.s];\n\n if (cf != null) {\n if (cf.numFmtId != null) fmtid = cf.numFmtId;\n\n if (opts.cellStyles) {\n if (cf.fillId != null) fillid = cf.fillId;\n }\n }\n }\n\n safe_format(p, fmtid, fillid, opts, themes, styles);\n\n if (opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) {\n p.t = 'd';\n p.v = numdate(p.v);\n }\n\n if (tag.cm && opts.xlmeta) {\n var cm = (opts.xlmeta.Cell || [])[+tag.cm - 1];\n if (cm && cm.type == 'XLDAPR') p.D = true;\n }\n\n if (dense) {\n var _r = decode_cell(tag.r);\n\n if (!s[_r.r]) s[_r.r] = [];\n s[_r.r][_r.c] = p;\n } else s[tag.r] = p;\n }\n }\n\n if (rows.length > 0) s['!rows'] = rows;\n };\n}();\n\nfunction write_ws_xml_data(ws\n/*:Worksheet*/\n, opts, idx\n/*:number*/\n, wb\n/*:Workbook*/\n\n/*::, rels*/\n)\n/*:string*/\n{\n var o\n /*:Array*/\n = [],\n r\n /*:Array*/\n = [],\n range = safe_decode_range(ws['!ref']),\n cell = \"\",\n ref,\n rr = \"\",\n cols\n /*:Array*/\n = [],\n R = 0,\n C = 0,\n rows = ws['!rows'];\n var dense = Array.isArray(ws);\n var params = {\n r: rr\n }\n /*:any*/\n ,\n row\n /*:RowInfo*/\n ,\n height = -1;\n\n for (C = range.s.c; C <= range.e.c; ++C) {\n cols[C] = encode_col(C);\n }\n\n for (R = range.s.r; R <= range.e.r; ++R) {\n r = [];\n rr = encode_row(R);\n\n for (C = range.s.c; C <= range.e.c; ++C) {\n ref = cols[C] + rr;\n\n var _cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n if (_cell === undefined) continue;\n if ((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n }\n\n if (r.length > 0 || rows && rows[R]) {\n params = {\n r: rr\n }\n /*:any*/\n ;\n\n if (rows && rows[R]) {\n row = rows[R];\n if (row.hidden) params.hidden = 1;\n height = -1;\n if (row.hpx) height = px2pt(row.hpx);else if (row.hpt) height = row.hpt;\n\n if (height > -1) {\n params.ht = height;\n params.customHeight = 1;\n }\n\n if (row.level) {\n params.outlineLevel = row.level;\n }\n }\n\n o[o.length] = writextag('row', r.join(\"\"), params);\n }\n }\n\n if (rows) for (; R < rows.length; ++R) {\n if (rows && rows[R]) {\n params = {\n r: R + 1\n }\n /*:any*/\n ;\n row = rows[R];\n if (row.hidden) params.hidden = 1;\n height = -1;\n if (row.hpx) height = px2pt(row.hpx);else if (row.hpt) height = row.hpt;\n\n if (height > -1) {\n params.ht = height;\n params.customHeight = 1;\n }\n\n if (row.level) {\n params.outlineLevel = row.level;\n }\n\n o[o.length] = writextag('row', \"\", params);\n }\n }\n return o.join(\"\");\n}\n\nfunction write_ws_xml(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n, rels)\n/*:string*/\n{\n var o = [XML_HEADER, writextag('worksheet', null, {\n 'xmlns': XMLNS_main[0],\n 'xmlns:r': XMLNS.r\n })];\n var s = wb.SheetNames[idx],\n sidx = 0,\n rdata = \"\";\n var ws = wb.Sheets[s];\n if (ws == null) ws = {};\n var ref = ws['!ref'] || 'A1';\n var range = safe_decode_range(ref);\n\n if (range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n if (opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n range.e.c = Math.min(range.e.c, 0x3FFF);\n range.e.r = Math.min(range.e.c, 0xFFFFF);\n ref = encode_range(range);\n }\n\n if (!rels) rels = {};\n ws['!comments'] = [];\n var _drawing = [];\n write_ws_xml_sheetpr(ws, wb, idx, opts, o);\n o[o.length] = writextag('dimension', null, {\n 'ref': ref\n });\n o[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n /* TODO: store in WB, process styles */\n\n if (opts.sheetFormat) o[o.length] = writextag('sheetFormatPr', null, {\n defaultRowHeight: opts.sheetFormat.defaultRowHeight || '16',\n baseColWidth: opts.sheetFormat.baseColWidth || '10',\n outlineLevelRow: opts.sheetFormat.outlineLevelRow || '7'\n });\n if (ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = write_ws_xml_cols(ws, ws['!cols']);\n o[sidx = o.length] = '';\n ws['!links'] = [];\n\n if (ws['!ref'] != null) {\n rdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n if (rdata.length > 0) o[o.length] = rdata;\n }\n\n if (o.length > sidx + 1) {\n o[o.length] = '';\n o[sidx] = o[sidx].replace(\"/>\", \">\");\n }\n /* sheetCalcPr */\n\n\n if (ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n /* protectedRanges */\n\n /* scenarios */\n\n if (ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n /* sortState */\n\n /* dataConsolidate */\n\n /* customSheetViews */\n\n if (ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = write_ws_xml_merges(ws['!merges']);\n /* phoneticPr */\n\n /* conditionalFormatting */\n\n /* dataValidations */\n\n var relc = -1,\n rel,\n rId = -1;\n\n if (\n /*::(*/\n ws['!links']\n /*::||[])*/\n .length > 0) {\n o[o.length] = \"\";\n /*::(*/\n\n ws['!links']\n /*::||[])*/\n .forEach(function (l) {\n if (!l[1].Target) return;\n rel = {\n \"ref\": l[0]\n }\n /*:any*/\n ;\n\n if (l[1].Target.charAt(0) != \"#\") {\n rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n rel[\"r:id\"] = \"rId\" + rId;\n }\n\n if ((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc + 1));\n if (l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n o[o.length] = writextag(\"hyperlink\", null, rel);\n });\n o[o.length] = \"\";\n }\n\n delete ws['!links'];\n /* printOptions */\n\n if (ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n /* pageSetup */\n\n /* headerFooter */\n\n /* rowBreaks */\n\n /* colBreaks */\n\n /* customProperties */\n\n /* cellWatches */\n\n if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {\n numberStoredAsText: 1,\n sqref: ref\n }));\n /* smartTags */\n\n if (_drawing.length > 0) {\n rId = add_rels(rels, -1, \"../drawings/drawing\" + (idx + 1) + \".xml\", RELS.DRAW);\n o[o.length] = writextag(\"drawing\", null, {\n \"r:id\": \"rId\" + rId\n });\n ws['!drawing'] = _drawing;\n }\n\n if (ws['!comments'].length > 0) {\n rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx + 1) + \".vml\", RELS.VML);\n o[o.length] = writextag(\"legacyDrawing\", null, {\n \"r:id\": \"rId\" + rId\n });\n ws['!legacy'] = rId;\n }\n /* legacyDrawingHF */\n\n /* picture */\n\n /* oleObjects */\n\n /* controls */\n\n /* webPublishItems */\n\n /* tableParts */\n\n /* extLst */\n\n\n if (o.length > 1) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\n\n\nfunction parse_BrtRowHdr(data, length) {\n var z = {}\n /*:any*/\n ;\n var tgt = data.l + length;\n z.r = data.read_shift(4);\n data.l += 4; // TODO: ixfe\n\n var miyRw = data.read_shift(2);\n data.l += 1; // TODO: top/bot padding\n\n var flags = data.read_shift(1);\n data.l = tgt;\n if (flags & 0x07) z.level = flags & 0x07;\n if (flags & 0x10) z.hidden = true;\n if (flags & 0x20) z.hpt = miyRw / 20;\n return z;\n}\n\nfunction write_BrtRowHdr(R\n/*:number*/\n, range, ws) {\n var o = new_buf(17 + 8 * 16);\n var row = (ws['!rows'] || [])[R] || {};\n o.write_shift(4, R);\n o.write_shift(4, 0);\n /* TODO: ixfe */\n\n var miyRw = 0x0140;\n if (row.hpx) miyRw = px2pt(row.hpx) * 20;else if (row.hpt) miyRw = row.hpt * 20;\n o.write_shift(2, miyRw);\n o.write_shift(1, 0);\n /* top/bot padding */\n\n var flags = 0x0;\n if (row.level) flags |= row.level;\n if (row.hidden) flags |= 0x10;\n if (row.hpx || row.hpt) flags |= 0x20;\n o.write_shift(1, flags);\n o.write_shift(1, 0);\n /* phonetic guide */\n\n /* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\n var ncolspan = 0,\n lcs = o.l;\n o.l += 4;\n var caddr = {\n r: R,\n c: 0\n };\n\n for (var i = 0; i < 16; ++i) {\n if (range.s.c > i + 1 << 10 || range.e.c < i << 10) continue;\n var first = -1,\n last = -1;\n\n for (var j = i << 10; j < i + 1 << 10; ++j) {\n caddr.c = j;\n var cell = Array.isArray(ws) ? (ws[caddr.r] || [])[caddr.c] : ws[encode_cell(caddr)];\n\n if (cell) {\n if (first < 0) first = j;\n last = j;\n }\n }\n\n if (first < 0) continue;\n ++ncolspan;\n o.write_shift(4, first);\n o.write_shift(4, last);\n }\n\n var l = o.l;\n o.l = lcs;\n o.write_shift(4, ncolspan);\n o.l = l;\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_row_header(ba, ws, range, R) {\n var o = write_BrtRowHdr(R, range, ws);\n if (o.length > 17 || (ws['!rows'] || [])[R]) write_record(ba, 0x0000\n /* BrtRowHdr */\n , o);\n}\n/* [MS-XLSB] 2.4.820 BrtWsDim */\n\n\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\n\nfunction\n /*::data, length*/\nparse_BrtWsFmtInfo() {} //function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\n\n\nfunction parse_BrtWsProp(data, length) {\n var z = {};\n var f = data[data.l];\n ++data.l;\n z.above = !(f & 0x40);\n z.left = !(f & 0x80);\n /* TODO: pull flags */\n\n data.l += 18;\n z.name = parse_XLSBCodeName(data, length - 19);\n return z;\n}\n\nfunction write_BrtWsProp(str, outl, o) {\n if (o == null) o = new_buf(84 + 4 * str.length);\n var f = 0xC0;\n\n if (outl) {\n if (outl.above) f &= ~0x40;\n if (outl.left) f &= ~0x80;\n }\n\n o.write_shift(1, f);\n\n for (var i = 1; i < 3; ++i) {\n o.write_shift(1, 0);\n }\n\n write_BrtColor({\n auto: 1\n }, o);\n o.write_shift(-4, -1);\n o.write_shift(-4, -1);\n write_XLSBCodeName(str, o);\n return o.slice(0, o.l);\n}\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\n\n\nfunction parse_BrtCellBlank(data) {\n var cell = parse_XLSBCell(data);\n return [cell];\n}\n\nfunction write_BrtCellBlank(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n return write_XLSBCell(ncell, o);\n}\n\nfunction parse_BrtShortBlank(data) {\n var cell = parse_XLSBShortCell(data);\n return [cell];\n}\n\nfunction write_BrtShortBlank(cell, ncell, o) {\n if (o == null) o = new_buf(4);\n return write_XLSBShortCell(ncell, o);\n}\n/* [MS-XLSB] 2.4.307 BrtCellBool */\n\n\nfunction parse_BrtCellBool(data) {\n var cell = parse_XLSBCell(data);\n var fBool = data.read_shift(1);\n return [cell, fBool, 'b'];\n}\n\nfunction write_BrtCellBool(cell, ncell, o) {\n if (o == null) o = new_buf(9);\n write_XLSBCell(ncell, o);\n o.write_shift(1, cell.v ? 1 : 0);\n return o;\n}\n\nfunction parse_BrtShortBool(data) {\n var cell = parse_XLSBShortCell(data);\n var fBool = data.read_shift(1);\n return [cell, fBool, 'b'];\n}\n\nfunction write_BrtShortBool(cell, ncell, o) {\n if (o == null) o = new_buf(5);\n write_XLSBShortCell(ncell, o);\n o.write_shift(1, cell.v ? 1 : 0);\n return o;\n}\n/* [MS-XLSB] 2.4.308 BrtCellError */\n\n\nfunction parse_BrtCellError(data) {\n var cell = parse_XLSBCell(data);\n var bError = data.read_shift(1);\n return [cell, bError, 'e'];\n}\n\nfunction write_BrtCellError(cell, ncell, o) {\n if (o == null) o = new_buf(9);\n write_XLSBCell(ncell, o);\n o.write_shift(1, cell.v);\n return o;\n}\n\nfunction parse_BrtShortError(data) {\n var cell = parse_XLSBShortCell(data);\n var bError = data.read_shift(1);\n return [cell, bError, 'e'];\n}\n\nfunction write_BrtShortError(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n write_XLSBShortCell(ncell, o);\n o.write_shift(1, cell.v);\n o.write_shift(2, 0);\n o.write_shift(1, 0);\n return o;\n}\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\n\n\nfunction parse_BrtCellIsst(data) {\n var cell = parse_XLSBCell(data);\n var isst = data.read_shift(4);\n return [cell, isst, 's'];\n}\n\nfunction write_BrtCellIsst(cell, ncell, o) {\n if (o == null) o = new_buf(12);\n write_XLSBCell(ncell, o);\n o.write_shift(4, ncell.v);\n return o;\n}\n\nfunction parse_BrtShortIsst(data) {\n var cell = parse_XLSBShortCell(data);\n var isst = data.read_shift(4);\n return [cell, isst, 's'];\n}\n\nfunction write_BrtShortIsst(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n write_XLSBShortCell(ncell, o);\n o.write_shift(4, ncell.v);\n return o;\n}\n/* [MS-XLSB] 2.4.313 BrtCellReal */\n\n\nfunction parse_BrtCellReal(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_Xnum(data);\n return [cell, value, 'n'];\n}\n\nfunction write_BrtCellReal(cell, ncell, o) {\n if (o == null) o = new_buf(16);\n write_XLSBCell(ncell, o);\n write_Xnum(cell.v, o);\n return o;\n}\n\nfunction parse_BrtShortReal(data) {\n var cell = parse_XLSBShortCell(data);\n var value = parse_Xnum(data);\n return [cell, value, 'n'];\n}\n\nfunction write_BrtShortReal(cell, ncell, o) {\n if (o == null) o = new_buf(12);\n write_XLSBShortCell(ncell, o);\n write_Xnum(cell.v, o);\n return o;\n}\n/* [MS-XLSB] 2.4.314 BrtCellRk */\n\n\nfunction parse_BrtCellRk(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_RkNumber(data);\n return [cell, value, 'n'];\n}\n\nfunction write_BrtCellRk(cell, ncell, o) {\n if (o == null) o = new_buf(12);\n write_XLSBCell(ncell, o);\n write_RkNumber(cell.v, o);\n return o;\n}\n\nfunction parse_BrtShortRk(data) {\n var cell = parse_XLSBShortCell(data);\n var value = parse_RkNumber(data);\n return [cell, value, 'n'];\n}\n\nfunction write_BrtShortRk(cell, ncell, o) {\n if (o == null) o = new_buf(8);\n write_XLSBShortCell(ncell, o);\n write_RkNumber(cell.v, o);\n return o;\n}\n/* [MS-XLSB] 2.4.323 BrtCellRString */\n\n\nfunction parse_BrtCellRString(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_RichStr(data);\n return [cell, value, 'is'];\n}\n/* [MS-XLSB] 2.4.317 BrtCellSt */\n\n\nfunction parse_BrtCellSt(data) {\n var cell = parse_XLSBCell(data);\n var value = parse_XLWideString(data);\n return [cell, value, 'str'];\n}\n\nfunction write_BrtCellSt(cell, ncell, o) {\n if (o == null) o = new_buf(12 + 4 * cell.v.length);\n write_XLSBCell(ncell, o);\n write_XLWideString(cell.v, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction parse_BrtShortSt(data) {\n var cell = parse_XLSBShortCell(data);\n var value = parse_XLWideString(data);\n return [cell, value, 'str'];\n}\n\nfunction write_BrtShortSt(cell, ncell, o) {\n if (o == null) o = new_buf(8 + 4 * cell.v.length);\n write_XLSBShortCell(ncell, o);\n write_XLWideString(cell.v, o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\n\n\nfunction parse_BrtFmlaBool(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = data.read_shift(1);\n var o = [cell, value, 'b'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n}\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\n\n\nfunction parse_BrtFmlaError(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = data.read_shift(1);\n var o = [cell, value, 'e'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n}\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\n\n\nfunction parse_BrtFmlaNum(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = parse_Xnum(data);\n var o = [cell, value, 'n'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n}\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\n\n\nfunction parse_BrtFmlaString(data, length, opts) {\n var end = data.l + length;\n var cell = parse_XLSBCell(data);\n cell.r = opts['!row'];\n var value = parse_XLWideString(data);\n var o = [cell, value, 'str'];\n\n if (opts.cellFormula) {\n data.l += 2;\n var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n o[3] = stringify_formula(formula, null\n /*range*/\n , cell, opts.supbooks, opts);\n /* TODO */\n } else data.l = end;\n\n return o;\n}\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\n\n\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\n\nfunction write_BrtBeginMergeCells(cnt, o) {\n if (o == null) o = new_buf(4);\n o.write_shift(4, cnt);\n return o;\n}\n/* [MS-XLSB] 2.4.662 BrtHLink */\n\n\nfunction parse_BrtHLink(data, length\n/*::, opts*/\n) {\n var end = data.l + length;\n var rfx = parse_UncheckedRfX(data, 16);\n var relId = parse_XLNullableWideString(data);\n var loc = parse_XLWideString(data);\n var tooltip = parse_XLWideString(data);\n var display = parse_XLWideString(data);\n data.l = end;\n var o = {\n rfx: rfx,\n relId: relId,\n loc: loc,\n display: display\n }\n /*:any*/\n ;\n if (tooltip) o.Tooltip = tooltip;\n return o;\n}\n\nfunction write_BrtHLink(l, rId) {\n var o = new_buf(50 + 4 * (l[1].Target.length + (l[1].Tooltip || \"\").length));\n write_UncheckedRfX({\n s: decode_cell(l[0]),\n e: decode_cell(l[0])\n }, o);\n write_RelID(\"rId\" + rId, o);\n var locidx = l[1].Target.indexOf(\"#\");\n var loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx + 1);\n write_XLWideString(loc || \"\", o);\n write_XLWideString(l[1].Tooltip || \"\", o);\n write_XLWideString(\"\", o);\n return o.slice(0, o.l);\n}\n/* [MS-XLSB] 2.4.692 BrtPane */\n\n\nfunction\n /*data, length, opts*/\nparse_BrtPane() {}\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\n\n\nfunction parse_BrtArrFmla(data, length, opts) {\n var end = data.l + length;\n var rfx = parse_RfX(data, 16);\n var fAlwaysCalc = data.read_shift(1);\n var o = [rfx];\n o[2] = fAlwaysCalc;\n\n if (opts.cellFormula) {\n var formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n o[1] = formula;\n } else data.l = end;\n\n return o;\n}\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\n\n\nfunction parse_BrtShrFmla(data, length, opts) {\n var end = data.l + length;\n var rfx = parse_UncheckedRfX(data, 16);\n var o = [rfx];\n\n if (opts.cellFormula) {\n var formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n o[1] = formula;\n data.l = end;\n } else data.l = end;\n\n return o;\n}\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n\n/* TODO: once XLS ColInfo is set, combine the functions */\n\n\nfunction write_BrtColInfo(C\n/*:number*/\n, col, o) {\n if (o == null) o = new_buf(18);\n var p = col_obj_w(C, col);\n o.write_shift(-4, C);\n o.write_shift(-4, C);\n o.write_shift(4, (p.width || 10) * 256);\n o.write_shift(4, 0\n /*ixfe*/\n ); // style\n\n var flags = 0;\n if (col.hidden) flags |= 0x01;\n if (typeof p.width == 'number') flags |= 0x02;\n if (col.level) flags |= col.level << 8;\n o.write_shift(2, flags); // bit flag\n\n return o;\n}\n/* [MS-XLSB] 2.4.678 BrtMargins */\n\n\nvar BrtMarginKeys = [\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"];\n\nfunction parse_BrtMargins(data\n/*::, length, opts*/\n)\n/*:Margins*/\n{\n var margins = {}\n /*:any*/\n ;\n BrtMarginKeys.forEach(function (k) {\n margins[k] = parse_Xnum(data, 8);\n });\n return margins;\n}\n\nfunction write_BrtMargins(margins\n/*:Margins*/\n, o) {\n if (o == null) o = new_buf(6 * 8);\n default_margins(margins);\n BrtMarginKeys.forEach(function (k) {\n write_Xnum(margins\n /*:any*/\n [k], o);\n });\n return o;\n}\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\n\n\nfunction parse_BrtBeginWsView(data\n/*::, length, opts*/\n) {\n var f = data.read_shift(2);\n data.l += 28;\n return {\n RTL: f & 0x20\n };\n}\n\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n if (o == null) o = new_buf(30);\n var f = 0x39c;\n if ((((Workbook || {}).Views || [])[0] || {}).RTL) f |= 0x20;\n o.write_shift(2, f); // bit flag\n\n o.write_shift(4, 0);\n o.write_shift(4, 0); // view first row\n\n o.write_shift(4, 0); // view first col\n\n o.write_shift(1, 0); // gridline color ICV\n\n o.write_shift(1, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 100); // zoom scale\n\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(2, 0);\n o.write_shift(4, 0); // workbook view id\n\n return o;\n}\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\n\n\nfunction write_BrtCellIgnoreEC(ref) {\n var o = new_buf(24);\n o.write_shift(4, 4);\n o.write_shift(4, 1);\n write_UncheckedRfX(ref, o);\n return o;\n}\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\n\n\nfunction write_BrtSheetProtection(sp, o) {\n if (o == null) o = new_buf(16 * 4 + 2);\n o.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n o.write_shift(4, 1); // this record should not be written if no protection\n\n [[\"objects\", false], // fObjects\n [\"scenarios\", false], // fScenarios\n [\"formatCells\", true], // fFormatCells\n [\"formatColumns\", true], // fFormatColumns\n [\"formatRows\", true], // fFormatRows\n [\"insertColumns\", true], // fInsertColumns\n [\"insertRows\", true], // fInsertRows\n [\"insertHyperlinks\", true], // fInsertHyperlinks\n [\"deleteColumns\", true], // fDeleteColumns\n [\"deleteRows\", true], // fDeleteRows\n [\"selectLockedCells\", false], // fSelLockedCells\n [\"sort\", true], // fSort\n [\"autoFilter\", true], // fAutoFilter\n [\"pivotTables\", true], // fPivotTables\n [\"selectUnlockedCells\", false] // fSelUnlockedCells\n ].forEach(function (n) {\n /*:: if(o == null) throw \"unreachable\"; */\n if (n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);else o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n });\n return o;\n}\n\nfunction\n /*data, length, opts*/\nparse_BrtDVal() {}\n\nfunction\n /*data, length, opts*/\nparse_BrtDVal14() {}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\n\n\nfunction parse_ws_bin(data, _opts, idx, rels, wb\n/*:WBWBProps*/\n, themes, styles)\n/*:Worksheet*/\n{\n if (!data) return data;\n var opts = _opts || {};\n if (!rels) rels = {\n '!id': {}\n };\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var s\n /*:Worksheet*/\n = opts.dense ? [] : {};\n var ref;\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var state\n /*:Array*/\n = [];\n var pass = false,\n end = false;\n var row, p, cf, R, C, addr, sstr, rr, cell\n /*:Cell*/\n ;\n var merges\n /*:Array*/\n = [];\n opts.biff = 12;\n opts['!row'] = 0;\n var ai = 0,\n af = false;\n var arrayf\n /*:Array<[Range, string]>*/\n = [];\n var sharedf = {};\n var supbooks = opts.supbooks ||\n /*::(*/\n wb\n /*:: :any)*/\n .supbooks || [[]]\n /*:any*/\n ;\n supbooks.sharedf = sharedf;\n supbooks.arrayf = arrayf;\n supbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function (x) {\n return x.name;\n });\n\n if (!opts.supbooks) {\n opts.supbooks = supbooks;\n if (wb.Names) for (var i = 0; i < wb.Names.length; ++i) {\n supbooks[0][i + 1] = wb.Names[i];\n }\n }\n\n var colinfo\n /*:Array*/\n = [],\n rowinfo\n /*:Array*/\n = [];\n var seencol = false;\n XLSBRecordEnum[0x0010] = {\n n: \"BrtShortReal\",\n f: parse_BrtShortReal\n };\n var cm, vm;\n recordhopper(data, function ws_parse(val, RR, RT) {\n if (end) return;\n\n switch (RT) {\n case 0x0094:\n /* 'BrtWsDim' */\n ref = val;\n break;\n\n case 0x0000:\n /* 'BrtRowHdr' */\n row = val;\n if (opts.sheetRows && opts.sheetRows <= row.r) end = true;\n rr = encode_row(R = row.r);\n opts['!row'] = row.r;\n\n if (val.hidden || val.hpt || val.level != null) {\n if (val.hpt) val.hpx = pt2px(val.hpt);\n rowinfo[val.r] = val;\n }\n\n break;\n\n case 0x0002:\n /* 'BrtCellRk' */\n\n case 0x0003:\n /* 'BrtCellError' */\n\n case 0x0004:\n /* 'BrtCellBool' */\n\n case 0x0005:\n /* 'BrtCellReal' */\n\n case 0x0006:\n /* 'BrtCellSt' */\n\n case 0x0007:\n /* 'BrtCellIsst' */\n\n case 0x0008:\n /* 'BrtFmlaString' */\n\n case 0x0009:\n /* 'BrtFmlaNum' */\n\n case 0x000A:\n /* 'BrtFmlaBool' */\n\n case 0x000B:\n /* 'BrtFmlaError' */\n\n case 0x000D:\n /* 'BrtShortRk' */\n\n case 0x000E:\n /* 'BrtShortError' */\n\n case 0x000F:\n /* 'BrtShortBool' */\n\n case 0x0010:\n /* 'BrtShortReal' */\n\n case 0x0011:\n /* 'BrtShortSt' */\n\n case 0x0012:\n /* 'BrtShortIsst' */\n\n case 0x003E:\n /* 'BrtCellRString' */\n p = {\n t: val[2]\n }\n /*:any*/\n ;\n\n switch (val[2]) {\n case 'n':\n p.v = val[1];\n break;\n\n case 's':\n sstr = strs[val[1]];\n p.v = sstr.t;\n p.r = sstr.r;\n break;\n\n case 'b':\n p.v = val[1] ? true : false;\n break;\n\n case 'e':\n p.v = val[1];\n if (opts.cellText !== false) p.w = BErr[p.v];\n break;\n\n case 'str':\n p.t = 's';\n p.v = val[1];\n break;\n\n case 'is':\n p.t = 's';\n p.v = val[1].t;\n break;\n }\n\n if (cf = styles.CellXf[val[0].iStyleRef]) safe_format(p, cf.numFmtId, null, opts, themes, styles);\n C = val[0].c == -1 ? C + 1 : val[0].c;\n\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n s[R][C] = p;\n } else s[encode_col(C) + rr] = p;\n\n if (opts.cellFormula) {\n af = false;\n\n for (ai = 0; ai < arrayf.length; ++ai) {\n var aii = arrayf[ai];\n if (row.r >= aii[0].s.r && row.r <= aii[0].e.r) if (C >= aii[0].s.c && C <= aii[0].e.c) {\n p.F = encode_range(aii[0]);\n af = true;\n }\n }\n\n if (!af && val.length > 3) p.f = val[3];\n }\n\n if (refguess.s.r > row.r) refguess.s.r = row.r;\n if (refguess.s.c > C) refguess.s.c = C;\n if (refguess.e.r < row.r) refguess.e.r = row.r;\n if (refguess.e.c < C) refguess.e.c = C;\n\n if (opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n var _d = SSF_parse_date_code(p.v);\n\n if (_d) {\n p.t = 'd';\n p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n\n if (cm) {\n if (cm.type == 'XLDAPR') p.D = true;\n cm = void 0;\n }\n\n if (vm) vm = void 0;\n break;\n\n case 0x0001:\n /* 'BrtCellBlank' */\n\n case 0x000C:\n /* 'BrtShortBlank' */\n if (!opts.sheetStubs || pass) break;\n p = {\n t: 'z',\n v: void 0\n }\n /*:any*/\n ;\n C = val[0].c == -1 ? C + 1 : val[0].c;\n\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n s[R][C] = p;\n } else s[encode_col(C) + rr] = p;\n\n if (refguess.s.r > row.r) refguess.s.r = row.r;\n if (refguess.s.c > C) refguess.s.c = C;\n if (refguess.e.r < row.r) refguess.e.r = row.r;\n if (refguess.e.c < C) refguess.e.c = C;\n\n if (cm) {\n if (cm.type == 'XLDAPR') p.D = true;\n cm = void 0;\n }\n\n if (vm) vm = void 0;\n break;\n\n case 0x00B0:\n /* 'BrtMergeCell' */\n merges.push(val);\n break;\n\n case 0x0031:\n {\n /* 'BrtCellMeta' */\n cm = ((opts.xlmeta || {}).Cell || [])[val - 1];\n }\n break;\n\n case 0x01EE:\n /* 'BrtHLink' */\n var rel = rels['!id'][val.relId];\n\n if (rel) {\n val.Target = rel.Target;\n if (val.loc) val.Target += \"#\" + val.loc;\n val.Rel = rel;\n } else if (val.relId == '') {\n val.Target = \"#\" + val.loc;\n }\n\n for (R = val.rfx.s.r; R <= val.rfx.e.r; ++R) {\n for (C = val.rfx.s.c; C <= val.rfx.e.c; ++C) {\n if (opts.dense) {\n if (!s[R]) s[R] = [];\n if (!s[R][C]) s[R][C] = {\n t: 'z',\n v: undefined\n };\n s[R][C].l = val;\n } else {\n addr = encode_cell({\n c: C,\n r: R\n });\n if (!s[addr]) s[addr] = {\n t: 'z',\n v: undefined\n };\n s[addr].l = val;\n }\n }\n }\n\n break;\n\n case 0x01AA:\n /* 'BrtArrFmla' */\n if (!opts.cellFormula) break;\n arrayf.push(val);\n cell = opts.dense ? s[R][C] : s[encode_col(C) + rr]\n /*:any*/\n ;\n cell.f = stringify_formula(val[1], refguess, {\n r: row.r,\n c: C\n }, supbooks, opts);\n cell.F = encode_range(val[0]);\n break;\n\n case 0x01AB:\n /* 'BrtShrFmla' */\n if (!opts.cellFormula) break;\n sharedf[encode_cell(val[0].s)] = val[1];\n cell = opts.dense ? s[R][C] : s[encode_col(C) + rr];\n cell.f = stringify_formula(val[1], refguess, {\n r: row.r,\n c: C\n }, supbooks, opts);\n break;\n\n /* identical to 'ColInfo' in XLS */\n\n case 0x003C:\n /* 'BrtColInfo' */\n if (!opts.cellStyles) break;\n\n while (val.e >= val.s) {\n colinfo[val.e--] = {\n width: val.w / 256,\n hidden: !!(val.flags & 0x01),\n level: val.level\n };\n\n if (!seencol) {\n seencol = true;\n find_mdw_colw(val.w / 256);\n }\n\n process_col(colinfo[val.e + 1]);\n }\n\n break;\n\n case 0x00A1:\n /* 'BrtBeginAFilter' */\n s['!autofilter'] = {\n ref: encode_range(val)\n };\n break;\n\n case 0x01DC:\n /* 'BrtMargins' */\n s['!margins'] = val;\n break;\n\n case 0x0093:\n /* 'BrtWsProp' */\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (val.name) wb.Sheets[idx].CodeName = val.name;\n if (val.above || val.left) s['!outline'] = {\n above: val.above,\n left: val.left\n };\n break;\n\n case 0x0089:\n /* 'BrtBeginWsView' */\n if (!wb.Views) wb.Views = [{}];\n if (!wb.Views[0]) wb.Views[0] = {};\n if (val.RTL) wb.Views[0].RTL = true;\n break;\n\n case 0x01E5:\n /* 'BrtWsFmtInfo' */\n break;\n\n case 0x0040:\n /* 'BrtDVal' */\n\n case 0x041D:\n /* 'BrtDVal14' */\n break;\n\n case 0x0097:\n /* 'BrtPane' */\n break;\n\n case 0x0098:\n /* 'BrtSel' */\n\n case 0x00AF:\n /* 'BrtAFilterDateGroupItem' */\n\n case 0x0284:\n /* 'BrtActiveX' */\n\n case 0x0271:\n /* 'BrtBigName' */\n\n case 0x0232:\n /* 'BrtBkHim' */\n\n case 0x018C:\n /* 'BrtBrk' */\n\n case 0x0458:\n /* 'BrtCFIcon' */\n\n case 0x047A:\n /* 'BrtCFRuleExt' */\n\n case 0x01D7:\n /* 'BrtCFVO' */\n\n case 0x041A:\n /* 'BrtCFVO14' */\n\n case 0x0289:\n /* 'BrtCellIgnoreEC' */\n\n case 0x0451:\n /* 'BrtCellIgnoreEC14' */\n\n case 0x024D:\n /* 'BrtCellSmartTagProperty' */\n\n case 0x025F:\n /* 'BrtCellWatch' */\n\n case 0x0234:\n /* 'BrtColor' */\n\n case 0x041F:\n /* 'BrtColor14' */\n\n case 0x00A8:\n /* 'BrtColorFilter' */\n\n case 0x00AE:\n /* 'BrtCustomFilter' */\n\n case 0x049C:\n /* 'BrtCustomFilter14' */\n\n case 0x01F3:\n /* 'BrtDRef' */\n\n case 0x01FB:\n /* 'BrtDXF' */\n\n case 0x0226:\n /* 'BrtDrawing' */\n\n case 0x00AB:\n /* 'BrtDynamicFilter' */\n\n case 0x00A7:\n /* 'BrtFilter' */\n\n case 0x0499:\n /* 'BrtFilter14' */\n\n case 0x00A9:\n /* 'BrtIconFilter' */\n\n case 0x049D:\n /* 'BrtIconFilter14' */\n\n case 0x0227:\n /* 'BrtLegacyDrawing' */\n\n case 0x0228:\n /* 'BrtLegacyDrawingHF' */\n\n case 0x0295:\n /* 'BrtListPart' */\n\n case 0x027F:\n /* 'BrtOleObject' */\n\n case 0x01DE:\n /* 'BrtPageSetup' */\n\n case 0x0219:\n /* 'BrtPhoneticInfo' */\n\n case 0x01DD:\n /* 'BrtPrintOptions' */\n\n case 0x0218:\n /* 'BrtRangeProtection' */\n\n case 0x044F:\n /* 'BrtRangeProtection14' */\n\n case 0x02A8:\n /* 'BrtRangeProtectionIso' */\n\n case 0x0450:\n /* 'BrtRangeProtectionIso14' */\n\n case 0x0400:\n /* 'BrtRwDescent' */\n\n case 0x0297:\n /* 'BrtSheetCalcProp' */\n\n case 0x0217:\n /* 'BrtSheetProtection' */\n\n case 0x02A6:\n /* 'BrtSheetProtectionIso' */\n\n case 0x01F8:\n /* 'BrtSlc' */\n\n case 0x0413:\n /* 'BrtSparkline' */\n\n case 0x01AC:\n /* 'BrtTable' */\n\n case 0x00AA:\n /* 'BrtTop10Filter' */\n\n case 0x0C00:\n /* 'BrtUid' */\n\n case 0x0032:\n /* 'BrtValueMeta' */\n\n case 0x0816:\n /* 'BrtWebExtension' */\n\n case 0x0415:\n /* 'BrtWsFmtInfoEx14' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(RT);\n pass = true;\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n pass = false;\n break;\n\n default:\n if (RR.T) {\n /* empty */\n } else if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n }\n }, opts);\n delete opts.supbooks;\n delete opts['!row'];\n if (!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\n if (opts.sheetRows && s[\"!ref\"]) {\n var tmpref = safe_decode_range(s[\"!ref\"]);\n\n if (opts.sheetRows <= +tmpref.e.r) {\n tmpref.e.r = opts.sheetRows - 1;\n if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n s[\"!fullref\"] = s[\"!ref\"];\n s[\"!ref\"] = encode_range(tmpref);\n }\n }\n\n if (merges.length > 0) s[\"!merges\"] = merges;\n if (colinfo.length > 0) s[\"!cols\"] = colinfo;\n if (rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n return s;\n}\n/* TODO: something useful -- this is a stub */\n\n\nfunction write_ws_bin_cell(ba\n/*:BufArray*/\n, cell\n/*:Cell*/\n, R\n/*:number*/\n, C\n/*:number*/\n, opts, ws\n/*:Worksheet*/\n, last_seen\n/*:boolean*/\n)\n/*:boolean*/\n{\n if (cell.v === undefined) return false;\n var vv = \"\";\n\n switch (cell.t) {\n case 'b':\n vv = cell.v ? \"1\" : \"0\";\n break;\n\n case 'd':\n // no BrtCellDate :(\n cell = dup(cell);\n cell.z = cell.z || table_fmt[14];\n cell.v = datenum(parseDate(cell.v));\n cell.t = 'n';\n break;\n\n /* falls through */\n\n case 'n':\n case 'e':\n vv = '' + cell.v;\n break;\n\n default:\n vv = cell.v;\n break;\n }\n\n var o\n /*:any*/\n = {\n r: R,\n c: C\n }\n /*:any*/\n ;\n /* TODO: cell style */\n\n o.s = get_cell_style(opts.cellXfs, cell, opts);\n if (cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n if (cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\n switch (cell.t) {\n case 's':\n case 'str':\n if (opts.bookSST) {\n vv = get_sst_id(opts.Strings, cell.v\n /*:any*/\n , opts.revStrings);\n o.t = \"s\";\n o.v = vv;\n if (last_seen) write_record(ba, 0x0012\n /* BrtShortIsst */\n , write_BrtShortIsst(cell, o));else write_record(ba, 0x0007\n /* BrtCellIsst */\n , write_BrtCellIsst(cell, o));\n } else {\n o.t = \"str\";\n if (last_seen) write_record(ba, 0x0011\n /* BrtShortSt */\n , write_BrtShortSt(cell, o));else write_record(ba, 0x0006\n /* BrtCellSt */\n , write_BrtCellSt(cell, o));\n }\n\n return true;\n\n case 'n':\n /* TODO: determine threshold for Real vs RK */\n if (cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n if (last_seen) write_record(ba, 0x000D\n /* BrtShortRk */\n , write_BrtShortRk(cell, o));else write_record(ba, 0x0002\n /* BrtCellRk */\n , write_BrtCellRk(cell, o));\n } else {\n if (last_seen) write_record(ba, 0x0010\n /* BrtShortReal */\n , write_BrtShortReal(cell, o));else write_record(ba, 0x0005\n /* BrtCellReal */\n , write_BrtCellReal(cell, o));\n }\n\n return true;\n\n case 'b':\n o.t = \"b\";\n if (last_seen) write_record(ba, 0x000F\n /* BrtShortBool */\n , write_BrtShortBool(cell, o));else write_record(ba, 0x0004\n /* BrtCellBool */\n , write_BrtCellBool(cell, o));\n return true;\n\n case 'e':\n o.t = \"e\";\n if (last_seen) write_record(ba, 0x000E\n /* BrtShortError */\n , write_BrtShortError(cell, o));else write_record(ba, 0x0003\n /* BrtCellError */\n , write_BrtCellError(cell, o));\n return true;\n }\n\n if (last_seen) write_record(ba, 0x000C\n /* BrtShortBlank */\n , write_BrtShortBlank(cell, o));else write_record(ba, 0x0001\n /* BrtCellBlank */\n , write_BrtCellBlank(cell, o));\n return true;\n}\n\nfunction write_CELLTABLE(ba, ws\n/*:Worksheet*/\n, idx\n/*:number*/\n, opts\n/*::, wb:Workbook*/\n) {\n var range = safe_decode_range(ws['!ref'] || \"A1\"),\n ref,\n rr = \"\",\n cols\n /*:Array*/\n = [];\n write_record(ba, 0x0091\n /* BrtBeginSheetData */\n );\n var dense = Array.isArray(ws);\n var cap = range.e.r;\n if (ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\n for (var R = range.s.r; R <= cap; ++R) {\n rr = encode_row(R);\n /* [ACCELLTABLE] */\n\n /* BrtRowHdr */\n\n write_row_header(ba, ws, range, R);\n var last_seen = false;\n if (R <= range.e.r) for (var C = range.s.c; C <= range.e.c; ++C) {\n /* *16384CELL */\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n if (!cell) {\n last_seen = false;\n continue;\n }\n /* write cell */\n\n\n last_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);\n }\n }\n\n write_record(ba, 0x0092\n /* BrtEndSheetData */\n );\n}\n\nfunction write_MERGECELLS(ba, ws\n/*:Worksheet*/\n) {\n if (!ws || !ws['!merges']) return;\n write_record(ba, 0x00B1\n /* BrtBeginMergeCells */\n , write_BrtBeginMergeCells(ws['!merges'].length));\n ws['!merges'].forEach(function (m) {\n write_record(ba, 0x00B0\n /* BrtMergeCell */\n , write_BrtMergeCell(m));\n });\n write_record(ba, 0x00B2\n /* BrtEndMergeCells */\n );\n}\n\nfunction write_COLINFOS(ba, ws\n/*:Worksheet*/\n\n/*::, idx:number, opts, wb:Workbook*/\n) {\n if (!ws || !ws['!cols']) return;\n write_record(ba, 0x0186\n /* BrtBeginColInfos */\n );\n ws['!cols'].forEach(function (m, i) {\n if (m) write_record(ba, 0x003C\n /* 'BrtColInfo' */\n , write_BrtColInfo(i, m));\n });\n write_record(ba, 0x0187\n /* BrtEndColInfos */\n );\n}\n\nfunction write_IGNOREECS(ba, ws\n/*:Worksheet*/\n) {\n if (!ws || !ws['!ref']) return;\n write_record(ba, 0x0288\n /* BrtBeginCellIgnoreECs */\n );\n write_record(ba, 0x0289\n /* BrtCellIgnoreEC */\n , write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n write_record(ba, 0x028A\n /* BrtEndCellIgnoreECs */\n );\n}\n\nfunction write_HLINKS(ba, ws\n/*:Worksheet*/\n, rels) {\n /* *BrtHLink */\n ws['!links'].forEach(function (l) {\n if (!l[1].Target) return;\n var rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n write_record(ba, 0x01EE\n /* BrtHLink */\n , write_BrtHLink(l, rId));\n });\n delete ws['!links'];\n}\n\nfunction write_LEGACYDRAWING(ba, ws\n/*:Worksheet*/\n, idx\n/*:number*/\n, rels) {\n /* [BrtLegacyDrawing] */\n if (ws['!comments'].length > 0) {\n var rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx + 1) + \".vml\", RELS.VML);\n write_record(ba, 0x0227\n /* BrtLegacyDrawing */\n , write_RelID(\"rId\" + rId));\n ws['!legacy'] = rId;\n }\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n if (!ws['!autofilter']) return;\n var data = ws['!autofilter'];\n var ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n /* Update FilterDatabase defined name for the worksheet */\n\n if (!wb.Workbook) wb.Workbook = {\n Sheets: []\n }\n /*:any*/\n ;\n if (!wb.Workbook.Names) wb.Workbook.Names = [];\n var names\n /*: Array */\n = wb.Workbook.Names;\n var range = decode_range(ref);\n\n if (range.s.r == range.e.r) {\n range.e.r = decode_range(ws[\"!ref\"]).e.r;\n ref = encode_range(range);\n }\n\n for (var i = 0; i < names.length; ++i) {\n var name = names[i];\n if (name.Name != '_xlnm._FilterDatabase') continue;\n if (name.Sheet != idx) continue;\n name.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref;\n break;\n }\n\n if (i == names.length) names.push({\n Name: '_xlnm._FilterDatabase',\n Sheet: idx,\n Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref\n });\n write_record(ba, 0x00A1\n /* BrtBeginAFilter */\n , write_UncheckedRfX(safe_decode_range(ref)));\n /* *FILTERCOLUMN */\n\n /* [SORTSTATE] */\n\n /* BrtEndAFilter */\n\n write_record(ba, 0x00A2\n /* BrtEndAFilter */\n );\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n write_record(ba, 0x0085\n /* BrtBeginWsViews */\n );\n {\n /* 1*WSVIEW2 */\n\n /* [ACUID] */\n write_record(ba, 0x0089\n /* BrtBeginWsView */\n , write_BrtBeginWsView(ws, Workbook));\n /* [BrtPane] */\n\n /* *4BrtSel */\n\n /* *4SXSELECT */\n\n /* *FRT */\n\n write_record(ba, 0x008A\n /* BrtEndWsView */\n );\n }\n /* *FRT */\n\n write_record(ba, 0x0086\n /* BrtEndWsViews */\n );\n}\n\nfunction\n /*::ba, ws*/\nwrite_WSFMTINFO() {\n /* [ACWSFMTINFO] */\n // write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n if (!ws['!protect']) return;\n /* [BrtSheetProtectionIso] */\n\n write_record(ba, 0x0217\n /* BrtSheetProtection */\n , write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n, rels) {\n var ba = buf_array();\n var s = wb.SheetNames[idx],\n ws = wb.Sheets[s] || {};\n var c\n /*:string*/\n = s;\n\n try {\n if (wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c;\n } catch (e) {}\n\n var r = safe_decode_range(ws['!ref'] || \"A1\");\n\n if (r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n r.e.c = Math.min(r.e.c, 0x3FFF);\n r.e.r = Math.min(r.e.c, 0xFFFFF);\n }\n\n ws['!links'] = [];\n /* passed back to write_zip and removed there */\n\n ws['!comments'] = [];\n write_record(ba, 0x0081\n /* BrtBeginSheet */\n );\n if (wb.vbaraw || ws['!outline']) write_record(ba, 0x0093\n /* BrtWsProp */\n , write_BrtWsProp(c, ws['!outline']));\n write_record(ba, 0x0094\n /* BrtWsDim */\n , write_BrtWsDim(r));\n write_WSVIEWS2(ba, ws, wb.Workbook);\n write_WSFMTINFO(ba, ws);\n write_COLINFOS(ba, ws, idx, opts, wb);\n write_CELLTABLE(ba, ws, idx, opts, wb);\n /* [BrtSheetCalcProp] */\n\n write_SHEETPROTECT(ba, ws);\n /* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\n /* [SCENMAN] */\n\n write_AUTOFILTER(ba, ws, wb, idx);\n /* [SORTSTATE] */\n\n /* [DCON] */\n\n /* [USERSHVIEWS] */\n\n write_MERGECELLS(ba, ws);\n /* [BrtPhoneticInfo] */\n\n /* *CONDITIONALFORMATTING */\n\n /* [DVALS] */\n\n write_HLINKS(ba, ws, rels);\n /* [BrtPrintOptions] */\n\n if (ws['!margins']) write_record(ba, 0x01DC\n /* BrtMargins */\n , write_BrtMargins(ws['!margins']));\n /* [BrtPageSetup] */\n\n /* [HEADERFOOTER] */\n\n /* [RWBRK] */\n\n /* [COLBRK] */\n\n /* *BrtBigName */\n\n /* [CELLWATCHES] */\n\n if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) write_IGNOREECS(ba, ws);\n /* [SMARTTAGS] */\n\n /* [BrtDrawing] */\n\n write_LEGACYDRAWING(ba, ws, idx, rels);\n /* [BrtLegacyDrawingHF] */\n\n /* [BrtBkHim] */\n\n /* [OLEOBJECTS] */\n\n /* [ACTIVEXCONTROLS] */\n\n /* [WEBPUBITEMS] */\n\n /* [LISTPARTS] */\n\n /* FRTWORKSHEET */\n\n write_record(ba, 0x0082\n /* BrtEndSheet */\n );\n return ba.end();\n}\n\nfunction parse_Cache(data\n/*:string*/\n)\n/*:[Array, string, ?string]*/\n{\n var col\n /*:Array*/\n = [];\n var num = data.match(/^/);\n var f;\n /* 21.2.2.150 pt CT_NumVal */\n\n (data.match(/(.*?)<\\/c:pt>/mg) || []).forEach(function (pt) {\n var q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n if (!q) return;\n col[+q[1]] = num ? +q[2] : q[2];\n });\n /* 21.2.2.71 formatCode CT_Xstring */\n\n var nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\", \"General\"])[1]);\n (data.match(/(.*?)<\\/c:f>/mg) || []).forEach(function (F) {\n f = F.replace(/<.*?>/g, \"\");\n });\n return [col, nf, f];\n}\n/* 21.2 DrawingML - Charts */\n\n\nfunction parse_chart(data\n/*:?string*/\n, name\n/*:string*/\n, opts, rels, wb, csheet) {\n var cs\n /*:Worksheet*/\n = csheet || {\n \"!type\": \"chart\"\n }\n /*:any*/\n ;\n if (!data) return csheet;\n /* 21.2.2.27 chart CT_Chart */\n\n var C = 0,\n R = 0,\n col = \"A\";\n var refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n /* 21.2.2.120 numCache CT_NumData */\n\n (data.match(/[\\s\\S]*?<\\/c:numCache>/gm) || []).forEach(function (nc) {\n var cache = parse_Cache(nc);\n refguess.s.r = refguess.s.c = 0;\n refguess.e.c = C;\n col = encode_col(C);\n cache[0].forEach(function (n, i) {\n cs[col + encode_row(i)] = {\n t: 'n',\n v: n,\n z: cache[1]\n };\n R = i;\n });\n if (refguess.e.r < R) refguess.e.r = R;\n ++C;\n });\n if (C > 0) cs[\"!ref\"] = encode_range(refguess);\n return cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\n\n\nfunction parse_cs_xml(data\n/*:?string*/\n, opts, idx\n/*:number*/\n, rels, wb\n/*::, themes, styles*/\n)\n/*:Worksheet*/\n{\n if (!data) return data;\n /* 18.3.1.12 chartsheet CT_ChartSheet */\n\n if (!rels) rels = {\n '!id': {}\n };\n var s = {\n '!type': \"chart\",\n '!drawel': null,\n '!rel': \"\"\n }\n /*:any*/\n ;\n var m;\n /* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\n var sheetPr = data.match(sheetprregex);\n if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n /* 18.3.1.36 drawing CT_Drawing */\n\n if (m = data.match(/drawing r:id=\"(.*?)\"/)) s['!rel'] = m[1];\n if (rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n return s;\n}\n\nfunction write_cs_xml(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n, rels)\n/*:string*/\n{\n var o = [XML_HEADER, writextag('chartsheet', null, {\n 'xmlns': XMLNS_main[0],\n 'xmlns:r': XMLNS.r\n })];\n o[o.length] = writextag(\"drawing\", null, {\n \"r:id\": \"rId1\"\n });\n add_rels(rels, -1, \"../drawings/drawing\" + (idx + 1) + \".xml\", RELS.DRAW);\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.331 BrtCsProp */\n\n\nfunction parse_BrtCsProp(data, length\n/*:number*/\n) {\n data.l += 10;\n var name = parse_XLWideString(data, length - 10);\n return {\n name: name\n };\n}\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\n\n\nfunction parse_cs_bin(data, opts, idx\n/*:number*/\n, rels, wb\n/*::, themes, styles*/\n)\n/*:Worksheet*/\n{\n if (!data) return data;\n if (!rels) rels = {\n '!id': {}\n };\n var s = {\n '!type': \"chart\",\n '!drawel': null,\n '!rel': \"\"\n };\n var state\n /*:Array*/\n = [];\n var pass = false;\n recordhopper(data, function cs_parse(val, R, RT) {\n switch (RT) {\n case 0x0226:\n /* 'BrtDrawing' */\n s['!rel'] = val;\n break;\n\n case 0x028B:\n /* 'BrtCsProp' */\n if (!wb.Sheets[idx]) wb.Sheets[idx] = {};\n if (val.name) wb.Sheets[idx].CodeName = val.name;\n break;\n\n case 0x0232:\n /* 'BrtBkHim' */\n\n case 0x028C:\n /* 'BrtCsPageSetup' */\n\n case 0x029D:\n /* 'BrtCsProtection' */\n\n case 0x02A7:\n /* 'BrtCsProtectionIso' */\n\n case 0x0227:\n /* 'BrtLegacyDrawing' */\n\n case 0x0228:\n /* 'BrtLegacyDrawingHF' */\n\n case 0x01DC:\n /* 'BrtMargins' */\n\n case 0x0C00:\n /* 'BrtUid' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(RT);\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n break;\n\n default:\n if (R.T > 0) state.push(RT);else if (R.T < 0) state.pop();else if (!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n }\n }, opts);\n if (rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n return s;\n}\n\nfunction\n /*::idx:number, opts, wb:Workbook, rels*/\nwrite_cs_bin() {\n var ba = buf_array();\n write_record(ba, 0x0081\n /* BrtBeginSheet */\n );\n /* [BrtCsProp] */\n\n /* CSVIEWS */\n\n /* [[BrtCsProtectionIso] BrtCsProtection] */\n\n /* [USERCSVIEWS] */\n\n /* [BrtMargins] */\n\n /* [BrtCsPageSetup] */\n\n /* [HEADERFOOTER] */\n\n /* BrtDrawing */\n\n /* [BrtLegacyDrawing] */\n\n /* [BrtLegacyDrawingHF] */\n\n /* [BrtBkHim] */\n\n /* [WEBPUBITEMS] */\n\n /* FRTCHARTSHEET */\n\n write_record(ba, 0x0082\n /* BrtEndSheet */\n );\n return ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\n\n\nvar WBPropsDef = [['allowRefreshQuery', false, \"bool\"], ['autoCompressPictures', true, \"bool\"], ['backupFile', false, \"bool\"], ['checkCompatibility', false, \"bool\"], ['CodeName', ''], ['date1904', false, \"bool\"], ['defaultThemeVersion', 0, \"int\"], ['filterPrivacy', false, \"bool\"], ['hidePivotFieldList', false, \"bool\"], ['promptedSolutions', false, \"bool\"], ['publishItems', false, \"bool\"], ['refreshAllConnections', false, \"bool\"], ['saveExternalLinkValues', true, \"bool\"], ['showBorderUnselectedTables', true, \"bool\"], ['showInkAnnotation', true, \"bool\"], ['showObjects', 'all'], ['showPivotChartFilter', false, \"bool\"], ['updateLinks', 'userSet']];\n/* 18.2.30 (CT_BookView) Defaults */\n\nvar WBViewDef = [['activeTab', 0, \"int\"], ['autoFilterDateGrouping', true, \"bool\"], ['firstSheet', 0, \"int\"], ['minimized', false, \"bool\"], ['showHorizontalScroll', true, \"bool\"], ['showSheetTabs', true, \"bool\"], ['showVerticalScroll', true, \"bool\"], ['tabRatio', 600, \"int\"], ['visibility', 'visible'] //window{Height,Width}, {x,y}Window\n];\n/* 18.2.19 (CT_Sheet) Defaults */\n\nvar SheetDef = [//['state', 'visible']\n];\n/* 18.2.2 (CT_CalcPr) Defaults */\n\nvar CalcPrDef = [['calcCompleted', 'true'], ['calcMode', 'auto'], ['calcOnSave', 'true'], ['concurrentCalc', 'true'], ['fullCalcOnLoad', 'false'], ['fullPrecision', 'true'], ['iterate', 'false'], ['iterateCount', '100'], ['iterateDelta', '0.001'], ['refMode', 'A1']];\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n for (var j = 0; j != target.length; ++j) {\n var w = target[j];\n\n for (var i = 0; i != defaults.length; ++i) {\n var z = defaults[i];\n if (w[z[0]] == null) w[z[0]] = z[1];else switch (z[2]) {\n case \"bool\":\n if (typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]);\n break;\n\n case \"int\":\n if (typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10);\n break;\n }\n }\n }\n}\n\nfunction push_defaults(target, defaults) {\n for (var i = 0; i != defaults.length; ++i) {\n var z = defaults[i];\n if (target[z[0]] == null) target[z[0]] = z[1];else switch (z[2]) {\n case \"bool\":\n if (typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]);\n break;\n\n case \"int\":\n if (typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10);\n break;\n }\n }\n}\n\nfunction parse_wb_defaults(wb) {\n push_defaults(wb.WBProps, WBPropsDef);\n push_defaults(wb.CalcPr, CalcPrDef);\n push_defaults_array(wb.WBView, WBViewDef);\n push_defaults_array(wb.Sheets, SheetDef);\n _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb\n/*:Workbook*/\n)\n/*:string*/\n{\n /* TODO: store date1904 somewhere else */\n if (!wb.Workbook) return \"false\";\n if (!wb.Workbook.WBProps) return \"false\";\n return parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\"][*?\\/\\\\\".split(\"\");\n\nfunction check_ws_name(n\n/*:string*/\n, safe\n/*:?boolean*/\n)\n/*:boolean*/\n{\n if (n.length > 31) {\n if (safe) return false;\n throw new Error(\"Sheet names cannot exceed 31 chars\");\n }\n\n var _good = true;\n badchars.forEach(function (c) {\n if (n.indexOf(c) == -1) return;\n if (!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n _good = false;\n });\n return _good;\n}\n\nfunction check_wb_names(N, S, codes) {\n N.forEach(function (n, i) {\n check_ws_name(n);\n\n for (var j = 0; j < i; ++j) {\n if (n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n }\n\n if (codes) {\n var cn = S && S[i] && S[i].CodeName || n;\n if (cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n }\n });\n}\n\nfunction check_wb(wb) {\n if (!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n if (!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n var Sheets = wb.Workbook && wb.Workbook.Sheets || [];\n check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n }\n /* TODO: validate workbook */\n\n}\n/* 18.2 Workbook */\n\n\nvar wbnsregex = /<\\w+:workbook/;\n\nfunction parse_wb_xml(data, opts)\n/*:WorkbookFile*/\n{\n if (!data) throw new Error(\"Could not find file\");\n var wb =\n /*::(*/\n {\n AppVersion: {},\n WBProps: {},\n WBView: [],\n Sheets: [],\n CalcPr: {},\n Names: [],\n xmlns: \"\"\n }\n /*::)*/\n ;\n var pass = false,\n xmlns = \"xmlns\";\n var dname = {},\n dnstart = 0;\n data.replace(tagregex, function xml_wb(x, idx) {\n var y\n /*:any*/\n = parsexmltag(x);\n\n switch (strip_ns(y[0])) {\n case '':\n break;\n\n /* 18.2.13 fileVersion CT_FileVersion ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.12 fileSharing CT_FileSharing ? */\n\n case '':\n break;\n\n /* 18.2.28 workbookPr CT_WorkbookPr ? */\n\n case '':\n WBPropsDef.forEach(function (w) {\n if (y[w[0]] == null) return;\n\n switch (w[2]) {\n case \"bool\":\n wb.WBProps[w[0]] = parsexmlbool(y[w[0]]);\n break;\n\n case \"int\":\n wb.WBProps[w[0]] = parseInt(y[w[0]], 10);\n break;\n\n default:\n wb.WBProps[w[0]] = y[w[0]];\n }\n });\n if (y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n break;\n\n case '':\n break;\n\n /* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\n case '':\n break;\n\n /* 18.2.1 bookViews CT_BookViews ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.30 workbookView CT_BookView + */\n\n case '':\n delete y[0];\n wb.WBView.push(y);\n break;\n\n case '':\n break;\n\n /* 18.2.20 sheets CT_Sheets 1 */\n\n case '':\n case '':\n break;\n // aggregate sheet\n\n /* 18.2.19 sheet CT_Sheet + */\n\n case '':\n break;\n\n /* 18.2.15 functionGroups CT_FunctionGroups ? */\n\n case '':\n break;\n\n /* 18.2.14 functionGroup CT_FunctionGroup + */\n\n case '':\n case '':\n break;\n\n /* 18.2.8 externalReference CT_ExternalReference + */\n\n case '':\n break;\n\n case '':\n case '':\n pass = false;\n break;\n\n /* 18.2.5 definedName CT_DefinedName + */\n\n case '':\n {\n dname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n wb.Names.push(dname);\n }\n break;\n\n case '':\n break;\n\n /* 18.2.2 calcPr CT_CalcPr ? */\n\n case '':\n delete y[0];\n wb.CalcPr = y;\n break;\n\n case '':\n break;\n\n /* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.18 pivotCaches CT_PivotCaches ? */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.22 smartTagType CT_SmartTagType ? */\n\n case '':\n break;\n\n /* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\n case '':\n break;\n\n /* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\n case '':\n case '':\n break;\n\n /* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\n case '':\n case '':\n case '':\n break;\n\n /* 18.2.7 ext CT_Extension + */\n\n case '':\n pass = false;\n break;\n\n /* Others */\n\n case '':\n pass = true;\n break;\n\n case '':\n pass = false;\n break;\n\n /* TODO */\n\n case ' 0;\n /* fileVersion */\n\n /* fileSharing */\n\n var workbookPr\n /*:any*/\n = {\n codeName: \"ThisWorkbook\"\n }\n /*:any*/\n ;\n\n if (wb.Workbook && wb.Workbook.WBProps) {\n WBPropsDef.forEach(function (x) {\n /*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n if (wb.Workbook.WBProps[x[0]]\n /*:any*/\n == null) return;\n if (wb.Workbook.WBProps[x[0]]\n /*:any*/\n == x[1]) return;\n workbookPr[x[0]] = wb.Workbook.WBProps[x[0]]\n /*:any*/\n ;\n });\n /*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\n if (wb.Workbook.WBProps.CodeName) {\n workbookPr.codeName = wb.Workbook.WBProps.CodeName;\n delete workbookPr.CodeName;\n }\n }\n\n o[o.length] = writextag('workbookPr', null, workbookPr);\n /* workbookProtection */\n\n var sheets = wb.Workbook && wb.Workbook.Sheets || [];\n var i = 0;\n /* bookViews only written if first worksheet is hidden */\n\n if (sheets && sheets[0] && !!sheets[0].Hidden) {\n o[o.length] = \"\";\n\n for (i = 0; i != wb.SheetNames.length; ++i) {\n if (!sheets[i]) break;\n if (!sheets[i].Hidden) break;\n }\n\n if (i == wb.SheetNames.length) i = 0;\n o[o.length] = '';\n o[o.length] = \"\";\n }\n\n o[o.length] = \"\";\n\n for (i = 0; i != wb.SheetNames.length; ++i) {\n var sht = {\n name: escapexml(wb.SheetNames[i].slice(0, 31))\n }\n /*:any*/\n ;\n sht.sheetId = \"\" + (i + 1);\n sht[\"r:id\"] = \"rId\" + (i + 1);\n if (sheets[i]) switch (sheets[i].Hidden) {\n case 1:\n sht.state = \"hidden\";\n break;\n\n case 2:\n sht.state = \"veryHidden\";\n break;\n }\n o[o.length] = writextag('sheet', null, sht);\n }\n\n o[o.length] = \"\";\n /* functionGroups */\n\n /* externalReferences */\n\n if (write_names) {\n o[o.length] = \"\";\n if (wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function (n) {\n var d\n /*:any*/\n = {\n name: n.Name\n };\n if (n.Comment) d.comment = n.Comment;\n if (n.Sheet != null) d.localSheetId = \"\" + n.Sheet;\n if (n.Hidden) d.hidden = \"1\";\n if (!n.Ref) return;\n o[o.length] = writextag('definedName', escapexml(n.Ref), d);\n });\n o[o.length] = \"\";\n }\n /* calcPr */\n\n /* oleSize */\n\n /* customWorkbookViews */\n\n /* pivotCaches */\n\n /* smartTagPr */\n\n /* smartTagTypes */\n\n /* webPublishing */\n\n /* fileRecoveryPr */\n\n /* webPublishObjects */\n\n /* extLst */\n\n\n if (o.length > 2) {\n o[o.length] = '';\n o[1] = o[1].replace(\"/>\", \">\");\n }\n\n return o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\n\n\nfunction parse_BrtBundleSh(data, length\n/*:number*/\n) {\n var z = {};\n z.Hidden = data.read_shift(4); //hsState ST_SheetState\n\n z.iTabID = data.read_shift(4);\n z.strRelID = parse_RelID(data, length - 8);\n z.name = parse_XLWideString(data);\n return z;\n}\n\nfunction write_BrtBundleSh(data, o) {\n if (!o) o = new_buf(127);\n o.write_shift(4, data.Hidden);\n o.write_shift(4, data.iTabID);\n write_RelID(data.strRelID, o);\n write_XLWideString(data.name.slice(0, 31), o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.815 BrtWbProp */\n\n\nfunction parse_BrtWbProp(data, length)\n/*:WBProps*/\n{\n var o\n /*:WBProps*/\n = {}\n /*:any*/\n ;\n var flags = data.read_shift(4);\n o.defaultThemeVersion = data.read_shift(4);\n var strName = length > 8 ? parse_XLWideString(data) : \"\";\n if (strName.length > 0) o.CodeName = strName;\n o.autoCompressPictures = !!(flags & 0x10000);\n o.backupFile = !!(flags & 0x40);\n o.checkCompatibility = !!(flags & 0x1000);\n o.date1904 = !!(flags & 0x01);\n o.filterPrivacy = !!(flags & 0x08);\n o.hidePivotFieldList = !!(flags & 0x400);\n o.promptedSolutions = !!(flags & 0x10);\n o.publishItems = !!(flags & 0x800);\n o.refreshAllConnections = !!(flags & 0x40000);\n o.saveExternalLinkValues = !!(flags & 0x80);\n o.showBorderUnselectedTables = !!(flags & 0x04);\n o.showInkAnnotation = !!(flags & 0x20);\n o.showObjects = [\"all\", \"placeholders\", \"none\"][flags >> 13 & 0x03];\n o.showPivotChartFilter = !!(flags & 0x8000);\n o.updateLinks = [\"userSet\", \"never\", \"always\"][flags >> 8 & 0x03];\n return o;\n}\n\nfunction write_BrtWbProp(data\n/*:?WBProps*/\n, o) {\n if (!o) o = new_buf(72);\n var flags = 0;\n\n if (data) {\n /* TODO: mirror parse_BrtWbProp fields */\n if (data.filterPrivacy) flags |= 0x08;\n }\n\n o.write_shift(4, flags);\n o.write_shift(4, 0);\n write_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n return o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n var o = {};\n data.read_shift(4);\n o.ArchID = data.read_shift(4);\n data.l += length - 8;\n return o;\n}\n/* [MS-XLSB] 2.4.687 BrtName */\n\n\nfunction parse_BrtName(data, length, opts) {\n var end = data.l + length;\n data.l += 4; //var flags = data.read_shift(4);\n\n data.l += 1; //var chKey = data.read_shift(1);\n\n var itab = data.read_shift(4);\n var name = parse_XLNameWideString(data);\n var formula = parse_XLSBNameParsedFormula(data, 0, opts);\n var comment = parse_XLNullableWideString(data); //if(0 /* fProc */) {\n // unusedstring1: XLNullableWideString\n // description: XLNullableWideString\n // helpTopic: XLNullableWideString\n // unusedstring2: XLNullableWideString\n //}\n\n data.l = end;\n var out = {\n Name: name,\n Ptg: formula\n }\n /*:any*/\n ;\n if (itab < 0xFFFFFFF) out.Sheet = itab;\n if (comment) out.Comment = comment;\n return out;\n}\n/* [MS-XLSB] 2.1.7.61 Workbook */\n\n\nfunction parse_wb_bin(data, opts)\n/*:WorkbookFile*/\n{\n var wb = {\n AppVersion: {},\n WBProps: {},\n WBView: [],\n Sheets: [],\n CalcPr: {},\n xmlns: \"\"\n };\n var state\n /*:Array*/\n = [];\n var pass = false;\n if (!opts) opts = {};\n opts.biff = 12;\n var Names = [];\n var supbooks = [[]]\n /*:any*/\n ;\n supbooks.SheetNames = [];\n supbooks.XTI = [];\n XLSBRecordEnum[0x0010] = {\n n: \"BrtFRTArchID$\",\n f: parse_BrtFRTArchID$\n };\n recordhopper(data, function hopper_wb(val, R, RT) {\n switch (RT) {\n case 0x009C:\n /* 'BrtBundleSh' */\n supbooks.SheetNames.push(val.name);\n wb.Sheets.push(val);\n break;\n\n case 0x0099:\n /* 'BrtWbProp' */\n wb.WBProps = val;\n break;\n\n case 0x0027:\n /* 'BrtName' */\n if (val.Sheet != null) opts.SID = val.Sheet;\n val.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n delete opts.SID;\n delete val.Ptg;\n Names.push(val);\n break;\n\n case 0x040C:\n /* 'BrtNameExt' */\n break;\n\n case 0x0165:\n /* 'BrtSupSelf' */\n\n case 0x0166:\n /* 'BrtSupSame' */\n\n case 0x0163:\n /* 'BrtSupBookSrc' */\n\n case 0x029B:\n /* 'BrtSupAddin' */\n if (!supbooks[0].length) supbooks[0] = [RT, val];else supbooks.push([RT, val]);\n supbooks[supbooks.length - 1].XTI = [];\n break;\n\n case 0x016A:\n /* 'BrtExternSheet' */\n if (supbooks.length === 0) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n supbooks.XTI = supbooks.XTI.concat(val);\n break;\n\n case 0x0169:\n /* 'BrtPlaceholderName' */\n break;\n\n case 0x0817:\n /* 'BrtAbsPath15' */\n\n case 0x009E:\n /* 'BrtBookView' */\n\n case 0x008F:\n /* 'BrtBeginBundleShs' */\n\n case 0x0298:\n /* 'BrtBeginFnGroup' */\n\n case 0x0161:\n /* 'BrtBeginExternals' */\n break;\n\n /* case 'BrtModelTimeGroupingCalcCol' */\n\n case 0x0C00:\n /* 'BrtUid' */\n\n case 0x0C01:\n /* 'BrtRevisionPtr' */\n\n case 0x0216:\n /* 'BrtBookProtection' */\n\n case 0x02A5:\n /* 'BrtBookProtectionIso' */\n\n case 0x009D:\n /* 'BrtCalcProp' */\n\n case 0x0262:\n /* 'BrtCrashRecErr' */\n\n case 0x0802:\n /* 'BrtDecoupledPivotCacheID' */\n\n case 0x009B:\n /* 'BrtFileRecover' */\n\n case 0x0224:\n /* 'BrtFileSharing' */\n\n case 0x02A4:\n /* 'BrtFileSharingIso' */\n\n case 0x0080:\n /* 'BrtFileVersion' */\n\n case 0x0299:\n /* 'BrtFnGroup' */\n\n case 0x0850:\n /* 'BrtModelRelationship' */\n\n case 0x084D:\n /* 'BrtModelTable' */\n\n case 0x0225:\n /* 'BrtOleSize' */\n\n case 0x0805:\n /* 'BrtPivotTableRef' */\n\n case 0x0254:\n /* 'BrtSmartTagType' */\n\n case 0x081C:\n /* 'BrtTableSlicerCacheID' */\n\n case 0x081B:\n /* 'BrtTableSlicerCacheIDs' */\n\n case 0x0822:\n /* 'BrtTimelineCachePivotCacheID' */\n\n case 0x018D:\n /* 'BrtUserBookView' */\n\n case 0x009A:\n /* 'BrtWbFactoid' */\n\n case 0x045D:\n /* 'BrtWbProp14' */\n\n case 0x0229:\n /* 'BrtWebOpt' */\n\n case 0x082B:\n /* 'BrtWorkBookPr15' */\n break;\n\n case 0x0023:\n /* 'BrtFRTBegin' */\n state.push(RT);\n pass = true;\n break;\n\n case 0x0024:\n /* 'BrtFRTEnd' */\n state.pop();\n pass = false;\n break;\n\n case 0x0025:\n /* 'BrtACBegin' */\n state.push(RT);\n pass = true;\n break;\n\n case 0x0026:\n /* 'BrtACEnd' */\n state.pop();\n pass = false;\n break;\n\n case 0x0010:\n /* 'BrtFRTArchID$' */\n break;\n\n default:\n if (R.T) {\n /* empty */\n } else if (!pass || opts.WTF && state[state.length - 1] != 0x0025\n /* BrtACBegin */\n && state[state.length - 1] != 0x0023\n /* BrtFRTBegin */\n ) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\n }\n }, opts);\n parse_wb_defaults(wb); // $FlowIgnore\n\n wb.Names = Names;\n wb\n /*:any*/\n .supbooks = supbooks;\n return wb;\n}\n\nfunction write_BUNDLESHS(ba, wb\n/*::, opts*/\n) {\n write_record(ba, 0x008F\n /* BrtBeginBundleShs */\n );\n\n for (var idx = 0; idx != wb.SheetNames.length; ++idx) {\n var viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n var d = {\n Hidden: viz,\n iTabID: idx + 1,\n strRelID: 'rId' + (idx + 1),\n name: wb.SheetNames[idx]\n };\n write_record(ba, 0x009C\n /* BrtBundleSh */\n , write_BrtBundleSh(d));\n }\n\n write_record(ba, 0x0090\n /* BrtEndBundleShs */\n );\n}\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\n\n\nfunction write_BrtFileVersion(data, o) {\n if (!o) o = new_buf(127);\n\n for (var i = 0; i != 4; ++i) {\n o.write_shift(4, 0);\n }\n\n write_XLWideString(\"SheetJS\", o);\n write_XLWideString(XLSX.version, o);\n write_XLWideString(XLSX.version, o);\n write_XLWideString(\"7262\", o);\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.301 BrtBookView */\n\n\nfunction write_BrtBookView(idx, o) {\n if (!o) o = new_buf(29);\n o.write_shift(-4, 0);\n o.write_shift(-4, 460);\n o.write_shift(4, 28800);\n o.write_shift(4, 17600);\n o.write_shift(4, 500);\n o.write_shift(4, idx);\n o.write_shift(4, idx);\n var flags = 0x78;\n o.write_shift(1, flags);\n return o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb\n/*::, opts*/\n) {\n /* required if hidden tab appears before visible tab */\n if (!wb.Workbook || !wb.Workbook.Sheets) return;\n var sheets = wb.Workbook.Sheets;\n var i = 0,\n vistab = -1,\n hidden = -1;\n\n for (; i < sheets.length; ++i) {\n if (!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;else if (sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n }\n\n if (hidden > vistab) return;\n write_record(ba, 0x0087\n /* BrtBeginBookViews */\n );\n write_record(ba, 0x009E\n /* BrtBookView */\n , write_BrtBookView(vistab));\n /* 1*(BrtBookView *FRT) */\n\n write_record(ba, 0x0088\n /* BrtEndBookViews */\n );\n}\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\n\n\nfunction write_wb_bin(wb, opts) {\n var ba = buf_array();\n write_record(ba, 0x0083\n /* BrtBeginBook */\n );\n write_record(ba, 0x0080\n /* BrtFileVersion */\n , write_BrtFileVersion());\n /* [[BrtFileSharingIso] BrtFileSharing] */\n\n write_record(ba, 0x0099\n /* BrtWbProp */\n , write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n /* [ACABSPATH] */\n\n /* [[BrtBookProtectionIso] BrtBookProtection] */\n\n write_BOOKVIEWS(ba, wb, opts);\n write_BUNDLESHS(ba, wb, opts);\n /* [FNGROUP] */\n\n /* [EXTERNALS] */\n\n /* *BrtName */\n\n /* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\n /* [BrtOleSize] */\n\n /* *(BrtUserBookView *FRT) */\n\n /* [PIVOTCACHEIDS] */\n\n /* [BrtWbFactoid] */\n\n /* [SMARTTAGTYPES] */\n\n /* [BrtWebOpt] */\n\n /* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\n /* [WEBPUBITEMS] */\n\n /* [CRERRS] */\n\n /* FRTWORKBOOK */\n\n write_record(ba, 0x0084\n /* BrtEndBook */\n );\n return ba.end();\n}\n\nfunction parse_wb(data, name\n/*:string*/\n, opts)\n/*:WorkbookFile*/\n{\n if (name.slice(-4) === \".bin\") return parse_wb_bin(data\n /*:any*/\n , opts);\n return parse_wb_xml(data\n /*:any*/\n , opts);\n}\n\nfunction parse_ws(data, name\n/*:string*/\n, idx\n/*:number*/\n, opts, rels, wb, themes, styles)\n/*:Worksheet*/\n{\n if (name.slice(-4) === \".bin\") return parse_ws_bin(data\n /*:any*/\n , opts, idx, rels, wb, themes, styles);\n return parse_ws_xml(data\n /*:any*/\n , opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name\n/*:string*/\n, idx\n/*:number*/\n, opts, rels, wb, themes, styles)\n/*:Worksheet*/\n{\n if (name.slice(-4) === \".bin\") return parse_cs_bin(data\n /*:any*/\n , opts, idx, rels, wb, themes, styles);\n return parse_cs_xml(data\n /*:any*/\n , opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name\n/*:string*/\n, idx\n/*:number*/\n, opts, rels, wb, themes, styles)\n/*:Worksheet*/\n{\n if (name.slice(-4) === \".bin\") return parse_ms_bin(data\n /*:any*/\n , opts, idx, rels, wb, themes, styles);\n return parse_ms_xml(data\n /*:any*/\n , opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name\n/*:string*/\n, idx\n/*:number*/\n, opts, rels, wb, themes, styles)\n/*:Worksheet*/\n{\n if (name.slice(-4) === \".bin\") return parse_ds_bin(data\n /*:any*/\n , opts, idx, rels, wb, themes, styles);\n return parse_ds_xml(data\n /*:any*/\n , opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name\n/*:string*/\n, themes, opts) {\n if (name.slice(-4) === \".bin\") return parse_sty_bin(data\n /*:any*/\n , themes, opts);\n return parse_sty_xml(data\n /*:any*/\n , themes, opts);\n}\n\nfunction parse_theme(data\n/*:string*/\n, name\n/*:string*/\n, opts) {\n return parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name\n/*:string*/\n, opts)\n/*:SST*/\n{\n if (name.slice(-4) === \".bin\") return parse_sst_bin(data\n /*:any*/\n , opts);\n return parse_sst_xml(data\n /*:any*/\n , opts);\n}\n\nfunction parse_cmnt(data, name\n/*:string*/\n, opts)\n/*:Array*/\n{\n if (name.slice(-4) === \".bin\") return parse_comments_bin(data\n /*:any*/\n , opts);\n return parse_comments_xml(data\n /*:any*/\n , opts);\n}\n\nfunction parse_cc(data, name\n/*:string*/\n, opts) {\n if (name.slice(-4) === \".bin\") return parse_cc_bin(data\n /*:any*/\n , name, opts);\n return parse_cc_xml(data\n /*:any*/\n , name, opts);\n}\n\nfunction parse_xlink(data, rel, name\n/*:string*/\n, opts) {\n if (name.slice(-4) === \".bin\") return parse_xlink_bin(data\n /*:any*/\n , rel, name, opts);\n return parse_xlink_xml(data\n /*:any*/\n , rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name\n/*:string*/\n, opts) {\n if (name.slice(-4) === \".bin\") return parse_xlmeta_bin(data\n /*:any*/\n , name, opts);\n return parse_xlmeta_xml(data\n /*:any*/\n , name, opts);\n}\n\nfunction write_wb(wb, name\n/*:string*/\n, opts) {\n return (name.slice(-4) === \".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data\n/*:number*/\n, name\n/*:string*/\n, opts, wb\n/*:Workbook*/\n, rels) {\n return (name.slice(-4) === \".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n} // eslint-disable-next-line no-unused-vars\n\n\nfunction write_cs(data\n/*:number*/\n, name\n/*:string*/\n, opts, wb\n/*:Workbook*/\n, rels) {\n return (name.slice(-4) === \".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name\n/*:string*/\n, opts) {\n return (name.slice(-4) === \".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data\n/*:SST*/\n, name\n/*:string*/\n, opts) {\n return (name.slice(-4) === \".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data\n/*:Array*/\n, name\n/*:string*/\n, opts) {\n return (name.slice(-4) === \".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\n\n\nfunction write_xlmeta(name\n/*:string*/\n) {\n return (name.slice(-4) === \".bin\" ? write_xlmeta_bin : write_xlmeta_xml)();\n}\n\nvar attregexg2 = /([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2 = /([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\n\nfunction xlml_parsexmltag(tag\n/*:string*/\n, skip_root\n/*:?boolean*/\n) {\n var words = tag.split(/\\s+/);\n var z\n /*:any*/\n = []\n /*:any*/\n ;\n if (!skip_root) z[0] = words[0];\n if (words.length === 1) return z;\n var m = tag.match(attregexg2),\n y,\n j,\n w,\n i;\n if (m) for (i = 0; i != m.length; ++i) {\n y = m[i].match(attregex2);\n /*:: if(!y || !y[2]) continue; */\n\n if ((j = y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);else {\n if (y[1].slice(0, 6) === \"xmlns:\") w = \"xmlns\" + y[1].slice(6);else w = y[1].slice(j + 1);\n z[w] = y[2].slice(1, y[2].length - 1);\n }\n }\n return z;\n}\n\nfunction xlml_parsexmltagobj(tag\n/*:string*/\n) {\n var words = tag.split(/\\s+/);\n var z = {};\n if (words.length === 1) return z;\n var m = tag.match(attregexg2),\n y,\n j,\n w,\n i;\n if (m) for (i = 0; i != m.length; ++i) {\n y = m[i].match(attregex2);\n /*:: if(!y || !y[2]) continue; */\n\n if ((j = y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);else {\n if (y[1].slice(0, 6) === \"xmlns:\") w = \"xmlns\" + y[1].slice(6);else w = y[1].slice(j + 1);\n z[w] = y[2].slice(1, y[2].length - 1);\n }\n }\n return z;\n} // ----\n\n/* map from xlml named formats to SSF TODO: localize */\n\n\nvar XLMLFormatMap\n/*: {[string]:string}*/\n;\n\nfunction xlml_format(format, value)\n/*:string*/\n{\n var fmt = XLMLFormatMap[format] || unescapexml(format);\n if (fmt === \"General\") return SSF_general(value);\n return SSF_format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val\n/*:string*/\n) {\n var oval\n /*:any*/\n = val;\n\n switch ((cp[0].match(/dt:dt=\"([\\w.]+)\"/) || [\"\", \"\"])[1]) {\n case \"boolean\":\n oval = parsexmlbool(val);\n break;\n\n case \"i2\":\n case \"int\":\n oval = parseInt(val, 10);\n break;\n\n case \"r4\":\n case \"float\":\n oval = parseFloat(val);\n break;\n\n case \"date\":\n case \"dateTime.tz\":\n oval = parseDate(val);\n break;\n\n case \"i8\":\n case \"string\":\n case \"fixed\":\n case \"uuid\":\n case \"bin.base64\":\n break;\n\n default:\n throw new Error(\"bad custprop:\" + cp[0]);\n }\n\n Custprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell\n/*:Cell*/\n, nf, o) {\n if (cell.t === 'z') return;\n if (!o || o.cellText !== false) try {\n if (cell.t === 'e') {\n cell.w = cell.w || BErr[cell.v];\n } else if (nf === \"General\") {\n if (cell.t === 'n') {\n if ((cell.v | 0) === cell.v) cell.w = cell.v.toString(10);else cell.w = SSF_general_num(cell.v);\n } else cell.w = SSF_general(cell.v);\n } else cell.w = xlml_format(nf || \"General\", cell.v);\n } catch (e) {\n if (o.WTF) throw e;\n }\n\n try {\n var z = XLMLFormatMap[nf] || nf || \"General\";\n if (o.cellNF) cell.z = z;\n\n if (o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n var _d = SSF_parse_date_code(cell.v);\n\n if (_d) {\n cell.t = 'd';\n cell.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n } catch (e) {\n if (o.WTF) throw e;\n }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n if (opts.cellStyles) {\n if (stag.Interior) {\n var I = stag.Interior;\n if (I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n }\n }\n\n styles[stag.ID] = stag;\n}\n/* TODO: there must exist some form of OSP-blessed spec */\n\n\nfunction parse_xlml_data(xml, ss, data, cell\n/*:any*/\n, base, styles, csty, row, arrayf, o) {\n var nf = \"General\",\n sid = cell.StyleID,\n S = {};\n o = o || {};\n var interiors = [];\n var i = 0;\n if (sid === undefined && row) sid = row.StyleID;\n if (sid === undefined && csty) sid = csty.StyleID;\n\n while (styles[sid] !== undefined) {\n if (styles[sid].nf) nf = styles[sid].nf;\n if (styles[sid].Interior) interiors.push(styles[sid].Interior);\n if (!styles[sid].Parent) break;\n sid = styles[sid].Parent;\n }\n\n switch (data.Type) {\n case 'Boolean':\n cell.t = 'b';\n cell.v = parsexmlbool(xml);\n break;\n\n case 'String':\n cell.t = 's';\n cell.r = xlml_fixstr(unescapexml(xml));\n cell.v = xml.indexOf(\"<\") > -1 ? unescapexml(ss || xml).replace(/<.*?>/g, \"\") : cell.r; // todo: BR etc\n\n break;\n\n case 'DateTime':\n if (xml.slice(-1) != \"Z\") xml += \"Z\";\n cell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n if (cell.v !== cell.v) cell.v = unescapexml(xml);else if (cell.v < 60) cell.v = cell.v - 1;\n if (!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\n /* falls through */\n\n case 'Number':\n if (cell.v === undefined) cell.v = +xml;\n if (!cell.t) cell.t = 'n';\n break;\n\n case 'Error':\n cell.t = 'e';\n cell.v = RBErr[xml];\n if (o.cellText !== false) cell.w = xml;\n break;\n\n default:\n if (xml == \"\" && ss == \"\") {\n cell.t = 'z';\n } else {\n cell.t = 's';\n cell.v = xlml_fixstr(ss || xml);\n }\n\n break;\n }\n\n safe_format_xlml(cell, nf, o);\n\n if (o.cellFormula !== false) {\n if (cell.Formula) {\n var fstr = unescapexml(cell.Formula);\n /* strictly speaking, the leading = is required but some writers omit */\n\n if (fstr.charCodeAt(0) == 61\n /* = */\n ) fstr = fstr.slice(1);\n cell.f = rc_to_a1(fstr, base);\n delete cell.Formula;\n if (cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);else if (cell.ArrayRange) {\n cell.F = rc_to_a1(cell.ArrayRange, base);\n arrayf.push([safe_decode_range(cell.F), cell.F]);\n }\n } else {\n for (i = 0; i < arrayf.length; ++i) {\n if (base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r) if (base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c) cell.F = arrayf[i][1];\n }\n }\n }\n\n if (o.cellStyles) {\n interiors.forEach(function (x) {\n if (!S.patternType && x.patternType) S.patternType = x.patternType;\n });\n cell.s = S;\n }\n\n if (cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment\n/*:any*/\n) {\n comment.t = comment.v || \"\";\n comment.t = comment.t.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n comment.v = comment.w = comment.ixfe = undefined;\n}\n/* TODO: Everything */\n\n\nfunction parse_xlml_xml(d, _opts)\n/*:Workbook*/\n{\n var opts = _opts || {};\n make_ssf();\n var str = debom(xlml_normalize(d));\n\n if (opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n if (typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));else str = utf8read(str);\n }\n\n var opening = str.slice(0, 1024).toLowerCase(),\n ishtml = false;\n opening = opening.replace(/\".*?\"/g, \"\");\n\n if ((opening.indexOf(\">\") & 1023) > Math.min(opening.indexOf(\",\") & 1023, opening.indexOf(\";\") & 1023)) {\n var _o = dup(opts);\n\n _o.type = \"string\";\n return PRN.to_workbook(str, _o);\n }\n\n if (opening.indexOf(\"= 0) ishtml = true;\n });\n if (ishtml) return html_to_workbook(str, opts);\n XLMLFormatMap = {\n \"General Number\": \"General\",\n \"General Date\": table_fmt[22],\n \"Long Date\": \"dddd, mmmm dd, yyyy\",\n \"Medium Date\": table_fmt[15],\n \"Short Date\": table_fmt[14],\n \"Long Time\": table_fmt[19],\n \"Medium Time\": table_fmt[18],\n \"Short Time\": table_fmt[20],\n \"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n \"Fixed\": table_fmt[2],\n \"Standard\": table_fmt[4],\n \"Percent\": table_fmt[10],\n \"Scientific\": table_fmt[11],\n \"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n \"True/False\": '\"True\";\"True\";\"False\";@',\n \"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n }\n /*:any*/\n ;\n var Rn;\n var state = [],\n tmp;\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var sheets = {},\n sheetnames\n /*:Array*/\n = [],\n cursheet\n /*:Worksheet*/\n = opts.dense ? [] : {},\n sheetname = \"\";\n var cell = {}\n /*:any*/\n ,\n row = {}; // eslint-disable-line no-unused-vars\n\n var dtag = xlml_parsexmltag(''),\n didx = 0;\n var c = 0,\n r = 0;\n var refguess\n /*:Range*/\n = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var styles = {},\n stag = {};\n var ss = \"\",\n fidx = 0;\n var merges\n /*:Array*/\n = [];\n var Props = {},\n Custprops = {},\n pidx = 0,\n cp = [];\n var comments\n /*:Array*/\n = [],\n comment\n /*:Comment*/\n = {}\n /*:any*/\n ;\n var cstys = [],\n csty,\n seencol = false;\n var arrayf\n /*:Array<[Range, string]>*/\n = [];\n var rowinfo\n /*:Array*/\n = [],\n rowobj = {},\n cc = 0,\n rr = 0;\n var Workbook\n /*:WBWBProps*/\n = {\n Sheets: [],\n WBProps: {\n date1904: false\n }\n }\n /*:any*/\n ,\n wsprops = {};\n xlmlregex.lastIndex = 0;\n str = str.replace(//mg, \"\");\n var raw_Rn3 = \"\";\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase()) {\n case 'data'\n /*case 'Data'*/\n :\n if (raw_Rn3 == \"data\") {\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n }\n\n if (state[state.length - 1][1]) break;\n if (Rn[1] === '/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length - 1][0] ==\n /*\"Comment\"*/\n \"comment\" ? comment : cell, {\n c: c,\n r: r\n }, styles, cstys[c], row, arrayf, opts);else {\n ss = \"\";\n dtag = xlml_parsexmltag(Rn[0]);\n didx = Rn.index + Rn[0].length;\n }\n break;\n\n case 'cell'\n /*case 'Cell'*/\n :\n if (Rn[1] === '/') {\n if (comments.length > 0) cell.c = comments;\n\n if ((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n if (opts.dense) {\n if (!cursheet[r]) cursheet[r] = [];\n cursheet[r][c] = cell;\n } else cursheet[encode_col(c) + encode_row(r)] = cell;\n }\n\n if (cell.HRef) {\n cell.l = {\n Target: unescapexml(cell.HRef)\n }\n /*:any*/\n ;\n if (cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n delete cell.HRef;\n delete cell.HRefScreenTip;\n }\n\n if (cell.MergeAcross || cell.MergeDown) {\n cc = c + (parseInt(cell.MergeAcross, 10) | 0);\n rr = r + (parseInt(cell.MergeDown, 10) | 0);\n merges.push({\n s: {\n c: c,\n r: r\n },\n e: {\n c: cc,\n r: rr\n }\n });\n }\n\n if (!opts.sheetStubs) {\n if (cell.MergeAcross) c = cc + 1;else ++c;\n } else if (cell.MergeAcross || cell.MergeDown) {\n /*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n for (var cma = c; cma <= cc; ++cma) {\n for (var cmd = r; cmd <= rr; ++cmd) {\n if (cma > c || cmd > r) {\n if (opts.dense) {\n if (!cursheet[cmd]) cursheet[cmd] = [];\n cursheet[cmd][cma] = {\n t: 'z'\n };\n } else cursheet[encode_col(cma) + encode_row(cmd)] = {\n t: 'z'\n };\n }\n }\n }\n\n c = cc + 1;\n } else ++c;\n } else {\n cell = xlml_parsexmltagobj(Rn[0]);\n if (cell.Index) c = +cell.Index - 1;\n if (c < refguess.s.c) refguess.s.c = c;\n if (c > refguess.e.c) refguess.e.c = c;\n if (Rn[0].slice(-2) === \"/>\") ++c;\n comments = [];\n }\n\n break;\n\n case 'row'\n /*case 'Row'*/\n :\n if (Rn[1] === '/' || Rn[0].slice(-2) === \"/>\") {\n if (r < refguess.s.r) refguess.s.r = r;\n if (r > refguess.e.r) refguess.e.r = r;\n\n if (Rn[0].slice(-2) === \"/>\") {\n row = xlml_parsexmltag(Rn[0]);\n if (row.Index) r = +row.Index - 1;\n }\n\n c = 0;\n ++r;\n } else {\n row = xlml_parsexmltag(Rn[0]);\n if (row.Index) r = +row.Index - 1;\n rowobj = {};\n\n if (row.AutoFitHeight == \"0\" || row.Height) {\n rowobj.hpx = parseInt(row.Height, 10);\n rowobj.hpt = px2pt(rowobj.hpx);\n rowinfo[r] = rowobj;\n }\n\n if (row.Hidden == \"1\") {\n rowobj.hidden = true;\n rowinfo[r] = rowobj;\n }\n }\n\n break;\n\n case 'worksheet'\n /*case 'Worksheet'*/\n :\n /* TODO: read range from FullRows/FullColumns */\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n sheetnames.push(sheetname);\n\n if (refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n cursheet[\"!ref\"] = encode_range(refguess);\n\n if (opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n cursheet[\"!fullref\"] = cursheet[\"!ref\"];\n refguess.e.r = opts.sheetRows - 1;\n cursheet[\"!ref\"] = encode_range(refguess);\n }\n }\n\n if (merges.length) cursheet[\"!merges\"] = merges;\n if (cstys.length > 0) cursheet[\"!cols\"] = cstys;\n if (rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n sheets[sheetname] = cursheet;\n } else {\n refguess = {\n s: {\n r: 2000000,\n c: 2000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n r = c = 0;\n state.push([Rn[3], false]);\n tmp = xlml_parsexmltag(Rn[0]);\n sheetname = unescapexml(tmp.Name);\n cursheet = opts.dense ? [] : {};\n merges = [];\n arrayf = [];\n rowinfo = [];\n wsprops = {\n name: sheetname,\n Hidden: 0\n };\n Workbook.Sheets.push(wsprops);\n }\n\n break;\n\n case 'table'\n /*case 'Table'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].slice(-2) == \"/>\") break;else {\n state.push([Rn[3], false]);\n cstys = [];\n seencol = false;\n }\n\n break;\n\n case 'style'\n /*case 'Style'*/\n :\n if (Rn[1] === '/') process_style_xlml(styles, stag, opts);else stag = xlml_parsexmltag(Rn[0]);\n break;\n\n case 'numberformat'\n /*case 'NumberFormat'*/\n :\n stag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n if (XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\n for (var ssfidx = 0; ssfidx != 0x188; ++ssfidx) {\n if (table_fmt[ssfidx] == stag.nf) break;\n }\n\n if (ssfidx == 0x188) for (ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) {\n if (table_fmt[ssfidx] == null) {\n SSF_load(stag.nf, ssfidx);\n break;\n }\n }\n break;\n\n case 'column'\n /*case 'Column'*/\n :\n if (state[state.length - 1][0] !==\n /*'Table'*/\n 'table') break;\n csty = xlml_parsexmltag(Rn[0]);\n\n if (csty.Hidden) {\n csty.hidden = true;\n delete csty.Hidden;\n }\n\n if (csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\n if (!seencol && csty.wpx > 10) {\n seencol = true;\n MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\n for (var _col = 0; _col < cstys.length; ++_col) {\n if (cstys[_col]) process_col(cstys[_col]);\n }\n }\n\n if (seencol) process_col(csty);\n cstys[csty.Index - 1 || cstys.length] = csty;\n\n for (var i = 0; i < +csty.Span; ++i) {\n cstys[cstys.length] = dup(csty);\n }\n\n break;\n\n case 'namedrange'\n /*case 'NamedRange'*/\n :\n if (Rn[1] === '/') break;\n if (!Workbook.Names) Workbook.Names = [];\n\n var _NamedRange = parsexmltag(Rn[0]);\n\n var _DefinedName\n /*:DefinedName*/\n = {\n Name: _NamedRange.Name,\n Ref: rc_to_a1(_NamedRange.RefersTo.slice(1), {\n r: 0,\n c: 0\n })\n }\n /*:any*/\n ;\n if (Workbook.Sheets.length > 0) _DefinedName.Sheet = Workbook.Sheets.length - 1;\n /*:: if(Workbook.Names) */\n\n Workbook.Names.push(_DefinedName);\n break;\n\n case 'namedcell'\n /*case 'NamedCell'*/\n :\n break;\n\n case 'b'\n /*case 'B'*/\n :\n break;\n\n case 'i'\n /*case 'I'*/\n :\n break;\n\n case 'u'\n /*case 'U'*/\n :\n break;\n\n case 's'\n /*case 'S'*/\n :\n break;\n\n case 'em'\n /*case 'EM'*/\n :\n break;\n\n case 'h2'\n /*case 'H2'*/\n :\n break;\n\n case 'h3'\n /*case 'H3'*/\n :\n break;\n\n case 'sub'\n /*case 'Sub'*/\n :\n break;\n\n case 'sup'\n /*case 'Sup'*/\n :\n break;\n\n case 'span'\n /*case 'Span'*/\n :\n break;\n\n case 'alignment'\n /*case 'Alignment'*/\n :\n break;\n\n case 'borders'\n /*case 'Borders'*/\n :\n break;\n\n case 'border'\n /*case 'Border'*/\n :\n break;\n\n case 'font'\n /*case 'Font'*/\n :\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") ss += str.slice(fidx, Rn.index);else fidx = Rn.index + Rn[0].length;\n break;\n\n case 'interior'\n /*case 'Interior'*/\n :\n if (!opts.cellStyles) break;\n stag.Interior = xlml_parsexmltag(Rn[0]);\n break;\n\n case 'protection'\n /*case 'Protection'*/\n :\n break;\n\n case 'author'\n /*case 'Author'*/\n :\n case 'title'\n /*case 'Title'*/\n :\n case 'description'\n /*case 'Description'*/\n :\n case 'created'\n /*case 'Created'*/\n :\n case 'keywords'\n /*case 'Keywords'*/\n :\n case 'subject'\n /*case 'Subject'*/\n :\n case 'category'\n /*case 'Category'*/\n :\n case 'company'\n /*case 'Company'*/\n :\n case 'lastauthor'\n /*case 'LastAuthor'*/\n :\n case 'lastsaved'\n /*case 'LastSaved'*/\n :\n case 'lastprinted'\n /*case 'LastPrinted'*/\n :\n case 'version'\n /*case 'Version'*/\n :\n case 'revision'\n /*case 'Revision'*/\n :\n case 'totaltime'\n /*case 'TotalTime'*/\n :\n case 'hyperlinkbase'\n /*case 'HyperlinkBase'*/\n :\n case 'manager'\n /*case 'Manager'*/\n :\n case 'contentstatus'\n /*case 'ContentStatus'*/\n :\n case 'identifier'\n /*case 'Identifier'*/\n :\n case 'language'\n /*case 'Language'*/\n :\n case 'appname'\n /*case 'AppName'*/\n :\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));else pidx = Rn.index + Rn[0].length;\n break;\n\n case 'paragraphs'\n /*case 'Paragraphs'*/\n :\n break;\n\n case 'styles'\n /*case 'Styles'*/\n :\n case 'workbook'\n /*case 'Workbook'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else state.push([Rn[3], false]);\n\n break;\n\n case 'comment'\n /*case 'Comment'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n xlml_clean_comment(comment);\n comments.push(comment);\n } else {\n state.push([Rn[3], false]);\n tmp = xlml_parsexmltag(Rn[0]);\n comment = {\n a: tmp.Author\n }\n /*:any*/\n ;\n }\n\n break;\n\n case 'autofilter'\n /*case 'AutoFilter'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n var AutoFilter = xlml_parsexmltag(Rn[0]);\n cursheet['!autofilter'] = {\n ref: rc_to_a1(AutoFilter.Range).replace(/\\$/g, \"\")\n };\n state.push([Rn[3], true]);\n }\n\n break;\n\n case 'name'\n /*case 'Name'*/\n :\n break;\n\n case 'datavalidation'\n /*case 'DataValidation'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else {\n if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n }\n\n break;\n\n case 'pixelsperinch'\n /*case 'PixelsPerInch'*/\n :\n break;\n\n case 'componentoptions'\n /*case 'ComponentOptions'*/\n :\n case 'documentproperties'\n /*case 'DocumentProperties'*/\n :\n case 'customdocumentproperties'\n /*case 'CustomDocumentProperties'*/\n :\n case 'officedocumentsettings'\n /*case 'OfficeDocumentSettings'*/\n :\n case 'pivottable'\n /*case 'PivotTable'*/\n :\n case 'pivotcache'\n /*case 'PivotCache'*/\n :\n case 'names'\n /*case 'Names'*/\n :\n case 'mapinfo'\n /*case 'MapInfo'*/\n :\n case 'pagebreaks'\n /*case 'PageBreaks'*/\n :\n case 'querytable'\n /*case 'QueryTable'*/\n :\n case 'sorting'\n /*case 'Sorting'*/\n :\n case 'schema'\n /*case 'Schema'*/\n : //case 'data' /*case 'data'*/:\n\n case 'conditionalformatting'\n /*case 'ConditionalFormatting'*/\n :\n case 'smarttagtype'\n /*case 'SmartTagType'*/\n :\n case 'smarttags'\n /*case 'SmartTags'*/\n :\n case 'excelworkbook'\n /*case 'ExcelWorkbook'*/\n :\n case 'workbookoptions'\n /*case 'WorkbookOptions'*/\n :\n case 'worksheetoptions'\n /*case 'WorksheetOptions'*/\n :\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw new Error(\"Bad state: \" + tmp.join(\"|\"));\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n\n case 'null'\n /*case 'Null'*/\n :\n break;\n\n default:\n /* FODS file root is */\n if (state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n /* UOS file root is */\n\n if (state.length == 0 && Rn[3] == \"uof\"\n /*\"UOF\"*/\n ) return parse_fods(str, opts);\n var seen = true;\n\n switch (state[state.length - 1][0]) {\n /* OfficeDocumentSettings */\n case 'officedocumentsettings'\n /*case 'OfficeDocumentSettings'*/\n :\n switch (Rn[3]) {\n case 'allowpng'\n /*case 'AllowPNG'*/\n :\n break;\n\n case 'removepersonalinformation'\n /*case 'RemovePersonalInformation'*/\n :\n break;\n\n case 'downloadcomponents'\n /*case 'DownloadComponents'*/\n :\n break;\n\n case 'locationofcomponents'\n /*case 'LocationOfComponents'*/\n :\n break;\n\n case 'colors'\n /*case 'Colors'*/\n :\n break;\n\n case 'color'\n /*case 'Color'*/\n :\n break;\n\n case 'index'\n /*case 'Index'*/\n :\n break;\n\n case 'rgb'\n /*case 'RGB'*/\n :\n break;\n\n case 'targetscreensize'\n /*case 'TargetScreenSize'*/\n :\n break;\n\n case 'readonlyrecommended'\n /*case 'ReadOnlyRecommended'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* ComponentOptions */\n\n case 'componentoptions'\n /*case 'ComponentOptions'*/\n :\n switch (Rn[3]) {\n case 'toolbar'\n /*case 'Toolbar'*/\n :\n break;\n\n case 'hideofficelogo'\n /*case 'HideOfficeLogo'*/\n :\n break;\n\n case 'spreadsheetautofit'\n /*case 'SpreadsheetAutoFit'*/\n :\n break;\n\n case 'label'\n /*case 'Label'*/\n :\n break;\n\n case 'caption'\n /*case 'Caption'*/\n :\n break;\n\n case 'maxheight'\n /*case 'MaxHeight'*/\n :\n break;\n\n case 'maxwidth'\n /*case 'MaxWidth'*/\n :\n break;\n\n case 'nextsheetnumber'\n /*case 'NextSheetNumber'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* ExcelWorkbook */\n\n case 'excelworkbook'\n /*case 'ExcelWorkbook'*/\n :\n switch (Rn[3]) {\n case 'date1904'\n /*case 'Date1904'*/\n :\n /*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n Workbook.WBProps.date1904 = true;\n break;\n\n case 'windowheight'\n /*case 'WindowHeight'*/\n :\n break;\n\n case 'windowwidth'\n /*case 'WindowWidth'*/\n :\n break;\n\n case 'windowtopx'\n /*case 'WindowTopX'*/\n :\n break;\n\n case 'windowtopy'\n /*case 'WindowTopY'*/\n :\n break;\n\n case 'tabratio'\n /*case 'TabRatio'*/\n :\n break;\n\n case 'protectstructure'\n /*case 'ProtectStructure'*/\n :\n break;\n\n case 'protectwindow'\n /*case 'ProtectWindow'*/\n :\n break;\n\n case 'protectwindows'\n /*case 'ProtectWindows'*/\n :\n break;\n\n case 'activesheet'\n /*case 'ActiveSheet'*/\n :\n break;\n\n case 'displayinknotes'\n /*case 'DisplayInkNotes'*/\n :\n break;\n\n case 'firstvisiblesheet'\n /*case 'FirstVisibleSheet'*/\n :\n break;\n\n case 'supbook'\n /*case 'SupBook'*/\n :\n break;\n\n case 'sheetname'\n /*case 'SheetName'*/\n :\n break;\n\n case 'sheetindex'\n /*case 'SheetIndex'*/\n :\n break;\n\n case 'sheetindexfirst'\n /*case 'SheetIndexFirst'*/\n :\n break;\n\n case 'sheetindexlast'\n /*case 'SheetIndexLast'*/\n :\n break;\n\n case 'dll'\n /*case 'Dll'*/\n :\n break;\n\n case 'acceptlabelsinformulas'\n /*case 'AcceptLabelsInFormulas'*/\n :\n break;\n\n case 'donotsavelinkvalues'\n /*case 'DoNotSaveLinkValues'*/\n :\n break;\n\n case 'iteration'\n /*case 'Iteration'*/\n :\n break;\n\n case 'maxiterations'\n /*case 'MaxIterations'*/\n :\n break;\n\n case 'maxchange'\n /*case 'MaxChange'*/\n :\n break;\n\n case 'path'\n /*case 'Path'*/\n :\n break;\n\n case 'xct'\n /*case 'Xct'*/\n :\n break;\n\n case 'count'\n /*case 'Count'*/\n :\n break;\n\n case 'selectedsheets'\n /*case 'SelectedSheets'*/\n :\n break;\n\n case 'calculation'\n /*case 'Calculation'*/\n :\n break;\n\n case 'uncalced'\n /*case 'Uncalced'*/\n :\n break;\n\n case 'startupprompt'\n /*case 'StartupPrompt'*/\n :\n break;\n\n case 'crn'\n /*case 'Crn'*/\n :\n break;\n\n case 'externname'\n /*case 'ExternName'*/\n :\n break;\n\n case 'formula'\n /*case 'Formula'*/\n :\n break;\n\n case 'colfirst'\n /*case 'ColFirst'*/\n :\n break;\n\n case 'collast'\n /*case 'ColLast'*/\n :\n break;\n\n case 'wantadvise'\n /*case 'WantAdvise'*/\n :\n break;\n\n case 'boolean'\n /*case 'Boolean'*/\n :\n break;\n\n case 'error'\n /*case 'Error'*/\n :\n break;\n\n case 'text'\n /*case 'Text'*/\n :\n break;\n\n case 'ole'\n /*case 'OLE'*/\n :\n break;\n\n case 'noautorecover'\n /*case 'NoAutoRecover'*/\n :\n break;\n\n case 'publishobjects'\n /*case 'PublishObjects'*/\n :\n break;\n\n case 'donotcalculatebeforesave'\n /*case 'DoNotCalculateBeforeSave'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'refmoder1c1'\n /*case 'RefModeR1C1'*/\n :\n break;\n\n case 'embedsavesmarttags'\n /*case 'EmbedSaveSmartTags'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* WorkbookOptions */\n\n case 'workbookoptions'\n /*case 'WorkbookOptions'*/\n :\n switch (Rn[3]) {\n case 'owcversion'\n /*case 'OWCVersion'*/\n :\n break;\n\n case 'height'\n /*case 'Height'*/\n :\n break;\n\n case 'width'\n /*case 'Width'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* WorksheetOptions */\n\n case 'worksheetoptions'\n /*case 'WorksheetOptions'*/\n :\n switch (Rn[3]) {\n case 'visible'\n /*case 'Visible'*/\n :\n if (Rn[0].slice(-2) === \"/>\") {\n /* empty */\n } else if (Rn[1] === \"/\") switch (str.slice(pidx, Rn.index)) {\n case \"SheetHidden\":\n wsprops.Hidden = 1;\n break;\n\n case \"SheetVeryHidden\":\n wsprops.Hidden = 2;\n break;\n } else pidx = Rn.index + Rn[0].length;\n\n break;\n\n case 'header'\n /*case 'Header'*/\n :\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n if (!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n break;\n\n case 'footer'\n /*case 'Footer'*/\n :\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n if (!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n break;\n\n case 'pagemargins'\n /*case 'PageMargins'*/\n :\n var pagemargins = parsexmltag(Rn[0]);\n if (!cursheet['!margins']) default_margins(cursheet['!margins'] = {}, 'xlml');\n if (!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n if (!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n if (!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n if (!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n break;\n\n case 'displayrighttoleft'\n /*case 'DisplayRightToLeft'*/\n :\n if (!Workbook.Views) Workbook.Views = [];\n if (!Workbook.Views[0]) Workbook.Views[0] = {};\n Workbook.Views[0].RTL = true;\n break;\n\n case 'freezepanes'\n /*case 'FreezePanes'*/\n :\n break;\n\n case 'frozennosplit'\n /*case 'FrozenNoSplit'*/\n :\n break;\n\n case 'splithorizontal'\n /*case 'SplitHorizontal'*/\n :\n case 'splitvertical'\n /*case 'SplitVertical'*/\n :\n break;\n\n case 'donotdisplaygridlines'\n /*case 'DoNotDisplayGridlines'*/\n :\n break;\n\n case 'activerow'\n /*case 'ActiveRow'*/\n :\n break;\n\n case 'activecol'\n /*case 'ActiveCol'*/\n :\n break;\n\n case 'toprowbottompane'\n /*case 'TopRowBottomPane'*/\n :\n break;\n\n case 'leftcolumnrightpane'\n /*case 'LeftColumnRightPane'*/\n :\n break;\n\n case 'unsynced'\n /*case 'Unsynced'*/\n :\n break;\n\n case 'print'\n /*case 'Print'*/\n :\n break;\n\n case 'printerrors'\n /*case 'PrintErrors'*/\n :\n break;\n\n case 'panes'\n /*case 'Panes'*/\n :\n break;\n\n case 'scale'\n /*case 'Scale'*/\n :\n break;\n\n case 'pane'\n /*case 'Pane'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'layout'\n /*case 'Layout'*/\n :\n break;\n\n case 'pagesetup'\n /*case 'PageSetup'*/\n :\n break;\n\n case 'selected'\n /*case 'Selected'*/\n :\n break;\n\n case 'protectobjects'\n /*case 'ProtectObjects'*/\n :\n break;\n\n case 'enableselection'\n /*case 'EnableSelection'*/\n :\n break;\n\n case 'protectscenarios'\n /*case 'ProtectScenarios'*/\n :\n break;\n\n case 'validprinterinfo'\n /*case 'ValidPrinterInfo'*/\n :\n break;\n\n case 'horizontalresolution'\n /*case 'HorizontalResolution'*/\n :\n break;\n\n case 'verticalresolution'\n /*case 'VerticalResolution'*/\n :\n break;\n\n case 'numberofcopies'\n /*case 'NumberofCopies'*/\n :\n break;\n\n case 'activepane'\n /*case 'ActivePane'*/\n :\n break;\n\n case 'toprowvisible'\n /*case 'TopRowVisible'*/\n :\n break;\n\n case 'leftcolumnvisible'\n /*case 'LeftColumnVisible'*/\n :\n break;\n\n case 'fittopage'\n /*case 'FitToPage'*/\n :\n break;\n\n case 'rangeselection'\n /*case 'RangeSelection'*/\n :\n break;\n\n case 'papersizeindex'\n /*case 'PaperSizeIndex'*/\n :\n break;\n\n case 'pagelayoutzoom'\n /*case 'PageLayoutZoom'*/\n :\n break;\n\n case 'pagebreakzoom'\n /*case 'PageBreakZoom'*/\n :\n break;\n\n case 'filteron'\n /*case 'FilterOn'*/\n :\n break;\n\n case 'fitwidth'\n /*case 'FitWidth'*/\n :\n break;\n\n case 'fitheight'\n /*case 'FitHeight'*/\n :\n break;\n\n case 'commentslayout'\n /*case 'CommentsLayout'*/\n :\n break;\n\n case 'zoom'\n /*case 'Zoom'*/\n :\n break;\n\n case 'lefttoright'\n /*case 'LeftToRight'*/\n :\n break;\n\n case 'gridlines'\n /*case 'Gridlines'*/\n :\n break;\n\n case 'allowsort'\n /*case 'AllowSort'*/\n :\n break;\n\n case 'allowfilter'\n /*case 'AllowFilter'*/\n :\n break;\n\n case 'allowinsertrows'\n /*case 'AllowInsertRows'*/\n :\n break;\n\n case 'allowdeleterows'\n /*case 'AllowDeleteRows'*/\n :\n break;\n\n case 'allowinsertcols'\n /*case 'AllowInsertCols'*/\n :\n break;\n\n case 'allowdeletecols'\n /*case 'AllowDeleteCols'*/\n :\n break;\n\n case 'allowinserthyperlinks'\n /*case 'AllowInsertHyperlinks'*/\n :\n break;\n\n case 'allowformatcells'\n /*case 'AllowFormatCells'*/\n :\n break;\n\n case 'allowsizecols'\n /*case 'AllowSizeCols'*/\n :\n break;\n\n case 'allowsizerows'\n /*case 'AllowSizeRows'*/\n :\n break;\n\n case 'nosummaryrowsbelowdetail'\n /*case 'NoSummaryRowsBelowDetail'*/\n :\n if (!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n cursheet[\"!outline\"].above = true;\n break;\n\n case 'tabcolorindex'\n /*case 'TabColorIndex'*/\n :\n break;\n\n case 'donotdisplayheadings'\n /*case 'DoNotDisplayHeadings'*/\n :\n break;\n\n case 'showpagelayoutzoom'\n /*case 'ShowPageLayoutZoom'*/\n :\n break;\n\n case 'nosummarycolumnsrightdetail'\n /*case 'NoSummaryColumnsRightDetail'*/\n :\n if (!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n cursheet[\"!outline\"].left = true;\n break;\n\n case 'blackandwhite'\n /*case 'BlackAndWhite'*/\n :\n break;\n\n case 'donotdisplayzeros'\n /*case 'DoNotDisplayZeros'*/\n :\n break;\n\n case 'displaypagebreak'\n /*case 'DisplayPageBreak'*/\n :\n break;\n\n case 'rowcolheadings'\n /*case 'RowColHeadings'*/\n :\n break;\n\n case 'donotdisplayoutline'\n /*case 'DoNotDisplayOutline'*/\n :\n break;\n\n case 'noorientation'\n /*case 'NoOrientation'*/\n :\n break;\n\n case 'allowusepivottables'\n /*case 'AllowUsePivotTables'*/\n :\n break;\n\n case 'zeroheight'\n /*case 'ZeroHeight'*/\n :\n break;\n\n case 'viewablerange'\n /*case 'ViewableRange'*/\n :\n break;\n\n case 'selection'\n /*case 'Selection'*/\n :\n break;\n\n case 'protectcontents'\n /*case 'ProtectContents'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* PivotTable */\n\n case 'pivottable'\n /*case 'PivotTable'*/\n :\n case 'pivotcache'\n /*case 'PivotCache'*/\n :\n switch (Rn[3]) {\n case 'immediateitemsondrop'\n /*case 'ImmediateItemsOnDrop'*/\n :\n break;\n\n case 'showpagemultipleitemlabel'\n /*case 'ShowPageMultipleItemLabel'*/\n :\n break;\n\n case 'compactrowindent'\n /*case 'CompactRowIndent'*/\n :\n break;\n\n case 'location'\n /*case 'Location'*/\n :\n break;\n\n case 'pivotfield'\n /*case 'PivotField'*/\n :\n break;\n\n case 'orientation'\n /*case 'Orientation'*/\n :\n break;\n\n case 'layoutform'\n /*case 'LayoutForm'*/\n :\n break;\n\n case 'layoutsubtotallocation'\n /*case 'LayoutSubtotalLocation'*/\n :\n break;\n\n case 'layoutcompactrow'\n /*case 'LayoutCompactRow'*/\n :\n break;\n\n case 'position'\n /*case 'Position'*/\n :\n break;\n\n case 'pivotitem'\n /*case 'PivotItem'*/\n :\n break;\n\n case 'datatype'\n /*case 'DataType'*/\n :\n break;\n\n case 'datafield'\n /*case 'DataField'*/\n :\n break;\n\n case 'sourcename'\n /*case 'SourceName'*/\n :\n break;\n\n case 'parentfield'\n /*case 'ParentField'*/\n :\n break;\n\n case 'ptlineitems'\n /*case 'PTLineItems'*/\n :\n break;\n\n case 'ptlineitem'\n /*case 'PTLineItem'*/\n :\n break;\n\n case 'countofsameitems'\n /*case 'CountOfSameItems'*/\n :\n break;\n\n case 'item'\n /*case 'Item'*/\n :\n break;\n\n case 'itemtype'\n /*case 'ItemType'*/\n :\n break;\n\n case 'ptsource'\n /*case 'PTSource'*/\n :\n break;\n\n case 'cacheindex'\n /*case 'CacheIndex'*/\n :\n break;\n\n case 'consolidationreference'\n /*case 'ConsolidationReference'*/\n :\n break;\n\n case 'filename'\n /*case 'FileName'*/\n :\n break;\n\n case 'reference'\n /*case 'Reference'*/\n :\n break;\n\n case 'nocolumngrand'\n /*case 'NoColumnGrand'*/\n :\n break;\n\n case 'norowgrand'\n /*case 'NoRowGrand'*/\n :\n break;\n\n case 'blanklineafteritems'\n /*case 'BlankLineAfterItems'*/\n :\n break;\n\n case 'hidden'\n /*case 'Hidden'*/\n :\n break;\n\n case 'subtotal'\n /*case 'Subtotal'*/\n :\n break;\n\n case 'basefield'\n /*case 'BaseField'*/\n :\n break;\n\n case 'mapchilditems'\n /*case 'MapChildItems'*/\n :\n break;\n\n case 'function'\n /*case 'Function'*/\n :\n break;\n\n case 'refreshonfileopen'\n /*case 'RefreshOnFileOpen'*/\n :\n break;\n\n case 'printsettitles'\n /*case 'PrintSetTitles'*/\n :\n break;\n\n case 'mergelabels'\n /*case 'MergeLabels'*/\n :\n break;\n\n case 'defaultversion'\n /*case 'DefaultVersion'*/\n :\n break;\n\n case 'refreshname'\n /*case 'RefreshName'*/\n :\n break;\n\n case 'refreshdate'\n /*case 'RefreshDate'*/\n :\n break;\n\n case 'refreshdatecopy'\n /*case 'RefreshDateCopy'*/\n :\n break;\n\n case 'versionlastrefresh'\n /*case 'VersionLastRefresh'*/\n :\n break;\n\n case 'versionlastupdate'\n /*case 'VersionLastUpdate'*/\n :\n break;\n\n case 'versionupdateablemin'\n /*case 'VersionUpdateableMin'*/\n :\n break;\n\n case 'versionrefreshablemin'\n /*case 'VersionRefreshableMin'*/\n :\n break;\n\n case 'calculation'\n /*case 'Calculation'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* PageBreaks */\n\n case 'pagebreaks'\n /*case 'PageBreaks'*/\n :\n switch (Rn[3]) {\n case 'colbreaks'\n /*case 'ColBreaks'*/\n :\n break;\n\n case 'colbreak'\n /*case 'ColBreak'*/\n :\n break;\n\n case 'rowbreaks'\n /*case 'RowBreaks'*/\n :\n break;\n\n case 'rowbreak'\n /*case 'RowBreak'*/\n :\n break;\n\n case 'colstart'\n /*case 'ColStart'*/\n :\n break;\n\n case 'colend'\n /*case 'ColEnd'*/\n :\n break;\n\n case 'rowend'\n /*case 'RowEnd'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* AutoFilter */\n\n case 'autofilter'\n /*case 'AutoFilter'*/\n :\n switch (Rn[3]) {\n case 'autofiltercolumn'\n /*case 'AutoFilterColumn'*/\n :\n break;\n\n case 'autofiltercondition'\n /*case 'AutoFilterCondition'*/\n :\n break;\n\n case 'autofilterand'\n /*case 'AutoFilterAnd'*/\n :\n break;\n\n case 'autofilteror'\n /*case 'AutoFilterOr'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* QueryTable */\n\n case 'querytable'\n /*case 'QueryTable'*/\n :\n switch (Rn[3]) {\n case 'id'\n /*case 'Id'*/\n :\n break;\n\n case 'autoformatfont'\n /*case 'AutoFormatFont'*/\n :\n break;\n\n case 'autoformatpattern'\n /*case 'AutoFormatPattern'*/\n :\n break;\n\n case 'querysource'\n /*case 'QuerySource'*/\n :\n break;\n\n case 'querytype'\n /*case 'QueryType'*/\n :\n break;\n\n case 'enableredirections'\n /*case 'EnableRedirections'*/\n :\n break;\n\n case 'refreshedinxl9'\n /*case 'RefreshedInXl9'*/\n :\n break;\n\n case 'urlstring'\n /*case 'URLString'*/\n :\n break;\n\n case 'htmltables'\n /*case 'HTMLTables'*/\n :\n break;\n\n case 'connection'\n /*case 'Connection'*/\n :\n break;\n\n case 'commandtext'\n /*case 'CommandText'*/\n :\n break;\n\n case 'refreshinfo'\n /*case 'RefreshInfo'*/\n :\n break;\n\n case 'notitles'\n /*case 'NoTitles'*/\n :\n break;\n\n case 'nextid'\n /*case 'NextId'*/\n :\n break;\n\n case 'columninfo'\n /*case 'ColumnInfo'*/\n :\n break;\n\n case 'overwritecells'\n /*case 'OverwriteCells'*/\n :\n break;\n\n case 'donotpromptforfile'\n /*case 'DoNotPromptForFile'*/\n :\n break;\n\n case 'textwizardsettings'\n /*case 'TextWizardSettings'*/\n :\n break;\n\n case 'source'\n /*case 'Source'*/\n :\n break;\n\n case 'number'\n /*case 'Number'*/\n :\n break;\n\n case 'decimal'\n /*case 'Decimal'*/\n :\n break;\n\n case 'thousandseparator'\n /*case 'ThousandSeparator'*/\n :\n break;\n\n case 'trailingminusnumbers'\n /*case 'TrailingMinusNumbers'*/\n :\n break;\n\n case 'formatsettings'\n /*case 'FormatSettings'*/\n :\n break;\n\n case 'fieldtype'\n /*case 'FieldType'*/\n :\n break;\n\n case 'delimiters'\n /*case 'Delimiters'*/\n :\n break;\n\n case 'tab'\n /*case 'Tab'*/\n :\n break;\n\n case 'comma'\n /*case 'Comma'*/\n :\n break;\n\n case 'autoformatname'\n /*case 'AutoFormatName'*/\n :\n break;\n\n case 'versionlastedit'\n /*case 'VersionLastEdit'*/\n :\n break;\n\n case 'versionlastrefresh'\n /*case 'VersionLastRefresh'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n case 'datavalidation'\n /*case 'DataValidation'*/\n :\n switch (Rn[3]) {\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'type'\n /*case 'Type'*/\n :\n break;\n\n case 'min'\n /*case 'Min'*/\n :\n break;\n\n case 'max'\n /*case 'Max'*/\n :\n break;\n\n case 'sort'\n /*case 'Sort'*/\n :\n break;\n\n case 'descending'\n /*case 'Descending'*/\n :\n break;\n\n case 'order'\n /*case 'Order'*/\n :\n break;\n\n case 'casesensitive'\n /*case 'CaseSensitive'*/\n :\n break;\n\n case 'value'\n /*case 'Value'*/\n :\n break;\n\n case 'errorstyle'\n /*case 'ErrorStyle'*/\n :\n break;\n\n case 'errormessage'\n /*case 'ErrorMessage'*/\n :\n break;\n\n case 'errortitle'\n /*case 'ErrorTitle'*/\n :\n break;\n\n case 'inputmessage'\n /*case 'InputMessage'*/\n :\n break;\n\n case 'inputtitle'\n /*case 'InputTitle'*/\n :\n break;\n\n case 'combohide'\n /*case 'ComboHide'*/\n :\n break;\n\n case 'inputhide'\n /*case 'InputHide'*/\n :\n break;\n\n case 'condition'\n /*case 'Condition'*/\n :\n break;\n\n case 'qualifier'\n /*case 'Qualifier'*/\n :\n break;\n\n case 'useblank'\n /*case 'UseBlank'*/\n :\n break;\n\n case 'value1'\n /*case 'Value1'*/\n :\n break;\n\n case 'value2'\n /*case 'Value2'*/\n :\n break;\n\n case 'format'\n /*case 'Format'*/\n :\n break;\n\n case 'cellrangelist'\n /*case 'CellRangeList'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n case 'sorting'\n /*case 'Sorting'*/\n :\n case 'conditionalformatting'\n /*case 'ConditionalFormatting'*/\n :\n switch (Rn[3]) {\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'type'\n /*case 'Type'*/\n :\n break;\n\n case 'min'\n /*case 'Min'*/\n :\n break;\n\n case 'max'\n /*case 'Max'*/\n :\n break;\n\n case 'sort'\n /*case 'Sort'*/\n :\n break;\n\n case 'descending'\n /*case 'Descending'*/\n :\n break;\n\n case 'order'\n /*case 'Order'*/\n :\n break;\n\n case 'casesensitive'\n /*case 'CaseSensitive'*/\n :\n break;\n\n case 'value'\n /*case 'Value'*/\n :\n break;\n\n case 'errorstyle'\n /*case 'ErrorStyle'*/\n :\n break;\n\n case 'errormessage'\n /*case 'ErrorMessage'*/\n :\n break;\n\n case 'errortitle'\n /*case 'ErrorTitle'*/\n :\n break;\n\n case 'cellrangelist'\n /*case 'CellRangeList'*/\n :\n break;\n\n case 'inputmessage'\n /*case 'InputMessage'*/\n :\n break;\n\n case 'inputtitle'\n /*case 'InputTitle'*/\n :\n break;\n\n case 'combohide'\n /*case 'ComboHide'*/\n :\n break;\n\n case 'inputhide'\n /*case 'InputHide'*/\n :\n break;\n\n case 'condition'\n /*case 'Condition'*/\n :\n break;\n\n case 'qualifier'\n /*case 'Qualifier'*/\n :\n break;\n\n case 'useblank'\n /*case 'UseBlank'*/\n :\n break;\n\n case 'value1'\n /*case 'Value1'*/\n :\n break;\n\n case 'value2'\n /*case 'Value2'*/\n :\n break;\n\n case 'format'\n /*case 'Format'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* MapInfo (schema) */\n\n case 'mapinfo'\n /*case 'MapInfo'*/\n :\n case 'schema'\n /*case 'Schema'*/\n :\n case 'data'\n /*case 'data'*/\n :\n switch (Rn[3]) {\n case 'map'\n /*case 'Map'*/\n :\n break;\n\n case 'entry'\n /*case 'Entry'*/\n :\n break;\n\n case 'range'\n /*case 'Range'*/\n :\n break;\n\n case 'xpath'\n /*case 'XPath'*/\n :\n break;\n\n case 'field'\n /*case 'Field'*/\n :\n break;\n\n case 'xsdtype'\n /*case 'XSDType'*/\n :\n break;\n\n case 'filteron'\n /*case 'FilterOn'*/\n :\n break;\n\n case 'aggregate'\n /*case 'Aggregate'*/\n :\n break;\n\n case 'elementtype'\n /*case 'ElementType'*/\n :\n break;\n\n case 'attributetype'\n /*case 'AttributeType'*/\n :\n break;\n\n /* These are from xsd (XML Schema Definition) */\n\n case 'schema'\n /*case 'schema'*/\n :\n case 'element'\n /*case 'element'*/\n :\n case 'complextype'\n /*case 'complexType'*/\n :\n case 'datatype'\n /*case 'datatype'*/\n :\n case 'all'\n /*case 'all'*/\n :\n case 'attribute'\n /*case 'attribute'*/\n :\n case 'extends'\n /*case 'extends'*/\n :\n break;\n\n case 'row'\n /*case 'row'*/\n :\n break;\n\n default:\n seen = false;\n }\n\n break;\n\n /* SmartTags (can be anything) */\n\n case 'smarttags'\n /*case 'SmartTags'*/\n :\n break;\n\n default:\n seen = false;\n break;\n }\n\n if (seen) break;\n /* CustomDocumentProperties */\n\n if (Rn[3].match(/!\\[CDATA/)) break;\n if (!state[state.length - 1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\n if (state[state.length - 1][0] ===\n /*'CustomDocumentProperties'*/\n 'customdocumentproperties') {\n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));else {\n cp = Rn;\n pidx = Rn.index + Rn[0].length;\n }\n break;\n }\n\n if (opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n }\n }\n\n var out = {}\n /*:any*/\n ;\n if (!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n out.SheetNames = sheetnames;\n out.Workbook = Workbook;\n out.SSF = dup(table_fmt);\n out.Props = Props;\n out.Custprops = Custprops;\n return out;\n}\n\nfunction parse_xlml(data\n/*:RawBytes|string*/\n, opts)\n/*:Workbook*/\n{\n fix_read_opts(opts = opts || {});\n\n switch (opts.type || \"base64\") {\n case \"base64\":\n return parse_xlml_xml(Base64_decode(data), opts);\n\n case \"binary\":\n case \"buffer\":\n case \"file\":\n return parse_xlml_xml(data, opts);\n\n case \"array\":\n return parse_xlml_xml(a2s(data), opts);\n }\n /*:: throw new Error(\"unsupported type \" + opts.type); */\n\n}\n/* TODO */\n\n\nfunction write_props_xlml(wb\n/*:Workbook*/\n, opts)\n/*:string*/\n{\n var o\n /*:Array*/\n = [];\n /* DocumentProperties */\n\n if (wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n /* CustomDocumentProperties */\n\n if (wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n return o.join(\"\");\n}\n/* TODO */\n\n\nfunction\n /*::wb, opts*/\nwrite_wb_xlml()\n/*:string*/\n{\n /* OfficeDocumentSettings */\n\n /* ExcelWorkbook */\n return \"\";\n}\n/* TODO */\n\n\nfunction write_sty_xlml(wb, opts)\n/*:string*/\n{\n /* Styles */\n var styles\n /*:Array*/\n = [''];\n opts.cellXfs.forEach(function (xf, id) {\n var payload\n /*:Array*/\n = [];\n payload.push(writextag('NumberFormat', null, {\n \"ss:Format\": escapexml(table_fmt[xf.numFmtId])\n }));\n var o =\n /*::(*/\n {\n \"ss:ID\": \"s\" + (21 + id)\n }\n /*:: :any)*/\n ;\n styles.push(writextag('Style', payload.join(\"\"), o));\n });\n return writextag(\"Styles\", styles.join(\"\"));\n}\n\nfunction write_name_xlml(n) {\n return writextag(\"NamedRange\", null, {\n \"ss:Name\": n.Name,\n \"ss:RefersTo\": \"=\" + a1_to_rc(n.Ref, {\n r: 0,\n c: 0\n })\n });\n}\n\nfunction write_names_xlml(wb\n/*::, opts*/\n)\n/*:string*/\n{\n if (!((wb || {}).Workbook || {}).Names) return \"\";\n /*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\n var names\n /*:Array*/\n = wb.Workbook.Names;\n var out\n /*:Array*/\n = [];\n\n for (var i = 0; i < names.length; ++i) {\n var n = names[i];\n if (n.Sheet != null) continue;\n if (n.Name.match(/^_xlfn\\./)) continue;\n out.push(write_name_xlml(n));\n }\n\n return writextag(\"Names\", out.join(\"\"));\n}\n\nfunction write_ws_xlml_names(ws\n/*:Worksheet*/\n, opts, idx\n/*:number*/\n, wb\n/*:Workbook*/\n)\n/*:string*/\n{\n if (!ws) return \"\";\n if (!((wb || {}).Workbook || {}).Names) return \"\";\n /*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\n var names\n /*:Array*/\n = wb.Workbook.Names;\n var out\n /*:Array*/\n = [];\n\n for (var i = 0; i < names.length; ++i) {\n var n = names[i];\n if (n.Sheet != idx) continue;\n /*switch(n.Name) {\n \tcase \"_\": continue;\n }*/\n\n if (n.Name.match(/^_xlfn\\./)) continue;\n out.push(write_name_xlml(n));\n }\n\n return out.join(\"\");\n}\n/* WorksheetOptions */\n\n\nfunction write_ws_xlml_wsopts(ws\n/*:Worksheet*/\n, opts, idx\n/*:number*/\n, wb\n/*:Workbook*/\n)\n/*:string*/\n{\n if (!ws) return \"\";\n var o\n /*:Array*/\n = [];\n /* NOTE: spec technically allows any order, but stick with implied order */\n\n /* FitToPage */\n\n /* DoNotDisplayColHeaders */\n\n /* DoNotDisplayRowHeaders */\n\n /* ViewableRange */\n\n /* Selection */\n\n /* GridlineColor */\n\n /* Name */\n\n /* ExcelWorksheetType */\n\n /* IntlMacro */\n\n /* Unsynced */\n\n /* Selected */\n\n /* CodeName */\n\n if (ws['!margins']) {\n o.push(\"\");\n if (ws['!margins'].header) o.push(writextag(\"Header\", null, {\n 'x:Margin': ws['!margins'].header\n }));\n if (ws['!margins'].footer) o.push(writextag(\"Footer\", null, {\n 'x:Margin': ws['!margins'].footer\n }));\n o.push(writextag(\"PageMargins\", null, {\n 'x:Bottom': ws['!margins'].bottom || \"0.75\",\n 'x:Left': ws['!margins'].left || \"0.7\",\n 'x:Right': ws['!margins'].right || \"0.7\",\n 'x:Top': ws['!margins'].top || \"0.75\"\n }));\n o.push(\"\");\n }\n /* PageSetup */\n\n /* DisplayPageBreak */\n\n /* TransitionExpressionEvaluation */\n\n /* TransitionFormulaEntry */\n\n /* Print */\n\n /* Zoom */\n\n /* PageLayoutZoom */\n\n /* PageBreakZoom */\n\n /* ShowPageBreakZoom */\n\n /* DefaultRowHeight */\n\n /* DefaultColumnWidth */\n\n /* StandardWidth */\n\n\n if (wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n /* Visible */\n if (wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\", {}));else {\n /* Selected */\n for (var i = 0; i < idx; ++i) {\n if (wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n }\n\n if (i == idx) o.push(\"\");\n }\n }\n /* LeftColumnVisible */\n\n\n if (((((wb || {}).Workbook || {}).Views || [])[0] || {}).RTL) o.push(\"\");\n /* GridlineColorIndex */\n\n /* DisplayFormulas */\n\n /* DoNotDisplayGridlines */\n\n /* DoNotDisplayHeadings */\n\n /* DoNotDisplayOutline */\n\n /* ApplyAutomaticOutlineStyles */\n\n /* NoSummaryRowsBelowDetail */\n\n /* NoSummaryColumnsRightDetail */\n\n /* DoNotDisplayZeros */\n\n /* ActiveRow */\n\n /* ActiveColumn */\n\n /* FilterOn */\n\n /* RangeSelection */\n\n /* TopRowVisible */\n\n /* TopRowBottomPane */\n\n /* LeftColumnRightPane */\n\n /* ActivePane */\n\n /* SplitHorizontal */\n\n /* SplitVertical */\n\n /* FreezePanes */\n\n /* FrozenNoSplit */\n\n /* TabColorIndex */\n\n /* Panes */\n\n /* NOTE: Password not supported in XLML Format */\n\n if (ws['!protect']) {\n o.push(writetag(\"ProtectContents\", \"True\"));\n if (ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n if (ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n if (ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));else if (ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n [[\"formatCells\", \"AllowFormatCells\"], [\"formatColumns\", \"AllowSizeCols\"], [\"formatRows\", \"AllowSizeRows\"], [\"insertColumns\", \"AllowInsertCols\"], [\"insertRows\", \"AllowInsertRows\"], [\"insertHyperlinks\", \"AllowInsertHyperlinks\"], [\"deleteColumns\", \"AllowDeleteCols\"], [\"deleteRows\", \"AllowDeleteRows\"], [\"sort\", \"AllowSort\"], [\"autoFilter\", \"AllowFilter\"], [\"pivotTables\", \"AllowUsePivotTables\"]].forEach(function (x) {\n if (ws['!protect'][x[0]]) o.push(\"<\" + x[1] + \"/>\");\n });\n }\n\n if (o.length == 0) return \"\";\n return writextag(\"WorksheetOptions\", o.join(\"\"), {\n xmlns: XLMLNS.x\n });\n}\n\nfunction write_ws_xlml_comment(comments\n/*:Array*/\n)\n/*:string*/\n{\n return comments.map(function (c) {\n // TODO: formatted text\n var t = xlml_unfixstr(c.t || \"\");\n var d = writextag(\"ss:Data\", t, {\n \"xmlns\": \"http://www.w3.org/TR/REC-html40\"\n });\n return writextag(\"Comment\", d, {\n \"ss:Author\": c.a\n });\n }).join(\"\");\n}\n\nfunction write_ws_xlml_cell(cell, ref\n/*:string*/\n, ws, opts, idx\n/*:number*/\n, wb, addr)\n/*:string*/\n{\n if (!cell || cell.v == undefined && cell.f == undefined) return \"\";\n var attr = {};\n if (cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\n if (cell.F && cell.F.slice(0, ref.length) == ref) {\n var end = decode_cell(cell.F.slice(ref.length + 1));\n attr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n }\n\n if (cell.l && cell.l.Target) {\n attr[\"ss:HRef\"] = escapexml(cell.l.Target);\n if (cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n }\n\n if (ws['!merges']) {\n var marr = ws['!merges'];\n\n for (var mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n if (marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n if (marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n }\n }\n\n var t = \"\",\n p = \"\";\n\n switch (cell.t) {\n case 'z':\n if (!opts.sheetStubs) return \"\";\n break;\n\n case 'n':\n t = 'Number';\n p = String(cell.v);\n break;\n\n case 'b':\n t = 'Boolean';\n p = cell.v ? \"1\" : \"0\";\n break;\n\n case 'e':\n t = 'Error';\n p = BErr[cell.v];\n break;\n\n case 'd':\n t = 'DateTime';\n p = new Date(cell.v).toISOString();\n if (cell.z == null) cell.z = cell.z || table_fmt[14];\n break;\n\n case 's':\n t = 'String';\n p = escapexlml(cell.v || \"\");\n break;\n }\n /* TODO: cell style */\n\n\n var os = get_cell_style(opts.cellXfs, cell, opts);\n attr[\"ss:StyleID\"] = \"s\" + (21 + os);\n attr[\"ss:Index\"] = addr.c + 1;\n\n var _v = cell.v != null ? p : \"\";\n\n var m = cell.t == 'z' ? \"\" : '' + _v + '';\n if ((cell.c || []).length > 0) m += write_ws_xlml_comment(cell.c);\n return writextag(\"Cell\", m, attr);\n}\n\nfunction write_ws_xlml_row(R\n/*:number*/\n, row)\n/*:string*/\n{\n var o = '';\n}\n/* TODO */\n\n\nfunction write_ws_xlml_table(ws\n/*:Worksheet*/\n, opts, idx\n/*:number*/\n, wb\n/*:Workbook*/\n)\n/*:string*/\n{\n if (!ws['!ref']) return \"\";\n var range\n /*:Range*/\n = safe_decode_range(ws['!ref']);\n var marr\n /*:Array*/\n = ws['!merges'] || [],\n mi = 0;\n var o\n /*:Array*/\n = [];\n if (ws['!cols']) ws['!cols'].forEach(function (n, i) {\n process_col(n);\n var w = !!n.width;\n var p = col_obj_w(i, n);\n var k\n /*:any*/\n = {\n \"ss:Index\": i + 1\n };\n if (w) k['ss:Width'] = width2px(p.width);\n if (n.hidden) k['ss:Hidden'] = \"1\";\n o.push(writextag(\"Column\", null, k));\n });\n var dense = Array.isArray(ws);\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n var row = [write_ws_xlml_row(R, (ws['!rows'] || [])[R])];\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n var skip = false;\n\n for (mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c > C) continue;\n if (marr[mi].s.r > R) continue;\n if (marr[mi].e.c < C) continue;\n if (marr[mi].e.r < R) continue;\n if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n break;\n }\n\n if (skip) continue;\n var addr = {\n r: R,\n c: C\n };\n var ref = encode_cell(addr),\n cell = dense ? (ws[R] || [])[C] : ws[ref];\n row.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n }\n\n row.push(\"\");\n if (row.length > 2) o.push(row.join(\"\"));\n }\n\n return o.join(\"\");\n}\n\nfunction write_ws_xlml(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n)\n/*:string*/\n{\n var o\n /*:Array*/\n = [];\n var s = wb.SheetNames[idx];\n var ws = wb.Sheets[s];\n var t\n /*:string*/\n = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n if (t.length > 0) o.push(\"\" + t + \"\");\n /* Table */\n\n t = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n if (t.length > 0) o.push(\"
\" + t + \"
\");\n /* WorksheetOptions */\n\n o.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n return o.join(\"\");\n}\n\nfunction write_xlml(wb, opts)\n/*:string*/\n{\n if (!opts) opts = {};\n if (!wb.SSF) wb.SSF = dup(table_fmt);\n\n if (wb.SSF) {\n make_ssf();\n SSF_load_table(wb.SSF); // $FlowIgnore\n\n opts.revssf = evert_num(wb.SSF);\n opts.revssf[wb.SSF[65535]] = 0;\n opts.ssf = wb.SSF;\n opts.cellXfs = [];\n get_cell_style(opts.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n }\n\n var d\n /*:Array*/\n = [];\n d.push(write_props_xlml(wb, opts));\n d.push(write_wb_xlml(wb, opts));\n d.push(\"\");\n d.push(\"\");\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n d.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\n \"ss:Name\": escapexml(wb.SheetNames[i])\n }));\n }\n\n d[2] = write_sty_xlml(wb, opts);\n d[3] = write_names_xlml(wb, opts);\n return XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n 'xmlns': XLMLNS.ss,\n 'xmlns:o': XLMLNS.o,\n 'xmlns:x': XLMLNS.x,\n 'xmlns:ss': XLMLNS.ss,\n 'xmlns:dt': XLMLNS.dt,\n 'xmlns:html': XLMLNS.html\n });\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\n\n\nfunction parse_compobj(obj\n/*:CFBEntry*/\n) {\n var v = {};\n var o = obj.content;\n /*:: if(o == null) return; */\n\n /* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\n o.l = 28;\n v.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n v.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n if (o.length - o.l <= 4) return v;\n var m\n /*:number*/\n = o.read_shift(4);\n if (m == 0 || m > 40) return v;\n o.l -= 4;\n v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n if (o.length - o.l <= 4) return v;\n m = o.read_shift(4);\n if (m !== 0x71b239f4) return v;\n v.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n m = o.read_shift(4);\n if (m == 0 || m > 40) return v;\n o.l -= 4;\n v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue 0x003c\n\t- 2.4.59 ContinueBigName 0x043c\n\t- 2.4.60 ContinueFrt 0x0812\n\t- 2.4.61 ContinueFrt11 0x0875\n\t- 2.4.62 ContinueFrt12 0x087f\n*/\n\n\nvar CONTINUE_RT = [0x003c, 0x043c, 0x0812, 0x0875, 0x087f];\n\nfunction slurp(RecordType, R, blob, length\n/*:number*/\n, opts)\n/*:any*/\n{\n var l = length;\n var bufs = [];\n var d = blob.slice(blob.l, blob.l + l);\n if (opts && opts.enc && opts.enc.insitu && d.length > 0) switch (RecordType) {\n case 0x0009:\n case 0x0209:\n case 0x0409:\n case 0x0809\n /* BOF */\n :\n case 0x002f\n /* FilePass */\n :\n case 0x0195\n /* FileLock */\n :\n case 0x00e1\n /* InterfaceHdr */\n :\n case 0x0196\n /* RRDInfo */\n :\n case 0x0138\n /* RRDHead */\n :\n case 0x0194\n /* UsrExcl */\n :\n case 0x000a\n /* EOF */\n :\n break;\n\n case 0x0085\n /* BoundSheet8 */\n :\n break;\n\n default:\n opts.enc.insitu(d);\n }\n bufs.push(d);\n blob.l += l;\n\n var nextrt = __readUInt16LE(blob, blob.l),\n next = XLSRecordEnum[nextrt];\n\n var start = 0;\n\n while (next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n l = __readUInt16LE(blob, blob.l + 2);\n start = blob.l + 4;\n if (nextrt == 0x0812\n /* ContinueFrt */\n ) start += 4;else if (nextrt == 0x0875 || nextrt == 0x087f) {\n start += 12;\n }\n d = blob.slice(start, blob.l + 4 + l);\n bufs.push(d);\n blob.l += 4 + l;\n next = XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)];\n }\n\n var b = bconcat(bufs)\n /*:any*/\n ;\n prep_blob(b, 0);\n var ll = 0;\n b.lens = [];\n\n for (var j = 0; j < bufs.length; ++j) {\n b.lens.push(ll);\n ll += bufs[j].length;\n }\n\n if (b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n return R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p\n/*:any*/\n, opts\n/*:ParseOpts*/\n, date1904\n/*:?boolean*/\n) {\n if (p.t === 'z') return;\n if (!p.XF) return;\n var fmtid = 0;\n\n try {\n fmtid = p.z || p.XF.numFmtId || 0;\n if (opts.cellNF) p.z = table_fmt[fmtid];\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (!opts || opts.cellText !== false) try {\n if (p.t === 'e') {\n p.w = p.w || BErr[p.v];\n } else if (fmtid === 0 || fmtid == \"General\") {\n if (p.t === 'n') {\n if ((p.v | 0) === p.v) p.w = p.v.toString(10);else p.w = SSF_general_num(p.v);\n } else p.w = SSF_general(p.v);\n } else p.w = SSF_format(fmtid, p.v, {\n date1904: !!date1904,\n dateNF: opts && opts.dateNF\n });\n } catch (e) {\n if (opts.WTF) throw e;\n }\n\n if (opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n var _d = SSF_parse_date_code(p.v);\n\n if (_d) {\n p.t = 'd';\n p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);\n }\n }\n}\n\nfunction make_cell(val, ixfe, t)\n/*:Cell*/\n{\n return {\n v: val,\n ixfe: ixfe,\n t: t\n }\n /*:any*/\n ;\n} // 2.3.2\n\n\nfunction parse_workbook(blob, options\n/*:ParseOpts*/\n)\n/*:Workbook*/\n{\n var wb = {\n opts: {}\n }\n /*:any*/\n ;\n var Sheets = {};\n if (DENSE != null && options.dense == null) options.dense = DENSE;\n var out\n /*:Worksheet*/\n = options.dense ? [] : {}\n /*:any*/\n ;\n var Directory = {};\n var range\n /*:Range*/\n = {}\n /*:any*/\n ;\n var last_formula = null;\n var sst\n /*:SST*/\n = []\n /*:any*/\n ;\n var cur_sheet = \"\";\n var Preamble = {};\n var lastcell,\n last_cell = \"\",\n cc\n /*:Cell*/\n ,\n cmnt,\n rngC,\n rngR;\n var sharedf = {};\n var arrayf\n /*:Array<[Range, string]>*/\n = [];\n var temp_val\n /*:Cell*/\n ;\n var country;\n var XFs = [];\n /* XF records */\n\n var palette\n /*:Array<[number, number, number]>*/\n = [];\n var Workbook\n /*:WBWBProps*/\n = {\n Sheets: [],\n WBProps: {\n date1904: false\n },\n Views: [{}]\n }\n /*:any*/\n ,\n wsprops = {};\n\n var get_rgb = function getrgb(icv\n /*:number*/\n )\n /*:[number, number, number]*/\n {\n if (icv < 8) return XLSIcv[icv];\n if (icv < 64) return palette[icv - 8] || XLSIcv[icv];\n return XLSIcv[icv];\n };\n\n var process_cell_style = function pcs(cell, line\n /*:any*/\n , options) {\n var xfd = line.XF.data;\n if (!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n line.s = {}\n /*:any*/\n ;\n line.s.patternType = xfd.patternType;\n var t;\n\n if (t = rgb2Hex(get_rgb(xfd.icvFore))) {\n line.s.fgColor = {\n rgb: t\n };\n }\n\n if (t = rgb2Hex(get_rgb(xfd.icvBack))) {\n line.s.bgColor = {\n rgb: t\n };\n }\n };\n\n var addcell = function addcell(cell\n /*:any*/\n , line\n /*:any*/\n , options\n /*:any*/\n ) {\n if (file_depth > 1) return;\n if (options.sheetRows && cell.r >= options.sheetRows) return;\n if (options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n delete line.ixfe;\n delete line.XF;\n lastcell = cell;\n last_cell = encode_cell(cell);\n if (!range || !range.s || !range.e) range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n if (cell.r < range.s.r) range.s.r = cell.r;\n if (cell.c < range.s.c) range.s.c = cell.c;\n if (cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n if (cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\n if (options.cellFormula && line.f) {\n for (var afi = 0; afi < arrayf.length; ++afi) {\n if (arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n if (arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n line.F = encode_range(arrayf[afi][0]);\n if (arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n if (line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n break;\n }\n }\n\n {\n if (options.dense) {\n if (!out[cell.r]) out[cell.r] = [];\n out[cell.r][cell.c] = line;\n } else out[last_cell] = line;\n }\n };\n\n var opts = {\n enc: false,\n // encrypted\n sbcch: 0,\n // cch in the preceding SupBook\n snames: [],\n // sheetnames\n sharedf: sharedf,\n // shared formulae by address\n arrayf: arrayf,\n // array formulae array\n rrtabid: [],\n // RRTabId\n lastuser: \"\",\n // Last User from WriteAccess\n biff: 8,\n // BIFF version\n codepage: 0,\n // CP from CodePage record\n winlocked: 0,\n // fLockWn from WinProtect\n cellStyles: !!options && !!options.cellStyles,\n WTF: !!options && !!options.wtf\n }\n /*:any*/\n ;\n if (options.password) opts.password = options.password;\n var themes;\n var merges\n /*:Array*/\n = [];\n var objects = [];\n var colinfo\n /*:Array*/\n = [],\n rowinfo\n /*:Array*/\n = [];\n var seencol = false;\n var supbooks = []\n /*:any*/\n ; // 1-indexed, will hold extern names\n\n supbooks.SheetNames = opts.snames;\n supbooks.sharedf = opts.sharedf;\n supbooks.arrayf = opts.arrayf;\n supbooks.names = [];\n supbooks.XTI = [];\n var last_RT = 0;\n var file_depth = 0;\n /* TODO: make a real stack */\n\n var BIFF2Fmt = 0,\n BIFF2FmtTable\n /*:Array*/\n = [];\n var FilterDatabases = [];\n /* TODO: sort out supbooks and process elsewhere */\n\n var last_lbl\n /*:?DefinedName*/\n ;\n /* explicit override for some broken writers */\n\n opts.codepage = 1200;\n set_cp(1200);\n var seen_codepage = false;\n\n while (blob.l < blob.length - 1) {\n var s = blob.l;\n var RecordType = blob.read_shift(2);\n if (RecordType === 0 && last_RT === 0x000a\n /* EOF */\n ) break;\n var length = blob.l === blob.length ? 0 : blob.read_shift(2);\n var R = XLSRecordEnum[RecordType]; //console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n //if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\n if (R && R.f) {\n if (options.bookSheets) {\n if (last_RT === 0x0085\n /* BoundSheet8 */\n && RecordType !== 0x0085\n /* R.n !== 'BoundSheet8' */\n ) break;\n }\n\n last_RT = RecordType;\n\n if (R.r === 2 || R.r == 12) {\n var rt = blob.read_shift(2);\n length -= 2;\n if (!opts.enc && rt !== RecordType && ((rt & 0xFF) << 8 | rt >> 8) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\n if (R.r == 12) {\n blob.l += 10;\n length -= 10;\n } // skip FRT\n\n } //console.error(R,blob.l,length,blob.length);\n\n\n var val\n /*:any*/\n = {}\n /*:any*/\n ;\n if (RecordType === 0x000a\n /* EOF */\n ) val =\n /*::(*/\n R.f(blob, length, opts)\n /*:: :any)*/\n ;else val =\n /*::(*/\n slurp(RecordType, R, blob, length, opts)\n /*:: :any)*/\n ;\n /*:: val = (val:any); */\n\n if (file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1\n /* 'BOF' */\n ) continue;\n\n switch (RecordType) {\n case 0x0022\n /* Date1904 */\n :\n /*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n wb.opts.Date1904 = Workbook.WBProps.date1904 = val;\n break;\n\n case 0x0086\n /* WriteProtect */\n :\n wb.opts.WriteProtect = true;\n break;\n\n case 0x002f\n /* FilePass */\n :\n if (!opts.enc) blob.l = 0;\n opts.enc = val;\n if (!options.password) throw new Error(\"File is password-protected\");\n if (val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n if (!val.valid) throw new Error(\"Password is incorrect\");\n break;\n\n case 0x005c\n /* WriteAccess */\n :\n opts.lastuser = val;\n break;\n\n case 0x0042\n /* CodePage */\n :\n var cpval = Number(val);\n /* overrides based on test cases */\n\n switch (cpval) {\n case 0x5212:\n cpval = 1200;\n break;\n\n case 0x8000:\n cpval = 10000;\n break;\n\n case 0x8001:\n cpval = 1252;\n break;\n }\n\n set_cp(opts.codepage = cpval);\n seen_codepage = true;\n break;\n\n case 0x013d\n /* RRTabId */\n :\n opts.rrtabid = val;\n break;\n\n case 0x0019\n /* WinProtect */\n :\n opts.winlocked = val;\n break;\n\n case 0x01b7\n /* RefreshAll */\n :\n wb.opts[\"RefreshAll\"] = val;\n break;\n\n case 0x000c\n /* CalcCount */\n :\n wb.opts[\"CalcCount\"] = val;\n break;\n\n case 0x0010\n /* CalcDelta */\n :\n wb.opts[\"CalcDelta\"] = val;\n break;\n\n case 0x0011\n /* CalcIter */\n :\n wb.opts[\"CalcIter\"] = val;\n break;\n\n case 0x000d\n /* CalcMode */\n :\n wb.opts[\"CalcMode\"] = val;\n break;\n\n case 0x000e\n /* CalcPrecision */\n :\n wb.opts[\"CalcPrecision\"] = val;\n break;\n\n case 0x005f\n /* CalcSaveRecalc */\n :\n wb.opts[\"CalcSaveRecalc\"] = val;\n break;\n\n case 0x000f\n /* CalcRefMode */\n :\n opts.CalcRefMode = val;\n break;\n // TODO: implement R1C1\n\n case 0x08a3\n /* ForceFullCalculation */\n :\n wb.opts.FullCalc = val;\n break;\n\n case 0x0081\n /* WsBool */\n :\n if (val.fDialog) out[\"!type\"] = \"dialog\";\n if (!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n if (!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n break;\n // TODO\n\n case 0x00e0\n /* XF */\n :\n XFs.push(val);\n break;\n\n case 0x01ae\n /* SupBook */\n :\n supbooks.push([val]);\n supbooks[supbooks.length - 1].XTI = [];\n break;\n\n case 0x0023:\n case 0x0223\n /* ExternName */\n :\n supbooks[supbooks.length - 1].push(val);\n break;\n\n case 0x0018:\n case 0x0218\n /* Lbl */\n :\n last_lbl = {\n Name: val.Name,\n Ref: stringify_formula(val.rgce, range, null, supbooks, opts)\n }\n /*:DefinedName*/\n ;\n if (val.itab > 0) last_lbl.Sheet = val.itab - 1;\n supbooks.names.push(last_lbl);\n\n if (!supbooks[0]) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].push(val);\n if (val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0) if (val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d') FilterDatabases[val.itab - 1] = {\n ref: encode_range(val.rgce[0][0][1][2])\n };\n break;\n\n case 0x0016\n /* ExternCount */\n :\n opts.ExternCount = val;\n break;\n\n case 0x0017\n /* ExternSheet */\n :\n if (supbooks.length == 0) {\n supbooks[0] = [];\n supbooks[0].XTI = [];\n }\n\n supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n supbooks.XTI = supbooks.XTI.concat(val);\n break;\n\n case 0x0894\n /* NameCmt */\n :\n /* TODO: search for correct name */\n if (opts.biff < 8) break;\n if (last_lbl != null) last_lbl.Comment = val[1];\n break;\n\n case 0x0012\n /* Protect */\n :\n out[\"!protect\"] = val;\n break;\n\n /* for sheet or book */\n\n case 0x0013\n /* Password */\n :\n if (val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val);\n break;\n\n case 0x0085\n /* BoundSheet8 */\n :\n {\n Directory[val.pos] = val;\n opts.snames.push(val.name);\n }\n break;\n\n case 0x000a\n /* EOF */\n :\n {\n if (--file_depth) break;\n\n if (range.e) {\n if (range.e.r > 0 && range.e.c > 0) {\n range.e.r--;\n range.e.c--;\n out[\"!ref\"] = encode_range(range);\n\n if (options.sheetRows && options.sheetRows <= range.e.r) {\n var tmpri = range.e.r;\n range.e.r = options.sheetRows - 1;\n out[\"!fullref\"] = out[\"!ref\"];\n out[\"!ref\"] = encode_range(range);\n range.e.r = tmpri;\n }\n\n range.e.r++;\n range.e.c++;\n }\n\n if (merges.length > 0) out[\"!merges\"] = merges;\n if (objects.length > 0) out[\"!objects\"] = objects;\n if (colinfo.length > 0) out[\"!cols\"] = colinfo;\n if (rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n Workbook.Sheets.push(wsprops);\n }\n\n if (cur_sheet === \"\") Preamble = out;else Sheets[cur_sheet] = out;\n out = options.dense ? [] : {}\n /*:any*/\n ;\n }\n break;\n\n case 0x0009:\n case 0x0209:\n case 0x0409:\n case 0x0809\n /* BOF */\n :\n {\n if (opts.biff === 8) opts.biff = {\n /*::[*/\n 0x0009\n /*::]*/\n : 2,\n\n /*::[*/\n 0x0209\n /*::]*/\n : 3,\n\n /*::[*/\n 0x0409\n /*::]*/\n : 4\n }[RecordType] || {\n /*::[*/\n 0x0200\n /*::]*/\n : 2,\n\n /*::[*/\n 0x0300\n /*::]*/\n : 3,\n\n /*::[*/\n 0x0400\n /*::]*/\n : 4,\n\n /*::[*/\n 0x0500\n /*::]*/\n : 5,\n\n /*::[*/\n 0x0600\n /*::]*/\n : 8,\n\n /*::[*/\n 0x0002\n /*::]*/\n : 2,\n\n /*::[*/\n 0x0007\n /*::]*/\n : 2\n }[val.BIFFVer] || 8;\n opts.biffguess = val.BIFFVer == 0;\n\n if (val.BIFFVer == 0 && val.dt == 0x1000) {\n opts.biff = 5;\n seen_codepage = true;\n set_cp(opts.codepage = 28591);\n }\n\n if (opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n if (file_depth++) break;\n out = options.dense ? [] : {}\n /*:any*/\n ;\n\n if (opts.biff < 8 && !seen_codepage) {\n seen_codepage = true;\n set_cp(opts.codepage = options.codepage || 1252);\n }\n\n if (opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n if (cur_sheet === \"\") cur_sheet = \"Sheet1\";\n range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n /* fake BoundSheet8 */\n\n var fakebs8 = {\n pos: blob.l - length,\n name: cur_sheet\n };\n Directory[fakebs8.pos] = fakebs8;\n opts.snames.push(cur_sheet);\n } else cur_sheet = (Directory[s] || {\n name: \"\"\n }).name;\n\n if (val.dt == 0x20) out[\"!type\"] = \"chart\";\n if (val.dt == 0x40) out[\"!type\"] = \"macro\";\n merges = [];\n objects = [];\n opts.arrayf = arrayf = [];\n colinfo = [];\n rowinfo = [];\n seencol = false;\n wsprops = {\n Hidden: (Directory[s] || {\n hs: 0\n }).hs,\n name: cur_sheet\n };\n }\n break;\n\n case 0x0203\n /* Number */\n :\n case 0x0003\n /* BIFF2NUM */\n :\n case 0x0002\n /* BIFF2INT */\n :\n {\n if (out[\"!type\"] == \"chart\") if (options.dense ? (out[val.r] || [])[val.c] : out[encode_cell({\n c: val.c,\n r: val.r\n })]) ++val.c;\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe] || {},\n v: val.val,\n t: 'n'\n }\n /*:any*/\n ;\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 0x0005:\n case 0x0205\n /* BoolErr */\n :\n {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n v: val.val,\n t: val.t\n }\n /*:any*/\n ;\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 0x027e\n /* RK */\n :\n {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n v: val.rknum,\n t: 'n'\n }\n /*:any*/\n ;\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n break;\n\n case 0x00bd\n /* MulRk */\n :\n {\n for (var j = val.c; j <= val.C; ++j) {\n var ixfe = val.rkrec[j - val.c][0];\n temp_val = {\n ixfe: ixfe,\n XF: XFs[ixfe],\n v: val.rkrec[j - val.c][1],\n t: 'n'\n }\n /*:any*/\n ;\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: j,\n r: val.r\n }, temp_val, options);\n }\n }\n break;\n\n case 0x0006:\n case 0x0206:\n case 0x0406\n /* Formula */\n :\n {\n if (val.val == 'String') {\n last_formula = val;\n break;\n }\n\n temp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n temp_val.XF = XFs[temp_val.ixfe];\n\n if (options.cellFormula) {\n var _f = val.formula;\n\n if (_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n var _fr = _f[0][0][1][0],\n _fc = _f[0][0][1][1];\n\n var _fe = encode_cell({\n r: _fr,\n c: _fc\n });\n\n if (sharedf[_fe]) temp_val.f = \"\" + stringify_formula(val.formula, range, val.cell, supbooks, opts);else temp_val.F = ((options.dense ? (out[_fr] || [])[_fc] : out[_fe]) || {}).F;\n } else temp_val.f = \"\" + stringify_formula(val.formula, range, val.cell, supbooks, opts);\n }\n\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell(val.cell, temp_val, options);\n last_formula = val;\n }\n break;\n\n case 0x0007:\n case 0x0207\n /* String */\n :\n {\n if (last_formula) {\n /* technically always true */\n last_formula.val = val;\n temp_val = make_cell(val, last_formula.cell.ixfe, 's');\n temp_val.XF = XFs[temp_val.ixfe];\n\n if (options.cellFormula) {\n temp_val.f = \"\" + stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n }\n\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell(last_formula.cell, temp_val, options);\n last_formula = null;\n } else throw new Error(\"String record expects Formula\");\n }\n break;\n\n case 0x0021:\n case 0x0221\n /* Array */\n :\n {\n arrayf.push(val);\n\n var _arraystart = encode_cell(val[0].s);\n\n cc = options.dense ? (out[val[0].s.r] || [])[val[0].s.c] : out[_arraystart];\n\n if (options.cellFormula && cc) {\n if (!last_formula) break;\n /* technically unreachable */\n\n if (!_arraystart || !cc) break;\n cc.f = \"\" + stringify_formula(val[1], range, val[0], supbooks, opts);\n cc.F = encode_range(val[0]);\n }\n }\n break;\n\n case 0x04bc\n /* ShrFmla */\n :\n {\n if (!options.cellFormula) break;\n\n if (last_cell) {\n /* TODO: capture range */\n if (!last_formula) break;\n /* technically unreachable */\n\n sharedf[encode_cell(last_formula.cell)] = val[0];\n cc = options.dense ? (out[last_formula.cell.r] || [])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n (cc || {}).f = \"\" + stringify_formula(val[0], range, lastcell, supbooks, opts);\n }\n }\n break;\n\n case 0x00fd\n /* LabelSst */\n :\n temp_val = make_cell(sst[val.isst].t, val.ixfe, 's');\n if (sst[val.isst].h) temp_val.h = sst[val.isst].h;\n temp_val.XF = XFs[temp_val.ixfe];\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n break;\n\n case 0x0201\n /* Blank */\n :\n if (options.sheetStubs) {\n temp_val = {\n ixfe: val.ixfe,\n XF: XFs[val.ixfe],\n t: 'z'\n }\n /*:any*/\n ;\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n }\n\n break;\n\n case 0x00be\n /* MulBlank */\n :\n if (options.sheetStubs) {\n for (var _j = val.c; _j <= val.C; ++_j) {\n var _ixfe = val.ixfe[_j - val.c];\n temp_val = {\n ixfe: _ixfe,\n XF: XFs[_ixfe],\n t: 'z'\n }\n /*:any*/\n ;\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: _j,\n r: val.r\n }, temp_val, options);\n }\n }\n\n break;\n\n case 0x00d6\n /* RString */\n :\n case 0x0204\n /* Label */\n :\n case 0x0004\n /* BIFF2STR */\n :\n temp_val = make_cell(val.val, val.ixfe, 's');\n temp_val.XF = XFs[temp_val.ixfe];\n if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 0x3F];\n safe_format_xf(temp_val, options, wb.opts.Date1904);\n addcell({\n c: val.c,\n r: val.r\n }, temp_val, options);\n break;\n\n case 0x0000:\n case 0x0200\n /* Dimensions */\n :\n {\n if (file_depth === 1) range = val;\n /* TODO: stack */\n }\n break;\n\n case 0x00fc\n /* SST */\n :\n {\n sst = val;\n }\n break;\n\n case 0x041e\n /* Format */\n :\n {\n /* val = [id, fmt] */\n if (opts.biff == 4) {\n BIFF2FmtTable[BIFF2Fmt++] = val[1];\n\n for (var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) {\n if (table_fmt[b4idx] == val[1]) break;\n }\n\n if (b4idx >= 163) SSF_load(val[1], BIFF2Fmt + 163);\n } else SSF_load(val[1], val[0]);\n }\n break;\n\n case 0x001e\n /* BIFF2FORMAT */\n :\n {\n BIFF2FmtTable[BIFF2Fmt++] = val;\n\n for (var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) {\n if (table_fmt[b2idx] == val) break;\n }\n\n if (b2idx >= 163) SSF_load(val, BIFF2Fmt + 163);\n }\n break;\n\n case 0x00e5\n /* MergeCells */\n :\n merges = merges.concat(val);\n break;\n\n case 0x005d\n /* Obj */\n :\n objects[val.cmo[0]] = opts.lastobj = val;\n break;\n\n case 0x01b6\n /* TxO */\n :\n opts.lastobj.TxO = val;\n break;\n\n case 0x007f\n /* ImData */\n :\n opts.lastobj.ImData = val;\n break;\n\n case 0x01b8\n /* HLink */\n :\n {\n for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) {\n for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({\n c: rngC,\n r: rngR\n })];\n if (cc) cc.l = val[1];\n }\n }\n }\n break;\n\n case 0x0800\n /* HLinkTooltip */\n :\n {\n for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR) {\n for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({\n c: rngC,\n r: rngR\n })];\n if (cc && cc.l) cc.l.Tooltip = val[1];\n }\n }\n }\n break;\n\n case 0x001c\n /* Note */\n :\n {\n if (opts.biff <= 5 && opts.biff >= 2) break;\n /* TODO: BIFF5 */\n\n cc = options.dense ? (out[val[0].r] || [])[val[0].c] : out[encode_cell(val[0])];\n var noteobj = objects[val[2]];\n\n if (!cc) {\n if (options.dense) {\n if (!out[val[0].r]) out[val[0].r] = [];\n cc = out[val[0].r][val[0].c] = {\n t: \"z\"\n }\n /*:any*/\n ;\n } else {\n cc = out[encode_cell(val[0])] = {\n t: \"z\"\n }\n /*:any*/\n ;\n }\n\n range.e.r = Math.max(range.e.r, val[0].r);\n range.s.r = Math.min(range.s.r, val[0].r);\n range.e.c = Math.max(range.e.c, val[0].c);\n range.s.c = Math.min(range.s.c, val[0].c);\n }\n\n if (!cc.c) cc.c = [];\n cmnt = {\n a: val[1],\n t: noteobj.TxO.t\n };\n cc.c.push(cmnt);\n }\n break;\n\n case 0x087d\n /* XFExt */\n :\n update_xfext(XFs[val.ixfe], val.ext);\n break;\n\n case 0x007d\n /* ColInfo */\n :\n {\n if (!opts.cellStyles) break;\n\n while (val.e >= val.s) {\n colinfo[val.e--] = {\n width: val.w / 256,\n level: val.level || 0,\n hidden: !!(val.flags & 1)\n };\n\n if (!seencol) {\n seencol = true;\n find_mdw_colw(val.w / 256);\n }\n\n process_col(colinfo[val.e + 1]);\n }\n }\n break;\n\n case 0x0208\n /* Row */\n :\n {\n var rowobj = {};\n\n if (val.level != null) {\n rowinfo[val.r] = rowobj;\n rowobj.level = val.level;\n }\n\n if (val.hidden) {\n rowinfo[val.r] = rowobj;\n rowobj.hidden = true;\n }\n\n if (val.hpt) {\n rowinfo[val.r] = rowobj;\n rowobj.hpt = val.hpt;\n rowobj.hpx = pt2px(val.hpt);\n }\n }\n break;\n\n case 0x0026\n /* LeftMargin */\n :\n case 0x0027\n /* RightMargin */\n :\n case 0x0028\n /* TopMargin */\n :\n case 0x0029\n /* BottomMargin */\n :\n if (!out['!margins']) default_margins(out['!margins'] = {});\n out['!margins'][{\n 0x26: \"left\",\n 0x27: \"right\",\n 0x28: \"top\",\n 0x29: \"bottom\"\n }[RecordType]] = val;\n break;\n\n case 0x00a1\n /* Setup */\n :\n // TODO\n if (!out['!margins']) default_margins(out['!margins'] = {});\n out['!margins'].header = val.header;\n out['!margins'].footer = val.footer;\n break;\n\n case 0x023e\n /* Window2 */\n :\n // TODO\n // $FlowIgnore\n if (val.RTL) Workbook.Views[0].RTL = true;\n break;\n\n case 0x0092\n /* Palette */\n :\n palette = val;\n break;\n\n case 0x0896\n /* Theme */\n :\n themes = val;\n break;\n\n case 0x008c\n /* Country */\n :\n country = val;\n break;\n\n case 0x01ba\n /* CodeName */\n :\n {\n /*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n if (!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";else wsprops.CodeName = val || wsprops.name;\n }\n break;\n }\n } else {\n if (!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n blob.l += length;\n }\n }\n\n wb.SheetNames = keys(Directory).sort(function (a, b) {\n return Number(a) - Number(b);\n }).map(function (x) {\n return Directory[x].name;\n });\n if (!options.bookSheets) wb.Sheets = Sheets;\n\n if (!wb.SheetNames.length && Preamble[\"!ref\"]) {\n wb.SheetNames.push(\"Sheet1\");\n /*jshint -W069 */\n\n if (wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n /*jshint +W069 */\n } else wb.Preamble = Preamble;\n\n if (wb.Sheets) FilterDatabases.forEach(function (r, i) {\n wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r;\n });\n wb.Strings = sst;\n wb.SSF = dup(table_fmt);\n if (opts.enc) wb.Encryption = opts.enc;\n if (themes) wb.Themes = themes;\n wb.Metadata = {};\n if (country !== undefined) wb.Metadata.Country = country;\n if (supbooks.names.length > 0) Workbook.Names = supbooks.names;\n wb.Workbook = Workbook;\n return wb;\n}\n/* TODO: split props*/\n\n\nvar PSCLSID = {\n SI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n DSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n UDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\n\nfunction parse_xls_props(cfb\n/*:CFBContainer*/\n, props, o) {\n /* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n var DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n if (DSI && DSI.size > 0) try {\n var DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\n for (var d in DocSummary) {\n props[d] = DocSummary[d];\n }\n } catch (e) {\n if (o.WTF) throw e;\n /* empty */\n }\n /* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\n var SI = CFB.find(cfb, '/!SummaryInformation');\n if (SI && SI.size > 0) try {\n var Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\n for (var s in Summary) {\n if (props[s] == null) props[s] = Summary[s];\n }\n } catch (e) {\n if (o.WTF) throw e;\n /* empty */\n }\n\n if (props.HeadingPairs && props.TitlesOfParts) {\n load_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n delete props.HeadingPairs;\n delete props.TitlesOfParts;\n }\n}\n\nfunction write_xls_props(wb\n/*:Workbook*/\n, cfb\n/*:CFBContainer*/\n) {\n var DSEntries = [],\n SEntries = [],\n CEntries = [];\n var i = 0,\n Keys;\n var DocSummaryRE\n /*:{[key:string]:string}*/\n = evert_key(DocSummaryPIDDSI, \"n\");\n var SummaryRE\n /*:{[key:string]:string}*/\n = evert_key(SummaryPIDSI, \"n\");\n\n if (wb.Props) {\n Keys = keys(wb.Props); // $FlowIgnore\n\n for (i = 0; i < Keys.length; ++i) {\n (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n }\n }\n\n if (wb.Custprops) {\n Keys = keys(wb.Custprops); // $FlowIgnore\n\n for (i = 0; i < Keys.length; ++i) {\n if (!Object.prototype.hasOwnProperty.call(wb.Props || {}, Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n }\n }\n\n var CEntries2 = [];\n\n for (i = 0; i < CEntries.length; ++i) {\n if (XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n if (CEntries[i][1] == null) continue;\n CEntries2.push(CEntries[i]);\n }\n\n if (SEntries.length) CFB.utils.cfb_add(cfb, \"/\\x05SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n if (DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\x05DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb\n/*:any*/\n, options\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n if (!options) options = {};\n fix_read_opts(options);\n reset_cp();\n if (options.codepage) set_ansi(options.codepage);\n var CompObj\n /*:?CFBEntry*/\n , WB\n /*:?any*/\n ;\n\n if (cfb.FullPaths) {\n if (CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n CompObj = CFB.find(cfb, '!CompObj');\n WB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n } else {\n switch (options.type) {\n case 'base64':\n cfb = s2a(Base64_decode(cfb));\n break;\n\n case 'binary':\n cfb = s2a(cfb);\n break;\n\n case 'buffer':\n break;\n\n case 'array':\n if (!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb);\n break;\n }\n\n prep_blob(cfb, 0);\n WB = {\n content: cfb\n }\n /*:any*/\n ;\n }\n\n var\n /*::CompObjP, */\n WorkbookP\n /*:: :Workbook = XLSX.utils.book_new(); */\n ;\n\n var _data\n /*:?any*/\n ;\n\n if (CompObj)\n /*::CompObjP = */\n parse_compobj(CompObj);\n if (options.bookProps && !options.bookSheets) WorkbookP = {}\n /*:any*/\n ;else\n /*:: if(cfb instanceof CFBContainer) */\n {\n var T = has_buf ? 'buffer' : 'array';\n if (WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n /* Quattro Pro 7-8 */\n else if ((_data = CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n /* Quattro Pro 9 */\n else if ((_data = CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n /* Works 4 for Mac */\n else if ((_data = CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");else throw new Error(\"Cannot find Workbook stream\");\n if (options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n }\n var props = {};\n if (cfb.FullPaths) parse_xls_props(\n /*::((*/\n cfb\n /*:: :any):CFBContainer)*/\n , props, options);\n WorkbookP.Props = WorkbookP.Custprops = props;\n /* TODO: split up properties */\n\n if (options.bookFiles) WorkbookP.cfb = cfb;\n /*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\n\n return WorkbookP;\n}\n\nfunction write_xlscfb(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n)\n/*:CFBContainer*/\n{\n var o = opts || {};\n var cfb = CFB.utils.cfb_new({\n root: \"R\"\n });\n var wbpath = \"/Workbook\";\n\n switch (o.bookType || \"xls\") {\n case \"xls\":\n o.bookType = \"biff8\";\n\n /* falls through */\n\n case \"xla\":\n if (!o.bookType) o.bookType = \"xla\";\n\n /* falls through */\n\n case \"biff8\":\n wbpath = \"/Workbook\";\n o.biff = 8;\n break;\n\n case \"biff5\":\n wbpath = \"/Book\";\n o.biff = 5;\n break;\n\n default:\n throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n }\n\n CFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n if (o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb); // TODO: SI, DSI, CO\n\n if (o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {\n type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"\n }));\n return cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\n\n\nvar XLSBRecordEnum = {\n /*::[*/\n 0x0000\n /*::]*/\n : {\n /* n:\"BrtRowHdr\", */\n f: parse_BrtRowHdr\n },\n\n /*::[*/\n 0x0001\n /*::]*/\n : {\n /* n:\"BrtCellBlank\", */\n f: parse_BrtCellBlank\n },\n\n /*::[*/\n 0x0002\n /*::]*/\n : {\n /* n:\"BrtCellRk\", */\n f: parse_BrtCellRk\n },\n\n /*::[*/\n 0x0003\n /*::]*/\n : {\n /* n:\"BrtCellError\", */\n f: parse_BrtCellError\n },\n\n /*::[*/\n 0x0004\n /*::]*/\n : {\n /* n:\"BrtCellBool\", */\n f: parse_BrtCellBool\n },\n\n /*::[*/\n 0x0005\n /*::]*/\n : {\n /* n:\"BrtCellReal\", */\n f: parse_BrtCellReal\n },\n\n /*::[*/\n 0x0006\n /*::]*/\n : {\n /* n:\"BrtCellSt\", */\n f: parse_BrtCellSt\n },\n\n /*::[*/\n 0x0007\n /*::]*/\n : {\n /* n:\"BrtCellIsst\", */\n f: parse_BrtCellIsst\n },\n\n /*::[*/\n 0x0008\n /*::]*/\n : {\n /* n:\"BrtFmlaString\", */\n f: parse_BrtFmlaString\n },\n\n /*::[*/\n 0x0009\n /*::]*/\n : {\n /* n:\"BrtFmlaNum\", */\n f: parse_BrtFmlaNum\n },\n\n /*::[*/\n 0x000A\n /*::]*/\n : {\n /* n:\"BrtFmlaBool\", */\n f: parse_BrtFmlaBool\n },\n\n /*::[*/\n 0x000B\n /*::]*/\n : {\n /* n:\"BrtFmlaError\", */\n f: parse_BrtFmlaError\n },\n\n /*::[*/\n 0x000C\n /*::]*/\n : {\n /* n:\"BrtShortBlank\", */\n f: parse_BrtShortBlank\n },\n\n /*::[*/\n 0x000D\n /*::]*/\n : {\n /* n:\"BrtShortRk\", */\n f: parse_BrtShortRk\n },\n\n /*::[*/\n 0x000E\n /*::]*/\n : {\n /* n:\"BrtShortError\", */\n f: parse_BrtShortError\n },\n\n /*::[*/\n 0x000F\n /*::]*/\n : {\n /* n:\"BrtShortBool\", */\n f: parse_BrtShortBool\n },\n\n /*::[*/\n 0x0010\n /*::]*/\n : {\n /* n:\"BrtShortReal\", */\n f: parse_BrtShortReal\n },\n\n /*::[*/\n 0x0011\n /*::]*/\n : {\n /* n:\"BrtShortSt\", */\n f: parse_BrtShortSt\n },\n\n /*::[*/\n 0x0012\n /*::]*/\n : {\n /* n:\"BrtShortIsst\", */\n f: parse_BrtShortIsst\n },\n\n /*::[*/\n 0x0013\n /*::]*/\n : {\n /* n:\"BrtSSTItem\", */\n f: parse_RichStr\n },\n\n /*::[*/\n 0x0014\n /*::]*/\n : {\n /* n:\"BrtPCDIMissing\" */\n },\n\n /*::[*/\n 0x0015\n /*::]*/\n : {\n /* n:\"BrtPCDINumber\" */\n },\n\n /*::[*/\n 0x0016\n /*::]*/\n : {\n /* n:\"BrtPCDIBoolean\" */\n },\n\n /*::[*/\n 0x0017\n /*::]*/\n : {\n /* n:\"BrtPCDIError\" */\n },\n\n /*::[*/\n 0x0018\n /*::]*/\n : {\n /* n:\"BrtPCDIString\" */\n },\n\n /*::[*/\n 0x0019\n /*::]*/\n : {\n /* n:\"BrtPCDIDatetime\" */\n },\n\n /*::[*/\n 0x001A\n /*::]*/\n : {\n /* n:\"BrtPCDIIndex\" */\n },\n\n /*::[*/\n 0x001B\n /*::]*/\n : {\n /* n:\"BrtPCDIAMissing\" */\n },\n\n /*::[*/\n 0x001C\n /*::]*/\n : {\n /* n:\"BrtPCDIANumber\" */\n },\n\n /*::[*/\n 0x001D\n /*::]*/\n : {\n /* n:\"BrtPCDIABoolean\" */\n },\n\n /*::[*/\n 0x001E\n /*::]*/\n : {\n /* n:\"BrtPCDIAError\" */\n },\n\n /*::[*/\n 0x001F\n /*::]*/\n : {\n /* n:\"BrtPCDIAString\" */\n },\n\n /*::[*/\n 0x0020\n /*::]*/\n : {\n /* n:\"BrtPCDIADatetime\" */\n },\n\n /*::[*/\n 0x0021\n /*::]*/\n : {\n /* n:\"BrtPCRRecord\" */\n },\n\n /*::[*/\n 0x0022\n /*::]*/\n : {\n /* n:\"BrtPCRRecordDt\" */\n },\n\n /*::[*/\n 0x0023\n /*::]*/\n : {\n /* n:\"BrtFRTBegin\", */\n T: 1\n },\n\n /*::[*/\n 0x0024\n /*::]*/\n : {\n /* n:\"BrtFRTEnd\", */\n T: -1\n },\n\n /*::[*/\n 0x0025\n /*::]*/\n : {\n /* n:\"BrtACBegin\", */\n T: 1\n },\n\n /*::[*/\n 0x0026\n /*::]*/\n : {\n /* n:\"BrtACEnd\", */\n T: -1\n },\n\n /*::[*/\n 0x0027\n /*::]*/\n : {\n /* n:\"BrtName\", */\n f: parse_BrtName\n },\n\n /*::[*/\n 0x0028\n /*::]*/\n : {\n /* n:\"BrtIndexRowBlock\" */\n },\n\n /*::[*/\n 0x002A\n /*::]*/\n : {\n /* n:\"BrtIndexBlock\" */\n },\n\n /*::[*/\n 0x002B\n /*::]*/\n : {\n /* n:\"BrtFont\", */\n f: parse_BrtFont\n },\n\n /*::[*/\n 0x002C\n /*::]*/\n : {\n /* n:\"BrtFmt\", */\n f: parse_BrtFmt\n },\n\n /*::[*/\n 0x002D\n /*::]*/\n : {\n /* n:\"BrtFill\", */\n f: parse_BrtFill\n },\n\n /*::[*/\n 0x002E\n /*::]*/\n : {\n /* n:\"BrtBorder\", */\n f: parse_BrtBorder\n },\n\n /*::[*/\n 0x002F\n /*::]*/\n : {\n /* n:\"BrtXF\", */\n f: parse_BrtXF\n },\n\n /*::[*/\n 0x0030\n /*::]*/\n : {\n /* n:\"BrtStyle\" */\n },\n\n /*::[*/\n 0x0031\n /*::]*/\n : {\n /* n:\"BrtCellMeta\", */\n f: parse_Int32LE\n },\n\n /*::[*/\n 0x0032\n /*::]*/\n : {\n /* n:\"BrtValueMeta\" */\n },\n\n /*::[*/\n 0x0033\n /*::]*/\n : {\n /* n:\"BrtMdb\" */\n f: parse_BrtMdb\n },\n\n /*::[*/\n 0x0034\n /*::]*/\n : {\n /* n:\"BrtBeginFmd\", */\n T: 1\n },\n\n /*::[*/\n 0x0035\n /*::]*/\n : {\n /* n:\"BrtEndFmd\", */\n T: -1\n },\n\n /*::[*/\n 0x0036\n /*::]*/\n : {\n /* n:\"BrtBeginMdx\", */\n T: 1\n },\n\n /*::[*/\n 0x0037\n /*::]*/\n : {\n /* n:\"BrtEndMdx\", */\n T: -1\n },\n\n /*::[*/\n 0x0038\n /*::]*/\n : {\n /* n:\"BrtBeginMdxTuple\", */\n T: 1\n },\n\n /*::[*/\n 0x0039\n /*::]*/\n : {\n /* n:\"BrtEndMdxTuple\", */\n T: -1\n },\n\n /*::[*/\n 0x003A\n /*::]*/\n : {\n /* n:\"BrtMdxMbrIstr\" */\n },\n\n /*::[*/\n 0x003B\n /*::]*/\n : {\n /* n:\"BrtStr\" */\n },\n\n /*::[*/\n 0x003C\n /*::]*/\n : {\n /* n:\"BrtColInfo\", */\n f: parse_ColInfo\n },\n\n /*::[*/\n 0x003E\n /*::]*/\n : {\n /* n:\"BrtCellRString\", */\n f: parse_BrtCellRString\n },\n\n /*::[*/\n 0x003F\n /*::]*/\n : {\n /* n:\"BrtCalcChainItem$\", */\n f: parse_BrtCalcChainItem$\n },\n\n /*::[*/\n 0x0040\n /*::]*/\n : {\n /* n:\"BrtDVal\", */\n f: parse_BrtDVal\n },\n\n /*::[*/\n 0x0041\n /*::]*/\n : {\n /* n:\"BrtSxvcellNum\" */\n },\n\n /*::[*/\n 0x0042\n /*::]*/\n : {\n /* n:\"BrtSxvcellStr\" */\n },\n\n /*::[*/\n 0x0043\n /*::]*/\n : {\n /* n:\"BrtSxvcellBool\" */\n },\n\n /*::[*/\n 0x0044\n /*::]*/\n : {\n /* n:\"BrtSxvcellErr\" */\n },\n\n /*::[*/\n 0x0045\n /*::]*/\n : {\n /* n:\"BrtSxvcellDate\" */\n },\n\n /*::[*/\n 0x0046\n /*::]*/\n : {\n /* n:\"BrtSxvcellNil\" */\n },\n\n /*::[*/\n 0x0080\n /*::]*/\n : {\n /* n:\"BrtFileVersion\" */\n },\n\n /*::[*/\n 0x0081\n /*::]*/\n : {\n /* n:\"BrtBeginSheet\", */\n T: 1\n },\n\n /*::[*/\n 0x0082\n /*::]*/\n : {\n /* n:\"BrtEndSheet\", */\n T: -1\n },\n\n /*::[*/\n 0x0083\n /*::]*/\n : {\n /* n:\"BrtBeginBook\", */\n T: 1,\n f: parsenoop,\n p: 0\n },\n\n /*::[*/\n 0x0084\n /*::]*/\n : {\n /* n:\"BrtEndBook\", */\n T: -1\n },\n\n /*::[*/\n 0x0085\n /*::]*/\n : {\n /* n:\"BrtBeginWsViews\", */\n T: 1\n },\n\n /*::[*/\n 0x0086\n /*::]*/\n : {\n /* n:\"BrtEndWsViews\", */\n T: -1\n },\n\n /*::[*/\n 0x0087\n /*::]*/\n : {\n /* n:\"BrtBeginBookViews\", */\n T: 1\n },\n\n /*::[*/\n 0x0088\n /*::]*/\n : {\n /* n:\"BrtEndBookViews\", */\n T: -1\n },\n\n /*::[*/\n 0x0089\n /*::]*/\n : {\n /* n:\"BrtBeginWsView\", */\n T: 1,\n f: parse_BrtBeginWsView\n },\n\n /*::[*/\n 0x008A\n /*::]*/\n : {\n /* n:\"BrtEndWsView\", */\n T: -1\n },\n\n /*::[*/\n 0x008B\n /*::]*/\n : {\n /* n:\"BrtBeginCsViews\", */\n T: 1\n },\n\n /*::[*/\n 0x008C\n /*::]*/\n : {\n /* n:\"BrtEndCsViews\", */\n T: -1\n },\n\n /*::[*/\n 0x008D\n /*::]*/\n : {\n /* n:\"BrtBeginCsView\", */\n T: 1\n },\n\n /*::[*/\n 0x008E\n /*::]*/\n : {\n /* n:\"BrtEndCsView\", */\n T: -1\n },\n\n /*::[*/\n 0x008F\n /*::]*/\n : {\n /* n:\"BrtBeginBundleShs\", */\n T: 1\n },\n\n /*::[*/\n 0x0090\n /*::]*/\n : {\n /* n:\"BrtEndBundleShs\", */\n T: -1\n },\n\n /*::[*/\n 0x0091\n /*::]*/\n : {\n /* n:\"BrtBeginSheetData\", */\n T: 1\n },\n\n /*::[*/\n 0x0092\n /*::]*/\n : {\n /* n:\"BrtEndSheetData\", */\n T: -1\n },\n\n /*::[*/\n 0x0093\n /*::]*/\n : {\n /* n:\"BrtWsProp\", */\n f: parse_BrtWsProp\n },\n\n /*::[*/\n 0x0094\n /*::]*/\n : {\n /* n:\"BrtWsDim\", */\n f: parse_BrtWsDim,\n p: 16\n },\n\n /*::[*/\n 0x0097\n /*::]*/\n : {\n /* n:\"BrtPane\", */\n f: parse_BrtPane\n },\n\n /*::[*/\n 0x0098\n /*::]*/\n : {\n /* n:\"BrtSel\" */\n },\n\n /*::[*/\n 0x0099\n /*::]*/\n : {\n /* n:\"BrtWbProp\", */\n f: parse_BrtWbProp\n },\n\n /*::[*/\n 0x009A\n /*::]*/\n : {\n /* n:\"BrtWbFactoid\" */\n },\n\n /*::[*/\n 0x009B\n /*::]*/\n : {\n /* n:\"BrtFileRecover\" */\n },\n\n /*::[*/\n 0x009C\n /*::]*/\n : {\n /* n:\"BrtBundleSh\", */\n f: parse_BrtBundleSh\n },\n\n /*::[*/\n 0x009D\n /*::]*/\n : {\n /* n:\"BrtCalcProp\" */\n },\n\n /*::[*/\n 0x009E\n /*::]*/\n : {\n /* n:\"BrtBookView\" */\n },\n\n /*::[*/\n 0x009F\n /*::]*/\n : {\n /* n:\"BrtBeginSst\", */\n T: 1,\n f: parse_BrtBeginSst\n },\n\n /*::[*/\n 0x00A0\n /*::]*/\n : {\n /* n:\"BrtEndSst\", */\n T: -1\n },\n\n /*::[*/\n 0x00A1\n /*::]*/\n : {\n /* n:\"BrtBeginAFilter\", */\n T: 1,\n f: parse_UncheckedRfX\n },\n\n /*::[*/\n 0x00A2\n /*::]*/\n : {\n /* n:\"BrtEndAFilter\", */\n T: -1\n },\n\n /*::[*/\n 0x00A3\n /*::]*/\n : {\n /* n:\"BrtBeginFilterColumn\", */\n T: 1\n },\n\n /*::[*/\n 0x00A4\n /*::]*/\n : {\n /* n:\"BrtEndFilterColumn\", */\n T: -1\n },\n\n /*::[*/\n 0x00A5\n /*::]*/\n : {\n /* n:\"BrtBeginFilters\", */\n T: 1\n },\n\n /*::[*/\n 0x00A6\n /*::]*/\n : {\n /* n:\"BrtEndFilters\", */\n T: -1\n },\n\n /*::[*/\n 0x00A7\n /*::]*/\n : {\n /* n:\"BrtFilter\" */\n },\n\n /*::[*/\n 0x00A8\n /*::]*/\n : {\n /* n:\"BrtColorFilter\" */\n },\n\n /*::[*/\n 0x00A9\n /*::]*/\n : {\n /* n:\"BrtIconFilter\" */\n },\n\n /*::[*/\n 0x00AA\n /*::]*/\n : {\n /* n:\"BrtTop10Filter\" */\n },\n\n /*::[*/\n 0x00AB\n /*::]*/\n : {\n /* n:\"BrtDynamicFilter\" */\n },\n\n /*::[*/\n 0x00AC\n /*::]*/\n : {\n /* n:\"BrtBeginCustomFilters\", */\n T: 1\n },\n\n /*::[*/\n 0x00AD\n /*::]*/\n : {\n /* n:\"BrtEndCustomFilters\", */\n T: -1\n },\n\n /*::[*/\n 0x00AE\n /*::]*/\n : {\n /* n:\"BrtCustomFilter\" */\n },\n\n /*::[*/\n 0x00AF\n /*::]*/\n : {\n /* n:\"BrtAFilterDateGroupItem\" */\n },\n\n /*::[*/\n 0x00B0\n /*::]*/\n : {\n /* n:\"BrtMergeCell\", */\n f: parse_BrtMergeCell\n },\n\n /*::[*/\n 0x00B1\n /*::]*/\n : {\n /* n:\"BrtBeginMergeCells\", */\n T: 1\n },\n\n /*::[*/\n 0x00B2\n /*::]*/\n : {\n /* n:\"BrtEndMergeCells\", */\n T: -1\n },\n\n /*::[*/\n 0x00B3\n /*::]*/\n : {\n /* n:\"BrtBeginPivotCacheDef\", */\n T: 1\n },\n\n /*::[*/\n 0x00B4\n /*::]*/\n : {\n /* n:\"BrtEndPivotCacheDef\", */\n T: -1\n },\n\n /*::[*/\n 0x00B5\n /*::]*/\n : {\n /* n:\"BrtBeginPCDFields\", */\n T: 1\n },\n\n /*::[*/\n 0x00B6\n /*::]*/\n : {\n /* n:\"BrtEndPCDFields\", */\n T: -1\n },\n\n /*::[*/\n 0x00B7\n /*::]*/\n : {\n /* n:\"BrtBeginPCDField\", */\n T: 1\n },\n\n /*::[*/\n 0x00B8\n /*::]*/\n : {\n /* n:\"BrtEndPCDField\", */\n T: -1\n },\n\n /*::[*/\n 0x00B9\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSource\", */\n T: 1\n },\n\n /*::[*/\n 0x00BA\n /*::]*/\n : {\n /* n:\"BrtEndPCDSource\", */\n T: -1\n },\n\n /*::[*/\n 0x00BB\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSRange\", */\n T: 1\n },\n\n /*::[*/\n 0x00BC\n /*::]*/\n : {\n /* n:\"BrtEndPCDSRange\", */\n T: -1\n },\n\n /*::[*/\n 0x00BD\n /*::]*/\n : {\n /* n:\"BrtBeginPCDFAtbl\", */\n T: 1\n },\n\n /*::[*/\n 0x00BE\n /*::]*/\n : {\n /* n:\"BrtEndPCDFAtbl\", */\n T: -1\n },\n\n /*::[*/\n 0x00BF\n /*::]*/\n : {\n /* n:\"BrtBeginPCDIRun\", */\n T: 1\n },\n\n /*::[*/\n 0x00C0\n /*::]*/\n : {\n /* n:\"BrtEndPCDIRun\", */\n T: -1\n },\n\n /*::[*/\n 0x00C1\n /*::]*/\n : {\n /* n:\"BrtBeginPivotCacheRecords\", */\n T: 1\n },\n\n /*::[*/\n 0x00C2\n /*::]*/\n : {\n /* n:\"BrtEndPivotCacheRecords\", */\n T: -1\n },\n\n /*::[*/\n 0x00C3\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHierarchies\", */\n T: 1\n },\n\n /*::[*/\n 0x00C4\n /*::]*/\n : {\n /* n:\"BrtEndPCDHierarchies\", */\n T: -1\n },\n\n /*::[*/\n 0x00C5\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHierarchy\", */\n T: 1\n },\n\n /*::[*/\n 0x00C6\n /*::]*/\n : {\n /* n:\"BrtEndPCDHierarchy\", */\n T: -1\n },\n\n /*::[*/\n 0x00C7\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHFieldsUsage\", */\n T: 1\n },\n\n /*::[*/\n 0x00C8\n /*::]*/\n : {\n /* n:\"BrtEndPCDHFieldsUsage\", */\n T: -1\n },\n\n /*::[*/\n 0x00C9\n /*::]*/\n : {\n /* n:\"BrtBeginExtConnection\", */\n T: 1\n },\n\n /*::[*/\n 0x00CA\n /*::]*/\n : {\n /* n:\"BrtEndExtConnection\", */\n T: -1\n },\n\n /*::[*/\n 0x00CB\n /*::]*/\n : {\n /* n:\"BrtBeginECDbProps\", */\n T: 1\n },\n\n /*::[*/\n 0x00CC\n /*::]*/\n : {\n /* n:\"BrtEndECDbProps\", */\n T: -1\n },\n\n /*::[*/\n 0x00CD\n /*::]*/\n : {\n /* n:\"BrtBeginECOlapProps\", */\n T: 1\n },\n\n /*::[*/\n 0x00CE\n /*::]*/\n : {\n /* n:\"BrtEndECOlapProps\", */\n T: -1\n },\n\n /*::[*/\n 0x00CF\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSConsol\", */\n T: 1\n },\n\n /*::[*/\n 0x00D0\n /*::]*/\n : {\n /* n:\"BrtEndPCDSConsol\", */\n T: -1\n },\n\n /*::[*/\n 0x00D1\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSCPages\", */\n T: 1\n },\n\n /*::[*/\n 0x00D2\n /*::]*/\n : {\n /* n:\"BrtEndPCDSCPages\", */\n T: -1\n },\n\n /*::[*/\n 0x00D3\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSCPage\", */\n T: 1\n },\n\n /*::[*/\n 0x00D4\n /*::]*/\n : {\n /* n:\"BrtEndPCDSCPage\", */\n T: -1\n },\n\n /*::[*/\n 0x00D5\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSCPItem\", */\n T: 1\n },\n\n /*::[*/\n 0x00D6\n /*::]*/\n : {\n /* n:\"BrtEndPCDSCPItem\", */\n T: -1\n },\n\n /*::[*/\n 0x00D7\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSCSets\", */\n T: 1\n },\n\n /*::[*/\n 0x00D8\n /*::]*/\n : {\n /* n:\"BrtEndPCDSCSets\", */\n T: -1\n },\n\n /*::[*/\n 0x00D9\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSCSet\", */\n T: 1\n },\n\n /*::[*/\n 0x00DA\n /*::]*/\n : {\n /* n:\"BrtEndPCDSCSet\", */\n T: -1\n },\n\n /*::[*/\n 0x00DB\n /*::]*/\n : {\n /* n:\"BrtBeginPCDFGroup\", */\n T: 1\n },\n\n /*::[*/\n 0x00DC\n /*::]*/\n : {\n /* n:\"BrtEndPCDFGroup\", */\n T: -1\n },\n\n /*::[*/\n 0x00DD\n /*::]*/\n : {\n /* n:\"BrtBeginPCDFGItems\", */\n T: 1\n },\n\n /*::[*/\n 0x00DE\n /*::]*/\n : {\n /* n:\"BrtEndPCDFGItems\", */\n T: -1\n },\n\n /*::[*/\n 0x00DF\n /*::]*/\n : {\n /* n:\"BrtBeginPCDFGRange\", */\n T: 1\n },\n\n /*::[*/\n 0x00E0\n /*::]*/\n : {\n /* n:\"BrtEndPCDFGRange\", */\n T: -1\n },\n\n /*::[*/\n 0x00E1\n /*::]*/\n : {\n /* n:\"BrtBeginPCDFGDiscrete\", */\n T: 1\n },\n\n /*::[*/\n 0x00E2\n /*::]*/\n : {\n /* n:\"BrtEndPCDFGDiscrete\", */\n T: -1\n },\n\n /*::[*/\n 0x00E3\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTupleCache\", */\n T: 1\n },\n\n /*::[*/\n 0x00E4\n /*::]*/\n : {\n /* n:\"BrtEndPCDSDTupleCache\", */\n T: -1\n },\n\n /*::[*/\n 0x00E5\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTCEntries\", */\n T: 1\n },\n\n /*::[*/\n 0x00E6\n /*::]*/\n : {\n /* n:\"BrtEndPCDSDTCEntries\", */\n T: -1\n },\n\n /*::[*/\n 0x00E7\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTCEMembers\", */\n T: 1\n },\n\n /*::[*/\n 0x00E8\n /*::]*/\n : {\n /* n:\"BrtEndPCDSDTCEMembers\", */\n T: -1\n },\n\n /*::[*/\n 0x00E9\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTCEMember\", */\n T: 1\n },\n\n /*::[*/\n 0x00EA\n /*::]*/\n : {\n /* n:\"BrtEndPCDSDTCEMember\", */\n T: -1\n },\n\n /*::[*/\n 0x00EB\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTCQueries\", */\n T: 1\n },\n\n /*::[*/\n 0x00EC\n /*::]*/\n : {\n /* n:\"BrtEndPCDSDTCQueries\", */\n T: -1\n },\n\n /*::[*/\n 0x00ED\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTCQuery\", */\n T: 1\n },\n\n /*::[*/\n 0x00EE\n /*::]*/\n : {\n /* n:\"BrtEndPCDSDTCQuery\", */\n T: -1\n },\n\n /*::[*/\n 0x00EF\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTCSets\", */\n T: 1\n },\n\n /*::[*/\n 0x00F0\n /*::]*/\n : {\n /* n:\"BrtEndPCDSDTCSets\", */\n T: -1\n },\n\n /*::[*/\n 0x00F1\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTCSet\", */\n T: 1\n },\n\n /*::[*/\n 0x00F2\n /*::]*/\n : {\n /* n:\"BrtEndPCDSDTCSet\", */\n T: -1\n },\n\n /*::[*/\n 0x00F3\n /*::]*/\n : {\n /* n:\"BrtBeginPCDCalcItems\", */\n T: 1\n },\n\n /*::[*/\n 0x00F4\n /*::]*/\n : {\n /* n:\"BrtEndPCDCalcItems\", */\n T: -1\n },\n\n /*::[*/\n 0x00F5\n /*::]*/\n : {\n /* n:\"BrtBeginPCDCalcItem\", */\n T: 1\n },\n\n /*::[*/\n 0x00F6\n /*::]*/\n : {\n /* n:\"BrtEndPCDCalcItem\", */\n T: -1\n },\n\n /*::[*/\n 0x00F7\n /*::]*/\n : {\n /* n:\"BrtBeginPRule\", */\n T: 1\n },\n\n /*::[*/\n 0x00F8\n /*::]*/\n : {\n /* n:\"BrtEndPRule\", */\n T: -1\n },\n\n /*::[*/\n 0x00F9\n /*::]*/\n : {\n /* n:\"BrtBeginPRFilters\", */\n T: 1\n },\n\n /*::[*/\n 0x00FA\n /*::]*/\n : {\n /* n:\"BrtEndPRFilters\", */\n T: -1\n },\n\n /*::[*/\n 0x00FB\n /*::]*/\n : {\n /* n:\"BrtBeginPRFilter\", */\n T: 1\n },\n\n /*::[*/\n 0x00FC\n /*::]*/\n : {\n /* n:\"BrtEndPRFilter\", */\n T: -1\n },\n\n /*::[*/\n 0x00FD\n /*::]*/\n : {\n /* n:\"BrtBeginPNames\", */\n T: 1\n },\n\n /*::[*/\n 0x00FE\n /*::]*/\n : {\n /* n:\"BrtEndPNames\", */\n T: -1\n },\n\n /*::[*/\n 0x00FF\n /*::]*/\n : {\n /* n:\"BrtBeginPName\", */\n T: 1\n },\n\n /*::[*/\n 0x0100\n /*::]*/\n : {\n /* n:\"BrtEndPName\", */\n T: -1\n },\n\n /*::[*/\n 0x0101\n /*::]*/\n : {\n /* n:\"BrtBeginPNPairs\", */\n T: 1\n },\n\n /*::[*/\n 0x0102\n /*::]*/\n : {\n /* n:\"BrtEndPNPairs\", */\n T: -1\n },\n\n /*::[*/\n 0x0103\n /*::]*/\n : {\n /* n:\"BrtBeginPNPair\", */\n T: 1\n },\n\n /*::[*/\n 0x0104\n /*::]*/\n : {\n /* n:\"BrtEndPNPair\", */\n T: -1\n },\n\n /*::[*/\n 0x0105\n /*::]*/\n : {\n /* n:\"BrtBeginECWebProps\", */\n T: 1\n },\n\n /*::[*/\n 0x0106\n /*::]*/\n : {\n /* n:\"BrtEndECWebProps\", */\n T: -1\n },\n\n /*::[*/\n 0x0107\n /*::]*/\n : {\n /* n:\"BrtBeginEcWpTables\", */\n T: 1\n },\n\n /*::[*/\n 0x0108\n /*::]*/\n : {\n /* n:\"BrtEndECWPTables\", */\n T: -1\n },\n\n /*::[*/\n 0x0109\n /*::]*/\n : {\n /* n:\"BrtBeginECParams\", */\n T: 1\n },\n\n /*::[*/\n 0x010A\n /*::]*/\n : {\n /* n:\"BrtEndECParams\", */\n T: -1\n },\n\n /*::[*/\n 0x010B\n /*::]*/\n : {\n /* n:\"BrtBeginECParam\", */\n T: 1\n },\n\n /*::[*/\n 0x010C\n /*::]*/\n : {\n /* n:\"BrtEndECParam\", */\n T: -1\n },\n\n /*::[*/\n 0x010D\n /*::]*/\n : {\n /* n:\"BrtBeginPCDKPIs\", */\n T: 1\n },\n\n /*::[*/\n 0x010E\n /*::]*/\n : {\n /* n:\"BrtEndPCDKPIs\", */\n T: -1\n },\n\n /*::[*/\n 0x010F\n /*::]*/\n : {\n /* n:\"BrtBeginPCDKPI\", */\n T: 1\n },\n\n /*::[*/\n 0x0110\n /*::]*/\n : {\n /* n:\"BrtEndPCDKPI\", */\n T: -1\n },\n\n /*::[*/\n 0x0111\n /*::]*/\n : {\n /* n:\"BrtBeginDims\", */\n T: 1\n },\n\n /*::[*/\n 0x0112\n /*::]*/\n : {\n /* n:\"BrtEndDims\", */\n T: -1\n },\n\n /*::[*/\n 0x0113\n /*::]*/\n : {\n /* n:\"BrtBeginDim\", */\n T: 1\n },\n\n /*::[*/\n 0x0114\n /*::]*/\n : {\n /* n:\"BrtEndDim\", */\n T: -1\n },\n\n /*::[*/\n 0x0115\n /*::]*/\n : {\n /* n:\"BrtIndexPartEnd\" */\n },\n\n /*::[*/\n 0x0116\n /*::]*/\n : {\n /* n:\"BrtBeginStyleSheet\", */\n T: 1\n },\n\n /*::[*/\n 0x0117\n /*::]*/\n : {\n /* n:\"BrtEndStyleSheet\", */\n T: -1\n },\n\n /*::[*/\n 0x0118\n /*::]*/\n : {\n /* n:\"BrtBeginSXView\", */\n T: 1\n },\n\n /*::[*/\n 0x0119\n /*::]*/\n : {\n /* n:\"BrtEndSXVI\", */\n T: -1\n },\n\n /*::[*/\n 0x011A\n /*::]*/\n : {\n /* n:\"BrtBeginSXVI\", */\n T: 1\n },\n\n /*::[*/\n 0x011B\n /*::]*/\n : {\n /* n:\"BrtBeginSXVIs\", */\n T: 1\n },\n\n /*::[*/\n 0x011C\n /*::]*/\n : {\n /* n:\"BrtEndSXVIs\", */\n T: -1\n },\n\n /*::[*/\n 0x011D\n /*::]*/\n : {\n /* n:\"BrtBeginSXVD\", */\n T: 1\n },\n\n /*::[*/\n 0x011E\n /*::]*/\n : {\n /* n:\"BrtEndSXVD\", */\n T: -1\n },\n\n /*::[*/\n 0x011F\n /*::]*/\n : {\n /* n:\"BrtBeginSXVDs\", */\n T: 1\n },\n\n /*::[*/\n 0x0120\n /*::]*/\n : {\n /* n:\"BrtEndSXVDs\", */\n T: -1\n },\n\n /*::[*/\n 0x0121\n /*::]*/\n : {\n /* n:\"BrtBeginSXPI\", */\n T: 1\n },\n\n /*::[*/\n 0x0122\n /*::]*/\n : {\n /* n:\"BrtEndSXPI\", */\n T: -1\n },\n\n /*::[*/\n 0x0123\n /*::]*/\n : {\n /* n:\"BrtBeginSXPIs\", */\n T: 1\n },\n\n /*::[*/\n 0x0124\n /*::]*/\n : {\n /* n:\"BrtEndSXPIs\", */\n T: -1\n },\n\n /*::[*/\n 0x0125\n /*::]*/\n : {\n /* n:\"BrtBeginSXDI\", */\n T: 1\n },\n\n /*::[*/\n 0x0126\n /*::]*/\n : {\n /* n:\"BrtEndSXDI\", */\n T: -1\n },\n\n /*::[*/\n 0x0127\n /*::]*/\n : {\n /* n:\"BrtBeginSXDIs\", */\n T: 1\n },\n\n /*::[*/\n 0x0128\n /*::]*/\n : {\n /* n:\"BrtEndSXDIs\", */\n T: -1\n },\n\n /*::[*/\n 0x0129\n /*::]*/\n : {\n /* n:\"BrtBeginSXLI\", */\n T: 1\n },\n\n /*::[*/\n 0x012A\n /*::]*/\n : {\n /* n:\"BrtEndSXLI\", */\n T: -1\n },\n\n /*::[*/\n 0x012B\n /*::]*/\n : {\n /* n:\"BrtBeginSXLIRws\", */\n T: 1\n },\n\n /*::[*/\n 0x012C\n /*::]*/\n : {\n /* n:\"BrtEndSXLIRws\", */\n T: -1\n },\n\n /*::[*/\n 0x012D\n /*::]*/\n : {\n /* n:\"BrtBeginSXLICols\", */\n T: 1\n },\n\n /*::[*/\n 0x012E\n /*::]*/\n : {\n /* n:\"BrtEndSXLICols\", */\n T: -1\n },\n\n /*::[*/\n 0x012F\n /*::]*/\n : {\n /* n:\"BrtBeginSXFormat\", */\n T: 1\n },\n\n /*::[*/\n 0x0130\n /*::]*/\n : {\n /* n:\"BrtEndSXFormat\", */\n T: -1\n },\n\n /*::[*/\n 0x0131\n /*::]*/\n : {\n /* n:\"BrtBeginSXFormats\", */\n T: 1\n },\n\n /*::[*/\n 0x0132\n /*::]*/\n : {\n /* n:\"BrtEndSxFormats\", */\n T: -1\n },\n\n /*::[*/\n 0x0133\n /*::]*/\n : {\n /* n:\"BrtBeginSxSelect\", */\n T: 1\n },\n\n /*::[*/\n 0x0134\n /*::]*/\n : {\n /* n:\"BrtEndSxSelect\", */\n T: -1\n },\n\n /*::[*/\n 0x0135\n /*::]*/\n : {\n /* n:\"BrtBeginISXVDRws\", */\n T: 1\n },\n\n /*::[*/\n 0x0136\n /*::]*/\n : {\n /* n:\"BrtEndISXVDRws\", */\n T: -1\n },\n\n /*::[*/\n 0x0137\n /*::]*/\n : {\n /* n:\"BrtBeginISXVDCols\", */\n T: 1\n },\n\n /*::[*/\n 0x0138\n /*::]*/\n : {\n /* n:\"BrtEndISXVDCols\", */\n T: -1\n },\n\n /*::[*/\n 0x0139\n /*::]*/\n : {\n /* n:\"BrtEndSXLocation\", */\n T: -1\n },\n\n /*::[*/\n 0x013A\n /*::]*/\n : {\n /* n:\"BrtBeginSXLocation\", */\n T: 1\n },\n\n /*::[*/\n 0x013B\n /*::]*/\n : {\n /* n:\"BrtEndSXView\", */\n T: -1\n },\n\n /*::[*/\n 0x013C\n /*::]*/\n : {\n /* n:\"BrtBeginSXTHs\", */\n T: 1\n },\n\n /*::[*/\n 0x013D\n /*::]*/\n : {\n /* n:\"BrtEndSXTHs\", */\n T: -1\n },\n\n /*::[*/\n 0x013E\n /*::]*/\n : {\n /* n:\"BrtBeginSXTH\", */\n T: 1\n },\n\n /*::[*/\n 0x013F\n /*::]*/\n : {\n /* n:\"BrtEndSXTH\", */\n T: -1\n },\n\n /*::[*/\n 0x0140\n /*::]*/\n : {\n /* n:\"BrtBeginISXTHRws\", */\n T: 1\n },\n\n /*::[*/\n 0x0141\n /*::]*/\n : {\n /* n:\"BrtEndISXTHRws\", */\n T: -1\n },\n\n /*::[*/\n 0x0142\n /*::]*/\n : {\n /* n:\"BrtBeginISXTHCols\", */\n T: 1\n },\n\n /*::[*/\n 0x0143\n /*::]*/\n : {\n /* n:\"BrtEndISXTHCols\", */\n T: -1\n },\n\n /*::[*/\n 0x0144\n /*::]*/\n : {\n /* n:\"BrtBeginSXTDMPS\", */\n T: 1\n },\n\n /*::[*/\n 0x0145\n /*::]*/\n : {\n /* n:\"BrtEndSXTDMPs\", */\n T: -1\n },\n\n /*::[*/\n 0x0146\n /*::]*/\n : {\n /* n:\"BrtBeginSXTDMP\", */\n T: 1\n },\n\n /*::[*/\n 0x0147\n /*::]*/\n : {\n /* n:\"BrtEndSXTDMP\", */\n T: -1\n },\n\n /*::[*/\n 0x0148\n /*::]*/\n : {\n /* n:\"BrtBeginSXTHItems\", */\n T: 1\n },\n\n /*::[*/\n 0x0149\n /*::]*/\n : {\n /* n:\"BrtEndSXTHItems\", */\n T: -1\n },\n\n /*::[*/\n 0x014A\n /*::]*/\n : {\n /* n:\"BrtBeginSXTHItem\", */\n T: 1\n },\n\n /*::[*/\n 0x014B\n /*::]*/\n : {\n /* n:\"BrtEndSXTHItem\", */\n T: -1\n },\n\n /*::[*/\n 0x014C\n /*::]*/\n : {\n /* n:\"BrtBeginMetadata\", */\n T: 1\n },\n\n /*::[*/\n 0x014D\n /*::]*/\n : {\n /* n:\"BrtEndMetadata\", */\n T: -1\n },\n\n /*::[*/\n 0x014E\n /*::]*/\n : {\n /* n:\"BrtBeginEsmdtinfo\", */\n T: 1\n },\n\n /*::[*/\n 0x014F\n /*::]*/\n : {\n /* n:\"BrtMdtinfo\", */\n f: parse_BrtMdtinfo\n },\n\n /*::[*/\n 0x0150\n /*::]*/\n : {\n /* n:\"BrtEndEsmdtinfo\", */\n T: -1\n },\n\n /*::[*/\n 0x0151\n /*::]*/\n : {\n /* n:\"BrtBeginEsmdb\", */\n f: parse_BrtBeginEsmdb,\n T: 1\n },\n\n /*::[*/\n 0x0152\n /*::]*/\n : {\n /* n:\"BrtEndEsmdb\", */\n T: -1\n },\n\n /*::[*/\n 0x0153\n /*::]*/\n : {\n /* n:\"BrtBeginEsfmd\", */\n T: 1\n },\n\n /*::[*/\n 0x0154\n /*::]*/\n : {\n /* n:\"BrtEndEsfmd\", */\n T: -1\n },\n\n /*::[*/\n 0x0155\n /*::]*/\n : {\n /* n:\"BrtBeginSingleCells\", */\n T: 1\n },\n\n /*::[*/\n 0x0156\n /*::]*/\n : {\n /* n:\"BrtEndSingleCells\", */\n T: -1\n },\n\n /*::[*/\n 0x0157\n /*::]*/\n : {\n /* n:\"BrtBeginList\", */\n T: 1\n },\n\n /*::[*/\n 0x0158\n /*::]*/\n : {\n /* n:\"BrtEndList\", */\n T: -1\n },\n\n /*::[*/\n 0x0159\n /*::]*/\n : {\n /* n:\"BrtBeginListCols\", */\n T: 1\n },\n\n /*::[*/\n 0x015A\n /*::]*/\n : {\n /* n:\"BrtEndListCols\", */\n T: -1\n },\n\n /*::[*/\n 0x015B\n /*::]*/\n : {\n /* n:\"BrtBeginListCol\", */\n T: 1\n },\n\n /*::[*/\n 0x015C\n /*::]*/\n : {\n /* n:\"BrtEndListCol\", */\n T: -1\n },\n\n /*::[*/\n 0x015D\n /*::]*/\n : {\n /* n:\"BrtBeginListXmlCPr\", */\n T: 1\n },\n\n /*::[*/\n 0x015E\n /*::]*/\n : {\n /* n:\"BrtEndListXmlCPr\", */\n T: -1\n },\n\n /*::[*/\n 0x015F\n /*::]*/\n : {\n /* n:\"BrtListCCFmla\" */\n },\n\n /*::[*/\n 0x0160\n /*::]*/\n : {\n /* n:\"BrtListTrFmla\" */\n },\n\n /*::[*/\n 0x0161\n /*::]*/\n : {\n /* n:\"BrtBeginExternals\", */\n T: 1\n },\n\n /*::[*/\n 0x0162\n /*::]*/\n : {\n /* n:\"BrtEndExternals\", */\n T: -1\n },\n\n /*::[*/\n 0x0163\n /*::]*/\n : {\n /* n:\"BrtSupBookSrc\", */\n f: parse_RelID\n },\n\n /*::[*/\n 0x0165\n /*::]*/\n : {\n /* n:\"BrtSupSelf\" */\n },\n\n /*::[*/\n 0x0166\n /*::]*/\n : {\n /* n:\"BrtSupSame\" */\n },\n\n /*::[*/\n 0x0167\n /*::]*/\n : {\n /* n:\"BrtSupTabs\" */\n },\n\n /*::[*/\n 0x0168\n /*::]*/\n : {\n /* n:\"BrtBeginSupBook\", */\n T: 1\n },\n\n /*::[*/\n 0x0169\n /*::]*/\n : {\n /* n:\"BrtPlaceholderName\" */\n },\n\n /*::[*/\n 0x016A\n /*::]*/\n : {\n /* n:\"BrtExternSheet\", */\n f: parse_ExternSheet\n },\n\n /*::[*/\n 0x016B\n /*::]*/\n : {\n /* n:\"BrtExternTableStart\" */\n },\n\n /*::[*/\n 0x016C\n /*::]*/\n : {\n /* n:\"BrtExternTableEnd\" */\n },\n\n /*::[*/\n 0x016E\n /*::]*/\n : {\n /* n:\"BrtExternRowHdr\" */\n },\n\n /*::[*/\n 0x016F\n /*::]*/\n : {\n /* n:\"BrtExternCellBlank\" */\n },\n\n /*::[*/\n 0x0170\n /*::]*/\n : {\n /* n:\"BrtExternCellReal\" */\n },\n\n /*::[*/\n 0x0171\n /*::]*/\n : {\n /* n:\"BrtExternCellBool\" */\n },\n\n /*::[*/\n 0x0172\n /*::]*/\n : {\n /* n:\"BrtExternCellError\" */\n },\n\n /*::[*/\n 0x0173\n /*::]*/\n : {\n /* n:\"BrtExternCellString\" */\n },\n\n /*::[*/\n 0x0174\n /*::]*/\n : {\n /* n:\"BrtBeginEsmdx\", */\n T: 1\n },\n\n /*::[*/\n 0x0175\n /*::]*/\n : {\n /* n:\"BrtEndEsmdx\", */\n T: -1\n },\n\n /*::[*/\n 0x0176\n /*::]*/\n : {\n /* n:\"BrtBeginMdxSet\", */\n T: 1\n },\n\n /*::[*/\n 0x0177\n /*::]*/\n : {\n /* n:\"BrtEndMdxSet\", */\n T: -1\n },\n\n /*::[*/\n 0x0178\n /*::]*/\n : {\n /* n:\"BrtBeginMdxMbrProp\", */\n T: 1\n },\n\n /*::[*/\n 0x0179\n /*::]*/\n : {\n /* n:\"BrtEndMdxMbrProp\", */\n T: -1\n },\n\n /*::[*/\n 0x017A\n /*::]*/\n : {\n /* n:\"BrtBeginMdxKPI\", */\n T: 1\n },\n\n /*::[*/\n 0x017B\n /*::]*/\n : {\n /* n:\"BrtEndMdxKPI\", */\n T: -1\n },\n\n /*::[*/\n 0x017C\n /*::]*/\n : {\n /* n:\"BrtBeginEsstr\", */\n T: 1\n },\n\n /*::[*/\n 0x017D\n /*::]*/\n : {\n /* n:\"BrtEndEsstr\", */\n T: -1\n },\n\n /*::[*/\n 0x017E\n /*::]*/\n : {\n /* n:\"BrtBeginPRFItem\", */\n T: 1\n },\n\n /*::[*/\n 0x017F\n /*::]*/\n : {\n /* n:\"BrtEndPRFItem\", */\n T: -1\n },\n\n /*::[*/\n 0x0180\n /*::]*/\n : {\n /* n:\"BrtBeginPivotCacheIDs\", */\n T: 1\n },\n\n /*::[*/\n 0x0181\n /*::]*/\n : {\n /* n:\"BrtEndPivotCacheIDs\", */\n T: -1\n },\n\n /*::[*/\n 0x0182\n /*::]*/\n : {\n /* n:\"BrtBeginPivotCacheID\", */\n T: 1\n },\n\n /*::[*/\n 0x0183\n /*::]*/\n : {\n /* n:\"BrtEndPivotCacheID\", */\n T: -1\n },\n\n /*::[*/\n 0x0184\n /*::]*/\n : {\n /* n:\"BrtBeginISXVIs\", */\n T: 1\n },\n\n /*::[*/\n 0x0185\n /*::]*/\n : {\n /* n:\"BrtEndISXVIs\", */\n T: -1\n },\n\n /*::[*/\n 0x0186\n /*::]*/\n : {\n /* n:\"BrtBeginColInfos\", */\n T: 1\n },\n\n /*::[*/\n 0x0187\n /*::]*/\n : {\n /* n:\"BrtEndColInfos\", */\n T: -1\n },\n\n /*::[*/\n 0x0188\n /*::]*/\n : {\n /* n:\"BrtBeginRwBrk\", */\n T: 1\n },\n\n /*::[*/\n 0x0189\n /*::]*/\n : {\n /* n:\"BrtEndRwBrk\", */\n T: -1\n },\n\n /*::[*/\n 0x018A\n /*::]*/\n : {\n /* n:\"BrtBeginColBrk\", */\n T: 1\n },\n\n /*::[*/\n 0x018B\n /*::]*/\n : {\n /* n:\"BrtEndColBrk\", */\n T: -1\n },\n\n /*::[*/\n 0x018C\n /*::]*/\n : {\n /* n:\"BrtBrk\" */\n },\n\n /*::[*/\n 0x018D\n /*::]*/\n : {\n /* n:\"BrtUserBookView\" */\n },\n\n /*::[*/\n 0x018E\n /*::]*/\n : {\n /* n:\"BrtInfo\" */\n },\n\n /*::[*/\n 0x018F\n /*::]*/\n : {\n /* n:\"BrtCUsr\" */\n },\n\n /*::[*/\n 0x0190\n /*::]*/\n : {\n /* n:\"BrtUsr\" */\n },\n\n /*::[*/\n 0x0191\n /*::]*/\n : {\n /* n:\"BrtBeginUsers\", */\n T: 1\n },\n\n /*::[*/\n 0x0193\n /*::]*/\n : {\n /* n:\"BrtEOF\" */\n },\n\n /*::[*/\n 0x0194\n /*::]*/\n : {\n /* n:\"BrtUCR\" */\n },\n\n /*::[*/\n 0x0195\n /*::]*/\n : {\n /* n:\"BrtRRInsDel\" */\n },\n\n /*::[*/\n 0x0196\n /*::]*/\n : {\n /* n:\"BrtRREndInsDel\" */\n },\n\n /*::[*/\n 0x0197\n /*::]*/\n : {\n /* n:\"BrtRRMove\" */\n },\n\n /*::[*/\n 0x0198\n /*::]*/\n : {\n /* n:\"BrtRREndMove\" */\n },\n\n /*::[*/\n 0x0199\n /*::]*/\n : {\n /* n:\"BrtRRChgCell\" */\n },\n\n /*::[*/\n 0x019A\n /*::]*/\n : {\n /* n:\"BrtRREndChgCell\" */\n },\n\n /*::[*/\n 0x019B\n /*::]*/\n : {\n /* n:\"BrtRRHeader\" */\n },\n\n /*::[*/\n 0x019C\n /*::]*/\n : {\n /* n:\"BrtRRUserView\" */\n },\n\n /*::[*/\n 0x019D\n /*::]*/\n : {\n /* n:\"BrtRRRenSheet\" */\n },\n\n /*::[*/\n 0x019E\n /*::]*/\n : {\n /* n:\"BrtRRInsertSh\" */\n },\n\n /*::[*/\n 0x019F\n /*::]*/\n : {\n /* n:\"BrtRRDefName\" */\n },\n\n /*::[*/\n 0x01A0\n /*::]*/\n : {\n /* n:\"BrtRRNote\" */\n },\n\n /*::[*/\n 0x01A1\n /*::]*/\n : {\n /* n:\"BrtRRConflict\" */\n },\n\n /*::[*/\n 0x01A2\n /*::]*/\n : {\n /* n:\"BrtRRTQSIF\" */\n },\n\n /*::[*/\n 0x01A3\n /*::]*/\n : {\n /* n:\"BrtRRFormat\" */\n },\n\n /*::[*/\n 0x01A4\n /*::]*/\n : {\n /* n:\"BrtRREndFormat\" */\n },\n\n /*::[*/\n 0x01A5\n /*::]*/\n : {\n /* n:\"BrtRRAutoFmt\" */\n },\n\n /*::[*/\n 0x01A6\n /*::]*/\n : {\n /* n:\"BrtBeginUserShViews\", */\n T: 1\n },\n\n /*::[*/\n 0x01A7\n /*::]*/\n : {\n /* n:\"BrtBeginUserShView\", */\n T: 1\n },\n\n /*::[*/\n 0x01A8\n /*::]*/\n : {\n /* n:\"BrtEndUserShView\", */\n T: -1\n },\n\n /*::[*/\n 0x01A9\n /*::]*/\n : {\n /* n:\"BrtEndUserShViews\", */\n T: -1\n },\n\n /*::[*/\n 0x01AA\n /*::]*/\n : {\n /* n:\"BrtArrFmla\", */\n f: parse_BrtArrFmla\n },\n\n /*::[*/\n 0x01AB\n /*::]*/\n : {\n /* n:\"BrtShrFmla\", */\n f: parse_BrtShrFmla\n },\n\n /*::[*/\n 0x01AC\n /*::]*/\n : {\n /* n:\"BrtTable\" */\n },\n\n /*::[*/\n 0x01AD\n /*::]*/\n : {\n /* n:\"BrtBeginExtConnections\", */\n T: 1\n },\n\n /*::[*/\n 0x01AE\n /*::]*/\n : {\n /* n:\"BrtEndExtConnections\", */\n T: -1\n },\n\n /*::[*/\n 0x01AF\n /*::]*/\n : {\n /* n:\"BrtBeginPCDCalcMems\", */\n T: 1\n },\n\n /*::[*/\n 0x01B0\n /*::]*/\n : {\n /* n:\"BrtEndPCDCalcMems\", */\n T: -1\n },\n\n /*::[*/\n 0x01B1\n /*::]*/\n : {\n /* n:\"BrtBeginPCDCalcMem\", */\n T: 1\n },\n\n /*::[*/\n 0x01B2\n /*::]*/\n : {\n /* n:\"BrtEndPCDCalcMem\", */\n T: -1\n },\n\n /*::[*/\n 0x01B3\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHGLevels\", */\n T: 1\n },\n\n /*::[*/\n 0x01B4\n /*::]*/\n : {\n /* n:\"BrtEndPCDHGLevels\", */\n T: -1\n },\n\n /*::[*/\n 0x01B5\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHGLevel\", */\n T: 1\n },\n\n /*::[*/\n 0x01B6\n /*::]*/\n : {\n /* n:\"BrtEndPCDHGLevel\", */\n T: -1\n },\n\n /*::[*/\n 0x01B7\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHGLGroups\", */\n T: 1\n },\n\n /*::[*/\n 0x01B8\n /*::]*/\n : {\n /* n:\"BrtEndPCDHGLGroups\", */\n T: -1\n },\n\n /*::[*/\n 0x01B9\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHGLGroup\", */\n T: 1\n },\n\n /*::[*/\n 0x01BA\n /*::]*/\n : {\n /* n:\"BrtEndPCDHGLGroup\", */\n T: -1\n },\n\n /*::[*/\n 0x01BB\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHGLGMembers\", */\n T: 1\n },\n\n /*::[*/\n 0x01BC\n /*::]*/\n : {\n /* n:\"BrtEndPCDHGLGMembers\", */\n T: -1\n },\n\n /*::[*/\n 0x01BD\n /*::]*/\n : {\n /* n:\"BrtBeginPCDHGLGMember\", */\n T: 1\n },\n\n /*::[*/\n 0x01BE\n /*::]*/\n : {\n /* n:\"BrtEndPCDHGLGMember\", */\n T: -1\n },\n\n /*::[*/\n 0x01BF\n /*::]*/\n : {\n /* n:\"BrtBeginQSI\", */\n T: 1\n },\n\n /*::[*/\n 0x01C0\n /*::]*/\n : {\n /* n:\"BrtEndQSI\", */\n T: -1\n },\n\n /*::[*/\n 0x01C1\n /*::]*/\n : {\n /* n:\"BrtBeginQSIR\", */\n T: 1\n },\n\n /*::[*/\n 0x01C2\n /*::]*/\n : {\n /* n:\"BrtEndQSIR\", */\n T: -1\n },\n\n /*::[*/\n 0x01C3\n /*::]*/\n : {\n /* n:\"BrtBeginDeletedNames\", */\n T: 1\n },\n\n /*::[*/\n 0x01C4\n /*::]*/\n : {\n /* n:\"BrtEndDeletedNames\", */\n T: -1\n },\n\n /*::[*/\n 0x01C5\n /*::]*/\n : {\n /* n:\"BrtBeginDeletedName\", */\n T: 1\n },\n\n /*::[*/\n 0x01C6\n /*::]*/\n : {\n /* n:\"BrtEndDeletedName\", */\n T: -1\n },\n\n /*::[*/\n 0x01C7\n /*::]*/\n : {\n /* n:\"BrtBeginQSIFs\", */\n T: 1\n },\n\n /*::[*/\n 0x01C8\n /*::]*/\n : {\n /* n:\"BrtEndQSIFs\", */\n T: -1\n },\n\n /*::[*/\n 0x01C9\n /*::]*/\n : {\n /* n:\"BrtBeginQSIF\", */\n T: 1\n },\n\n /*::[*/\n 0x01CA\n /*::]*/\n : {\n /* n:\"BrtEndQSIF\", */\n T: -1\n },\n\n /*::[*/\n 0x01CB\n /*::]*/\n : {\n /* n:\"BrtBeginAutoSortScope\", */\n T: 1\n },\n\n /*::[*/\n 0x01CC\n /*::]*/\n : {\n /* n:\"BrtEndAutoSortScope\", */\n T: -1\n },\n\n /*::[*/\n 0x01CD\n /*::]*/\n : {\n /* n:\"BrtBeginConditionalFormatting\", */\n T: 1\n },\n\n /*::[*/\n 0x01CE\n /*::]*/\n : {\n /* n:\"BrtEndConditionalFormatting\", */\n T: -1\n },\n\n /*::[*/\n 0x01CF\n /*::]*/\n : {\n /* n:\"BrtBeginCFRule\", */\n T: 1\n },\n\n /*::[*/\n 0x01D0\n /*::]*/\n : {\n /* n:\"BrtEndCFRule\", */\n T: -1\n },\n\n /*::[*/\n 0x01D1\n /*::]*/\n : {\n /* n:\"BrtBeginIconSet\", */\n T: 1\n },\n\n /*::[*/\n 0x01D2\n /*::]*/\n : {\n /* n:\"BrtEndIconSet\", */\n T: -1\n },\n\n /*::[*/\n 0x01D3\n /*::]*/\n : {\n /* n:\"BrtBeginDatabar\", */\n T: 1\n },\n\n /*::[*/\n 0x01D4\n /*::]*/\n : {\n /* n:\"BrtEndDatabar\", */\n T: -1\n },\n\n /*::[*/\n 0x01D5\n /*::]*/\n : {\n /* n:\"BrtBeginColorScale\", */\n T: 1\n },\n\n /*::[*/\n 0x01D6\n /*::]*/\n : {\n /* n:\"BrtEndColorScale\", */\n T: -1\n },\n\n /*::[*/\n 0x01D7\n /*::]*/\n : {\n /* n:\"BrtCFVO\" */\n },\n\n /*::[*/\n 0x01D8\n /*::]*/\n : {\n /* n:\"BrtExternValueMeta\" */\n },\n\n /*::[*/\n 0x01D9\n /*::]*/\n : {\n /* n:\"BrtBeginColorPalette\", */\n T: 1\n },\n\n /*::[*/\n 0x01DA\n /*::]*/\n : {\n /* n:\"BrtEndColorPalette\", */\n T: -1\n },\n\n /*::[*/\n 0x01DB\n /*::]*/\n : {\n /* n:\"BrtIndexedColor\" */\n },\n\n /*::[*/\n 0x01DC\n /*::]*/\n : {\n /* n:\"BrtMargins\", */\n f: parse_BrtMargins\n },\n\n /*::[*/\n 0x01DD\n /*::]*/\n : {\n /* n:\"BrtPrintOptions\" */\n },\n\n /*::[*/\n 0x01DE\n /*::]*/\n : {\n /* n:\"BrtPageSetup\" */\n },\n\n /*::[*/\n 0x01DF\n /*::]*/\n : {\n /* n:\"BrtBeginHeaderFooter\", */\n T: 1\n },\n\n /*::[*/\n 0x01E0\n /*::]*/\n : {\n /* n:\"BrtEndHeaderFooter\", */\n T: -1\n },\n\n /*::[*/\n 0x01E1\n /*::]*/\n : {\n /* n:\"BrtBeginSXCrtFormat\", */\n T: 1\n },\n\n /*::[*/\n 0x01E2\n /*::]*/\n : {\n /* n:\"BrtEndSXCrtFormat\", */\n T: -1\n },\n\n /*::[*/\n 0x01E3\n /*::]*/\n : {\n /* n:\"BrtBeginSXCrtFormats\", */\n T: 1\n },\n\n /*::[*/\n 0x01E4\n /*::]*/\n : {\n /* n:\"BrtEndSXCrtFormats\", */\n T: -1\n },\n\n /*::[*/\n 0x01E5\n /*::]*/\n : {\n /* n:\"BrtWsFmtInfo\", */\n f: parse_BrtWsFmtInfo\n },\n\n /*::[*/\n 0x01E6\n /*::]*/\n : {\n /* n:\"BrtBeginMgs\", */\n T: 1\n },\n\n /*::[*/\n 0x01E7\n /*::]*/\n : {\n /* n:\"BrtEndMGs\", */\n T: -1\n },\n\n /*::[*/\n 0x01E8\n /*::]*/\n : {\n /* n:\"BrtBeginMGMaps\", */\n T: 1\n },\n\n /*::[*/\n 0x01E9\n /*::]*/\n : {\n /* n:\"BrtEndMGMaps\", */\n T: -1\n },\n\n /*::[*/\n 0x01EA\n /*::]*/\n : {\n /* n:\"BrtBeginMG\", */\n T: 1\n },\n\n /*::[*/\n 0x01EB\n /*::]*/\n : {\n /* n:\"BrtEndMG\", */\n T: -1\n },\n\n /*::[*/\n 0x01EC\n /*::]*/\n : {\n /* n:\"BrtBeginMap\", */\n T: 1\n },\n\n /*::[*/\n 0x01ED\n /*::]*/\n : {\n /* n:\"BrtEndMap\", */\n T: -1\n },\n\n /*::[*/\n 0x01EE\n /*::]*/\n : {\n /* n:\"BrtHLink\", */\n f: parse_BrtHLink\n },\n\n /*::[*/\n 0x01EF\n /*::]*/\n : {\n /* n:\"BrtBeginDCon\", */\n T: 1\n },\n\n /*::[*/\n 0x01F0\n /*::]*/\n : {\n /* n:\"BrtEndDCon\", */\n T: -1\n },\n\n /*::[*/\n 0x01F1\n /*::]*/\n : {\n /* n:\"BrtBeginDRefs\", */\n T: 1\n },\n\n /*::[*/\n 0x01F2\n /*::]*/\n : {\n /* n:\"BrtEndDRefs\", */\n T: -1\n },\n\n /*::[*/\n 0x01F3\n /*::]*/\n : {\n /* n:\"BrtDRef\" */\n },\n\n /*::[*/\n 0x01F4\n /*::]*/\n : {\n /* n:\"BrtBeginScenMan\", */\n T: 1\n },\n\n /*::[*/\n 0x01F5\n /*::]*/\n : {\n /* n:\"BrtEndScenMan\", */\n T: -1\n },\n\n /*::[*/\n 0x01F6\n /*::]*/\n : {\n /* n:\"BrtBeginSct\", */\n T: 1\n },\n\n /*::[*/\n 0x01F7\n /*::]*/\n : {\n /* n:\"BrtEndSct\", */\n T: -1\n },\n\n /*::[*/\n 0x01F8\n /*::]*/\n : {\n /* n:\"BrtSlc\" */\n },\n\n /*::[*/\n 0x01F9\n /*::]*/\n : {\n /* n:\"BrtBeginDXFs\", */\n T: 1\n },\n\n /*::[*/\n 0x01FA\n /*::]*/\n : {\n /* n:\"BrtEndDXFs\", */\n T: -1\n },\n\n /*::[*/\n 0x01FB\n /*::]*/\n : {\n /* n:\"BrtDXF\" */\n },\n\n /*::[*/\n 0x01FC\n /*::]*/\n : {\n /* n:\"BrtBeginTableStyles\", */\n T: 1\n },\n\n /*::[*/\n 0x01FD\n /*::]*/\n : {\n /* n:\"BrtEndTableStyles\", */\n T: -1\n },\n\n /*::[*/\n 0x01FE\n /*::]*/\n : {\n /* n:\"BrtBeginTableStyle\", */\n T: 1\n },\n\n /*::[*/\n 0x01FF\n /*::]*/\n : {\n /* n:\"BrtEndTableStyle\", */\n T: -1\n },\n\n /*::[*/\n 0x0200\n /*::]*/\n : {\n /* n:\"BrtTableStyleElement\" */\n },\n\n /*::[*/\n 0x0201\n /*::]*/\n : {\n /* n:\"BrtTableStyleClient\" */\n },\n\n /*::[*/\n 0x0202\n /*::]*/\n : {\n /* n:\"BrtBeginVolDeps\", */\n T: 1\n },\n\n /*::[*/\n 0x0203\n /*::]*/\n : {\n /* n:\"BrtEndVolDeps\", */\n T: -1\n },\n\n /*::[*/\n 0x0204\n /*::]*/\n : {\n /* n:\"BrtBeginVolType\", */\n T: 1\n },\n\n /*::[*/\n 0x0205\n /*::]*/\n : {\n /* n:\"BrtEndVolType\", */\n T: -1\n },\n\n /*::[*/\n 0x0206\n /*::]*/\n : {\n /* n:\"BrtBeginVolMain\", */\n T: 1\n },\n\n /*::[*/\n 0x0207\n /*::]*/\n : {\n /* n:\"BrtEndVolMain\", */\n T: -1\n },\n\n /*::[*/\n 0x0208\n /*::]*/\n : {\n /* n:\"BrtBeginVolTopic\", */\n T: 1\n },\n\n /*::[*/\n 0x0209\n /*::]*/\n : {\n /* n:\"BrtEndVolTopic\", */\n T: -1\n },\n\n /*::[*/\n 0x020A\n /*::]*/\n : {\n /* n:\"BrtVolSubtopic\" */\n },\n\n /*::[*/\n 0x020B\n /*::]*/\n : {\n /* n:\"BrtVolRef\" */\n },\n\n /*::[*/\n 0x020C\n /*::]*/\n : {\n /* n:\"BrtVolNum\" */\n },\n\n /*::[*/\n 0x020D\n /*::]*/\n : {\n /* n:\"BrtVolErr\" */\n },\n\n /*::[*/\n 0x020E\n /*::]*/\n : {\n /* n:\"BrtVolStr\" */\n },\n\n /*::[*/\n 0x020F\n /*::]*/\n : {\n /* n:\"BrtVolBool\" */\n },\n\n /*::[*/\n 0x0210\n /*::]*/\n : {\n /* n:\"BrtBeginCalcChain$\", */\n T: 1\n },\n\n /*::[*/\n 0x0211\n /*::]*/\n : {\n /* n:\"BrtEndCalcChain$\", */\n T: -1\n },\n\n /*::[*/\n 0x0212\n /*::]*/\n : {\n /* n:\"BrtBeginSortState\", */\n T: 1\n },\n\n /*::[*/\n 0x0213\n /*::]*/\n : {\n /* n:\"BrtEndSortState\", */\n T: -1\n },\n\n /*::[*/\n 0x0214\n /*::]*/\n : {\n /* n:\"BrtBeginSortCond\", */\n T: 1\n },\n\n /*::[*/\n 0x0215\n /*::]*/\n : {\n /* n:\"BrtEndSortCond\", */\n T: -1\n },\n\n /*::[*/\n 0x0216\n /*::]*/\n : {\n /* n:\"BrtBookProtection\" */\n },\n\n /*::[*/\n 0x0217\n /*::]*/\n : {\n /* n:\"BrtSheetProtection\" */\n },\n\n /*::[*/\n 0x0218\n /*::]*/\n : {\n /* n:\"BrtRangeProtection\" */\n },\n\n /*::[*/\n 0x0219\n /*::]*/\n : {\n /* n:\"BrtPhoneticInfo\" */\n },\n\n /*::[*/\n 0x021A\n /*::]*/\n : {\n /* n:\"BrtBeginECTxtWiz\", */\n T: 1\n },\n\n /*::[*/\n 0x021B\n /*::]*/\n : {\n /* n:\"BrtEndECTxtWiz\", */\n T: -1\n },\n\n /*::[*/\n 0x021C\n /*::]*/\n : {\n /* n:\"BrtBeginECTWFldInfoLst\", */\n T: 1\n },\n\n /*::[*/\n 0x021D\n /*::]*/\n : {\n /* n:\"BrtEndECTWFldInfoLst\", */\n T: -1\n },\n\n /*::[*/\n 0x021E\n /*::]*/\n : {\n /* n:\"BrtBeginECTwFldInfo\", */\n T: 1\n },\n\n /*::[*/\n 0x0224\n /*::]*/\n : {\n /* n:\"BrtFileSharing\" */\n },\n\n /*::[*/\n 0x0225\n /*::]*/\n : {\n /* n:\"BrtOleSize\" */\n },\n\n /*::[*/\n 0x0226\n /*::]*/\n : {\n /* n:\"BrtDrawing\", */\n f: parse_RelID\n },\n\n /*::[*/\n 0x0227\n /*::]*/\n : {\n /* n:\"BrtLegacyDrawing\" */\n },\n\n /*::[*/\n 0x0228\n /*::]*/\n : {\n /* n:\"BrtLegacyDrawingHF\" */\n },\n\n /*::[*/\n 0x0229\n /*::]*/\n : {\n /* n:\"BrtWebOpt\" */\n },\n\n /*::[*/\n 0x022A\n /*::]*/\n : {\n /* n:\"BrtBeginWebPubItems\", */\n T: 1\n },\n\n /*::[*/\n 0x022B\n /*::]*/\n : {\n /* n:\"BrtEndWebPubItems\", */\n T: -1\n },\n\n /*::[*/\n 0x022C\n /*::]*/\n : {\n /* n:\"BrtBeginWebPubItem\", */\n T: 1\n },\n\n /*::[*/\n 0x022D\n /*::]*/\n : {\n /* n:\"BrtEndWebPubItem\", */\n T: -1\n },\n\n /*::[*/\n 0x022E\n /*::]*/\n : {\n /* n:\"BrtBeginSXCondFmt\", */\n T: 1\n },\n\n /*::[*/\n 0x022F\n /*::]*/\n : {\n /* n:\"BrtEndSXCondFmt\", */\n T: -1\n },\n\n /*::[*/\n 0x0230\n /*::]*/\n : {\n /* n:\"BrtBeginSXCondFmts\", */\n T: 1\n },\n\n /*::[*/\n 0x0231\n /*::]*/\n : {\n /* n:\"BrtEndSXCondFmts\", */\n T: -1\n },\n\n /*::[*/\n 0x0232\n /*::]*/\n : {\n /* n:\"BrtBkHim\" */\n },\n\n /*::[*/\n 0x0234\n /*::]*/\n : {\n /* n:\"BrtColor\" */\n },\n\n /*::[*/\n 0x0235\n /*::]*/\n : {\n /* n:\"BrtBeginIndexedColors\", */\n T: 1\n },\n\n /*::[*/\n 0x0236\n /*::]*/\n : {\n /* n:\"BrtEndIndexedColors\", */\n T: -1\n },\n\n /*::[*/\n 0x0239\n /*::]*/\n : {\n /* n:\"BrtBeginMRUColors\", */\n T: 1\n },\n\n /*::[*/\n 0x023A\n /*::]*/\n : {\n /* n:\"BrtEndMRUColors\", */\n T: -1\n },\n\n /*::[*/\n 0x023C\n /*::]*/\n : {\n /* n:\"BrtMRUColor\" */\n },\n\n /*::[*/\n 0x023D\n /*::]*/\n : {\n /* n:\"BrtBeginDVals\", */\n T: 1\n },\n\n /*::[*/\n 0x023E\n /*::]*/\n : {\n /* n:\"BrtEndDVals\", */\n T: -1\n },\n\n /*::[*/\n 0x0241\n /*::]*/\n : {\n /* n:\"BrtSupNameStart\" */\n },\n\n /*::[*/\n 0x0242\n /*::]*/\n : {\n /* n:\"BrtSupNameValueStart\" */\n },\n\n /*::[*/\n 0x0243\n /*::]*/\n : {\n /* n:\"BrtSupNameValueEnd\" */\n },\n\n /*::[*/\n 0x0244\n /*::]*/\n : {\n /* n:\"BrtSupNameNum\" */\n },\n\n /*::[*/\n 0x0245\n /*::]*/\n : {\n /* n:\"BrtSupNameErr\" */\n },\n\n /*::[*/\n 0x0246\n /*::]*/\n : {\n /* n:\"BrtSupNameSt\" */\n },\n\n /*::[*/\n 0x0247\n /*::]*/\n : {\n /* n:\"BrtSupNameNil\" */\n },\n\n /*::[*/\n 0x0248\n /*::]*/\n : {\n /* n:\"BrtSupNameBool\" */\n },\n\n /*::[*/\n 0x0249\n /*::]*/\n : {\n /* n:\"BrtSupNameFmla\" */\n },\n\n /*::[*/\n 0x024A\n /*::]*/\n : {\n /* n:\"BrtSupNameBits\" */\n },\n\n /*::[*/\n 0x024B\n /*::]*/\n : {\n /* n:\"BrtSupNameEnd\" */\n },\n\n /*::[*/\n 0x024C\n /*::]*/\n : {\n /* n:\"BrtEndSupBook\", */\n T: -1\n },\n\n /*::[*/\n 0x024D\n /*::]*/\n : {\n /* n:\"BrtCellSmartTagProperty\" */\n },\n\n /*::[*/\n 0x024E\n /*::]*/\n : {\n /* n:\"BrtBeginCellSmartTag\", */\n T: 1\n },\n\n /*::[*/\n 0x024F\n /*::]*/\n : {\n /* n:\"BrtEndCellSmartTag\", */\n T: -1\n },\n\n /*::[*/\n 0x0250\n /*::]*/\n : {\n /* n:\"BrtBeginCellSmartTags\", */\n T: 1\n },\n\n /*::[*/\n 0x0251\n /*::]*/\n : {\n /* n:\"BrtEndCellSmartTags\", */\n T: -1\n },\n\n /*::[*/\n 0x0252\n /*::]*/\n : {\n /* n:\"BrtBeginSmartTags\", */\n T: 1\n },\n\n /*::[*/\n 0x0253\n /*::]*/\n : {\n /* n:\"BrtEndSmartTags\", */\n T: -1\n },\n\n /*::[*/\n 0x0254\n /*::]*/\n : {\n /* n:\"BrtSmartTagType\" */\n },\n\n /*::[*/\n 0x0255\n /*::]*/\n : {\n /* n:\"BrtBeginSmartTagTypes\", */\n T: 1\n },\n\n /*::[*/\n 0x0256\n /*::]*/\n : {\n /* n:\"BrtEndSmartTagTypes\", */\n T: -1\n },\n\n /*::[*/\n 0x0257\n /*::]*/\n : {\n /* n:\"BrtBeginSXFilters\", */\n T: 1\n },\n\n /*::[*/\n 0x0258\n /*::]*/\n : {\n /* n:\"BrtEndSXFilters\", */\n T: -1\n },\n\n /*::[*/\n 0x0259\n /*::]*/\n : {\n /* n:\"BrtBeginSXFILTER\", */\n T: 1\n },\n\n /*::[*/\n 0x025A\n /*::]*/\n : {\n /* n:\"BrtEndSXFilter\", */\n T: -1\n },\n\n /*::[*/\n 0x025B\n /*::]*/\n : {\n /* n:\"BrtBeginFills\", */\n T: 1\n },\n\n /*::[*/\n 0x025C\n /*::]*/\n : {\n /* n:\"BrtEndFills\", */\n T: -1\n },\n\n /*::[*/\n 0x025D\n /*::]*/\n : {\n /* n:\"BrtBeginCellWatches\", */\n T: 1\n },\n\n /*::[*/\n 0x025E\n /*::]*/\n : {\n /* n:\"BrtEndCellWatches\", */\n T: -1\n },\n\n /*::[*/\n 0x025F\n /*::]*/\n : {\n /* n:\"BrtCellWatch\" */\n },\n\n /*::[*/\n 0x0260\n /*::]*/\n : {\n /* n:\"BrtBeginCRErrs\", */\n T: 1\n },\n\n /*::[*/\n 0x0261\n /*::]*/\n : {\n /* n:\"BrtEndCRErrs\", */\n T: -1\n },\n\n /*::[*/\n 0x0262\n /*::]*/\n : {\n /* n:\"BrtCrashRecErr\" */\n },\n\n /*::[*/\n 0x0263\n /*::]*/\n : {\n /* n:\"BrtBeginFonts\", */\n T: 1\n },\n\n /*::[*/\n 0x0264\n /*::]*/\n : {\n /* n:\"BrtEndFonts\", */\n T: -1\n },\n\n /*::[*/\n 0x0265\n /*::]*/\n : {\n /* n:\"BrtBeginBorders\", */\n T: 1\n },\n\n /*::[*/\n 0x0266\n /*::]*/\n : {\n /* n:\"BrtEndBorders\", */\n T: -1\n },\n\n /*::[*/\n 0x0267\n /*::]*/\n : {\n /* n:\"BrtBeginFmts\", */\n T: 1\n },\n\n /*::[*/\n 0x0268\n /*::]*/\n : {\n /* n:\"BrtEndFmts\", */\n T: -1\n },\n\n /*::[*/\n 0x0269\n /*::]*/\n : {\n /* n:\"BrtBeginCellXFs\", */\n T: 1\n },\n\n /*::[*/\n 0x026A\n /*::]*/\n : {\n /* n:\"BrtEndCellXFs\", */\n T: -1\n },\n\n /*::[*/\n 0x026B\n /*::]*/\n : {\n /* n:\"BrtBeginStyles\", */\n T: 1\n },\n\n /*::[*/\n 0x026C\n /*::]*/\n : {\n /* n:\"BrtEndStyles\", */\n T: -1\n },\n\n /*::[*/\n 0x0271\n /*::]*/\n : {\n /* n:\"BrtBigName\" */\n },\n\n /*::[*/\n 0x0272\n /*::]*/\n : {\n /* n:\"BrtBeginCellStyleXFs\", */\n T: 1\n },\n\n /*::[*/\n 0x0273\n /*::]*/\n : {\n /* n:\"BrtEndCellStyleXFs\", */\n T: -1\n },\n\n /*::[*/\n 0x0274\n /*::]*/\n : {\n /* n:\"BrtBeginComments\", */\n T: 1\n },\n\n /*::[*/\n 0x0275\n /*::]*/\n : {\n /* n:\"BrtEndComments\", */\n T: -1\n },\n\n /*::[*/\n 0x0276\n /*::]*/\n : {\n /* n:\"BrtBeginCommentAuthors\", */\n T: 1\n },\n\n /*::[*/\n 0x0277\n /*::]*/\n : {\n /* n:\"BrtEndCommentAuthors\", */\n T: -1\n },\n\n /*::[*/\n 0x0278\n /*::]*/\n : {\n /* n:\"BrtCommentAuthor\", */\n f: parse_BrtCommentAuthor\n },\n\n /*::[*/\n 0x0279\n /*::]*/\n : {\n /* n:\"BrtBeginCommentList\", */\n T: 1\n },\n\n /*::[*/\n 0x027A\n /*::]*/\n : {\n /* n:\"BrtEndCommentList\", */\n T: -1\n },\n\n /*::[*/\n 0x027B\n /*::]*/\n : {\n /* n:\"BrtBeginComment\", */\n T: 1,\n f: parse_BrtBeginComment\n },\n\n /*::[*/\n 0x027C\n /*::]*/\n : {\n /* n:\"BrtEndComment\", */\n T: -1\n },\n\n /*::[*/\n 0x027D\n /*::]*/\n : {\n /* n:\"BrtCommentText\", */\n f: parse_BrtCommentText\n },\n\n /*::[*/\n 0x027E\n /*::]*/\n : {\n /* n:\"BrtBeginOleObjects\", */\n T: 1\n },\n\n /*::[*/\n 0x027F\n /*::]*/\n : {\n /* n:\"BrtOleObject\" */\n },\n\n /*::[*/\n 0x0280\n /*::]*/\n : {\n /* n:\"BrtEndOleObjects\", */\n T: -1\n },\n\n /*::[*/\n 0x0281\n /*::]*/\n : {\n /* n:\"BrtBeginSxrules\", */\n T: 1\n },\n\n /*::[*/\n 0x0282\n /*::]*/\n : {\n /* n:\"BrtEndSxRules\", */\n T: -1\n },\n\n /*::[*/\n 0x0283\n /*::]*/\n : {\n /* n:\"BrtBeginActiveXControls\", */\n T: 1\n },\n\n /*::[*/\n 0x0284\n /*::]*/\n : {\n /* n:\"BrtActiveX\" */\n },\n\n /*::[*/\n 0x0285\n /*::]*/\n : {\n /* n:\"BrtEndActiveXControls\", */\n T: -1\n },\n\n /*::[*/\n 0x0286\n /*::]*/\n : {\n /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */\n T: 1\n },\n\n /*::[*/\n 0x0288\n /*::]*/\n : {\n /* n:\"BrtBeginCellIgnoreECs\", */\n T: 1\n },\n\n /*::[*/\n 0x0289\n /*::]*/\n : {\n /* n:\"BrtCellIgnoreEC\" */\n },\n\n /*::[*/\n 0x028A\n /*::]*/\n : {\n /* n:\"BrtEndCellIgnoreECs\", */\n T: -1\n },\n\n /*::[*/\n 0x028B\n /*::]*/\n : {\n /* n:\"BrtCsProp\", */\n f: parse_BrtCsProp\n },\n\n /*::[*/\n 0x028C\n /*::]*/\n : {\n /* n:\"BrtCsPageSetup\" */\n },\n\n /*::[*/\n 0x028D\n /*::]*/\n : {\n /* n:\"BrtBeginUserCsViews\", */\n T: 1\n },\n\n /*::[*/\n 0x028E\n /*::]*/\n : {\n /* n:\"BrtEndUserCsViews\", */\n T: -1\n },\n\n /*::[*/\n 0x028F\n /*::]*/\n : {\n /* n:\"BrtBeginUserCsView\", */\n T: 1\n },\n\n /*::[*/\n 0x0290\n /*::]*/\n : {\n /* n:\"BrtEndUserCsView\", */\n T: -1\n },\n\n /*::[*/\n 0x0291\n /*::]*/\n : {\n /* n:\"BrtBeginPcdSFCIEntries\", */\n T: 1\n },\n\n /*::[*/\n 0x0292\n /*::]*/\n : {\n /* n:\"BrtEndPCDSFCIEntries\", */\n T: -1\n },\n\n /*::[*/\n 0x0293\n /*::]*/\n : {\n /* n:\"BrtPCDSFCIEntry\" */\n },\n\n /*::[*/\n 0x0294\n /*::]*/\n : {\n /* n:\"BrtBeginListParts\", */\n T: 1\n },\n\n /*::[*/\n 0x0295\n /*::]*/\n : {\n /* n:\"BrtListPart\" */\n },\n\n /*::[*/\n 0x0296\n /*::]*/\n : {\n /* n:\"BrtEndListParts\", */\n T: -1\n },\n\n /*::[*/\n 0x0297\n /*::]*/\n : {\n /* n:\"BrtSheetCalcProp\" */\n },\n\n /*::[*/\n 0x0298\n /*::]*/\n : {\n /* n:\"BrtBeginFnGroup\", */\n T: 1\n },\n\n /*::[*/\n 0x0299\n /*::]*/\n : {\n /* n:\"BrtFnGroup\" */\n },\n\n /*::[*/\n 0x029A\n /*::]*/\n : {\n /* n:\"BrtEndFnGroup\", */\n T: -1\n },\n\n /*::[*/\n 0x029B\n /*::]*/\n : {\n /* n:\"BrtSupAddin\" */\n },\n\n /*::[*/\n 0x029C\n /*::]*/\n : {\n /* n:\"BrtSXTDMPOrder\" */\n },\n\n /*::[*/\n 0x029D\n /*::]*/\n : {\n /* n:\"BrtCsProtection\" */\n },\n\n /*::[*/\n 0x029F\n /*::]*/\n : {\n /* n:\"BrtBeginWsSortMap\", */\n T: 1\n },\n\n /*::[*/\n 0x02A0\n /*::]*/\n : {\n /* n:\"BrtEndWsSortMap\", */\n T: -1\n },\n\n /*::[*/\n 0x02A1\n /*::]*/\n : {\n /* n:\"BrtBeginRRSort\", */\n T: 1\n },\n\n /*::[*/\n 0x02A2\n /*::]*/\n : {\n /* n:\"BrtEndRRSort\", */\n T: -1\n },\n\n /*::[*/\n 0x02A3\n /*::]*/\n : {\n /* n:\"BrtRRSortItem\" */\n },\n\n /*::[*/\n 0x02A4\n /*::]*/\n : {\n /* n:\"BrtFileSharingIso\" */\n },\n\n /*::[*/\n 0x02A5\n /*::]*/\n : {\n /* n:\"BrtBookProtectionIso\" */\n },\n\n /*::[*/\n 0x02A6\n /*::]*/\n : {\n /* n:\"BrtSheetProtectionIso\" */\n },\n\n /*::[*/\n 0x02A7\n /*::]*/\n : {\n /* n:\"BrtCsProtectionIso\" */\n },\n\n /*::[*/\n 0x02A8\n /*::]*/\n : {\n /* n:\"BrtRangeProtectionIso\" */\n },\n\n /*::[*/\n 0x02A9\n /*::]*/\n : {\n /* n:\"BrtDValList\" */\n },\n\n /*::[*/\n 0x0400\n /*::]*/\n : {\n /* n:\"BrtRwDescent\" */\n },\n\n /*::[*/\n 0x0401\n /*::]*/\n : {\n /* n:\"BrtKnownFonts\" */\n },\n\n /*::[*/\n 0x0402\n /*::]*/\n : {\n /* n:\"BrtBeginSXTupleSet\", */\n T: 1\n },\n\n /*::[*/\n 0x0403\n /*::]*/\n : {\n /* n:\"BrtEndSXTupleSet\", */\n T: -1\n },\n\n /*::[*/\n 0x0404\n /*::]*/\n : {\n /* n:\"BrtBeginSXTupleSetHeader\", */\n T: 1\n },\n\n /*::[*/\n 0x0405\n /*::]*/\n : {\n /* n:\"BrtEndSXTupleSetHeader\", */\n T: -1\n },\n\n /*::[*/\n 0x0406\n /*::]*/\n : {\n /* n:\"BrtSXTupleSetHeaderItem\" */\n },\n\n /*::[*/\n 0x0407\n /*::]*/\n : {\n /* n:\"BrtBeginSXTupleSetData\", */\n T: 1\n },\n\n /*::[*/\n 0x0408\n /*::]*/\n : {\n /* n:\"BrtEndSXTupleSetData\", */\n T: -1\n },\n\n /*::[*/\n 0x0409\n /*::]*/\n : {\n /* n:\"BrtBeginSXTupleSetRow\", */\n T: 1\n },\n\n /*::[*/\n 0x040A\n /*::]*/\n : {\n /* n:\"BrtEndSXTupleSetRow\", */\n T: -1\n },\n\n /*::[*/\n 0x040B\n /*::]*/\n : {\n /* n:\"BrtSXTupleSetRowItem\" */\n },\n\n /*::[*/\n 0x040C\n /*::]*/\n : {\n /* n:\"BrtNameExt\" */\n },\n\n /*::[*/\n 0x040D\n /*::]*/\n : {\n /* n:\"BrtPCDH14\" */\n },\n\n /*::[*/\n 0x040E\n /*::]*/\n : {\n /* n:\"BrtBeginPCDCalcMem14\", */\n T: 1\n },\n\n /*::[*/\n 0x040F\n /*::]*/\n : {\n /* n:\"BrtEndPCDCalcMem14\", */\n T: -1\n },\n\n /*::[*/\n 0x0410\n /*::]*/\n : {\n /* n:\"BrtSXTH14\" */\n },\n\n /*::[*/\n 0x0411\n /*::]*/\n : {\n /* n:\"BrtBeginSparklineGroup\", */\n T: 1\n },\n\n /*::[*/\n 0x0412\n /*::]*/\n : {\n /* n:\"BrtEndSparklineGroup\", */\n T: -1\n },\n\n /*::[*/\n 0x0413\n /*::]*/\n : {\n /* n:\"BrtSparkline\" */\n },\n\n /*::[*/\n 0x0414\n /*::]*/\n : {\n /* n:\"BrtSXDI14\" */\n },\n\n /*::[*/\n 0x0415\n /*::]*/\n : {\n /* n:\"BrtWsFmtInfoEx14\" */\n },\n\n /*::[*/\n 0x0416\n /*::]*/\n : {\n /* n:\"BrtBeginConditionalFormatting14\", */\n T: 1\n },\n\n /*::[*/\n 0x0417\n /*::]*/\n : {\n /* n:\"BrtEndConditionalFormatting14\", */\n T: -1\n },\n\n /*::[*/\n 0x0418\n /*::]*/\n : {\n /* n:\"BrtBeginCFRule14\", */\n T: 1\n },\n\n /*::[*/\n 0x0419\n /*::]*/\n : {\n /* n:\"BrtEndCFRule14\", */\n T: -1\n },\n\n /*::[*/\n 0x041A\n /*::]*/\n : {\n /* n:\"BrtCFVO14\" */\n },\n\n /*::[*/\n 0x041B\n /*::]*/\n : {\n /* n:\"BrtBeginDatabar14\", */\n T: 1\n },\n\n /*::[*/\n 0x041C\n /*::]*/\n : {\n /* n:\"BrtBeginIconSet14\", */\n T: 1\n },\n\n /*::[*/\n 0x041D\n /*::]*/\n : {\n /* n:\"BrtDVal14\", */\n f: parse_BrtDVal14\n },\n\n /*::[*/\n 0x041E\n /*::]*/\n : {\n /* n:\"BrtBeginDVals14\", */\n T: 1\n },\n\n /*::[*/\n 0x041F\n /*::]*/\n : {\n /* n:\"BrtColor14\" */\n },\n\n /*::[*/\n 0x0420\n /*::]*/\n : {\n /* n:\"BrtBeginSparklines\", */\n T: 1\n },\n\n /*::[*/\n 0x0421\n /*::]*/\n : {\n /* n:\"BrtEndSparklines\", */\n T: -1\n },\n\n /*::[*/\n 0x0422\n /*::]*/\n : {\n /* n:\"BrtBeginSparklineGroups\", */\n T: 1\n },\n\n /*::[*/\n 0x0423\n /*::]*/\n : {\n /* n:\"BrtEndSparklineGroups\", */\n T: -1\n },\n\n /*::[*/\n 0x0425\n /*::]*/\n : {\n /* n:\"BrtSXVD14\" */\n },\n\n /*::[*/\n 0x0426\n /*::]*/\n : {\n /* n:\"BrtBeginSXView14\", */\n T: 1\n },\n\n /*::[*/\n 0x0427\n /*::]*/\n : {\n /* n:\"BrtEndSXView14\", */\n T: -1\n },\n\n /*::[*/\n 0x0428\n /*::]*/\n : {\n /* n:\"BrtBeginSXView16\", */\n T: 1\n },\n\n /*::[*/\n 0x0429\n /*::]*/\n : {\n /* n:\"BrtEndSXView16\", */\n T: -1\n },\n\n /*::[*/\n 0x042A\n /*::]*/\n : {\n /* n:\"BrtBeginPCD14\", */\n T: 1\n },\n\n /*::[*/\n 0x042B\n /*::]*/\n : {\n /* n:\"BrtEndPCD14\", */\n T: -1\n },\n\n /*::[*/\n 0x042C\n /*::]*/\n : {\n /* n:\"BrtBeginExtConn14\", */\n T: 1\n },\n\n /*::[*/\n 0x042D\n /*::]*/\n : {\n /* n:\"BrtEndExtConn14\", */\n T: -1\n },\n\n /*::[*/\n 0x042E\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheIDs\", */\n T: 1\n },\n\n /*::[*/\n 0x042F\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheIDs\", */\n T: -1\n },\n\n /*::[*/\n 0x0430\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheID\", */\n T: 1\n },\n\n /*::[*/\n 0x0431\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheID\", */\n T: -1\n },\n\n /*::[*/\n 0x0433\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCache\", */\n T: 1\n },\n\n /*::[*/\n 0x0434\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCache\", */\n T: -1\n },\n\n /*::[*/\n 0x0435\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheDef\", */\n T: 1\n },\n\n /*::[*/\n 0x0436\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheDef\", */\n T: -1\n },\n\n /*::[*/\n 0x0437\n /*::]*/\n : {\n /* n:\"BrtBeginSlicersEx\", */\n T: 1\n },\n\n /*::[*/\n 0x0438\n /*::]*/\n : {\n /* n:\"BrtEndSlicersEx\", */\n T: -1\n },\n\n /*::[*/\n 0x0439\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerEx\", */\n T: 1\n },\n\n /*::[*/\n 0x043A\n /*::]*/\n : {\n /* n:\"BrtEndSlicerEx\", */\n T: -1\n },\n\n /*::[*/\n 0x043B\n /*::]*/\n : {\n /* n:\"BrtBeginSlicer\", */\n T: 1\n },\n\n /*::[*/\n 0x043C\n /*::]*/\n : {\n /* n:\"BrtEndSlicer\", */\n T: -1\n },\n\n /*::[*/\n 0x043D\n /*::]*/\n : {\n /* n:\"BrtSlicerCachePivotTables\" */\n },\n\n /*::[*/\n 0x043E\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheOlapImpl\", */\n T: 1\n },\n\n /*::[*/\n 0x043F\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheOlapImpl\", */\n T: -1\n },\n\n /*::[*/\n 0x0440\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheLevelsData\", */\n T: 1\n },\n\n /*::[*/\n 0x0441\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheLevelsData\", */\n T: -1\n },\n\n /*::[*/\n 0x0442\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheLevelData\", */\n T: 1\n },\n\n /*::[*/\n 0x0443\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheLevelData\", */\n T: -1\n },\n\n /*::[*/\n 0x0444\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheSiRanges\", */\n T: 1\n },\n\n /*::[*/\n 0x0445\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheSiRanges\", */\n T: -1\n },\n\n /*::[*/\n 0x0446\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheSiRange\", */\n T: 1\n },\n\n /*::[*/\n 0x0447\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheSiRange\", */\n T: -1\n },\n\n /*::[*/\n 0x0448\n /*::]*/\n : {\n /* n:\"BrtSlicerCacheOlapItem\" */\n },\n\n /*::[*/\n 0x0449\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheSelections\", */\n T: 1\n },\n\n /*::[*/\n 0x044A\n /*::]*/\n : {\n /* n:\"BrtSlicerCacheSelection\" */\n },\n\n /*::[*/\n 0x044B\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheSelections\", */\n T: -1\n },\n\n /*::[*/\n 0x044C\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCacheNative\", */\n T: 1\n },\n\n /*::[*/\n 0x044D\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCacheNative\", */\n T: -1\n },\n\n /*::[*/\n 0x044E\n /*::]*/\n : {\n /* n:\"BrtSlicerCacheNativeItem\" */\n },\n\n /*::[*/\n 0x044F\n /*::]*/\n : {\n /* n:\"BrtRangeProtection14\" */\n },\n\n /*::[*/\n 0x0450\n /*::]*/\n : {\n /* n:\"BrtRangeProtectionIso14\" */\n },\n\n /*::[*/\n 0x0451\n /*::]*/\n : {\n /* n:\"BrtCellIgnoreEC14\" */\n },\n\n /*::[*/\n 0x0457\n /*::]*/\n : {\n /* n:\"BrtList14\" */\n },\n\n /*::[*/\n 0x0458\n /*::]*/\n : {\n /* n:\"BrtCFIcon\" */\n },\n\n /*::[*/\n 0x0459\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */\n T: 1\n },\n\n /*::[*/\n 0x045A\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */\n T: -1\n },\n\n /*::[*/\n 0x045B\n /*::]*/\n : {\n /* n:\"BrtBeginSlicers\", */\n T: 1\n },\n\n /*::[*/\n 0x045C\n /*::]*/\n : {\n /* n:\"BrtEndSlicers\", */\n T: -1\n },\n\n /*::[*/\n 0x045D\n /*::]*/\n : {\n /* n:\"BrtWbProp14\" */\n },\n\n /*::[*/\n 0x045E\n /*::]*/\n : {\n /* n:\"BrtBeginSXEdit\", */\n T: 1\n },\n\n /*::[*/\n 0x045F\n /*::]*/\n : {\n /* n:\"BrtEndSXEdit\", */\n T: -1\n },\n\n /*::[*/\n 0x0460\n /*::]*/\n : {\n /* n:\"BrtBeginSXEdits\", */\n T: 1\n },\n\n /*::[*/\n 0x0461\n /*::]*/\n : {\n /* n:\"BrtEndSXEdits\", */\n T: -1\n },\n\n /*::[*/\n 0x0462\n /*::]*/\n : {\n /* n:\"BrtBeginSXChange\", */\n T: 1\n },\n\n /*::[*/\n 0x0463\n /*::]*/\n : {\n /* n:\"BrtEndSXChange\", */\n T: -1\n },\n\n /*::[*/\n 0x0464\n /*::]*/\n : {\n /* n:\"BrtBeginSXChanges\", */\n T: 1\n },\n\n /*::[*/\n 0x0465\n /*::]*/\n : {\n /* n:\"BrtEndSXChanges\", */\n T: -1\n },\n\n /*::[*/\n 0x0466\n /*::]*/\n : {\n /* n:\"BrtSXTupleItems\" */\n },\n\n /*::[*/\n 0x0468\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerStyle\", */\n T: 1\n },\n\n /*::[*/\n 0x0469\n /*::]*/\n : {\n /* n:\"BrtEndSlicerStyle\", */\n T: -1\n },\n\n /*::[*/\n 0x046A\n /*::]*/\n : {\n /* n:\"BrtSlicerStyleElement\" */\n },\n\n /*::[*/\n 0x046B\n /*::]*/\n : {\n /* n:\"BrtBeginStyleSheetExt14\", */\n T: 1\n },\n\n /*::[*/\n 0x046C\n /*::]*/\n : {\n /* n:\"BrtEndStyleSheetExt14\", */\n T: -1\n },\n\n /*::[*/\n 0x046D\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerCachesPivotCacheID\", */\n T: 1\n },\n\n /*::[*/\n 0x046E\n /*::]*/\n : {\n /* n:\"BrtEndSlicerCachesPivotCacheID\", */\n T: -1\n },\n\n /*::[*/\n 0x046F\n /*::]*/\n : {\n /* n:\"BrtBeginConditionalFormattings\", */\n T: 1\n },\n\n /*::[*/\n 0x0470\n /*::]*/\n : {\n /* n:\"BrtEndConditionalFormattings\", */\n T: -1\n },\n\n /*::[*/\n 0x0471\n /*::]*/\n : {\n /* n:\"BrtBeginPCDCalcMemExt\", */\n T: 1\n },\n\n /*::[*/\n 0x0472\n /*::]*/\n : {\n /* n:\"BrtEndPCDCalcMemExt\", */\n T: -1\n },\n\n /*::[*/\n 0x0473\n /*::]*/\n : {\n /* n:\"BrtBeginPCDCalcMemsExt\", */\n T: 1\n },\n\n /*::[*/\n 0x0474\n /*::]*/\n : {\n /* n:\"BrtEndPCDCalcMemsExt\", */\n T: -1\n },\n\n /*::[*/\n 0x0475\n /*::]*/\n : {\n /* n:\"BrtPCDField14\" */\n },\n\n /*::[*/\n 0x0476\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerStyles\", */\n T: 1\n },\n\n /*::[*/\n 0x0477\n /*::]*/\n : {\n /* n:\"BrtEndSlicerStyles\", */\n T: -1\n },\n\n /*::[*/\n 0x0478\n /*::]*/\n : {\n /* n:\"BrtBeginSlicerStyleElements\", */\n T: 1\n },\n\n /*::[*/\n 0x0479\n /*::]*/\n : {\n /* n:\"BrtEndSlicerStyleElements\", */\n T: -1\n },\n\n /*::[*/\n 0x047A\n /*::]*/\n : {\n /* n:\"BrtCFRuleExt\" */\n },\n\n /*::[*/\n 0x047B\n /*::]*/\n : {\n /* n:\"BrtBeginSXCondFmt14\", */\n T: 1\n },\n\n /*::[*/\n 0x047C\n /*::]*/\n : {\n /* n:\"BrtEndSXCondFmt14\", */\n T: -1\n },\n\n /*::[*/\n 0x047D\n /*::]*/\n : {\n /* n:\"BrtBeginSXCondFmts14\", */\n T: 1\n },\n\n /*::[*/\n 0x047E\n /*::]*/\n : {\n /* n:\"BrtEndSXCondFmts14\", */\n T: -1\n },\n\n /*::[*/\n 0x0480\n /*::]*/\n : {\n /* n:\"BrtBeginSortCond14\", */\n T: 1\n },\n\n /*::[*/\n 0x0481\n /*::]*/\n : {\n /* n:\"BrtEndSortCond14\", */\n T: -1\n },\n\n /*::[*/\n 0x0482\n /*::]*/\n : {\n /* n:\"BrtEndDVals14\", */\n T: -1\n },\n\n /*::[*/\n 0x0483\n /*::]*/\n : {\n /* n:\"BrtEndIconSet14\", */\n T: -1\n },\n\n /*::[*/\n 0x0484\n /*::]*/\n : {\n /* n:\"BrtEndDatabar14\", */\n T: -1\n },\n\n /*::[*/\n 0x0485\n /*::]*/\n : {\n /* n:\"BrtBeginColorScale14\", */\n T: 1\n },\n\n /*::[*/\n 0x0486\n /*::]*/\n : {\n /* n:\"BrtEndColorScale14\", */\n T: -1\n },\n\n /*::[*/\n 0x0487\n /*::]*/\n : {\n /* n:\"BrtBeginSxrules14\", */\n T: 1\n },\n\n /*::[*/\n 0x0488\n /*::]*/\n : {\n /* n:\"BrtEndSxrules14\", */\n T: -1\n },\n\n /*::[*/\n 0x0489\n /*::]*/\n : {\n /* n:\"BrtBeginPRule14\", */\n T: 1\n },\n\n /*::[*/\n 0x048A\n /*::]*/\n : {\n /* n:\"BrtEndPRule14\", */\n T: -1\n },\n\n /*::[*/\n 0x048B\n /*::]*/\n : {\n /* n:\"BrtBeginPRFilters14\", */\n T: 1\n },\n\n /*::[*/\n 0x048C\n /*::]*/\n : {\n /* n:\"BrtEndPRFilters14\", */\n T: -1\n },\n\n /*::[*/\n 0x048D\n /*::]*/\n : {\n /* n:\"BrtBeginPRFilter14\", */\n T: 1\n },\n\n /*::[*/\n 0x048E\n /*::]*/\n : {\n /* n:\"BrtEndPRFilter14\", */\n T: -1\n },\n\n /*::[*/\n 0x048F\n /*::]*/\n : {\n /* n:\"BrtBeginPRFItem14\", */\n T: 1\n },\n\n /*::[*/\n 0x0490\n /*::]*/\n : {\n /* n:\"BrtEndPRFItem14\", */\n T: -1\n },\n\n /*::[*/\n 0x0491\n /*::]*/\n : {\n /* n:\"BrtBeginCellIgnoreECs14\", */\n T: 1\n },\n\n /*::[*/\n 0x0492\n /*::]*/\n : {\n /* n:\"BrtEndCellIgnoreECs14\", */\n T: -1\n },\n\n /*::[*/\n 0x0493\n /*::]*/\n : {\n /* n:\"BrtDxf14\" */\n },\n\n /*::[*/\n 0x0494\n /*::]*/\n : {\n /* n:\"BrtBeginDxF14s\", */\n T: 1\n },\n\n /*::[*/\n 0x0495\n /*::]*/\n : {\n /* n:\"BrtEndDxf14s\", */\n T: -1\n },\n\n /*::[*/\n 0x0499\n /*::]*/\n : {\n /* n:\"BrtFilter14\" */\n },\n\n /*::[*/\n 0x049A\n /*::]*/\n : {\n /* n:\"BrtBeginCustomFilters14\", */\n T: 1\n },\n\n /*::[*/\n 0x049C\n /*::]*/\n : {\n /* n:\"BrtCustomFilter14\" */\n },\n\n /*::[*/\n 0x049D\n /*::]*/\n : {\n /* n:\"BrtIconFilter14\" */\n },\n\n /*::[*/\n 0x049E\n /*::]*/\n : {\n /* n:\"BrtPivotCacheConnectionName\" */\n },\n\n /*::[*/\n 0x0800\n /*::]*/\n : {\n /* n:\"BrtBeginDecoupledPivotCacheIDs\", */\n T: 1\n },\n\n /*::[*/\n 0x0801\n /*::]*/\n : {\n /* n:\"BrtEndDecoupledPivotCacheIDs\", */\n T: -1\n },\n\n /*::[*/\n 0x0802\n /*::]*/\n : {\n /* n:\"BrtDecoupledPivotCacheID\" */\n },\n\n /*::[*/\n 0x0803\n /*::]*/\n : {\n /* n:\"BrtBeginPivotTableRefs\", */\n T: 1\n },\n\n /*::[*/\n 0x0804\n /*::]*/\n : {\n /* n:\"BrtEndPivotTableRefs\", */\n T: -1\n },\n\n /*::[*/\n 0x0805\n /*::]*/\n : {\n /* n:\"BrtPivotTableRef\" */\n },\n\n /*::[*/\n 0x0806\n /*::]*/\n : {\n /* n:\"BrtSlicerCacheBookPivotTables\" */\n },\n\n /*::[*/\n 0x0807\n /*::]*/\n : {\n /* n:\"BrtBeginSxvcells\", */\n T: 1\n },\n\n /*::[*/\n 0x0808\n /*::]*/\n : {\n /* n:\"BrtEndSxvcells\", */\n T: -1\n },\n\n /*::[*/\n 0x0809\n /*::]*/\n : {\n /* n:\"BrtBeginSxRow\", */\n T: 1\n },\n\n /*::[*/\n 0x080A\n /*::]*/\n : {\n /* n:\"BrtEndSxRow\", */\n T: -1\n },\n\n /*::[*/\n 0x080C\n /*::]*/\n : {\n /* n:\"BrtPcdCalcMem15\" */\n },\n\n /*::[*/\n 0x0813\n /*::]*/\n : {\n /* n:\"BrtQsi15\" */\n },\n\n /*::[*/\n 0x0814\n /*::]*/\n : {\n /* n:\"BrtBeginWebExtensions\", */\n T: 1\n },\n\n /*::[*/\n 0x0815\n /*::]*/\n : {\n /* n:\"BrtEndWebExtensions\", */\n T: -1\n },\n\n /*::[*/\n 0x0816\n /*::]*/\n : {\n /* n:\"BrtWebExtension\" */\n },\n\n /*::[*/\n 0x0817\n /*::]*/\n : {\n /* n:\"BrtAbsPath15\" */\n },\n\n /*::[*/\n 0x0818\n /*::]*/\n : {\n /* n:\"BrtBeginPivotTableUISettings\", */\n T: 1\n },\n\n /*::[*/\n 0x0819\n /*::]*/\n : {\n /* n:\"BrtEndPivotTableUISettings\", */\n T: -1\n },\n\n /*::[*/\n 0x081B\n /*::]*/\n : {\n /* n:\"BrtTableSlicerCacheIDs\" */\n },\n\n /*::[*/\n 0x081C\n /*::]*/\n : {\n /* n:\"BrtTableSlicerCacheID\" */\n },\n\n /*::[*/\n 0x081D\n /*::]*/\n : {\n /* n:\"BrtBeginTableSlicerCache\", */\n T: 1\n },\n\n /*::[*/\n 0x081E\n /*::]*/\n : {\n /* n:\"BrtEndTableSlicerCache\", */\n T: -1\n },\n\n /*::[*/\n 0x081F\n /*::]*/\n : {\n /* n:\"BrtSxFilter15\" */\n },\n\n /*::[*/\n 0x0820\n /*::]*/\n : {\n /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */\n T: 1\n },\n\n /*::[*/\n 0x0821\n /*::]*/\n : {\n /* n:\"BrtEndTimelineCachePivotCacheIDs\", */\n T: -1\n },\n\n /*::[*/\n 0x0822\n /*::]*/\n : {\n /* n:\"BrtTimelineCachePivotCacheID\" */\n },\n\n /*::[*/\n 0x0823\n /*::]*/\n : {\n /* n:\"BrtBeginTimelineCacheIDs\", */\n T: 1\n },\n\n /*::[*/\n 0x0824\n /*::]*/\n : {\n /* n:\"BrtEndTimelineCacheIDs\", */\n T: -1\n },\n\n /*::[*/\n 0x0825\n /*::]*/\n : {\n /* n:\"BrtBeginTimelineCacheID\", */\n T: 1\n },\n\n /*::[*/\n 0x0826\n /*::]*/\n : {\n /* n:\"BrtEndTimelineCacheID\", */\n T: -1\n },\n\n /*::[*/\n 0x0827\n /*::]*/\n : {\n /* n:\"BrtBeginTimelinesEx\", */\n T: 1\n },\n\n /*::[*/\n 0x0828\n /*::]*/\n : {\n /* n:\"BrtEndTimelinesEx\", */\n T: -1\n },\n\n /*::[*/\n 0x0829\n /*::]*/\n : {\n /* n:\"BrtBeginTimelineEx\", */\n T: 1\n },\n\n /*::[*/\n 0x082A\n /*::]*/\n : {\n /* n:\"BrtEndTimelineEx\", */\n T: -1\n },\n\n /*::[*/\n 0x082B\n /*::]*/\n : {\n /* n:\"BrtWorkBookPr15\" */\n },\n\n /*::[*/\n 0x082C\n /*::]*/\n : {\n /* n:\"BrtPCDH15\" */\n },\n\n /*::[*/\n 0x082D\n /*::]*/\n : {\n /* n:\"BrtBeginTimelineStyle\", */\n T: 1\n },\n\n /*::[*/\n 0x082E\n /*::]*/\n : {\n /* n:\"BrtEndTimelineStyle\", */\n T: -1\n },\n\n /*::[*/\n 0x082F\n /*::]*/\n : {\n /* n:\"BrtTimelineStyleElement\" */\n },\n\n /*::[*/\n 0x0830\n /*::]*/\n : {\n /* n:\"BrtBeginTimelineStylesheetExt15\", */\n T: 1\n },\n\n /*::[*/\n 0x0831\n /*::]*/\n : {\n /* n:\"BrtEndTimelineStylesheetExt15\", */\n T: -1\n },\n\n /*::[*/\n 0x0832\n /*::]*/\n : {\n /* n:\"BrtBeginTimelineStyles\", */\n T: 1\n },\n\n /*::[*/\n 0x0833\n /*::]*/\n : {\n /* n:\"BrtEndTimelineStyles\", */\n T: -1\n },\n\n /*::[*/\n 0x0834\n /*::]*/\n : {\n /* n:\"BrtBeginTimelineStyleElements\", */\n T: 1\n },\n\n /*::[*/\n 0x0835\n /*::]*/\n : {\n /* n:\"BrtEndTimelineStyleElements\", */\n T: -1\n },\n\n /*::[*/\n 0x0836\n /*::]*/\n : {\n /* n:\"BrtDxf15\" */\n },\n\n /*::[*/\n 0x0837\n /*::]*/\n : {\n /* n:\"BrtBeginDxfs15\", */\n T: 1\n },\n\n /*::[*/\n 0x0838\n /*::]*/\n : {\n /* n:\"BrtEndDxfs15\", */\n T: -1\n },\n\n /*::[*/\n 0x0839\n /*::]*/\n : {\n /* n:\"BrtSlicerCacheHideItemsWithNoData\" */\n },\n\n /*::[*/\n 0x083A\n /*::]*/\n : {\n /* n:\"BrtBeginItemUniqueNames\", */\n T: 1\n },\n\n /*::[*/\n 0x083B\n /*::]*/\n : {\n /* n:\"BrtEndItemUniqueNames\", */\n T: -1\n },\n\n /*::[*/\n 0x083C\n /*::]*/\n : {\n /* n:\"BrtItemUniqueName\" */\n },\n\n /*::[*/\n 0x083D\n /*::]*/\n : {\n /* n:\"BrtBeginExtConn15\", */\n T: 1\n },\n\n /*::[*/\n 0x083E\n /*::]*/\n : {\n /* n:\"BrtEndExtConn15\", */\n T: -1\n },\n\n /*::[*/\n 0x083F\n /*::]*/\n : {\n /* n:\"BrtBeginOledbPr15\", */\n T: 1\n },\n\n /*::[*/\n 0x0840\n /*::]*/\n : {\n /* n:\"BrtEndOledbPr15\", */\n T: -1\n },\n\n /*::[*/\n 0x0841\n /*::]*/\n : {\n /* n:\"BrtBeginDataFeedPr15\", */\n T: 1\n },\n\n /*::[*/\n 0x0842\n /*::]*/\n : {\n /* n:\"BrtEndDataFeedPr15\", */\n T: -1\n },\n\n /*::[*/\n 0x0843\n /*::]*/\n : {\n /* n:\"BrtTextPr15\" */\n },\n\n /*::[*/\n 0x0844\n /*::]*/\n : {\n /* n:\"BrtRangePr15\" */\n },\n\n /*::[*/\n 0x0845\n /*::]*/\n : {\n /* n:\"BrtDbCommand15\" */\n },\n\n /*::[*/\n 0x0846\n /*::]*/\n : {\n /* n:\"BrtBeginDbTables15\", */\n T: 1\n },\n\n /*::[*/\n 0x0847\n /*::]*/\n : {\n /* n:\"BrtEndDbTables15\", */\n T: -1\n },\n\n /*::[*/\n 0x0848\n /*::]*/\n : {\n /* n:\"BrtDbTable15\" */\n },\n\n /*::[*/\n 0x0849\n /*::]*/\n : {\n /* n:\"BrtBeginDataModel\", */\n T: 1\n },\n\n /*::[*/\n 0x084A\n /*::]*/\n : {\n /* n:\"BrtEndDataModel\", */\n T: -1\n },\n\n /*::[*/\n 0x084B\n /*::]*/\n : {\n /* n:\"BrtBeginModelTables\", */\n T: 1\n },\n\n /*::[*/\n 0x084C\n /*::]*/\n : {\n /* n:\"BrtEndModelTables\", */\n T: -1\n },\n\n /*::[*/\n 0x084D\n /*::]*/\n : {\n /* n:\"BrtModelTable\" */\n },\n\n /*::[*/\n 0x084E\n /*::]*/\n : {\n /* n:\"BrtBeginModelRelationships\", */\n T: 1\n },\n\n /*::[*/\n 0x084F\n /*::]*/\n : {\n /* n:\"BrtEndModelRelationships\", */\n T: -1\n },\n\n /*::[*/\n 0x0850\n /*::]*/\n : {\n /* n:\"BrtModelRelationship\" */\n },\n\n /*::[*/\n 0x0851\n /*::]*/\n : {\n /* n:\"BrtBeginECTxtWiz15\", */\n T: 1\n },\n\n /*::[*/\n 0x0852\n /*::]*/\n : {\n /* n:\"BrtEndECTxtWiz15\", */\n T: -1\n },\n\n /*::[*/\n 0x0853\n /*::]*/\n : {\n /* n:\"BrtBeginECTWFldInfoLst15\", */\n T: 1\n },\n\n /*::[*/\n 0x0854\n /*::]*/\n : {\n /* n:\"BrtEndECTWFldInfoLst15\", */\n T: -1\n },\n\n /*::[*/\n 0x0855\n /*::]*/\n : {\n /* n:\"BrtBeginECTWFldInfo15\", */\n T: 1\n },\n\n /*::[*/\n 0x0856\n /*::]*/\n : {\n /* n:\"BrtFieldListActiveItem\" */\n },\n\n /*::[*/\n 0x0857\n /*::]*/\n : {\n /* n:\"BrtPivotCacheIdVersion\" */\n },\n\n /*::[*/\n 0x0858\n /*::]*/\n : {\n /* n:\"BrtSXDI15\" */\n },\n\n /*::[*/\n 0x0859\n /*::]*/\n : {\n /* n:\"BrtBeginModelTimeGroupings\", */\n T: 1\n },\n\n /*::[*/\n 0x085A\n /*::]*/\n : {\n /* n:\"BrtEndModelTimeGroupings\", */\n T: -1\n },\n\n /*::[*/\n 0x085B\n /*::]*/\n : {\n /* n:\"BrtBeginModelTimeGrouping\", */\n T: 1\n },\n\n /*::[*/\n 0x085C\n /*::]*/\n : {\n /* n:\"BrtEndModelTimeGrouping\", */\n T: -1\n },\n\n /*::[*/\n 0x085D\n /*::]*/\n : {\n /* n:\"BrtModelTimeGroupingCalcCol\" */\n },\n\n /*::[*/\n 0x0C00\n /*::]*/\n : {\n /* n:\"BrtUid\" */\n },\n\n /*::[*/\n 0x0C01\n /*::]*/\n : {\n /* n:\"BrtRevisionPtr\" */\n },\n\n /*::[*/\n 0x1000\n /*::]*/\n : {\n /* n:\"BrtBeginDynamicArrayPr\", */\n T: 1\n },\n\n /*::[*/\n 0x1001\n /*::]*/\n : {\n /* n:\"BrtEndDynamicArrayPr\", */\n T: -1\n },\n\n /*::[*/\n 0x138A\n /*::]*/\n : {\n /* n:\"BrtBeginRichValueBlock\", */\n T: 1\n },\n\n /*::[*/\n 0x138B\n /*::]*/\n : {\n /* n:\"BrtEndRichValueBlock\", */\n T: -1\n },\n\n /*::[*/\n 0x13D9\n /*::]*/\n : {\n /* n:\"BrtBeginRichFilters\", */\n T: 1\n },\n\n /*::[*/\n 0x13DA\n /*::]*/\n : {\n /* n:\"BrtEndRichFilters\", */\n T: -1\n },\n\n /*::[*/\n 0x13DB\n /*::]*/\n : {\n /* n:\"BrtRichFilter\" */\n },\n\n /*::[*/\n 0x13DC\n /*::]*/\n : {\n /* n:\"BrtBeginRichFilterColumn\", */\n T: 1\n },\n\n /*::[*/\n 0x13DD\n /*::]*/\n : {\n /* n:\"BrtEndRichFilterColumn\", */\n T: -1\n },\n\n /*::[*/\n 0x13DE\n /*::]*/\n : {\n /* n:\"BrtBeginCustomRichFilters\", */\n T: 1\n },\n\n /*::[*/\n 0x13DF\n /*::]*/\n : {\n /* n:\"BrtEndCustomRichFilters\", */\n T: -1\n },\n\n /*::[*/\n 0x13E0\n /*::]*/\n : {\n /* n:\"BrtCustomRichFilter\" */\n },\n\n /*::[*/\n 0x13E1\n /*::]*/\n : {\n /* n:\"BrtTop10RichFilter\" */\n },\n\n /*::[*/\n 0x13E2\n /*::]*/\n : {\n /* n:\"BrtDynamicRichFilter\" */\n },\n\n /*::[*/\n 0x13E4\n /*::]*/\n : {\n /* n:\"BrtBeginRichSortCondition\", */\n T: 1\n },\n\n /*::[*/\n 0x13E5\n /*::]*/\n : {\n /* n:\"BrtEndRichSortCondition\", */\n T: -1\n },\n\n /*::[*/\n 0x13E6\n /*::]*/\n : {\n /* n:\"BrtRichFilterDateGroupItem\" */\n },\n\n /*::[*/\n 0x13E7\n /*::]*/\n : {\n /* n:\"BrtBeginCalcFeatures\", */\n T: 1\n },\n\n /*::[*/\n 0x13E8\n /*::]*/\n : {\n /* n:\"BrtEndCalcFeatures\", */\n T: -1\n },\n\n /*::[*/\n 0x13E9\n /*::]*/\n : {\n /* n:\"BrtCalcFeature\" */\n },\n\n /*::[*/\n 0x13EB\n /*::]*/\n : {\n /* n:\"BrtExternalLinksPr\" */\n },\n\n /*::[*/\n 0xFFFF\n /*::]*/\n : {\n n: \"\"\n }\n};\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\n\nvar XLSRecordEnum = {\n /* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\n /*::[*/\n 0x0006\n /*::]*/\n : {\n /* n:\"Formula\", */\n f: parse_Formula\n },\n\n /*::[*/\n 0x000a\n /*::]*/\n : {\n /* n:\"EOF\", */\n f: parsenoop2\n },\n\n /*::[*/\n 0x000c\n /*::]*/\n : {\n /* n:\"CalcCount\", */\n f: parseuint16\n },\n //\n\n /*::[*/\n 0x000d\n /*::]*/\n : {\n /* n:\"CalcMode\", */\n f: parseuint16\n },\n //\n\n /*::[*/\n 0x000e\n /*::]*/\n : {\n /* n:\"CalcPrecision\", */\n f: parsebool\n },\n //\n\n /*::[*/\n 0x000f\n /*::]*/\n : {\n /* n:\"CalcRefMode\", */\n f: parsebool\n },\n //\n\n /*::[*/\n 0x0010\n /*::]*/\n : {\n /* n:\"CalcDelta\", */\n f: parse_Xnum\n },\n //\n\n /*::[*/\n 0x0011\n /*::]*/\n : {\n /* n:\"CalcIter\", */\n f: parsebool\n },\n //\n\n /*::[*/\n 0x0012\n /*::]*/\n : {\n /* n:\"Protect\", */\n f: parsebool\n },\n\n /*::[*/\n 0x0013\n /*::]*/\n : {\n /* n:\"Password\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x0014\n /*::]*/\n : {\n /* n:\"Header\", */\n f: parse_XLHeaderFooter\n },\n\n /*::[*/\n 0x0015\n /*::]*/\n : {\n /* n:\"Footer\", */\n f: parse_XLHeaderFooter\n },\n\n /*::[*/\n 0x0017\n /*::]*/\n : {\n /* n:\"ExternSheet\", */\n f: parse_ExternSheet\n },\n\n /*::[*/\n 0x0018\n /*::]*/\n : {\n /* n:\"Lbl\", */\n f: parse_Lbl\n },\n\n /*::[*/\n 0x0019\n /*::]*/\n : {\n /* n:\"WinProtect\", */\n f: parsebool\n },\n\n /*::[*/\n 0x001a\n /*::]*/\n : {\n /* n:\"VerticalPageBreaks\", */\n },\n\n /*::[*/\n 0x001b\n /*::]*/\n : {\n /* n:\"HorizontalPageBreaks\", */\n },\n\n /*::[*/\n 0x001c\n /*::]*/\n : {\n /* n:\"Note\", */\n f: parse_Note\n },\n\n /*::[*/\n 0x001d\n /*::]*/\n : {\n /* n:\"Selection\", */\n },\n\n /*::[*/\n 0x0022\n /*::]*/\n : {\n /* n:\"Date1904\", */\n f: parsebool\n },\n\n /*::[*/\n 0x0023\n /*::]*/\n : {\n /* n:\"ExternName\", */\n f: parse_ExternName\n },\n\n /*::[*/\n 0x0026\n /*::]*/\n : {\n /* n:\"LeftMargin\", */\n f: parse_Xnum\n },\n // *\n\n /*::[*/\n 0x0027\n /*::]*/\n : {\n /* n:\"RightMargin\", */\n f: parse_Xnum\n },\n // *\n\n /*::[*/\n 0x0028\n /*::]*/\n : {\n /* n:\"TopMargin\", */\n f: parse_Xnum\n },\n // *\n\n /*::[*/\n 0x0029\n /*::]*/\n : {\n /* n:\"BottomMargin\", */\n f: parse_Xnum\n },\n // *\n\n /*::[*/\n 0x002a\n /*::]*/\n : {\n /* n:\"PrintRowCol\", */\n f: parsebool\n },\n\n /*::[*/\n 0x002b\n /*::]*/\n : {\n /* n:\"PrintGrid\", */\n f: parsebool\n },\n\n /*::[*/\n 0x002f\n /*::]*/\n : {\n /* n:\"FilePass\", */\n f: parse_FilePass\n },\n\n /*::[*/\n 0x0031\n /*::]*/\n : {\n /* n:\"Font\", */\n f: parse_Font\n },\n\n /*::[*/\n 0x0033\n /*::]*/\n : {\n /* n:\"PrintSize\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x003c\n /*::]*/\n : {\n /* n:\"Continue\", */\n },\n\n /*::[*/\n 0x003d\n /*::]*/\n : {\n /* n:\"Window1\", */\n f: parse_Window1\n },\n\n /*::[*/\n 0x0040\n /*::]*/\n : {\n /* n:\"Backup\", */\n f: parsebool\n },\n\n /*::[*/\n 0x0041\n /*::]*/\n : {\n /* n:\"Pane\", */\n f: parse_Pane\n },\n\n /*::[*/\n 0x0042\n /*::]*/\n : {\n /* n:\"CodePage\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x004d\n /*::]*/\n : {\n /* n:\"Pls\", */\n },\n\n /*::[*/\n 0x0050\n /*::]*/\n : {\n /* n:\"DCon\", */\n },\n\n /*::[*/\n 0x0051\n /*::]*/\n : {\n /* n:\"DConRef\", */\n },\n\n /*::[*/\n 0x0052\n /*::]*/\n : {\n /* n:\"DConName\", */\n },\n\n /*::[*/\n 0x0055\n /*::]*/\n : {\n /* n:\"DefColWidth\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x0059\n /*::]*/\n : {\n /* n:\"XCT\", */\n },\n\n /*::[*/\n 0x005a\n /*::]*/\n : {\n /* n:\"CRN\", */\n },\n\n /*::[*/\n 0x005b\n /*::]*/\n : {\n /* n:\"FileSharing\", */\n },\n\n /*::[*/\n 0x005c\n /*::]*/\n : {\n /* n:\"WriteAccess\", */\n f: parse_WriteAccess\n },\n\n /*::[*/\n 0x005d\n /*::]*/\n : {\n /* n:\"Obj\", */\n f: parse_Obj\n },\n\n /*::[*/\n 0x005e\n /*::]*/\n : {\n /* n:\"Uncalced\", */\n },\n\n /*::[*/\n 0x005f\n /*::]*/\n : {\n /* n:\"CalcSaveRecalc\", */\n f: parsebool\n },\n //\n\n /*::[*/\n 0x0060\n /*::]*/\n : {\n /* n:\"Template\", */\n },\n\n /*::[*/\n 0x0061\n /*::]*/\n : {\n /* n:\"Intl\", */\n },\n\n /*::[*/\n 0x0063\n /*::]*/\n : {\n /* n:\"ObjProtect\", */\n f: parsebool\n },\n\n /*::[*/\n 0x007d\n /*::]*/\n : {\n /* n:\"ColInfo\", */\n f: parse_ColInfo\n },\n\n /*::[*/\n 0x0080\n /*::]*/\n : {\n /* n:\"Guts\", */\n f: parse_Guts\n },\n\n /*::[*/\n 0x0081\n /*::]*/\n : {\n /* n:\"WsBool\", */\n f: parse_WsBool\n },\n\n /*::[*/\n 0x0082\n /*::]*/\n : {\n /* n:\"GridSet\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x0083\n /*::]*/\n : {\n /* n:\"HCenter\", */\n f: parsebool\n },\n\n /*::[*/\n 0x0084\n /*::]*/\n : {\n /* n:\"VCenter\", */\n f: parsebool\n },\n\n /*::[*/\n 0x0085\n /*::]*/\n : {\n /* n:\"BoundSheet8\", */\n f: parse_BoundSheet8\n },\n\n /*::[*/\n 0x0086\n /*::]*/\n : {\n /* n:\"WriteProtect\", */\n },\n\n /*::[*/\n 0x008c\n /*::]*/\n : {\n /* n:\"Country\", */\n f: parse_Country\n },\n\n /*::[*/\n 0x008d\n /*::]*/\n : {\n /* n:\"HideObj\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x0090\n /*::]*/\n : {\n /* n:\"Sort\", */\n },\n\n /*::[*/\n 0x0092\n /*::]*/\n : {\n /* n:\"Palette\", */\n f: parse_Palette\n },\n\n /*::[*/\n 0x0097\n /*::]*/\n : {\n /* n:\"Sync\", */\n },\n\n /*::[*/\n 0x0098\n /*::]*/\n : {\n /* n:\"LPr\", */\n },\n\n /*::[*/\n 0x0099\n /*::]*/\n : {\n /* n:\"DxGCol\", */\n },\n\n /*::[*/\n 0x009a\n /*::]*/\n : {\n /* n:\"FnGroupName\", */\n },\n\n /*::[*/\n 0x009b\n /*::]*/\n : {\n /* n:\"FilterMode\", */\n },\n\n /*::[*/\n 0x009c\n /*::]*/\n : {\n /* n:\"BuiltInFnGroupCount\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x009d\n /*::]*/\n : {\n /* n:\"AutoFilterInfo\", */\n },\n\n /*::[*/\n 0x009e\n /*::]*/\n : {\n /* n:\"AutoFilter\", */\n },\n\n /*::[*/\n 0x00a0\n /*::]*/\n : {\n /* n:\"Scl\", */\n f: parse_Scl\n },\n\n /*::[*/\n 0x00a1\n /*::]*/\n : {\n /* n:\"Setup\", */\n f: parse_Setup\n },\n\n /*::[*/\n 0x00ae\n /*::]*/\n : {\n /* n:\"ScenMan\", */\n },\n\n /*::[*/\n 0x00af\n /*::]*/\n : {\n /* n:\"SCENARIO\", */\n },\n\n /*::[*/\n 0x00b0\n /*::]*/\n : {\n /* n:\"SxView\", */\n },\n\n /*::[*/\n 0x00b1\n /*::]*/\n : {\n /* n:\"Sxvd\", */\n },\n\n /*::[*/\n 0x00b2\n /*::]*/\n : {\n /* n:\"SXVI\", */\n },\n\n /*::[*/\n 0x00b4\n /*::]*/\n : {\n /* n:\"SxIvd\", */\n },\n\n /*::[*/\n 0x00b5\n /*::]*/\n : {\n /* n:\"SXLI\", */\n },\n\n /*::[*/\n 0x00b6\n /*::]*/\n : {\n /* n:\"SXPI\", */\n },\n\n /*::[*/\n 0x00b8\n /*::]*/\n : {\n /* n:\"DocRoute\", */\n },\n\n /*::[*/\n 0x00b9\n /*::]*/\n : {\n /* n:\"RecipName\", */\n },\n\n /*::[*/\n 0x00bd\n /*::]*/\n : {\n /* n:\"MulRk\", */\n f: parse_MulRk\n },\n\n /*::[*/\n 0x00be\n /*::]*/\n : {\n /* n:\"MulBlank\", */\n f: parse_MulBlank\n },\n\n /*::[*/\n 0x00c1\n /*::]*/\n : {\n /* n:\"Mms\", */\n f: parsenoop2\n },\n\n /*::[*/\n 0x00c5\n /*::]*/\n : {\n /* n:\"SXDI\", */\n },\n\n /*::[*/\n 0x00c6\n /*::]*/\n : {\n /* n:\"SXDB\", */\n },\n\n /*::[*/\n 0x00c7\n /*::]*/\n : {\n /* n:\"SXFDB\", */\n },\n\n /*::[*/\n 0x00c8\n /*::]*/\n : {\n /* n:\"SXDBB\", */\n },\n\n /*::[*/\n 0x00c9\n /*::]*/\n : {\n /* n:\"SXNum\", */\n },\n\n /*::[*/\n 0x00ca\n /*::]*/\n : {\n /* n:\"SxBool\", */\n f: parsebool\n },\n\n /*::[*/\n 0x00cb\n /*::]*/\n : {\n /* n:\"SxErr\", */\n },\n\n /*::[*/\n 0x00cc\n /*::]*/\n : {\n /* n:\"SXInt\", */\n },\n\n /*::[*/\n 0x00cd\n /*::]*/\n : {\n /* n:\"SXString\", */\n },\n\n /*::[*/\n 0x00ce\n /*::]*/\n : {\n /* n:\"SXDtr\", */\n },\n\n /*::[*/\n 0x00cf\n /*::]*/\n : {\n /* n:\"SxNil\", */\n },\n\n /*::[*/\n 0x00d0\n /*::]*/\n : {\n /* n:\"SXTbl\", */\n },\n\n /*::[*/\n 0x00d1\n /*::]*/\n : {\n /* n:\"SXTBRGIITM\", */\n },\n\n /*::[*/\n 0x00d2\n /*::]*/\n : {\n /* n:\"SxTbpg\", */\n },\n\n /*::[*/\n 0x00d3\n /*::]*/\n : {\n /* n:\"ObProj\", */\n },\n\n /*::[*/\n 0x00d5\n /*::]*/\n : {\n /* n:\"SXStreamID\", */\n },\n\n /*::[*/\n 0x00d7\n /*::]*/\n : {\n /* n:\"DBCell\", */\n },\n\n /*::[*/\n 0x00d8\n /*::]*/\n : {\n /* n:\"SXRng\", */\n },\n\n /*::[*/\n 0x00d9\n /*::]*/\n : {\n /* n:\"SxIsxoper\", */\n },\n\n /*::[*/\n 0x00da\n /*::]*/\n : {\n /* n:\"BookBool\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x00dc\n /*::]*/\n : {\n /* n:\"DbOrParamQry\", */\n },\n\n /*::[*/\n 0x00dd\n /*::]*/\n : {\n /* n:\"ScenarioProtect\", */\n f: parsebool\n },\n\n /*::[*/\n 0x00de\n /*::]*/\n : {\n /* n:\"OleObjectSize\", */\n },\n\n /*::[*/\n 0x00e0\n /*::]*/\n : {\n /* n:\"XF\", */\n f: parse_XF\n },\n\n /*::[*/\n 0x00e1\n /*::]*/\n : {\n /* n:\"InterfaceHdr\", */\n f: parse_InterfaceHdr\n },\n\n /*::[*/\n 0x00e2\n /*::]*/\n : {\n /* n:\"InterfaceEnd\", */\n f: parsenoop2\n },\n\n /*::[*/\n 0x00e3\n /*::]*/\n : {\n /* n:\"SXVS\", */\n },\n\n /*::[*/\n 0x00e5\n /*::]*/\n : {\n /* n:\"MergeCells\", */\n f: parse_MergeCells\n },\n\n /*::[*/\n 0x00e9\n /*::]*/\n : {\n /* n:\"BkHim\", */\n },\n\n /*::[*/\n 0x00eb\n /*::]*/\n : {\n /* n:\"MsoDrawingGroup\", */\n },\n\n /*::[*/\n 0x00ec\n /*::]*/\n : {\n /* n:\"MsoDrawing\", */\n },\n\n /*::[*/\n 0x00ed\n /*::]*/\n : {\n /* n:\"MsoDrawingSelection\", */\n },\n\n /*::[*/\n 0x00ef\n /*::]*/\n : {\n /* n:\"PhoneticInfo\", */\n },\n\n /*::[*/\n 0x00f0\n /*::]*/\n : {\n /* n:\"SxRule\", */\n },\n\n /*::[*/\n 0x00f1\n /*::]*/\n : {\n /* n:\"SXEx\", */\n },\n\n /*::[*/\n 0x00f2\n /*::]*/\n : {\n /* n:\"SxFilt\", */\n },\n\n /*::[*/\n 0x00f4\n /*::]*/\n : {\n /* n:\"SxDXF\", */\n },\n\n /*::[*/\n 0x00f5\n /*::]*/\n : {\n /* n:\"SxItm\", */\n },\n\n /*::[*/\n 0x00f6\n /*::]*/\n : {\n /* n:\"SxName\", */\n },\n\n /*::[*/\n 0x00f7\n /*::]*/\n : {\n /* n:\"SxSelect\", */\n },\n\n /*::[*/\n 0x00f8\n /*::]*/\n : {\n /* n:\"SXPair\", */\n },\n\n /*::[*/\n 0x00f9\n /*::]*/\n : {\n /* n:\"SxFmla\", */\n },\n\n /*::[*/\n 0x00fb\n /*::]*/\n : {\n /* n:\"SxFormat\", */\n },\n\n /*::[*/\n 0x00fc\n /*::]*/\n : {\n /* n:\"SST\", */\n f: parse_SST\n },\n\n /*::[*/\n 0x00fd\n /*::]*/\n : {\n /* n:\"LabelSst\", */\n f: parse_LabelSst\n },\n\n /*::[*/\n 0x00ff\n /*::]*/\n : {\n /* n:\"ExtSST\", */\n f: parse_ExtSST\n },\n\n /*::[*/\n 0x0100\n /*::]*/\n : {\n /* n:\"SXVDEx\", */\n },\n\n /*::[*/\n 0x0103\n /*::]*/\n : {\n /* n:\"SXFormula\", */\n },\n\n /*::[*/\n 0x0122\n /*::]*/\n : {\n /* n:\"SXDBEx\", */\n },\n\n /*::[*/\n 0x0137\n /*::]*/\n : {\n /* n:\"RRDInsDel\", */\n },\n\n /*::[*/\n 0x0138\n /*::]*/\n : {\n /* n:\"RRDHead\", */\n },\n\n /*::[*/\n 0x013b\n /*::]*/\n : {\n /* n:\"RRDChgCell\", */\n },\n\n /*::[*/\n 0x013d\n /*::]*/\n : {\n /* n:\"RRTabId\", */\n f: parseuint16a\n },\n\n /*::[*/\n 0x013e\n /*::]*/\n : {\n /* n:\"RRDRenSheet\", */\n },\n\n /*::[*/\n 0x013f\n /*::]*/\n : {\n /* n:\"RRSort\", */\n },\n\n /*::[*/\n 0x0140\n /*::]*/\n : {\n /* n:\"RRDMove\", */\n },\n\n /*::[*/\n 0x014a\n /*::]*/\n : {\n /* n:\"RRFormat\", */\n },\n\n /*::[*/\n 0x014b\n /*::]*/\n : {\n /* n:\"RRAutoFmt\", */\n },\n\n /*::[*/\n 0x014d\n /*::]*/\n : {\n /* n:\"RRInsertSh\", */\n },\n\n /*::[*/\n 0x014e\n /*::]*/\n : {\n /* n:\"RRDMoveBegin\", */\n },\n\n /*::[*/\n 0x014f\n /*::]*/\n : {\n /* n:\"RRDMoveEnd\", */\n },\n\n /*::[*/\n 0x0150\n /*::]*/\n : {\n /* n:\"RRDInsDelBegin\", */\n },\n\n /*::[*/\n 0x0151\n /*::]*/\n : {\n /* n:\"RRDInsDelEnd\", */\n },\n\n /*::[*/\n 0x0152\n /*::]*/\n : {\n /* n:\"RRDConflict\", */\n },\n\n /*::[*/\n 0x0153\n /*::]*/\n : {\n /* n:\"RRDDefName\", */\n },\n\n /*::[*/\n 0x0154\n /*::]*/\n : {\n /* n:\"RRDRstEtxp\", */\n },\n\n /*::[*/\n 0x015f\n /*::]*/\n : {\n /* n:\"LRng\", */\n },\n\n /*::[*/\n 0x0160\n /*::]*/\n : {\n /* n:\"UsesELFs\", */\n f: parsebool\n },\n\n /*::[*/\n 0x0161\n /*::]*/\n : {\n /* n:\"DSF\", */\n f: parsenoop2\n },\n\n /*::[*/\n 0x0191\n /*::]*/\n : {\n /* n:\"CUsr\", */\n },\n\n /*::[*/\n 0x0192\n /*::]*/\n : {\n /* n:\"CbUsr\", */\n },\n\n /*::[*/\n 0x0193\n /*::]*/\n : {\n /* n:\"UsrInfo\", */\n },\n\n /*::[*/\n 0x0194\n /*::]*/\n : {\n /* n:\"UsrExcl\", */\n },\n\n /*::[*/\n 0x0195\n /*::]*/\n : {\n /* n:\"FileLock\", */\n },\n\n /*::[*/\n 0x0196\n /*::]*/\n : {\n /* n:\"RRDInfo\", */\n },\n\n /*::[*/\n 0x0197\n /*::]*/\n : {\n /* n:\"BCUsrs\", */\n },\n\n /*::[*/\n 0x0198\n /*::]*/\n : {\n /* n:\"UsrChk\", */\n },\n\n /*::[*/\n 0x01a9\n /*::]*/\n : {\n /* n:\"UserBView\", */\n },\n\n /*::[*/\n 0x01aa\n /*::]*/\n : {\n /* n:\"UserSViewBegin\", */\n },\n\n /*::[*/\n 0x01ab\n /*::]*/\n : {\n /* n:\"UserSViewEnd\", */\n },\n\n /*::[*/\n 0x01ac\n /*::]*/\n : {\n /* n:\"RRDUserView\", */\n },\n\n /*::[*/\n 0x01ad\n /*::]*/\n : {\n /* n:\"Qsi\", */\n },\n\n /*::[*/\n 0x01ae\n /*::]*/\n : {\n /* n:\"SupBook\", */\n f: parse_SupBook\n },\n\n /*::[*/\n 0x01af\n /*::]*/\n : {\n /* n:\"Prot4Rev\", */\n f: parsebool\n },\n\n /*::[*/\n 0x01b0\n /*::]*/\n : {\n /* n:\"CondFmt\", */\n },\n\n /*::[*/\n 0x01b1\n /*::]*/\n : {\n /* n:\"CF\", */\n },\n\n /*::[*/\n 0x01b2\n /*::]*/\n : {\n /* n:\"DVal\", */\n },\n\n /*::[*/\n 0x01b5\n /*::]*/\n : {\n /* n:\"DConBin\", */\n },\n\n /*::[*/\n 0x01b6\n /*::]*/\n : {\n /* n:\"TxO\", */\n f: parse_TxO\n },\n\n /*::[*/\n 0x01b7\n /*::]*/\n : {\n /* n:\"RefreshAll\", */\n f: parsebool\n },\n //\n\n /*::[*/\n 0x01b8\n /*::]*/\n : {\n /* n:\"HLink\", */\n f: parse_HLink\n },\n\n /*::[*/\n 0x01b9\n /*::]*/\n : {\n /* n:\"Lel\", */\n },\n\n /*::[*/\n 0x01ba\n /*::]*/\n : {\n /* n:\"CodeName\", */\n f: parse_XLUnicodeString\n },\n\n /*::[*/\n 0x01bb\n /*::]*/\n : {\n /* n:\"SXFDBType\", */\n },\n\n /*::[*/\n 0x01bc\n /*::]*/\n : {\n /* n:\"Prot4RevPass\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x01bd\n /*::]*/\n : {\n /* n:\"ObNoMacros\", */\n },\n\n /*::[*/\n 0x01be\n /*::]*/\n : {\n /* n:\"Dv\", */\n },\n\n /*::[*/\n 0x01c0\n /*::]*/\n : {\n /* n:\"Excel9File\", */\n f: parsenoop2\n },\n\n /*::[*/\n 0x01c1\n /*::]*/\n : {\n /* n:\"RecalcId\", */\n f: parse_RecalcId,\n r: 2\n },\n\n /*::[*/\n 0x01c2\n /*::]*/\n : {\n /* n:\"EntExU2\", */\n f: parsenoop2\n },\n\n /*::[*/\n 0x0200\n /*::]*/\n : {\n /* n:\"Dimensions\", */\n f: parse_Dimensions\n },\n\n /*::[*/\n 0x0201\n /*::]*/\n : {\n /* n:\"Blank\", */\n f: parse_Blank\n },\n\n /*::[*/\n 0x0203\n /*::]*/\n : {\n /* n:\"Number\", */\n f: parse_Number\n },\n\n /*::[*/\n 0x0204\n /*::]*/\n : {\n /* n:\"Label\", */\n f: parse_Label\n },\n\n /*::[*/\n 0x0205\n /*::]*/\n : {\n /* n:\"BoolErr\", */\n f: parse_BoolErr\n },\n\n /*::[*/\n 0x0207\n /*::]*/\n : {\n /* n:\"String\", */\n f: parse_String\n },\n\n /*::[*/\n 0x0208\n /*::]*/\n : {\n /* n:\"Row\", */\n f: parse_Row\n },\n\n /*::[*/\n 0x020b\n /*::]*/\n : {\n /* n:\"Index\", */\n },\n\n /*::[*/\n 0x0221\n /*::]*/\n : {\n /* n:\"Array\", */\n f: parse_Array\n },\n\n /*::[*/\n 0x0225\n /*::]*/\n : {\n /* n:\"DefaultRowHeight\", */\n f: parse_DefaultRowHeight\n },\n\n /*::[*/\n 0x0236\n /*::]*/\n : {\n /* n:\"Table\", */\n },\n\n /*::[*/\n 0x023e\n /*::]*/\n : {\n /* n:\"Window2\", */\n f: parse_Window2\n },\n\n /*::[*/\n 0x027e\n /*::]*/\n : {\n /* n:\"RK\", */\n f: parse_RK\n },\n\n /*::[*/\n 0x0293\n /*::]*/\n : {\n /* n:\"Style\", */\n },\n\n /*::[*/\n 0x0418\n /*::]*/\n : {\n /* n:\"BigName\", */\n },\n\n /*::[*/\n 0x041e\n /*::]*/\n : {\n /* n:\"Format\", */\n f: parse_Format\n },\n\n /*::[*/\n 0x043c\n /*::]*/\n : {\n /* n:\"ContinueBigName\", */\n },\n\n /*::[*/\n 0x04bc\n /*::]*/\n : {\n /* n:\"ShrFmla\", */\n f: parse_ShrFmla\n },\n\n /*::[*/\n 0x0800\n /*::]*/\n : {\n /* n:\"HLinkTooltip\", */\n f: parse_HLinkTooltip\n },\n\n /*::[*/\n 0x0801\n /*::]*/\n : {\n /* n:\"WebPub\", */\n },\n\n /*::[*/\n 0x0802\n /*::]*/\n : {\n /* n:\"QsiSXTag\", */\n },\n\n /*::[*/\n 0x0803\n /*::]*/\n : {\n /* n:\"DBQueryExt\", */\n },\n\n /*::[*/\n 0x0804\n /*::]*/\n : {\n /* n:\"ExtString\", */\n },\n\n /*::[*/\n 0x0805\n /*::]*/\n : {\n /* n:\"TxtQry\", */\n },\n\n /*::[*/\n 0x0806\n /*::]*/\n : {\n /* n:\"Qsir\", */\n },\n\n /*::[*/\n 0x0807\n /*::]*/\n : {\n /* n:\"Qsif\", */\n },\n\n /*::[*/\n 0x0808\n /*::]*/\n : {\n /* n:\"RRDTQSIF\", */\n },\n\n /*::[*/\n 0x0809\n /*::]*/\n : {\n /* n:\"BOF\", */\n f: parse_BOF\n },\n\n /*::[*/\n 0x080a\n /*::]*/\n : {\n /* n:\"OleDbConn\", */\n },\n\n /*::[*/\n 0x080b\n /*::]*/\n : {\n /* n:\"WOpt\", */\n },\n\n /*::[*/\n 0x080c\n /*::]*/\n : {\n /* n:\"SXViewEx\", */\n },\n\n /*::[*/\n 0x080d\n /*::]*/\n : {\n /* n:\"SXTH\", */\n },\n\n /*::[*/\n 0x080e\n /*::]*/\n : {\n /* n:\"SXPIEx\", */\n },\n\n /*::[*/\n 0x080f\n /*::]*/\n : {\n /* n:\"SXVDTEx\", */\n },\n\n /*::[*/\n 0x0810\n /*::]*/\n : {\n /* n:\"SXViewEx9\", */\n },\n\n /*::[*/\n 0x0812\n /*::]*/\n : {\n /* n:\"ContinueFrt\", */\n },\n\n /*::[*/\n 0x0813\n /*::]*/\n : {\n /* n:\"RealTimeData\", */\n },\n\n /*::[*/\n 0x0850\n /*::]*/\n : {\n /* n:\"ChartFrtInfo\", */\n },\n\n /*::[*/\n 0x0851\n /*::]*/\n : {\n /* n:\"FrtWrapper\", */\n },\n\n /*::[*/\n 0x0852\n /*::]*/\n : {\n /* n:\"StartBlock\", */\n },\n\n /*::[*/\n 0x0853\n /*::]*/\n : {\n /* n:\"EndBlock\", */\n },\n\n /*::[*/\n 0x0854\n /*::]*/\n : {\n /* n:\"StartObject\", */\n },\n\n /*::[*/\n 0x0855\n /*::]*/\n : {\n /* n:\"EndObject\", */\n },\n\n /*::[*/\n 0x0856\n /*::]*/\n : {\n /* n:\"CatLab\", */\n },\n\n /*::[*/\n 0x0857\n /*::]*/\n : {\n /* n:\"YMult\", */\n },\n\n /*::[*/\n 0x0858\n /*::]*/\n : {\n /* n:\"SXViewLink\", */\n },\n\n /*::[*/\n 0x0859\n /*::]*/\n : {\n /* n:\"PivotChartBits\", */\n },\n\n /*::[*/\n 0x085a\n /*::]*/\n : {\n /* n:\"FrtFontList\", */\n },\n\n /*::[*/\n 0x0862\n /*::]*/\n : {\n /* n:\"SheetExt\", */\n },\n\n /*::[*/\n 0x0863\n /*::]*/\n : {\n /* n:\"BookExt\", */\n r: 12\n },\n\n /*::[*/\n 0x0864\n /*::]*/\n : {\n /* n:\"SXAddl\", */\n },\n\n /*::[*/\n 0x0865\n /*::]*/\n : {\n /* n:\"CrErr\", */\n },\n\n /*::[*/\n 0x0866\n /*::]*/\n : {\n /* n:\"HFPicture\", */\n },\n\n /*::[*/\n 0x0867\n /*::]*/\n : {\n /* n:\"FeatHdr\", */\n f: parsenoop2\n },\n\n /*::[*/\n 0x0868\n /*::]*/\n : {\n /* n:\"Feat\", */\n },\n\n /*::[*/\n 0x086a\n /*::]*/\n : {\n /* n:\"DataLabExt\", */\n },\n\n /*::[*/\n 0x086b\n /*::]*/\n : {\n /* n:\"DataLabExtContents\", */\n },\n\n /*::[*/\n 0x086c\n /*::]*/\n : {\n /* n:\"CellWatch\", */\n },\n\n /*::[*/\n 0x0871\n /*::]*/\n : {\n /* n:\"FeatHdr11\", */\n },\n\n /*::[*/\n 0x0872\n /*::]*/\n : {\n /* n:\"Feature11\", */\n },\n\n /*::[*/\n 0x0874\n /*::]*/\n : {\n /* n:\"DropDownObjIds\", */\n },\n\n /*::[*/\n 0x0875\n /*::]*/\n : {\n /* n:\"ContinueFrt11\", */\n },\n\n /*::[*/\n 0x0876\n /*::]*/\n : {\n /* n:\"DConn\", */\n },\n\n /*::[*/\n 0x0877\n /*::]*/\n : {\n /* n:\"List12\", */\n },\n\n /*::[*/\n 0x0878\n /*::]*/\n : {\n /* n:\"Feature12\", */\n },\n\n /*::[*/\n 0x0879\n /*::]*/\n : {\n /* n:\"CondFmt12\", */\n },\n\n /*::[*/\n 0x087a\n /*::]*/\n : {\n /* n:\"CF12\", */\n },\n\n /*::[*/\n 0x087b\n /*::]*/\n : {\n /* n:\"CFEx\", */\n },\n\n /*::[*/\n 0x087c\n /*::]*/\n : {\n /* n:\"XFCRC\", */\n f: parse_XFCRC,\n r: 12\n },\n\n /*::[*/\n 0x087d\n /*::]*/\n : {\n /* n:\"XFExt\", */\n f: parse_XFExt,\n r: 12\n },\n\n /*::[*/\n 0x087e\n /*::]*/\n : {\n /* n:\"AutoFilter12\", */\n },\n\n /*::[*/\n 0x087f\n /*::]*/\n : {\n /* n:\"ContinueFrt12\", */\n },\n\n /*::[*/\n 0x0884\n /*::]*/\n : {\n /* n:\"MDTInfo\", */\n },\n\n /*::[*/\n 0x0885\n /*::]*/\n : {\n /* n:\"MDXStr\", */\n },\n\n /*::[*/\n 0x0886\n /*::]*/\n : {\n /* n:\"MDXTuple\", */\n },\n\n /*::[*/\n 0x0887\n /*::]*/\n : {\n /* n:\"MDXSet\", */\n },\n\n /*::[*/\n 0x0888\n /*::]*/\n : {\n /* n:\"MDXProp\", */\n },\n\n /*::[*/\n 0x0889\n /*::]*/\n : {\n /* n:\"MDXKPI\", */\n },\n\n /*::[*/\n 0x088a\n /*::]*/\n : {\n /* n:\"MDB\", */\n },\n\n /*::[*/\n 0x088b\n /*::]*/\n : {\n /* n:\"PLV\", */\n },\n\n /*::[*/\n 0x088c\n /*::]*/\n : {\n /* n:\"Compat12\", */\n f: parsebool,\n r: 12\n },\n\n /*::[*/\n 0x088d\n /*::]*/\n : {\n /* n:\"DXF\", */\n },\n\n /*::[*/\n 0x088e\n /*::]*/\n : {\n /* n:\"TableStyles\", */\n r: 12\n },\n\n /*::[*/\n 0x088f\n /*::]*/\n : {\n /* n:\"TableStyle\", */\n },\n\n /*::[*/\n 0x0890\n /*::]*/\n : {\n /* n:\"TableStyleElement\", */\n },\n\n /*::[*/\n 0x0892\n /*::]*/\n : {\n /* n:\"StyleExt\", */\n },\n\n /*::[*/\n 0x0893\n /*::]*/\n : {\n /* n:\"NamePublish\", */\n },\n\n /*::[*/\n 0x0894\n /*::]*/\n : {\n /* n:\"NameCmt\", */\n f: parse_NameCmt,\n r: 12\n },\n\n /*::[*/\n 0x0895\n /*::]*/\n : {\n /* n:\"SortData\", */\n },\n\n /*::[*/\n 0x0896\n /*::]*/\n : {\n /* n:\"Theme\", */\n f: parse_Theme,\n r: 12\n },\n\n /*::[*/\n 0x0897\n /*::]*/\n : {\n /* n:\"GUIDTypeLib\", */\n },\n\n /*::[*/\n 0x0898\n /*::]*/\n : {\n /* n:\"FnGrp12\", */\n },\n\n /*::[*/\n 0x0899\n /*::]*/\n : {\n /* n:\"NameFnGrp12\", */\n },\n\n /*::[*/\n 0x089a\n /*::]*/\n : {\n /* n:\"MTRSettings\", */\n f: parse_MTRSettings,\n r: 12\n },\n\n /*::[*/\n 0x089b\n /*::]*/\n : {\n /* n:\"CompressPictures\", */\n f: parsenoop2\n },\n\n /*::[*/\n 0x089c\n /*::]*/\n : {\n /* n:\"HeaderFooter\", */\n },\n\n /*::[*/\n 0x089d\n /*::]*/\n : {\n /* n:\"CrtLayout12\", */\n },\n\n /*::[*/\n 0x089e\n /*::]*/\n : {\n /* n:\"CrtMlFrt\", */\n },\n\n /*::[*/\n 0x089f\n /*::]*/\n : {\n /* n:\"CrtMlFrtContinue\", */\n },\n\n /*::[*/\n 0x08a3\n /*::]*/\n : {\n /* n:\"ForceFullCalculation\", */\n f: parse_ForceFullCalculation\n },\n\n /*::[*/\n 0x08a4\n /*::]*/\n : {\n /* n:\"ShapePropsStream\", */\n },\n\n /*::[*/\n 0x08a5\n /*::]*/\n : {\n /* n:\"TextPropsStream\", */\n },\n\n /*::[*/\n 0x08a6\n /*::]*/\n : {\n /* n:\"RichTextStream\", */\n },\n\n /*::[*/\n 0x08a7\n /*::]*/\n : {\n /* n:\"CrtLayout12A\", */\n },\n\n /*::[*/\n 0x1001\n /*::]*/\n : {\n /* n:\"Units\", */\n },\n\n /*::[*/\n 0x1002\n /*::]*/\n : {\n /* n:\"Chart\", */\n },\n\n /*::[*/\n 0x1003\n /*::]*/\n : {\n /* n:\"Series\", */\n },\n\n /*::[*/\n 0x1006\n /*::]*/\n : {\n /* n:\"DataFormat\", */\n },\n\n /*::[*/\n 0x1007\n /*::]*/\n : {\n /* n:\"LineFormat\", */\n },\n\n /*::[*/\n 0x1009\n /*::]*/\n : {\n /* n:\"MarkerFormat\", */\n },\n\n /*::[*/\n 0x100a\n /*::]*/\n : {\n /* n:\"AreaFormat\", */\n },\n\n /*::[*/\n 0x100b\n /*::]*/\n : {\n /* n:\"PieFormat\", */\n },\n\n /*::[*/\n 0x100c\n /*::]*/\n : {\n /* n:\"AttachedLabel\", */\n },\n\n /*::[*/\n 0x100d\n /*::]*/\n : {\n /* n:\"SeriesText\", */\n },\n\n /*::[*/\n 0x1014\n /*::]*/\n : {\n /* n:\"ChartFormat\", */\n },\n\n /*::[*/\n 0x1015\n /*::]*/\n : {\n /* n:\"Legend\", */\n },\n\n /*::[*/\n 0x1016\n /*::]*/\n : {\n /* n:\"SeriesList\", */\n },\n\n /*::[*/\n 0x1017\n /*::]*/\n : {\n /* n:\"Bar\", */\n },\n\n /*::[*/\n 0x1018\n /*::]*/\n : {\n /* n:\"Line\", */\n },\n\n /*::[*/\n 0x1019\n /*::]*/\n : {\n /* n:\"Pie\", */\n },\n\n /*::[*/\n 0x101a\n /*::]*/\n : {\n /* n:\"Area\", */\n },\n\n /*::[*/\n 0x101b\n /*::]*/\n : {\n /* n:\"Scatter\", */\n },\n\n /*::[*/\n 0x101c\n /*::]*/\n : {\n /* n:\"CrtLine\", */\n },\n\n /*::[*/\n 0x101d\n /*::]*/\n : {\n /* n:\"Axis\", */\n },\n\n /*::[*/\n 0x101e\n /*::]*/\n : {\n /* n:\"Tick\", */\n },\n\n /*::[*/\n 0x101f\n /*::]*/\n : {\n /* n:\"ValueRange\", */\n },\n\n /*::[*/\n 0x1020\n /*::]*/\n : {\n /* n:\"CatSerRange\", */\n },\n\n /*::[*/\n 0x1021\n /*::]*/\n : {\n /* n:\"AxisLine\", */\n },\n\n /*::[*/\n 0x1022\n /*::]*/\n : {\n /* n:\"CrtLink\", */\n },\n\n /*::[*/\n 0x1024\n /*::]*/\n : {\n /* n:\"DefaultText\", */\n },\n\n /*::[*/\n 0x1025\n /*::]*/\n : {\n /* n:\"Text\", */\n },\n\n /*::[*/\n 0x1026\n /*::]*/\n : {\n /* n:\"FontX\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x1027\n /*::]*/\n : {\n /* n:\"ObjectLink\", */\n },\n\n /*::[*/\n 0x1032\n /*::]*/\n : {\n /* n:\"Frame\", */\n },\n\n /*::[*/\n 0x1033\n /*::]*/\n : {\n /* n:\"Begin\", */\n },\n\n /*::[*/\n 0x1034\n /*::]*/\n : {\n /* n:\"End\", */\n },\n\n /*::[*/\n 0x1035\n /*::]*/\n : {\n /* n:\"PlotArea\", */\n },\n\n /*::[*/\n 0x103a\n /*::]*/\n : {\n /* n:\"Chart3d\", */\n },\n\n /*::[*/\n 0x103c\n /*::]*/\n : {\n /* n:\"PicF\", */\n },\n\n /*::[*/\n 0x103d\n /*::]*/\n : {\n /* n:\"DropBar\", */\n },\n\n /*::[*/\n 0x103e\n /*::]*/\n : {\n /* n:\"Radar\", */\n },\n\n /*::[*/\n 0x103f\n /*::]*/\n : {\n /* n:\"Surf\", */\n },\n\n /*::[*/\n 0x1040\n /*::]*/\n : {\n /* n:\"RadarArea\", */\n },\n\n /*::[*/\n 0x1041\n /*::]*/\n : {\n /* n:\"AxisParent\", */\n },\n\n /*::[*/\n 0x1043\n /*::]*/\n : {\n /* n:\"LegendException\", */\n },\n\n /*::[*/\n 0x1044\n /*::]*/\n : {\n /* n:\"ShtProps\", */\n f: parse_ShtProps\n },\n\n /*::[*/\n 0x1045\n /*::]*/\n : {\n /* n:\"SerToCrt\", */\n },\n\n /*::[*/\n 0x1046\n /*::]*/\n : {\n /* n:\"AxesUsed\", */\n },\n\n /*::[*/\n 0x1048\n /*::]*/\n : {\n /* n:\"SBaseRef\", */\n },\n\n /*::[*/\n 0x104a\n /*::]*/\n : {\n /* n:\"SerParent\", */\n },\n\n /*::[*/\n 0x104b\n /*::]*/\n : {\n /* n:\"SerAuxTrend\", */\n },\n\n /*::[*/\n 0x104e\n /*::]*/\n : {\n /* n:\"IFmtRecord\", */\n },\n\n /*::[*/\n 0x104f\n /*::]*/\n : {\n /* n:\"Pos\", */\n },\n\n /*::[*/\n 0x1050\n /*::]*/\n : {\n /* n:\"AlRuns\", */\n },\n\n /*::[*/\n 0x1051\n /*::]*/\n : {\n /* n:\"BRAI\", */\n },\n\n /*::[*/\n 0x105b\n /*::]*/\n : {\n /* n:\"SerAuxErrBar\", */\n },\n\n /*::[*/\n 0x105c\n /*::]*/\n : {\n /* n:\"ClrtClient\", */\n f: parse_ClrtClient\n },\n\n /*::[*/\n 0x105d\n /*::]*/\n : {\n /* n:\"SerFmt\", */\n },\n\n /*::[*/\n 0x105f\n /*::]*/\n : {\n /* n:\"Chart3DBarShape\", */\n },\n\n /*::[*/\n 0x1060\n /*::]*/\n : {\n /* n:\"Fbi\", */\n },\n\n /*::[*/\n 0x1061\n /*::]*/\n : {\n /* n:\"BopPop\", */\n },\n\n /*::[*/\n 0x1062\n /*::]*/\n : {\n /* n:\"AxcExt\", */\n },\n\n /*::[*/\n 0x1063\n /*::]*/\n : {\n /* n:\"Dat\", */\n },\n\n /*::[*/\n 0x1064\n /*::]*/\n : {\n /* n:\"PlotGrowth\", */\n },\n\n /*::[*/\n 0x1065\n /*::]*/\n : {\n /* n:\"SIIndex\", */\n },\n\n /*::[*/\n 0x1066\n /*::]*/\n : {\n /* n:\"GelFrame\", */\n },\n\n /*::[*/\n 0x1067\n /*::]*/\n : {\n /* n:\"BopPopCustom\", */\n },\n\n /*::[*/\n 0x1068\n /*::]*/\n : {\n /* n:\"Fbi2\", */\n },\n\n /*::[*/\n 0x0000\n /*::]*/\n : {\n /* n:\"Dimensions\", */\n f: parse_Dimensions\n },\n\n /*::[*/\n 0x0001\n /*::]*/\n : {\n /* n:\"BIFF2BLANK\", */\n },\n\n /*::[*/\n 0x0002\n /*::]*/\n : {\n /* n:\"BIFF2INT\", */\n f: parse_BIFF2INT\n },\n\n /*::[*/\n 0x0003\n /*::]*/\n : {\n /* n:\"BIFF2NUM\", */\n f: parse_BIFF2NUM\n },\n\n /*::[*/\n 0x0004\n /*::]*/\n : {\n /* n:\"BIFF2STR\", */\n f: parse_BIFF2STR\n },\n\n /*::[*/\n 0x0005\n /*::]*/\n : {\n /* n:\"BoolErr\", */\n f: parse_BoolErr\n },\n\n /*::[*/\n 0x0007\n /*::]*/\n : {\n /* n:\"String\", */\n f: parse_BIFF2STRING\n },\n\n /*::[*/\n 0x0008\n /*::]*/\n : {\n /* n:\"BIFF2ROW\", */\n },\n\n /*::[*/\n 0x0009\n /*::]*/\n : {\n /* n:\"BOF\", */\n f: parse_BOF\n },\n\n /*::[*/\n 0x000b\n /*::]*/\n : {\n /* n:\"Index\", */\n },\n\n /*::[*/\n 0x0016\n /*::]*/\n : {\n /* n:\"ExternCount\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x001e\n /*::]*/\n : {\n /* n:\"BIFF2FORMAT\", */\n f: parse_BIFF2Format\n },\n\n /*::[*/\n 0x001f\n /*::]*/\n : {\n /* n:\"BIFF2FMTCNT\", */\n },\n\n /* 16-bit cnt of BIFF2FORMAT records */\n\n /*::[*/\n 0x0020\n /*::]*/\n : {\n /* n:\"BIFF2COLINFO\", */\n },\n\n /*::[*/\n 0x0021\n /*::]*/\n : {\n /* n:\"Array\", */\n f: parse_Array\n },\n\n /*::[*/\n 0x0024\n /*::]*/\n : {\n /* n:\"COLWIDTH\", */\n },\n\n /*::[*/\n 0x0025\n /*::]*/\n : {\n /* n:\"DefaultRowHeight\", */\n f: parse_DefaultRowHeight\n },\n // 0x2c ??\n // 0x2d ??\n // 0x2e ??\n // 0x30 FONTCOUNT: number of fonts\n\n /*::[*/\n 0x0032\n /*::]*/\n : {\n /* n:\"BIFF2FONTXTRA\", */\n f: parse_BIFF2FONTXTRA\n },\n // 0x35: INFOOPTS\n // 0x36: TABLE (BIFF2 only)\n // 0x37: TABLE2 (BIFF2 only)\n // 0x38: WNDESK\n // 0x39 ??\n // 0x3a: BEGINPREF\n // 0x3b: ENDPREF\n\n /*::[*/\n 0x003e\n /*::]*/\n : {\n /* n:\"BIFF2WINDOW2\", */\n },\n // 0x3f ??\n // 0x46: SHOWSCROLL\n // 0x47: SHOWFORMULA\n // 0x48: STATUSBAR\n // 0x49: SHORTMENUS\n // 0x4A:\n // 0x4B:\n // 0x4C:\n // 0x4E:\n // 0x4F:\n // 0x58: TOOLBAR (BIFF3)\n\n /* - - - */\n\n /*::[*/\n 0x0034\n /*::]*/\n : {\n /* n:\"DDEObjName\", */\n },\n\n /*::[*/\n 0x0043\n /*::]*/\n : {\n /* n:\"BIFF2XF\", */\n },\n\n /*::[*/\n 0x0044\n /*::]*/\n : {\n /* n:\"BIFF2XFINDEX\", */\n f: parseuint16\n },\n\n /*::[*/\n 0x0045\n /*::]*/\n : {\n /* n:\"BIFF2FONTCLR\", */\n },\n\n /*::[*/\n 0x0056\n /*::]*/\n : {\n /* n:\"BIFF4FMTCNT\", */\n },\n\n /* 16-bit cnt, similar to BIFF2 */\n\n /*::[*/\n 0x007e\n /*::]*/\n : {\n /* n:\"RK\", */\n },\n\n /* Not necessarily same as 0x027e */\n\n /*::[*/\n 0x007f\n /*::]*/\n : {\n /* n:\"ImData\", */\n f: parse_ImData\n },\n\n /*::[*/\n 0x0087\n /*::]*/\n : {\n /* n:\"Addin\", */\n },\n\n /*::[*/\n 0x0088\n /*::]*/\n : {\n /* n:\"Edg\", */\n },\n\n /*::[*/\n 0x0089\n /*::]*/\n : {\n /* n:\"Pub\", */\n },\n // 0x8A\n // 0x8B LH: alternate menu key flag (BIFF3/4)\n // 0x8E\n // 0x8F\n\n /*::[*/\n 0x0091\n /*::]*/\n : {\n /* n:\"Sub\", */\n },\n // 0x93 STYLE\n\n /*::[*/\n 0x0094\n /*::]*/\n : {\n /* n:\"LHRecord\", */\n },\n\n /*::[*/\n 0x0095\n /*::]*/\n : {\n /* n:\"LHNGraph\", */\n },\n\n /*::[*/\n 0x0096\n /*::]*/\n : {\n /* n:\"Sound\", */\n },\n // 0xA2 FNPROTO: function prototypes (BIFF4)\n // 0xA3\n // 0xA8\n\n /*::[*/\n 0x00a9\n /*::]*/\n : {\n /* n:\"CoordList\", */\n },\n\n /*::[*/\n 0x00ab\n /*::]*/\n : {\n /* n:\"GCW\", */\n },\n\n /*::[*/\n 0x00bc\n /*::]*/\n : {\n /* n:\"ShrFmla\", */\n },\n\n /* Not necessarily same as 0x04bc */\n\n /*::[*/\n 0x00bf\n /*::]*/\n : {\n /* n:\"ToolbarHdr\", */\n },\n\n /*::[*/\n 0x00c0\n /*::]*/\n : {\n /* n:\"ToolbarEnd\", */\n },\n\n /*::[*/\n 0x00c2\n /*::]*/\n : {\n /* n:\"AddMenu\", */\n },\n\n /*::[*/\n 0x00c3\n /*::]*/\n : {\n /* n:\"DelMenu\", */\n },\n\n /*::[*/\n 0x00d6\n /*::]*/\n : {\n /* n:\"RString\", */\n f: parse_RString\n },\n\n /*::[*/\n 0x00df\n /*::]*/\n : {\n /* n:\"UDDesc\", */\n },\n\n /*::[*/\n 0x00ea\n /*::]*/\n : {\n /* n:\"TabIdConf\", */\n },\n\n /*::[*/\n 0x0162\n /*::]*/\n : {\n /* n:\"XL5Modify\", */\n },\n\n /*::[*/\n 0x01a5\n /*::]*/\n : {\n /* n:\"FileSharing2\", */\n },\n\n /*::[*/\n 0x0206\n /*::]*/\n : {\n /* n:\"Formula\", */\n f: parse_Formula\n },\n\n /*::[*/\n 0x0209\n /*::]*/\n : {\n /* n:\"BOF\", */\n f: parse_BOF\n },\n\n /*::[*/\n 0x0218\n /*::]*/\n : {\n /* n:\"Lbl\", */\n f: parse_Lbl\n },\n\n /*::[*/\n 0x0223\n /*::]*/\n : {\n /* n:\"ExternName\", */\n f: parse_ExternName\n },\n\n /*::[*/\n 0x0231\n /*::]*/\n : {\n /* n:\"Font\", */\n },\n\n /*::[*/\n 0x0243\n /*::]*/\n : {\n /* n:\"BIFF3XF\", */\n },\n\n /*::[*/\n 0x0406\n /*::]*/\n : {\n /* n:\"Formula\", */\n f: parse_Formula\n },\n\n /*::[*/\n 0x0409\n /*::]*/\n : {\n /* n:\"BOF\", */\n f: parse_BOF\n },\n\n /*::[*/\n 0x0443\n /*::]*/\n : {\n /* n:\"BIFF4XF\", */\n },\n\n /*::[*/\n 0x086d\n /*::]*/\n : {\n /* n:\"FeatInfo\", */\n },\n\n /*::[*/\n 0x0873\n /*::]*/\n : {\n /* n:\"FeatInfo11\", */\n },\n\n /*::[*/\n 0x0881\n /*::]*/\n : {\n /* n:\"SXAddl12\", */\n },\n\n /*::[*/\n 0x08c0\n /*::]*/\n : {\n /* n:\"AutoWebPub\", */\n },\n\n /*::[*/\n 0x08c1\n /*::]*/\n : {\n /* n:\"ListObj\", */\n },\n\n /*::[*/\n 0x08c2\n /*::]*/\n : {\n /* n:\"ListField\", */\n },\n\n /*::[*/\n 0x08c3\n /*::]*/\n : {\n /* n:\"ListDV\", */\n },\n\n /*::[*/\n 0x08c4\n /*::]*/\n : {\n /* n:\"ListCondFmt\", */\n },\n\n /*::[*/\n 0x08c5\n /*::]*/\n : {\n /* n:\"ListCF\", */\n },\n\n /*::[*/\n 0x08c6\n /*::]*/\n : {\n /* n:\"FMQry\", */\n },\n\n /*::[*/\n 0x08c7\n /*::]*/\n : {\n /* n:\"FMSQry\", */\n },\n\n /*::[*/\n 0x08c8\n /*::]*/\n : {\n /* n:\"PLV\", */\n },\n\n /*::[*/\n 0x08c9\n /*::]*/\n : {\n /* n:\"LnExt\", */\n },\n\n /*::[*/\n 0x08ca\n /*::]*/\n : {\n /* n:\"MkrExt\", */\n },\n\n /*::[*/\n 0x08cb\n /*::]*/\n : {\n /* n:\"CrtCoopt\", */\n },\n\n /*::[*/\n 0x08d6\n /*::]*/\n : {\n /* n:\"FRTArchId$\", */\n r: 12\n },\n\n /*::[*/\n 0x7262\n /*::]*/\n : {}\n};\n\nfunction write_biff_rec(ba\n/*:BufArray*/\n, type\n/*:number*/\n, payload, length\n/*:?number*/\n)\n/*:void*/\n{\n var t\n /*:number*/\n = type;\n if (isNaN(t)) return;\n var len = length || (payload || []).length || 0;\n var o = ba.next(4);\n o.write_shift(2, t);\n o.write_shift(2, len);\n if (\n /*:: len != null &&*/\n len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba\n/*:BufArray*/\n, type\n/*:number*/\n, payload, length\n/*:?number*/\n)\n/*:void*/\n{\n var len = length || (payload || []).length || 0;\n if (len <= 8224) return write_biff_rec(ba, type, payload, len);\n var t = type;\n if (isNaN(t)) return;\n var parts = payload.parts || [],\n sidx = 0;\n var i = 0,\n w = 0;\n\n while (w + (parts[sidx] || 8224) <= 8224) {\n w += parts[sidx] || 8224;\n sidx++;\n }\n\n var o = ba.next(4);\n o.write_shift(2, t);\n o.write_shift(2, w);\n ba.push(payload.slice(i, i + w));\n i += w;\n\n while (i < len) {\n o = ba.next(4);\n o.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\n w = 0;\n\n while (w + (parts[sidx] || 8224) <= 8224) {\n w += parts[sidx] || 8224;\n sidx++;\n }\n\n o.write_shift(2, w);\n ba.push(payload.slice(i, i + w));\n i += w;\n }\n}\n\nfunction write_BIFF2Cell(out, r\n/*:number*/\n, c\n/*:number*/\n) {\n if (!out) out = new_buf(7);\n out.write_shift(2, r);\n out.write_shift(2, c);\n out.write_shift(2, 0);\n out.write_shift(1, 0);\n return out;\n}\n\nfunction write_BIFF2BERR(r\n/*:number*/\n, c\n/*:number*/\n, val, t\n/*:?string*/\n) {\n var out = new_buf(9);\n write_BIFF2Cell(out, r, c);\n write_Bes(val, t || 'b', out);\n return out;\n}\n/* TODO: codepage, large strings */\n\n\nfunction write_BIFF2LABEL(r\n/*:number*/\n, c\n/*:number*/\n, val) {\n var out = new_buf(8 + 2 * val.length);\n write_BIFF2Cell(out, r, c);\n out.write_shift(1, val.length);\n out.write_shift(val.length, val, 'sbcs');\n return out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba\n/*:BufArray*/\n, cell\n/*:Cell*/\n, R\n/*:number*/\n, C\n/*:number*/\n\n/*::, opts*/\n) {\n if (cell.v != null) switch (cell.t) {\n case 'd':\n case 'n':\n var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n if (v == (v | 0) && v >= 0 && v < 65536) write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));else write_biff_rec(ba, 0x0003, write_BIFF2NUM(R, C, v));\n return;\n\n case 'b':\n case 'e':\n write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t));\n return;\n\n /* TODO: codepage, sst */\n\n case 's':\n case 'str':\n write_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, (cell.v || \"\").slice(0, 255)));\n return;\n }\n write_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba\n/*:BufArray*/\n, ws\n/*:Worksheet*/\n, idx\n/*:number*/\n, opts\n/*::, wb:Workbook*/\n) {\n var dense = Array.isArray(ws);\n var range = safe_decode_range(ws['!ref'] || \"A1\"),\n ref\n /*:string*/\n ,\n rr = \"\",\n cols\n /*:Array*/\n = [];\n\n if (range.e.c > 0xFF || range.e.r > 0x3FFF) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n range.e.c = Math.min(range.e.c, 0xFF);\n range.e.r = Math.min(range.e.c, 0x3FFF);\n ref = encode_range(range);\n }\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n rr = encode_row(R);\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell) continue;\n /* write cell */\n\n write_ws_biff2_cell(ba, cell, R, C, opts);\n }\n }\n}\n/* Based on test files */\n\n\nfunction write_biff2_buf(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n) {\n var o = opts || {};\n if (DENSE != null && o.dense == null) o.dense = DENSE;\n var ba = buf_array();\n var idx = 0;\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n if (wb.SheetNames[i] == o.sheet) idx = i;\n }\n\n if (idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet) throw new Error(\"Sheet not found: \" + o.sheet);\n write_biff_rec(ba, o.biff == 4 ? 0x0409 : o.biff == 3 ? 0x0209 : 0x0009, write_BOF(wb, 0x10, o));\n /* ... */\n\n write_ws_biff2(ba, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);\n /* ... */\n\n write_biff_rec(ba, 0x000A);\n return ba.end();\n}\n\nfunction write_FONTS_biff8(ba, data, opts) {\n write_biff_rec(ba, 0x0031\n /* Font */\n , write_Font({\n sz: 12,\n color: {\n theme: 1\n },\n name: \"Arial\",\n family: 2,\n scheme: \"minor\"\n }, opts));\n}\n\nfunction write_FMTS_biff8(ba, NF\n/*:?SSFTable*/\n, opts) {\n if (!NF) return;\n [[5, 8], [23, 26], [41, 44], [\n /*63*/\n 50,\n /*66],[164,*/\n 392]].forEach(function (r) {\n /*:: if(!NF) return; */\n for (var i = r[0]; i <= r[1]; ++i) {\n if (NF[i] != null) write_biff_rec(ba, 0x041E\n /* Format */\n , write_Format(i, NF[i], opts));\n }\n });\n}\n\nfunction write_FEAT(ba, ws) {\n /* [MS-XLS] 2.4.112 */\n var o = new_buf(19);\n o.write_shift(4, 0x867);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 3);\n o.write_shift(1, 1);\n o.write_shift(4, 0);\n write_biff_rec(ba, 0x0867\n /* FeatHdr */\n , o);\n /* [MS-XLS] 2.4.111 */\n\n o = new_buf(39);\n o.write_shift(4, 0x868);\n o.write_shift(4, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 3);\n o.write_shift(1, 0);\n o.write_shift(4, 0);\n o.write_shift(2, 1);\n o.write_shift(4, 4);\n o.write_shift(2, 0);\n write_Ref8U(safe_decode_range(ws['!ref'] || \"A1\"), o);\n o.write_shift(4, 4);\n write_biff_rec(ba, 0x0868\n /* Feat */\n , o);\n}\n\nfunction write_CELLXFS_biff8(ba, opts) {\n for (var i = 0; i < 16; ++i) {\n write_biff_rec(ba, 0x00e0\n /* XF */\n , write_XF({\n numFmtId: 0,\n style: true\n }, 0, opts));\n }\n\n opts.cellXfs.forEach(function (c) {\n write_biff_rec(ba, 0x00e0\n /* XF */\n , write_XF(c, 0, opts));\n });\n}\n\nfunction write_ws_biff8_hlinks(ba\n/*:BufArray*/\n, ws) {\n for (var R = 0; R < ws['!links'].length; ++R) {\n var HL = ws['!links'][R];\n write_biff_rec(ba, 0x01b8\n /* HLink */\n , write_HLink(HL));\n if (HL[1].Tooltip) write_biff_rec(ba, 0x0800\n /* HLinkTooltip */\n , write_HLinkTooltip(HL));\n }\n\n delete ws['!links'];\n}\n\nfunction write_ws_cols_biff8(ba, cols) {\n if (!cols) return;\n var cnt = 0;\n cols.forEach(function (col, idx) {\n if (++cnt <= 256 && col) {\n write_biff_rec(ba, 0x007d\n /* ColInfo */\n , write_ColInfo(col_obj_w(idx, col), idx));\n }\n });\n}\n\nfunction write_ws_biff8_cell(ba\n/*:BufArray*/\n, cell\n/*:Cell*/\n, R\n/*:number*/\n, C\n/*:number*/\n, opts) {\n var os = 16 + get_cell_style(opts.cellXfs, cell, opts);\n\n if (cell.v == null && !cell.bf) {\n write_biff_rec(ba, 0x0201\n /* Blank */\n , write_XLSCell(R, C, os));\n return;\n }\n\n if (cell.bf) write_biff_rec(ba, 0x0006\n /* Formula */\n , write_Formula(cell, R, C, opts, os));else switch (cell.t) {\n case 'd':\n case 'n':\n var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n /* TODO: emit RK as appropriate */\n\n write_biff_rec(ba, 0x0203\n /* Number */\n , write_Number(R, C, v, os, opts));\n break;\n\n case 'b':\n case 'e':\n write_biff_rec(ba, 0x0205\n /* BoolErr */\n , write_BoolErr(R, C, cell.v, os, opts, cell.t));\n break;\n\n /* TODO: codepage, sst */\n\n case 's':\n case 'str':\n if (opts.bookSST) {\n var isst = get_sst_id(opts.Strings, cell.v, opts.revStrings);\n write_biff_rec(ba, 0x00fd\n /* LabelSst */\n , write_LabelSst(R, C, isst, os, opts));\n } else write_biff_rec(ba, 0x0204\n /* Label */\n , write_Label(R, C, (cell.v || \"\").slice(0, 255), os, opts));\n\n break;\n\n default:\n write_biff_rec(ba, 0x0201\n /* Blank */\n , write_XLSCell(R, C, os));\n }\n}\n/* [MS-XLS] 2.1.7.20.5 */\n\n\nfunction write_ws_biff8(idx\n/*:number*/\n, opts, wb\n/*:Workbook*/\n) {\n var ba = buf_array();\n var s = wb.SheetNames[idx],\n ws = wb.Sheets[s] || {};\n\n var _WB\n /*:WBWBProps*/\n = (wb || {}).Workbook || {}\n /*:any*/\n ;\n\n var _sheet\n /*:WBWSProp*/\n = (_WB.Sheets || [])[idx] || {}\n /*:any*/\n ;\n\n var dense = Array.isArray(ws);\n var b8 = opts.biff == 8;\n var ref\n /*:string*/\n ,\n rr = \"\",\n cols\n /*:Array*/\n = [];\n var range = safe_decode_range(ws['!ref'] || \"A1\");\n var MAX_ROWS = b8 ? 65536 : 16384;\n\n if (range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n if (opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n range.e.c = Math.min(range.e.c, 0xFF);\n range.e.r = Math.min(range.e.c, MAX_ROWS - 1);\n }\n\n write_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n /* [Uncalced] Index */\n\n write_biff_rec(ba, 0x000d\n /* CalcMode */\n , writeuint16(1));\n write_biff_rec(ba, 0x000c\n /* CalcCount */\n , writeuint16(100));\n write_biff_rec(ba, 0x000f\n /* CalcRefMode */\n , writebool(true));\n write_biff_rec(ba, 0x0011\n /* CalcIter */\n , writebool(false));\n write_biff_rec(ba, 0x0010\n /* CalcDelta */\n , write_Xnum(0.001));\n write_biff_rec(ba, 0x005f\n /* CalcSaveRecalc */\n , writebool(true));\n write_biff_rec(ba, 0x002a\n /* PrintRowCol */\n , writebool(false));\n write_biff_rec(ba, 0x002b\n /* PrintGrid */\n , writebool(false));\n write_biff_rec(ba, 0x0082\n /* GridSet */\n , writeuint16(1));\n write_biff_rec(ba, 0x0080\n /* Guts */\n , write_Guts([0, 0]));\n /* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\n /* Header (string) */\n\n /* Footer (string) */\n\n write_biff_rec(ba, 0x0083\n /* HCenter */\n , writebool(false));\n write_biff_rec(ba, 0x0084\n /* VCenter */\n , writebool(false));\n /* ... */\n\n if (b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n /* ... */\n\n write_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n /* ... */\n\n if (b8) ws['!links'] = [];\n\n for (var R = range.s.r; R <= range.e.r; ++R) {\n rr = encode_row(R);\n\n for (var C = range.s.c; C <= range.e.c; ++C) {\n if (R === range.s.r) cols[C] = encode_col(C);\n ref = cols[C] + rr;\n var cell = dense ? (ws[R] || [])[C] : ws[ref];\n if (!cell) continue;\n /* write cell */\n\n write_ws_biff8_cell(ba, cell, R, C, opts);\n if (b8 && cell.l) ws['!links'].push([ref, cell.l]);\n }\n }\n\n var cname\n /*:string*/\n = _sheet.CodeName || _sheet.name || s;\n /* ... */\n\n if (b8) write_biff_rec(ba, 0x023e\n /* Window2 */\n , write_Window2((_WB.Views || [])[0]));\n /* ... */\n\n if (b8 && (ws['!merges'] || []).length) write_biff_rec(ba, 0x00e5\n /* MergeCells */\n , write_MergeCells(ws['!merges']));\n /* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\n if (b8) write_ws_biff8_hlinks(ba, ws);\n /* [DVAL] */\n\n write_biff_rec(ba, 0x01ba\n /* CodeName */\n , write_XLUnicodeString(cname, opts));\n /* *WebPub *CellWatch [SheetExt] */\n\n if (b8) write_FEAT(ba, ws);\n /* *FEAT11 *RECORD12 */\n\n write_biff_rec(ba, 0x000a\n /* EOF */\n );\n return ba.end();\n}\n/* [MS-XLS] 2.1.7.20.3 */\n\n\nfunction write_biff8_global(wb\n/*:Workbook*/\n, bufs, opts\n/*:WriteOpts*/\n) {\n var A = buf_array();\n\n var _WB\n /*:WBWBProps*/\n = (wb || {}).Workbook || {}\n /*:any*/\n ;\n\n var _sheets\n /*:Array*/\n = _WB.Sheets || [];\n\n var _wb\n /*:WBProps*/\n =\n /*::((*/\n _WB.WBProps || {\n /*::CodeName:\"ThisWorkbook\"*/\n }\n /*:: ):any)*/\n ;\n\n var b8 = opts.biff == 8,\n b5 = opts.biff == 5;\n write_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n if (opts.bookType == \"xla\") write_biff_rec(A, 0x0087\n /* Addin */\n );\n write_biff_rec(A, 0x00e1\n /* InterfaceHdr */\n , b8 ? writeuint16(0x04b0) : null);\n write_biff_rec(A, 0x00c1\n /* Mms */\n , writezeroes(2));\n if (b5) write_biff_rec(A, 0x00bf\n /* ToolbarHdr */\n );\n if (b5) write_biff_rec(A, 0x00c0\n /* ToolbarEnd */\n );\n write_biff_rec(A, 0x00e2\n /* InterfaceEnd */\n );\n write_biff_rec(A, 0x005c\n /* WriteAccess */\n , write_WriteAccess(\"SheetJS\", opts));\n /* [FileSharing] */\n\n write_biff_rec(A, 0x0042\n /* CodePage */\n , writeuint16(b8 ? 0x04b0 : 0x04E4));\n /* *2047 Lel */\n\n if (b8) write_biff_rec(A, 0x0161\n /* DSF */\n , writeuint16(0));\n if (b8) write_biff_rec(A, 0x01c0\n /* Excel9File */\n );\n write_biff_rec(A, 0x013d\n /* RRTabId */\n , write_RRTabId(wb.SheetNames.length));\n if (b8 && wb.vbaraw) write_biff_rec(A, 0x00d3\n /* ObProj */\n );\n /* [ObNoMacros] */\n\n if (b8 && wb.vbaraw) {\n var cname\n /*:string*/\n = _wb.CodeName || \"ThisWorkbook\";\n write_biff_rec(A, 0x01ba\n /* CodeName */\n , write_XLUnicodeString(cname, opts));\n }\n\n write_biff_rec(A, 0x009c\n /* BuiltInFnGroupCount */\n , writeuint16(0x11));\n /* *FnGroupName *FnGrp12 */\n\n /* *Lbl */\n\n /* [OleObjectSize] */\n\n write_biff_rec(A, 0x0019\n /* WinProtect */\n , writebool(false));\n write_biff_rec(A, 0x0012\n /* Protect */\n , writebool(false));\n write_biff_rec(A, 0x0013\n /* Password */\n , writeuint16(0));\n if (b8) write_biff_rec(A, 0x01af\n /* Prot4Rev */\n , writebool(false));\n if (b8) write_biff_rec(A, 0x01bc\n /* Prot4RevPass */\n , writeuint16(0));\n write_biff_rec(A, 0x003d\n /* Window1 */\n , write_Window1(opts));\n write_biff_rec(A, 0x0040\n /* Backup */\n , writebool(false));\n write_biff_rec(A, 0x008d\n /* HideObj */\n , writeuint16(0));\n write_biff_rec(A, 0x0022\n /* Date1904 */\n , writebool(safe1904(wb) == \"true\"));\n write_biff_rec(A, 0x000e\n /* CalcPrecision */\n , writebool(true));\n if (b8) write_biff_rec(A, 0x01b7\n /* RefreshAll */\n , writebool(false));\n write_biff_rec(A, 0x00DA\n /* BookBool */\n , writeuint16(0));\n /* ... */\n\n write_FONTS_biff8(A, wb, opts);\n write_FMTS_biff8(A, wb.SSF, opts);\n write_CELLXFS_biff8(A, opts);\n /* ... */\n\n if (b8) write_biff_rec(A, 0x0160\n /* UsesELFs */\n , writebool(false));\n var a = A.end();\n var C = buf_array();\n /* METADATA [MTRSettings] [ForceFullCalculation] */\n\n if (b8) write_biff_rec(C, 0x008C, write_Country());\n /* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n /* BIFF8: [SST *Continue] ExtSST */\n\n if (b8 && opts.Strings) write_biff_continue(C, 0x00FC, write_SST(opts.Strings, opts));\n /* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\n write_biff_rec(C, 0x000A\n /* EOF */\n );\n var c = C.end();\n var B = buf_array();\n var blen = 0,\n j = 0;\n\n for (j = 0; j < wb.SheetNames.length; ++j) {\n blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n }\n\n var start = a.length + blen + c.length;\n\n for (j = 0; j < wb.SheetNames.length; ++j) {\n var _sheet\n /*:WBWSProp*/\n = _sheets[j] || {}\n /*:any*/\n ;\n\n write_biff_rec(B, 0x0085\n /* BoundSheet8 */\n , write_BoundSheet8({\n pos: start,\n hs: _sheet.Hidden || 0,\n dt: 0,\n name: wb.SheetNames[j]\n }, opts));\n start += bufs[j].length;\n }\n /* 1*BoundSheet8 */\n\n\n var b = B.end();\n if (blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n var out = [];\n if (a.length) out.push(a);\n if (b.length) out.push(b);\n if (c.length) out.push(c);\n return bconcat(out);\n}\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\n\n\nfunction write_biff8_buf(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n) {\n var o = opts || {};\n var bufs = [];\n\n if (wb && !wb.SSF) {\n wb.SSF = dup(table_fmt);\n }\n\n if (wb && wb.SSF) {\n make_ssf();\n SSF_load_table(wb.SSF); // $FlowIgnore\n\n o.revssf = evert_num(wb.SSF);\n o.revssf[wb.SSF[65535]] = 0;\n o.ssf = wb.SSF;\n }\n\n o.Strings =\n /*::((*/\n []\n /*:: :any):SST)*/\n ;\n o.Strings.Count = 0;\n o.Strings.Unique = 0;\n fix_write_opts(o);\n o.cellXfs = [];\n get_cell_style(o.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n if (!wb.Props) wb.Props = {};\n\n for (var i = 0; i < wb.SheetNames.length; ++i) {\n bufs[bufs.length] = write_ws_biff8(i, o, wb);\n }\n\n bufs.unshift(write_biff8_global(wb, bufs, o));\n return bconcat(bufs);\n}\n\nfunction write_biff_buf(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n) {\n for (var i = 0; i <= wb.SheetNames.length; ++i) {\n var ws = wb.Sheets[wb.SheetNames[i]];\n if (!ws || !ws[\"!ref\"]) continue;\n var range = decode_range(ws[\"!ref\"]);\n\n if (range.e.c > 255) {\n // note: 255 is IV\n if (typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255). Data may be lost.\");\n }\n }\n\n var o = opts || {};\n\n switch (o.biff || 2) {\n case 8:\n case 5:\n return write_biff8_buf(wb, opts);\n\n case 4:\n case 3:\n case 2:\n return write_biff2_buf(wb, opts);\n }\n\n throw new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\n\n\nfunction html_to_sheet(str\n/*:string*/\n, _opts)\n/*:Workbook*/\n{\n var opts = _opts || {};\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var ws\n /*:Worksheet*/\n = opts.dense ? []\n /*:any*/\n : {}\n /*:any*/\n ;\n str = str.replace(//g, \"\");\n var mtch\n /*:any*/\n = str.match(/\");\n var mtch2\n /*:any*/\n = str.match(/<\\/table/i);\n var i\n /*:number*/\n = mtch.index,\n j\n /*:number*/\n = mtch2 && mtch2.index || str.length;\n var rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n var R = -1,\n C = 0,\n RS = 0,\n CS = 0;\n var range\n /*:Range*/\n = {\n s: {\n r: 10000000,\n c: 10000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var merges\n /*:Array*/\n = [];\n\n for (i = 0; i < rows.length; ++i) {\n var row = rows[i].trim();\n var hd = row.slice(0, 3).toLowerCase();\n\n if (hd == \"/i);\n\n for (j = 0; j < cells.length; ++j) {\n var cell = cells[j].trim();\n if (!cell.match(/\")) > -1) {\n m = m.slice(cc + 1);\n }\n\n for (var midx = 0; midx < merges.length; ++midx) {\n var _merge\n /*:Range*/\n = merges[midx];\n\n if (_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) {\n C = _merge.e.c + 1;\n midx = -1;\n }\n }\n\n var tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n CS = tag.colspan ? +tag.colspan : 1;\n if ((RS = +tag.rowspan) > 1 || CS > 1) merges.push({\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + (RS || 1) - 1,\n c: C + CS - 1\n }\n });\n\n var _t\n /*:string*/\n = tag.t || tag[\"data-t\"] || \"\";\n /* TODO: generate stub cells */\n\n\n if (!m.length) {\n C += CS;\n continue;\n }\n\n m = htmldecode(m);\n if (range.s.r > R) range.s.r = R;\n if (range.e.r < R) range.e.r = R;\n if (range.s.c > C) range.s.c = C;\n if (range.e.c < C) range.e.c = C;\n\n if (!m.length) {\n C += CS;\n continue;\n }\n\n var o\n /*:Cell*/\n = {\n t: 's',\n v: m\n };\n\n if (opts.raw || !m.trim().length || _t == 's') {} else if (m === 'TRUE') o = {\n t: 'b',\n v: true\n };else if (m === 'FALSE') o = {\n t: 'b',\n v: false\n };else if (!isNaN(fuzzynum(m))) o = {\n t: 'n',\n v: fuzzynum(m)\n };else if (!isNaN(fuzzydate(m).getDate())) {\n o = {\n t: 'd',\n v: parseDate(m)\n }\n /*:any*/\n ;\n if (!opts.cellDates) o = {\n t: 'n',\n v: datenum(o.v)\n }\n /*:any*/\n ;\n o.z = opts.dateNF || table_fmt[14];\n }\n\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = o;\n } else ws[encode_cell({\n r: R,\n c: C\n })] = o;\n\n C += CS;\n }\n }\n\n ws['!ref'] = encode_range(range);\n if (merges.length) ws[\"!merges\"] = merges;\n return ws;\n}\n\nfunction make_html_row(ws\n/*:Worksheet*/\n, r\n/*:Range*/\n, R\n/*:number*/\n, o\n/*:Sheet2HTMLOpts*/\n)\n/*:string*/\n{\n var M\n /*:Array*/\n = ws['!merges'] || [];\n var oo\n /*:Array*/\n = [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n var RS = 0,\n CS = 0;\n\n for (var j = 0; j < M.length; ++j) {\n if (M[j].s.r > R || M[j].s.c > C) continue;\n if (M[j].e.r < R || M[j].e.c < C) continue;\n\n if (M[j].s.r < R || M[j].s.c < C) {\n RS = -1;\n break;\n }\n\n RS = M[j].e.r - M[j].s.r + 1;\n CS = M[j].e.c - M[j].s.c + 1;\n break;\n }\n\n if (RS < 0) continue;\n var coord = encode_cell({\n r: R,\n c: C\n });\n var cell = o.dense ? (ws[R] || [])[C] : ws[coord];\n /* TODO: html entities */\n\n var w = cell && cell.v != null && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n var sp = {}\n /*:any*/\n ;\n if (RS > 1) sp.rowspan = RS;\n if (CS > 1) sp.colspan = CS;\n if (o.editable) w = '' + w + '';else if (cell) {\n sp[\"data-t\"] = cell && cell.t || 'z';\n if (cell.v != null) sp[\"data-v\"] = cell.v;\n if (cell.z != null) sp[\"data-z\"] = cell.z;\n if (cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '' + w + '';\n }\n sp.id = (o.id || \"sjs\") + \"-\" + coord;\n oo.push(writextag('td', w, sp));\n }\n\n var preamble = \"\";\n return preamble + oo.join(\"\") + \"\";\n}\n\nvar HTML_BEGIN = 'SheetJS Table Export';\nvar HTML_END = '';\n\nfunction html_to_workbook(str\n/*:string*/\n, opts)\n/*:Workbook*/\n{\n var mtch = str.match(/[\\s\\S]*?<\\/table>/gi);\n if (!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find
\");\n if (mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n var wb = book_new();\n mtch.forEach(function (s, idx) {\n book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx + 1));\n });\n return wb;\n}\n\nfunction make_html_preamble(ws\n/*:Worksheet*/\n, R\n/*:Range*/\n, o\n/*:Sheet2HTMLOpts*/\n)\n/*:string*/\n{\n var out\n /*:Array*/\n = [];\n return out.join(\"\") + '';\n}\n\nfunction sheet_to_html(ws\n/*:Worksheet*/\n, opts\n/*:?Sheet2HTMLOpts*/\n\n/*, wb:?Workbook*/\n)\n/*:string*/\n{\n var o = opts || {};\n var header = o.header != null ? o.header : HTML_BEGIN;\n var footer = o.footer != null ? o.footer : HTML_END;\n var out\n /*:Array*/\n = [header];\n var r = decode_range(ws['!ref']);\n o.dense = Array.isArray(ws);\n out.push(make_html_preamble(ws, r, o));\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n out.push(make_html_row(ws, r, R, o));\n }\n\n out.push(\"
\" + footer);\n return out.join(\"\");\n}\n\nfunction sheet_add_dom(ws\n/*:Worksheet*/\n, table\n/*:HTMLElement*/\n, _opts\n/*:?any*/\n)\n/*:Worksheet*/\n{\n var opts = _opts || {};\n if (DENSE != null) opts.dense = DENSE;\n var or_R = 0,\n or_C = 0;\n\n if (opts.origin != null) {\n if (typeof opts.origin == 'number') or_R = opts.origin;else {\n var _origin\n /*:CellAddress*/\n = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\n or_R = _origin.r;\n or_C = _origin.c;\n }\n }\n\n var rows\n /*:HTMLCollection*/\n = table.getElementsByTagName('tr');\n var sheetRows = Math.min(opts.sheetRows || 10000000, rows.length);\n var range\n /*:Range*/\n = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: or_R,\n c: or_C\n }\n };\n\n if (ws[\"!ref\"]) {\n var _range\n /*:Range*/\n = decode_range(ws[\"!ref\"]);\n\n range.s.r = Math.min(range.s.r, _range.s.r);\n range.s.c = Math.min(range.s.c, _range.s.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n range.e.c = Math.max(range.e.c, _range.e.c);\n if (or_R == -1) range.e.r = or_R = _range.e.r + 1;\n }\n\n var merges\n /*:Array*/\n = [],\n midx = 0;\n var rowinfo\n /*:Array*/\n = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n var _R = 0,\n R = 0,\n _C = 0,\n C = 0,\n RS = 0,\n CS = 0;\n if (!ws[\"!cols\"]) ws['!cols'] = [];\n\n for (; _R < rows.length && R < sheetRows; ++_R) {\n var row\n /*:HTMLTableRowElement*/\n = rows[_R];\n\n if (is_dom_element_hidden(row)) {\n if (opts.display) continue;\n rowinfo[R] = {\n hidden: true\n };\n }\n\n var elts\n /*:HTMLCollection*/\n = row.children\n /*:any*/\n ;\n\n for (_C = C = 0; _C < elts.length; ++_C) {\n var elt\n /*:HTMLTableCellElement*/\n = elts[_C];\n if (opts.display && is_dom_element_hidden(elt)) continue;\n var v\n /*:?string*/\n = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n var z\n /*:?string*/\n = elt.getAttribute('data-z') || elt.getAttribute('z');\n\n for (midx = 0; midx < merges.length; ++midx) {\n var m\n /*:Range*/\n = merges[midx];\n\n if (m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) {\n C = m.e.c + 1 - or_C;\n midx = -1;\n }\n }\n /* TODO: figure out how to extract nonstandard mso- style */\n\n\n CS = +elt.getAttribute(\"colspan\") || 1;\n if ((RS = +elt.getAttribute(\"rowspan\") || 1) > 1 || CS > 1) merges.push({\n s: {\n r: R + or_R,\n c: C + or_C\n },\n e: {\n r: R + or_R + (RS || 1) - 1,\n c: C + or_C + (CS || 1) - 1\n }\n });\n var o\n /*:Cell*/\n = {\n t: 's',\n v: v\n };\n\n var _t\n /*:string*/\n = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\n if (v != null) {\n if (v.length == 0) o.t = _t || 'z';else if (opts.raw || v.trim().length == 0 || _t == \"s\") {} else if (v === 'TRUE') o = {\n t: 'b',\n v: true\n };else if (v === 'FALSE') o = {\n t: 'b',\n v: false\n };else if (!isNaN(fuzzynum(v))) o = {\n t: 'n',\n v: fuzzynum(v)\n };else if (!isNaN(fuzzydate(v).getDate())) {\n o = {\n t: 'd',\n v: parseDate(v)\n }\n /*:any*/\n ;\n if (!opts.cellDates) o = {\n t: 'n',\n v: datenum(o.v)\n }\n /*:any*/\n ;\n o.z = opts.dateNF || table_fmt[14];\n }\n }\n\n if (o.z === undefined && z != null) o.z = z;\n /* The first link is used. Links are assumed to be fully specified.\n * TODO: The right way to process relative links is to make a new */\n\n var l = \"\",\n Aelts = elt.getElementsByTagName(\"A\");\n if (Aelts && Aelts.length) for (var Aelti = 0; Aelti < Aelts.length; ++Aelti) {\n if (Aelts[Aelti].hasAttribute(\"href\")) {\n l = Aelts[Aelti].getAttribute(\"href\");\n if (l.charAt(0) != \"#\") break;\n }\n }\n if (l && l.charAt(0) != \"#\") o.l = {\n Target: l\n };\n\n if (opts.dense) {\n if (!ws[R + or_R]) ws[R + or_R] = [];\n ws[R + or_R][C + or_C] = o;\n } else ws[encode_cell({\n c: C + or_C,\n r: R + or_R\n })] = o;\n\n if (range.e.c < C + or_C) range.e.c = C + or_C;\n C += CS;\n }\n\n ++R;\n }\n\n if (merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n range.e.r = Math.max(range.e.r, R - 1 + or_R);\n ws['!ref'] = encode_range(range);\n if (R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length - _R + R - 1 + or_R, range)); // We can count the real number of rows to parse but we don't to improve the performance\n\n return ws;\n}\n\nfunction parse_dom_table(table\n/*:HTMLElement*/\n, _opts\n/*:?any*/\n)\n/*:Worksheet*/\n{\n var opts = _opts || {};\n var ws\n /*:Worksheet*/\n = opts.dense ? []\n /*:any*/\n : {}\n /*:any*/\n ;\n return sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table\n/*:HTMLElement*/\n, opts\n/*:?any*/\n)\n/*:Workbook*/\n{\n return sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element\n/*:HTMLElement*/\n)\n/*:boolean*/\n{\n var display\n /*:string*/\n = '';\n var get_computed_style\n /*:?function*/\n = get_get_computed_style_function(element);\n if (get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n if (!display) display = element.style && element.style.display;\n return display === 'none';\n}\n/* global getComputedStyle */\n\n\nfunction get_get_computed_style_function(element\n/*:HTMLElement*/\n)\n/*:?function*/\n{\n // The proper getComputedStyle implementation is the one defined in the element window\n if (element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle; // If it is not available, try to get one from the global namespace\n\n if (typeof getComputedStyle === 'function') return getComputedStyle;\n return null;\n}\n/* OpenDocument */\n\n\nfunction parse_text_p(text\n/*:string*/\n\n/*::, tag*/\n)\n/*:Array*/\n{\n /* 6.1.2 White Space Characters */\n var fixed = text.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \").replace(//g, \" \").replace(//g, function ($$, $1) {\n return Array(parseInt($1, 10) + 1).join(\" \");\n }).replace(/]*\\/>/g, \"\\t\").replace(//g, \"\\n\");\n var v = unescapexml(fixed.replace(/<[^>]*>/g, \"\"));\n return [v];\n}\n\nvar number_formats_ods = {\n /* ods name: [short ssf fmt, long ssf fmt] */\n day: [\"d\", \"dd\"],\n month: [\"m\", \"mm\"],\n year: [\"y\", \"yy\"],\n hours: [\"h\", \"hh\"],\n minutes: [\"m\", \"mm\"],\n seconds: [\"s\", \"ss\"],\n \"am-pm\": [\"A/P\", \"AM/PM\"],\n \"day-of-week\": [\"ddd\", \"dddd\"],\n era: [\"e\", \"ee\"],\n\n /* there is no native representation of LO \"Q\" format */\n quarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n};\n\nfunction parse_content_xml(d\n/*:string*/\n, _opts)\n/*:Workbook*/\n{\n var opts = _opts || {};\n if (DENSE != null && opts.dense == null) opts.dense = DENSE;\n var str = xlml_normalize(d);\n var state\n /*:Array*/\n = [],\n tmp;\n var tag\n /*:: = {}*/\n ;\n var NFtag = {\n name: \"\"\n },\n NF = \"\",\n pidx = 0;\n var sheetag\n /*:: = {name:\"\", '名称':\"\"}*/\n ;\n var rowtag\n /*:: = {'行号':\"\"}*/\n ;\n var Sheets = {},\n SheetNames\n /*:Array*/\n = [];\n var ws = opts.dense ? []\n /*:any*/\n : {}\n /*:any*/\n ;\n var Rn, q\n /*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/\n ;\n var ctag = {\n value: \"\"\n }\n /*:any*/\n ;\n var textp = \"\",\n textpidx = 0,\n textptag\n /*:: = {}*/\n ;\n var textR = [];\n var R = -1,\n C = -1,\n range = {\n s: {\n r: 1000000,\n c: 10000000\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var row_ol = 0;\n var number_format_map = {};\n var merges\n /*:Array*/\n = [],\n mrange = {},\n mR = 0,\n mC = 0;\n var rowinfo\n /*:Array*/\n = [],\n rowpeat = 1,\n colpeat = 1;\n var arrayf\n /*:Array<[Range, string]>*/\n = [];\n var WB = {\n Names: []\n };\n var atag = {}\n /*:any*/\n ;\n var _Ref\n /*:[string, string]*/\n = [\"\", \"\"];\n var comments\n /*:Array*/\n = [],\n comment\n /*:Comment*/\n = {}\n /*:any*/\n ;\n var creator = \"\",\n creatoridx = 0;\n var isstub = false,\n intable = false;\n var i = 0;\n xlmlregex.lastIndex = 0;\n str = str.replace(//mg, \"\").replace(//gm, \"\");\n\n while (Rn = xlmlregex.exec(str)) {\n switch (Rn[3] = Rn[3].replace(/_.*$/, \"\")) {\n case 'table':\n case '工作表':\n // 9.1.2 \n if (Rn[1] === '/') {\n if (range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);else ws['!ref'] = \"A1:A1\";\n\n if (opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n ws['!fullref'] = ws['!ref'];\n range.e.r = opts.sheetRows - 1;\n ws['!ref'] = encode_range(range);\n }\n\n if (merges.length) ws['!merges'] = merges;\n if (rowinfo.length) ws[\"!rows\"] = rowinfo;\n sheetag.name = sheetag['名称'] || sheetag.name;\n if (typeof JSON !== 'undefined') JSON.stringify(sheetag);\n SheetNames.push(sheetag.name);\n Sheets[sheetag.name] = ws;\n intable = false;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n sheetag = parsexmltag(Rn[0], false);\n R = C = -1;\n range.s.r = range.s.c = 10000000;\n range.e.r = range.e.c = 0;\n ws = opts.dense ? []\n /*:any*/\n : {}\n /*:any*/\n ;\n merges = [];\n rowinfo = [];\n intable = true;\n }\n\n break;\n\n case 'table-row-group':\n // 9.1.9 \n if (Rn[1] === \"/\") --row_ol;else ++row_ol;\n break;\n\n case 'table-row':\n case '行':\n // 9.1.3 \n if (Rn[1] === '/') {\n R += rowpeat;\n rowpeat = 1;\n break;\n }\n\n rowtag = parsexmltag(Rn[0], false);\n if (rowtag['行号']) R = rowtag['行号'] - 1;else if (R == -1) R = 0;\n rowpeat = +rowtag['number-rows-repeated'] || 1;\n /* TODO: remove magic */\n\n if (rowpeat < 10) for (i = 0; i < rowpeat; ++i) {\n if (row_ol > 0) rowinfo[R + i] = {\n level: row_ol\n };\n }\n C = -1;\n break;\n\n case 'covered-table-cell':\n // 9.1.5 \n if (Rn[1] !== '/') ++C;\n\n if (opts.sheetStubs) {\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = {\n t: 'z'\n };\n } else ws[encode_cell({\n r: R,\n c: C\n })] = {\n t: 'z'\n };\n }\n\n textp = \"\";\n textR = [];\n break;\n\n /* stub */\n\n case 'table-cell':\n case '数据':\n if (Rn[0].charAt(Rn[0].length - 2) === '/') {\n ++C;\n ctag = parsexmltag(Rn[0], false);\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n q = {\n t: 'z',\n v: null\n /*:: , z:null, w:\"\",c:[]*/\n\n }\n /*:any*/\n ;\n if (ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\n if ((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n q.t = \"s\";\n q.v = unescapexml(ctag['string-value'] || \"\");\n\n if (opts.dense) {\n if (!ws[R]) ws[R] = [];\n ws[R][C] = q;\n } else {\n ws[encode_cell({\n r: R,\n c: C\n })] = q;\n }\n }\n\n C += colpeat - 1;\n } else if (Rn[1] !== '/') {\n ++C;\n textp = \"\";\n textpidx = 0;\n textR = [];\n colpeat = 1;\n var rptR = rowpeat ? R + rowpeat - 1 : R;\n if (C > range.e.c) range.e.c = C;\n if (C < range.s.c) range.s.c = C;\n if (R < range.s.r) range.s.r = R;\n if (rptR > range.e.r) range.e.r = rptR;\n ctag = parsexmltag(Rn[0], false);\n comments = [];\n comment = {}\n /*:any*/\n ;\n q = {\n t: ctag['数据类型'] || ctag['value-type'],\n v: null\n /*:: , z:null, w:\"\",c:[]*/\n\n }\n /*:any*/\n ;\n\n if (opts.cellFormula) {\n if (ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\n if (ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n mR = parseInt(ctag['number-matrix-rows-spanned'], 10) || 0;\n mC = parseInt(ctag['number-matrix-columns-spanned'], 10) || 0;\n mrange = {\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + mR - 1,\n c: C + mC - 1\n }\n };\n q.F = encode_range(mrange);\n arrayf.push([mrange, q.F]);\n }\n\n if (ctag.formula) q.f = ods_to_csf_formula(ctag.formula);else for (i = 0; i < arrayf.length; ++i) {\n if (R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r) if (C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c) q.F = arrayf[i][1];\n }\n }\n\n if (ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n mR = parseInt(ctag['number-rows-spanned'], 10) || 0;\n mC = parseInt(ctag['number-columns-spanned'], 10) || 0;\n mrange = {\n s: {\n r: R,\n c: C\n },\n e: {\n r: R + mR - 1,\n c: C + mC - 1\n }\n };\n merges.push(mrange);\n }\n /* 19.675.2 table:number-columns-repeated */\n\n\n if (ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n /* 19.385 office:value-type */\n\n switch (q.t) {\n case 'boolean':\n q.t = 'b';\n q.v = parsexmlbool(ctag['boolean-value']);\n break;\n\n case 'float':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'percentage':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'currency':\n q.t = 'n';\n q.v = parseFloat(ctag.value);\n break;\n\n case 'date':\n q.t = 'd';\n q.v = parseDate(ctag['date-value']);\n\n if (!opts.cellDates) {\n q.t = 'n';\n q.v = datenum(q.v);\n }\n\n q.z = 'm/d/yy';\n break;\n\n case 'time':\n q.t = 'n';\n q.v = parse_isodur(ctag['time-value']) / 86400;\n\n if (opts.cellDates) {\n q.t = 'd';\n q.v = numdate(q.v);\n }\n\n q.z = 'HH:MM:SS';\n break;\n\n case 'number':\n q.t = 'n';\n q.v = parseFloat(ctag['数据数值']);\n break;\n\n default:\n if (q.t === 'string' || q.t === 'text' || !q.t) {\n q.t = 's';\n\n if (ctag['string-value'] != null) {\n textp = unescapexml(ctag['string-value']);\n textR = [];\n }\n } else throw new Error('Unsupported value type ' + q.t);\n\n }\n } else {\n isstub = false;\n\n if (q.t === 's') {\n q.v = textp || '';\n if (textR.length) q.R = textR;\n isstub = textpidx == 0;\n }\n\n if (atag.Target) q.l = atag;\n\n if (comments.length > 0) {\n q.c = comments;\n comments = [];\n }\n\n if (textp && opts.cellText !== false) q.w = textp;\n\n if (isstub) {\n q.t = \"z\";\n delete q.v;\n }\n\n if (!isstub || opts.sheetStubs) {\n if (!(opts.sheetRows && opts.sheetRows <= R)) {\n for (var rpt = 0; rpt < rowpeat; ++rpt) {\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n\n if (opts.dense) {\n if (!ws[R + rpt]) ws[R + rpt] = [];\n ws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\n while (--colpeat > 0) {\n ws[R + rpt][C + colpeat] = dup(q);\n }\n } else {\n ws[encode_cell({\n r: R + rpt,\n c: C\n })] = q;\n\n while (--colpeat > 0) {\n ws[encode_cell({\n r: R + rpt,\n c: C + colpeat\n })] = dup(q);\n }\n }\n\n if (range.e.c <= C) range.e.c = C;\n }\n }\n }\n\n colpeat = parseInt(ctag['number-columns-repeated'] || \"1\", 10);\n C += colpeat - 1;\n colpeat = 0;\n q = {\n /*:: t:\"\", v:null, z:null, w:\"\",c:[]*/\n };\n textp = \"\";\n textR = [];\n }\n\n atag = {}\n /*:any*/\n ;\n break;\n // 9.1.4 \n\n /* pure state */\n\n case 'document': // TODO: is the root for FODS\n\n case 'document-content':\n case '电子表格文档': // 3.1.3.2 \n\n case 'spreadsheet':\n case '主体': // 3.7 \n\n case 'scripts': // 3.12 \n\n case 'styles': // TODO \n\n case 'font-face-decls': // 3.14 \n\n case 'master-styles':\n // 3.15.4 -- relevant for FODS\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], true]);\n\n break;\n\n case 'annotation':\n // 14.1 \n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n comment.t = textp;\n if (textR.length)\n /*::(*/\n comment\n /*:: :any)*/\n .R = textR;\n comment.a = creator;\n comments.push(comment);\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n state.push([Rn[3], false]);\n }\n\n creator = \"\";\n creatoridx = 0;\n textp = \"\";\n textpidx = 0;\n textR = [];\n break;\n\n case 'creator':\n // 4.3.2.7 \n if (Rn[1] === '/') {\n creator = str.slice(creatoridx, Rn.index);\n } else creatoridx = Rn.index + Rn[0].length;\n\n break;\n\n /* ignore state */\n\n case 'meta':\n case '元数据': // TODO: FODS/UOF\n\n case 'settings': // TODO: \n\n case 'config-item-set': // TODO: \n\n case 'config-item-map-indexed': // TODO: \n\n case 'config-item-map-entry': // TODO: \n\n case 'config-item-map-named': // TODO: \n\n case 'shapes': // 9.2.8 \n\n case 'frame': // 10.4.2 \n\n case 'text-box': // 10.4.3 \n\n case 'image': // 10.4.4 \n\n case 'data-pilot-tables': // 9.6.2 \n\n case 'list-style': // 16.30 \n\n case 'form': // 13.13 \n\n case 'dde-links': // 9.8 \n\n case 'event-listeners': // TODO\n\n case 'chart':\n // TODO\n if (Rn[1] === '/') {\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') state.push([Rn[3], false]);\n\n textp = \"\";\n textpidx = 0;\n textR = [];\n break;\n\n case 'scientific-number':\n // TODO: \n break;\n\n case 'currency-symbol':\n // TODO: \n break;\n\n case 'currency-style':\n // TODO: \n break;\n\n case 'number-style': // 16.27.2 \n\n case 'percentage-style': // 16.27.9 \n\n case 'date-style': // 16.27.10 \n\n case 'time-style':\n // 16.27.18 \n if (Rn[1] === '/') {\n number_format_map[NFtag.name] = NF;\n if ((tmp = state.pop())[0] !== Rn[3]) throw \"Bad state: \" + tmp;\n } else if (Rn[0].charAt(Rn[0].length - 2) !== '/') {\n NF = \"\";\n NFtag = parsexmltag(Rn[0], false);\n state.push([Rn[3], true]);\n }\n\n break;\n\n case 'script':\n break;\n // 3.13 \n\n case 'libraries':\n break;\n // TODO: \n\n case 'automatic-styles':\n break;\n // 3.15.3 \n\n case 'default-style': // TODO: \n\n case 'page-layout':\n break;\n // TODO: \n\n case 'style':\n // 16.2 \n break;\n\n case 'map':\n break;\n // 16.3 \n\n case 'font-face':\n break;\n // 16.21 \n\n case 'paragraph-properties':\n break;\n // 17.6 \n\n case 'table-properties':\n break;\n // 17.15 \n\n case 'table-column-properties':\n break;\n // 17.16 \n\n case 'table-row-properties':\n break;\n // 17.17 \n\n case 'table-cell-properties':\n break;\n // 17.18 \n\n case 'number':\n // 16.27.3 \n switch (state[state.length - 1][0]) {\n case 'time-style':\n case 'date-style':\n tag = parsexmltag(Rn[0], false);\n NF += number_formats_ods[Rn[3]][tag.style === 'long' ? 1 : 0];\n break;\n }\n\n break;\n\n case 'fraction':\n break;\n // TODO 16.27.6 \n\n case 'day': // 16.27.11 \n\n case 'month': // 16.27.12 \n\n case 'year': // 16.27.13 \n\n case 'era': // 16.27.14 \n\n case 'day-of-week': // 16.27.15 \n\n case 'week-of-year': // 16.27.16 \n\n case 'quarter': // 16.27.17 \n\n case 'hours': // 16.27.19 \n\n case 'minutes': // 16.27.20 \n\n case 'seconds': // 16.27.21 \n\n case 'am-pm':\n // 16.27.22 \n switch (state[state.length - 1][0]) {\n case 'time-style':\n case 'date-style':\n tag = parsexmltag(Rn[0], false);\n NF += number_formats_ods[Rn[3]][tag.style === 'long' ? 1 : 0];\n break;\n }\n\n break;\n\n case 'boolean-style':\n break;\n // 16.27.23 \n\n case 'boolean':\n break;\n // 16.27.24 \n\n case 'text-style':\n break;\n // 16.27.25 \n\n case 'text':\n // 16.27.26 \n if (Rn[0].slice(-2) === \"/>\") break;else if (Rn[1] === \"/\") switch (state[state.length - 1][0]) {\n case 'number-style':\n case 'date-style':\n case 'time-style':\n NF += str.slice(pidx, Rn.index);\n break;\n } else pidx = Rn.index + Rn[0].length;\n break;\n\n case 'named-range':\n // 9.4.12 \n tag = parsexmltag(Rn[0], false);\n _Ref = ods_to_csf_3D(tag['cell-range-address']);\n var nrange = {\n Name: tag.name,\n Ref: _Ref[0] + '!' + _Ref[1]\n }\n /*:any*/\n ;\n if (intable) nrange.Sheet = SheetNames.length;\n WB.Names.push(nrange);\n break;\n\n case 'text-content':\n break;\n // 16.27.27 \n\n case 'text-properties':\n break;\n // 16.27.27 \n\n case 'embedded-text':\n break;\n // 16.27.4 \n\n case 'body':\n case '电子表格':\n break;\n // 3.3 16.9.6 19.726.3\n\n case 'forms':\n break;\n // 12.25.2 13.2\n\n case 'table-column':\n break;\n // 9.1.6 \n\n case 'table-header-rows':\n break;\n // 9.1.7 \n\n case 'table-rows':\n break;\n // 9.1.12 \n\n /* TODO: outline levels */\n\n case 'table-column-group':\n break;\n // 9.1.10 \n\n case 'table-header-columns':\n break;\n // 9.1.11 \n\n case 'table-columns':\n break;\n // 9.1.12 \n\n case 'null-date':\n break;\n // 9.4.2 TODO: date1904\n\n case 'graphic-properties':\n break;\n // 17.21 \n\n case 'calculation-settings':\n break;\n // 9.4.1 \n\n case 'named-expressions':\n break;\n // 9.4.11 \n\n case 'label-range':\n break;\n // 9.4.9 \n\n case 'label-ranges':\n break;\n // 9.4.10 \n\n case 'named-expression':\n break;\n // 9.4.13 \n\n case 'sort':\n break;\n // 9.4.19 \n\n case 'sort-by':\n break;\n // 9.4.20 \n\n case 'sort-groups':\n break;\n // 9.4.22 \n\n case 'tab':\n break;\n // 6.1.4 \n\n case 'line-break':\n break;\n // 6.1.5 \n\n case 'span':\n break;\n // 6.1.7 \n\n case 'p':\n case '文本串':\n // 5.1.3 \n if (['master-styles'].indexOf(state[state.length - 1][0]) > -1) break;\n\n if (Rn[1] === '/' && (!ctag || !ctag['string-value'])) {\n var ptp = parse_text_p(str.slice(textpidx, Rn.index), textptag);\n textp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n } else {\n textptag = parsexmltag(Rn[0], false);\n textpidx = Rn.index + Rn[0].length;\n }\n\n break;\n // \n\n case 's':\n break;\n // \n\n case 'database-range':\n // 9.4.15 \n if (Rn[1] === '/') break;\n\n try {\n _Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n Sheets[_Ref[0]]['!autofilter'] = {\n ref: _Ref[1]\n };\n } catch (e) {\n /* empty */\n }\n\n break;\n\n case 'date':\n break;\n // <*:date>\n\n case 'object':\n break;\n // 10.4.6.2 \n\n case 'title':\n case '标题':\n break;\n // <*:title> OR \n\n case 'desc':\n break;\n // <*:desc>\n\n case 'binary-data':\n break;\n // 10.4.5 TODO: b64 blob\n\n /* 9.2 Advanced Tables */\n\n case 'table-source':\n break;\n // 9.2.6\n\n case 'scenario':\n break;\n // 9.2.6\n\n case 'iteration':\n break;\n // 9.4.3 \n\n case 'content-validations':\n break;\n // 9.4.4 \n\n case 'filter':\n break;\n // 9.5.2 \n\n case 'filter-and':\n break;\n // 9.5.3 \n\n case 'filter-or':\n break;\n // 9.5.4 \n\n case 'filter-condition':\n break;\n // 9.5.5 \n\n case 'list-level-style-bullet':\n break;\n // 16.31 \n\n case 'page-count':\n break;\n // TODO \n\n case 'time':\n break;\n // TODO \n\n /* 9.3 Advanced Table Cells */\n\n case 'cell-range-source':\n break;\n // 9.3.1 \n\n case 'property':\n break;\n // 13.8 \n\n case 'a':\n // 6.1.8 hyperlink\n if (Rn[1] !== '/') {\n atag = parsexmltag(Rn[0], false);\n if (!atag.href) break;\n atag.Target = unescapexml(atag.href);\n delete atag.href;\n\n if (atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n _Ref = ods_to_csf_3D(atag.Target.slice(1));\n atag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n } else if (atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n }\n\n break;\n\n /* non-standard */\n\n case 'table-protection':\n break;\n\n case 'data-pilot-grand-total':\n break;\n // ', '', '', '', '', '', '', ''].join(\"\");\n var payload = '' + master_styles + '';\n return function\n /*::wb, opts*/\n wso() {\n return XML_HEADER + payload;\n };\n}();\n\nvar write_content_ods\n/*:{(wb:any, opts:any):string}*/\n= /* @__PURE__ */function () {\n /* 6.1.2 White Space Characters */\n var write_text_p = function write_text_p(text\n /*:string*/\n )\n /*:string*/\n {\n return escapexml(text).replace(/ +/g, function ($$) {\n return '';\n }).replace(/\\t/g, \"\").replace(/\\n/g, \"\").replace(/^ /, \"\").replace(/ $/, \"\");\n };\n\n var null_cell_xml = ' \\n';\n var covered_cell_xml = ' \\n';\n\n var write_ws = function write_ws(ws, wb\n /*:Workbook*/\n , i\n /*:number*/\n\n /*::, opts*/\n )\n /*:string*/\n {\n /* Section 9 Tables */\n var o\n /*:Array*/\n = [];\n o.push(' \\n');\n var R = 0,\n C = 0,\n range = decode_range(ws['!ref'] || \"A1\");\n var marr\n /*:Array*/\n = ws['!merges'] || [],\n mi = 0;\n var dense = Array.isArray(ws);\n\n if (ws[\"!cols\"]) {\n for (C = 0; C <= range.e.c; ++C) {\n o.push(' \\n');\n }\n }\n\n var H = \"\",\n ROWS = ws[\"!rows\"] || [];\n\n for (R = 0; R < range.s.r; ++R) {\n H = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n o.push(' \\n');\n }\n\n for (; R <= range.e.r; ++R) {\n H = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n o.push(' \\n');\n\n for (C = 0; C < range.s.c; ++C) {\n o.push(null_cell_xml);\n }\n\n for (; C <= range.e.c; ++C) {\n var skip = false,\n ct = {},\n textp = \"\";\n\n for (mi = 0; mi != marr.length; ++mi) {\n if (marr[mi].s.c > C) continue;\n if (marr[mi].s.r > R) continue;\n if (marr[mi].e.c < C) continue;\n if (marr[mi].e.r < R) continue;\n if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n ct['table:number-columns-spanned'] = marr[mi].e.c - marr[mi].s.c + 1;\n ct['table:number-rows-spanned'] = marr[mi].e.r - marr[mi].s.r + 1;\n break;\n }\n\n if (skip) {\n o.push(covered_cell_xml);\n continue;\n }\n\n var ref = encode_cell({\n r: R,\n c: C\n }),\n cell = dense ? (ws[R] || [])[C] : ws[ref];\n\n if (cell && cell.f) {\n ct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\n if (cell.F) {\n if (cell.F.slice(0, ref.length) == ref) {\n var _Fref = decode_range(cell.F);\n\n ct['table:number-matrix-columns-spanned'] = _Fref.e.c - _Fref.s.c + 1;\n ct['table:number-matrix-rows-spanned'] = _Fref.e.r - _Fref.s.r + 1;\n }\n }\n }\n\n if (!cell) {\n o.push(null_cell_xml);\n continue;\n }\n\n switch (cell.t) {\n case 'b':\n textp = cell.v ? 'TRUE' : 'FALSE';\n ct['office:value-type'] = \"boolean\";\n ct['office:boolean-value'] = cell.v ? 'true' : 'false';\n break;\n\n case 'n':\n textp = cell.w || String(cell.v || 0);\n ct['office:value-type'] = \"float\";\n ct['office:value'] = cell.v || 0;\n break;\n\n case 's':\n case 'str':\n textp = cell.v == null ? \"\" : cell.v;\n ct['office:value-type'] = \"string\";\n break;\n\n case 'd':\n textp = cell.w || parseDate(cell.v).toISOString();\n ct['office:value-type'] = \"date\";\n ct['office:date-value'] = parseDate(cell.v).toISOString();\n ct['table:style-name'] = \"ce1\";\n break;\n //case 'e':\n\n default:\n o.push(null_cell_xml);\n continue;\n }\n\n var text_p = write_text_p(textp);\n\n if (cell.l && cell.l.Target) {\n var _tgt = cell.l.Target;\n _tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt; // TODO: choose correct parent path format based on link delimiters\n\n if (_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n text_p = writextag('text:a', text_p, {\n 'xlink:href': _tgt.replace(/&/g, \"&\")\n });\n }\n\n o.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n }\n\n o.push(' \\n');\n }\n\n o.push(' \\n');\n return o.join(\"\");\n };\n\n var write_automatic_styles_ods = function write_automatic_styles_ods(o\n /*:Array*/\n , wb) {\n o.push(' \\n');\n o.push(' \\n');\n o.push(' \\n');\n o.push(' /\\n');\n o.push(' \\n');\n o.push(' /\\n');\n o.push(' \\n');\n o.push(' \\n');\n /* column styles */\n\n var cidx = 0;\n wb.SheetNames.map(function (n) {\n return wb.Sheets[n];\n }).forEach(function (ws) {\n if (!ws) return;\n\n if (ws[\"!cols\"]) {\n for (var C = 0; C < ws[\"!cols\"].length; ++C) {\n if (ws[\"!cols\"][C]) {\n var colobj = ws[\"!cols\"][C];\n if (colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n process_col(colobj);\n colobj.ods = cidx;\n var w = ws[\"!cols\"][C].wpx + \"px\";\n o.push(' \\n');\n o.push(' \\n');\n o.push(' \\n');\n ++cidx;\n }\n }\n }\n });\n /* row styles */\n\n var ridx = 0;\n wb.SheetNames.map(function (n) {\n return wb.Sheets[n];\n }).forEach(function (ws) {\n if (!ws) return;\n\n if (ws[\"!rows\"]) {\n for (var R = 0; R < ws[\"!rows\"].length; ++R) {\n if (ws[\"!rows\"][R]) {\n ws[\"!rows\"][R].ods = ridx;\n var h = ws[\"!rows\"][R].hpx + \"px\";\n o.push(' \\n');\n o.push(' \\n');\n o.push(' \\n');\n ++ridx;\n }\n }\n }\n });\n /* table */\n\n o.push(' \\n');\n o.push(' \\n');\n o.push(' \\n');\n /* table cells, text */\n\n o.push(' \\n');\n /* page-layout */\n\n o.push(' \\n');\n };\n\n return function wcx(wb, opts) {\n var o = [XML_HEADER];\n /* 3.1.3.2 */\n\n var attr = wxt_helper({\n 'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n 'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n 'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n 'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n 'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n 'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n 'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n 'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n 'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n 'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n 'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n 'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n 'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n 'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n 'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n 'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n 'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n 'xmlns:ooo': \"http://openoffice.org/2004/office\",\n 'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n 'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n 'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n 'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n 'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n 'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n 'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n 'xmlns:rpt': \"http://openoffice.org/2005/report\",\n 'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n 'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n 'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n 'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n 'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n 'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n 'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n 'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n 'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n 'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n 'office:version': \"1.2\"\n });\n var fods = wxt_helper({\n 'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n 'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n });\n\n if (opts.bookType == \"fods\") {\n o.push('\\n');\n o.push(write_meta_ods().replace(/office:document-meta/g, \"office:meta\")); // TODO: settings (equiv of settings.xml for ODS)\n } else o.push('\\n'); // o.push(' \\n');\n\n\n write_automatic_styles_ods(o, wb);\n o.push(' \\n');\n o.push(' \\n');\n\n for (var i = 0; i != wb.SheetNames.length; ++i) {\n o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n }\n\n o.push(' \\n');\n o.push(' \\n');\n if (opts.bookType == \"fods\") o.push('');else o.push('');\n return o.join(\"\");\n };\n}();\n\nfunction write_ods(wb\n/*:any*/\n, opts\n/*:any*/\n) {\n if (opts.bookType == \"fods\") return write_content_ods(wb, opts);\n var zip = zip_new();\n var f = \"\";\n var manifest\n /*:Array >*/\n = [];\n var rdf\n /*:Array<[string, string]>*/\n = [];\n /* Part 3 Section 3.3 MIME Media Type */\n\n f = \"mimetype\";\n zip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n /* Part 1 Section 2.2 Documents */\n\n f = \"content.xml\";\n zip_add_file(zip, f, write_content_ods(wb, opts));\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"ContentFile\"]);\n /* TODO: these are hard-coded styles to satiate excel */\n\n f = \"styles.xml\";\n zip_add_file(zip, f, write_styles_ods(wb, opts));\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"StylesFile\"]);\n /* TODO: this is hard-coded to satiate excel */\n\n f = \"meta.xml\";\n zip_add_file(zip, f, XML_HEADER + write_meta_ods());\n manifest.push([f, \"text/xml\"]);\n rdf.push([f, \"MetadataFile\"]);\n /* Part 3 Section 6 Metadata Manifest File */\n\n f = \"manifest.rdf\";\n zip_add_file(zip, f, write_rdf(rdf\n /*, opts*/\n ));\n manifest.push([f, \"application/rdf+xml\"]);\n /* Part 3 Section 4 Manifest File */\n\n f = \"META-INF/manifest.xml\";\n zip_add_file(zip, f, write_manifest(manifest\n /*, opts*/\n ));\n return zip;\n}\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\n\n\nfunction u8_to_dataview(array) {\n return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\n\nfunction u8str(u8) {\n return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\n\nfunction stru8(str) {\n return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\n\nfunction u8contains(body, search) {\n outer: for (var L = 0; L <= body.length - search.length; ++L) {\n for (var j = 0; j < search.length; ++j) {\n if (body[L + j] != search[j]) continue outer;\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction u8concat(u8a) {\n var len = u8a.reduce(function (acc, x) {\n return acc + x.length;\n }, 0);\n var out = new Uint8Array(len);\n var off = 0;\n u8a.forEach(function (u8) {\n out.set(u8, off);\n off += u8.length;\n });\n return out;\n}\n\nfunction popcnt(x) {\n x -= x >> 1 & 1431655765;\n x = (x & 858993459) + (x >> 2 & 858993459);\n return (x + (x >> 4) & 252645135) * 16843009 >>> 24;\n}\n\nfunction readDecimal128LE(buf, offset) {\n var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;\n var mantissa = buf[offset + 14] & 1;\n\n for (var j = offset + 13; j >= offset; --j) {\n mantissa = mantissa * 256 + buf[j];\n }\n\n return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\n\nfunction writeDecimal128LE(buf, offset, value) {\n var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 20;\n var mantissa = value / Math.pow(10, exp - 6176);\n buf[offset + 15] |= exp >> 7;\n buf[offset + 14] |= (exp & 127) << 1;\n\n for (var i = 0; mantissa >= 1; ++i, mantissa /= 256) {\n buf[offset + i] = mantissa & 255;\n }\n\n buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\n\nfunction parse_varint49(buf, ptr) {\n var l = ptr ? ptr[0] : 0;\n var usz = buf[l] & 127;\n\n varint: if (buf[l++] >= 128) {\n usz |= (buf[l] & 127) << 7;\n if (buf[l++] < 128) break varint;\n usz |= (buf[l] & 127) << 14;\n if (buf[l++] < 128) break varint;\n usz |= (buf[l] & 127) << 21;\n if (buf[l++] < 128) break varint;\n usz += (buf[l] & 127) * Math.pow(2, 28);\n ++l;\n if (buf[l++] < 128) break varint;\n usz += (buf[l] & 127) * Math.pow(2, 35);\n ++l;\n if (buf[l++] < 128) break varint;\n usz += (buf[l] & 127) * Math.pow(2, 42);\n ++l;\n if (buf[l++] < 128) break varint;\n }\n\n if (ptr) ptr[0] = l;\n return usz;\n}\n\nfunction write_varint49(v) {\n var usz = new Uint8Array(7);\n usz[0] = v & 127;\n var L = 1;\n\n sz: if (v > 127) {\n usz[L - 1] |= 128;\n usz[L] = v >> 7 & 127;\n ++L;\n if (v <= 16383) break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 14 & 127;\n ++L;\n if (v <= 2097151) break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 21 & 127;\n ++L;\n if (v <= 268435455) break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 256 >>> 21 & 127;\n ++L;\n if (v <= 34359738367) break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 65536 >>> 21 & 127;\n ++L;\n if (v <= 4398046511103) break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 16777216 >>> 21 & 127;\n ++L;\n }\n\n return usz.slice(0, L);\n}\n\nfunction varint_to_i32(buf) {\n var l = 0,\n i32 = buf[l] & 127;\n\n varint: if (buf[l++] >= 128) {\n i32 |= (buf[l] & 127) << 7;\n if (buf[l++] < 128) break varint;\n i32 |= (buf[l] & 127) << 14;\n if (buf[l++] < 128) break varint;\n i32 |= (buf[l] & 127) << 21;\n if (buf[l++] < 128) break varint;\n i32 |= (buf[l] & 127) << 28;\n }\n\n return i32;\n}\n\nfunction parse_shallow(buf) {\n var out = [],\n ptr = [0];\n\n while (ptr[0] < buf.length) {\n var off = ptr[0];\n var num = parse_varint49(buf, ptr);\n var type = num & 7;\n num = Math.floor(num / 8);\n var len = 0;\n var res;\n if (num == 0) break;\n\n switch (type) {\n case 0:\n {\n var l = ptr[0];\n\n while (buf[ptr[0]++] >= 128) {\n ;\n }\n\n res = buf.slice(l, ptr[0]);\n }\n break;\n\n case 5:\n len = 4;\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n\n case 1:\n len = 8;\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n\n case 2:\n len = parse_varint49(buf, ptr);\n res = buf.slice(ptr[0], ptr[0] + len);\n ptr[0] += len;\n break;\n\n case 3:\n case 4:\n default:\n throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n }\n\n var v = {\n data: res,\n type: type\n };\n if (out[num] == null) out[num] = [v];else out[num].push(v);\n }\n\n return out;\n}\n\nfunction write_shallow(proto) {\n var out = [];\n proto.forEach(function (field, idx) {\n field.forEach(function (item) {\n if (!item.data) return;\n out.push(write_varint49(idx * 8 + item.type));\n if (item.type == 2) out.push(write_varint49(item.data.length));\n out.push(item.data);\n });\n });\n return u8concat(out);\n}\n\nfunction mappa(data, cb) {\n return (data == null ? void 0 : data.map(function (d) {\n return cb(d.data);\n })) || [];\n}\n\nfunction parse_iwa_file(buf) {\n var _a;\n\n var out = [],\n ptr = [0];\n\n while (ptr[0] < buf.length) {\n var len = parse_varint49(buf, ptr);\n var ai = parse_shallow(buf.slice(ptr[0], ptr[0] + len));\n ptr[0] += len;\n var res = {\n id: varint_to_i32(ai[1][0].data),\n messages: []\n };\n ai[2].forEach(function (b) {\n var mi = parse_shallow(b.data);\n var fl = varint_to_i32(mi[3][0].data);\n res.messages.push({\n meta: mi,\n data: buf.slice(ptr[0], ptr[0] + fl)\n });\n ptr[0] += fl;\n });\n if ((_a = ai[3]) == null ? void 0 : _a[0]) res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n out.push(res);\n }\n\n return out;\n}\n\nfunction write_iwa_file(ias) {\n var bufs = [];\n ias.forEach(function (ia) {\n var ai = [];\n ai[1] = [{\n data: write_varint49(ia.id),\n type: 0\n }];\n ai[2] = [];\n if (ia.merge != null) ai[3] = [{\n data: write_varint49(+!!ia.merge),\n type: 0\n }];\n var midata = [];\n ia.messages.forEach(function (mi) {\n midata.push(mi.data);\n mi.meta[3] = [{\n type: 0,\n data: write_varint49(mi.data.length)\n }];\n ai[2].push({\n data: write_shallow(mi.meta),\n type: 2\n });\n });\n var aipayload = write_shallow(ai);\n bufs.push(write_varint49(aipayload.length));\n bufs.push(aipayload);\n midata.forEach(function (mid) {\n return bufs.push(mid);\n });\n });\n return u8concat(bufs);\n}\n\nfunction parse_snappy_chunk(type, buf) {\n if (type != 0) throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n var ptr = [0];\n var usz = parse_varint49(buf, ptr);\n var chunks = [];\n\n while (ptr[0] < buf.length) {\n var tag = buf[ptr[0]] & 3;\n\n if (tag == 0) {\n var len = buf[ptr[0]++] >> 2;\n if (len < 60) ++len;else {\n var c = len - 59;\n len = buf[ptr[0]];\n if (c > 1) len |= buf[ptr[0] + 1] << 8;\n if (c > 2) len |= buf[ptr[0] + 2] << 16;\n if (c > 3) len |= buf[ptr[0] + 3] << 24;\n len >>>= 0;\n len++;\n ptr[0] += c;\n }\n chunks.push(buf.slice(ptr[0], ptr[0] + len));\n ptr[0] += len;\n continue;\n } else {\n var offset = 0,\n length = 0;\n\n if (tag == 1) {\n length = (buf[ptr[0]] >> 2 & 7) + 4;\n offset = (buf[ptr[0]++] & 224) << 3;\n offset |= buf[ptr[0]++];\n } else {\n length = (buf[ptr[0]++] >> 2) + 1;\n\n if (tag == 2) {\n offset = buf[ptr[0]] | buf[ptr[0] + 1] << 8;\n ptr[0] += 2;\n } else {\n offset = (buf[ptr[0]] | buf[ptr[0] + 1] << 8 | buf[ptr[0] + 2] << 16 | buf[ptr[0] + 3] << 24) >>> 0;\n ptr[0] += 4;\n }\n }\n\n chunks = [u8concat(chunks)];\n if (offset == 0) throw new Error(\"Invalid offset 0\");\n if (offset > chunks[0].length) throw new Error(\"Invalid offset beyond length\");\n\n if (length >= offset) {\n chunks.push(chunks[0].slice(-offset));\n length -= offset;\n\n while (length >= chunks[chunks.length - 1].length) {\n chunks.push(chunks[chunks.length - 1]);\n length -= chunks[chunks.length - 1].length;\n }\n }\n\n chunks.push(chunks[0].slice(-offset, -offset + length));\n }\n }\n\n var o = u8concat(chunks);\n if (o.length != usz) throw new Error(\"Unexpected length: \".concat(o.length, \" != \").concat(usz));\n return o;\n}\n\nfunction decompress_iwa_file(buf) {\n var out = [];\n var l = 0;\n\n while (l < buf.length) {\n var t = buf[l++];\n var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;\n l += 3;\n out.push(parse_snappy_chunk(t, buf.slice(l, l + len)));\n l += len;\n }\n\n if (l !== buf.length) throw new Error(\"data is not a valid framed stream!\");\n return u8concat(out);\n}\n\nfunction compress_iwa_file(buf) {\n var out = [];\n var l = 0;\n\n while (l < buf.length) {\n var c = Math.min(buf.length - l, 268435455);\n var frame = new Uint8Array(4);\n out.push(frame);\n var usz = write_varint49(c);\n var L = usz.length;\n out.push(usz);\n\n if (c <= 60) {\n L++;\n out.push(new Uint8Array([c - 1 << 2]));\n } else if (c <= 256) {\n L += 2;\n out.push(new Uint8Array([240, c - 1 & 255]));\n } else if (c <= 65536) {\n L += 3;\n out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));\n } else if (c <= 16777216) {\n L += 4;\n out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));\n } else if (c <= 4294967296) {\n L += 5;\n out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));\n }\n\n out.push(buf.slice(l, l + c));\n L += c;\n frame[0] = 0;\n frame[1] = L & 255;\n frame[2] = L >> 8 & 255;\n frame[3] = L >> 16 & 255;\n l += c;\n }\n\n return u8concat(out);\n}\n\nfunction parse_old_storage(buf, sst, rsst, v) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var data_offset = (v > 1 ? 12 : 8) + popcnt(flags & (v > 1 ? 3470 : 398)) * 4;\n var ridx = -1,\n sidx = -1,\n ieee = NaN,\n dt = new Date(2001, 0, 1);\n\n if (flags & 512) {\n ridx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n\n data_offset += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n\n if (flags & 16) {\n sidx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n\n if (flags & 32) {\n ieee = dv.getFloat64(data_offset, true);\n data_offset += 8;\n }\n\n if (flags & 64) {\n dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n data_offset += 8;\n }\n\n var ret;\n\n switch (buf[2]) {\n case 0:\n break;\n\n case 2:\n ret = {\n t: \"n\",\n v: ieee\n };\n break;\n\n case 3:\n ret = {\n t: \"s\",\n v: sst[sidx]\n };\n break;\n\n case 5:\n ret = {\n t: \"d\",\n v: dt\n };\n break;\n\n case 6:\n ret = {\n t: \"b\",\n v: ieee > 0\n };\n break;\n\n case 7:\n ret = {\n t: \"n\",\n v: ieee / 86400\n };\n break;\n\n case 8:\n ret = {\n t: \"e\",\n v: 0\n };\n break;\n\n case 9:\n {\n if (ridx > -1) ret = {\n t: \"s\",\n v: rsst[ridx]\n };else if (sidx > -1) ret = {\n t: \"s\",\n v: sst[sidx]\n };else if (!isNaN(ieee)) ret = {\n t: \"n\",\n v: ieee\n };else throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n }\n break;\n\n default:\n throw new Error(\"Unsupported cell type \".concat(buf.slice(0, 4)));\n }\n\n return ret;\n}\n\nfunction parse_new_storage(buf, sst, rsst) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(8, true);\n var data_offset = 12;\n var ridx = -1,\n sidx = -1,\n d128 = NaN,\n ieee = NaN,\n dt = new Date(2001, 0, 1);\n\n if (flags & 1) {\n d128 = readDecimal128LE(buf, data_offset);\n data_offset += 16;\n }\n\n if (flags & 2) {\n ieee = dv.getFloat64(data_offset, true);\n data_offset += 8;\n }\n\n if (flags & 4) {\n dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);\n data_offset += 8;\n }\n\n if (flags & 8) {\n sidx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n\n if (flags & 16) {\n ridx = dv.getUint32(data_offset, true);\n data_offset += 4;\n }\n\n var ret;\n\n switch (buf[1]) {\n case 0:\n break;\n\n case 2:\n ret = {\n t: \"n\",\n v: d128\n };\n break;\n\n case 3:\n ret = {\n t: \"s\",\n v: sst[sidx]\n };\n break;\n\n case 5:\n ret = {\n t: \"d\",\n v: dt\n };\n break;\n\n case 6:\n ret = {\n t: \"b\",\n v: ieee > 0\n };\n break;\n\n case 7:\n ret = {\n t: \"n\",\n v: ieee / 86400\n };\n break;\n\n case 8:\n ret = {\n t: \"e\",\n v: 0\n };\n break;\n\n case 9:\n {\n if (ridx > -1) ret = {\n t: \"s\",\n v: rsst[ridx]\n };else throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n }\n break;\n\n case 10:\n ret = {\n t: \"n\",\n v: d128\n };\n break;\n\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(flags & 31, \" : \").concat(buf.slice(0, 4)));\n }\n\n return ret;\n}\n\nfunction write_new_storage(cell, sst) {\n var out = new Uint8Array(32),\n dv = u8_to_dataview(out),\n l = 12,\n flags = 0;\n out[0] = 5;\n\n switch (cell.t) {\n case \"n\":\n out[1] = 2;\n writeDecimal128LE(out, l, cell.v);\n flags |= 1;\n l += 16;\n break;\n\n case \"b\":\n out[1] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n flags |= 2;\n l += 8;\n break;\n\n case \"s\":\n if (sst.indexOf(cell.v) == -1) throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n out[1] = 3;\n dv.setUint32(l, sst.indexOf(cell.v), true);\n flags |= 8;\n l += 4;\n break;\n\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n\n dv.setUint32(8, flags, true);\n return out.slice(0, l);\n}\n\nfunction write_old_storage(cell, sst) {\n var out = new Uint8Array(32),\n dv = u8_to_dataview(out),\n l = 12,\n flags = 0;\n out[0] = 3;\n\n switch (cell.t) {\n case \"n\":\n out[2] = 2;\n dv.setFloat64(l, cell.v, true);\n flags |= 32;\n l += 8;\n break;\n\n case \"b\":\n out[2] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n flags |= 32;\n l += 8;\n break;\n\n case \"s\":\n if (sst.indexOf(cell.v) == -1) throw new Error(\"Value \".concat(cell.v, \" missing from SST!\"));\n out[2] = 3;\n dv.setUint32(l, sst.indexOf(cell.v), true);\n flags |= 16;\n l += 4;\n break;\n\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n\n dv.setUint32(4, flags, true);\n return out.slice(0, l);\n}\n\nfunction parse_cell_storage(buf, sst, rsst) {\n switch (buf[0]) {\n case 0:\n case 1:\n case 2:\n case 3:\n return parse_old_storage(buf, sst, rsst, buf[0]);\n\n case 5:\n return parse_new_storage(buf, sst, rsst);\n\n default:\n throw new Error(\"Unsupported payload version \".concat(buf[0]));\n }\n}\n\nfunction parse_TSP_Reference(buf) {\n var pb = parse_shallow(buf);\n return parse_varint49(pb[1][0].data);\n}\n\nfunction write_TSP_Reference(idx) {\n var out = [];\n out[1] = [{\n type: 0,\n data: write_varint49(idx)\n }];\n return write_shallow(out);\n}\n\nfunction parse_TST_TableDataList(M, root) {\n var pb = parse_shallow(root.data);\n var type = varint_to_i32(pb[1][0].data);\n var entries = pb[3];\n var data = [];\n (entries || []).forEach(function (entry) {\n var le = parse_shallow(entry.data);\n var key = varint_to_i32(le[1][0].data) >>> 0;\n\n switch (type) {\n case 1:\n data[key] = u8str(le[3][0].data);\n break;\n\n case 8:\n {\n var rt = M[parse_TSP_Reference(le[9][0].data)][0];\n var rtp = parse_shallow(rt.data);\n var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];\n var mtype = varint_to_i32(rtpref.meta[1][0].data);\n if (mtype != 2001) throw new Error(\"2000 unexpected reference to \".concat(mtype));\n var tswpsa = parse_shallow(rtpref.data);\n data[key] = tswpsa[3].map(function (x) {\n return u8str(x.data);\n }).join(\"\");\n }\n break;\n }\n });\n return data;\n}\n\nfunction parse_TST_TileRowInfo(u8, type) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\n\n var pb = parse_shallow(u8);\n var R = varint_to_i32(pb[1][0].data) >>> 0;\n var cnt = varint_to_i32(pb[2][0].data) >>> 0;\n var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;\n var used_storage_u8, used_storage;\n\n if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {\n used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;\n used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;\n } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {\n used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;\n used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;\n } else throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n\n var width = wide_offsets ? 4 : 1;\n var used_storage_offsets = u8_to_dataview(used_storage_u8);\n var offsets = [];\n\n for (var C = 0; C < used_storage_u8.length / 2; ++C) {\n var off = used_storage_offsets.getUint16(C * 2, true);\n if (off < 65535) offsets.push([C, off]);\n }\n\n if (offsets.length != cnt) throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n var cells = [];\n\n for (C = 0; C < offsets.length - 1; ++C) {\n cells[offsets[C][0]] = used_storage.subarray(offsets[C][1] * width, offsets[C + 1][1] * width);\n }\n\n if (offsets.length >= 1) cells[offsets[offsets.length - 1][0]] = used_storage.subarray(offsets[offsets.length - 1][1] * width);\n return {\n R: R,\n cells: cells\n };\n}\n\nfunction parse_TST_Tile(M, root) {\n var _a;\n\n var pb = parse_shallow(root.data);\n var storage = ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) ? varint_to_i32(pb[7][0].data) >>> 0 > 0 ? 1 : 0 : -1;\n var ri = mappa(pb[5], function (u8) {\n return parse_TST_TileRowInfo(u8, storage);\n });\n return {\n nrows: varint_to_i32(pb[4][0].data) >>> 0,\n data: ri.reduce(function (acc, x) {\n if (!acc[x.R]) acc[x.R] = [];\n x.cells.forEach(function (cell, C) {\n if (acc[x.R][C]) throw new Error(\"Duplicate cell r=\".concat(x.R, \" c=\").concat(C));\n acc[x.R][C] = cell;\n });\n return acc;\n }, [])\n };\n}\n\nfunction parse_TST_TableModelArchive(M, root, ws) {\n var _a;\n\n var pb = parse_shallow(root.data);\n var range = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n if (range.e.r < 0) throw new Error(\"Invalid row varint \".concat(pb[6][0].data));\n range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;\n if (range.e.c < 0) throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n ws[\"!ref\"] = encode_range(range);\n var store = parse_shallow(pb[4][0].data);\n var sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n var rsst = ((_a = store[17]) == null ? void 0 : _a[0]) ? parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]) : [];\n var tile = parse_shallow(store[3][0].data);\n var _R = 0;\n tile[1].forEach(function (t) {\n var tl = parse_shallow(t.data);\n var ref = M[parse_TSP_Reference(tl[2][0].data)][0];\n var mtype = varint_to_i32(ref.meta[1][0].data);\n if (mtype != 6002) throw new Error(\"6001 unexpected reference to \".concat(mtype));\n\n var _tile = parse_TST_Tile(M, ref);\n\n _tile.data.forEach(function (row, R) {\n row.forEach(function (buf, C) {\n var addr = encode_cell({\n r: _R + R,\n c: C\n });\n var res = parse_cell_storage(buf, sst, rsst);\n if (res) ws[addr] = res;\n });\n });\n\n _R += _tile.nrows;\n });\n}\n\nfunction parse_TST_TableInfoArchive(M, root) {\n var pb = parse_shallow(root.data);\n var out = {\n \"!ref\": \"A1\"\n };\n var tableref = M[parse_TSP_Reference(pb[2][0].data)];\n var mtype = varint_to_i32(tableref[0].meta[1][0].data);\n if (mtype != 6001) throw new Error(\"6000 unexpected reference to \".concat(mtype));\n parse_TST_TableModelArchive(M, tableref[0], out);\n return out;\n}\n\nfunction parse_TN_SheetArchive(M, root) {\n var _a;\n\n var pb = parse_shallow(root.data);\n var out = {\n name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : \"\",\n sheets: []\n };\n var shapeoffs = mappa(pb[2], parse_TSP_Reference);\n shapeoffs.forEach(function (off) {\n M[off].forEach(function (m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 6e3) out.sheets.push(parse_TST_TableInfoArchive(M, m));\n });\n });\n return out;\n}\n\nfunction parse_TN_DocumentArchive(M, root) {\n var out = book_new();\n var pb = parse_shallow(root.data);\n var sheetoffs = mappa(pb[1], parse_TSP_Reference);\n sheetoffs.forEach(function (off) {\n M[off].forEach(function (m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n\n if (mtype == 2) {\n var root2 = parse_TN_SheetArchive(M, m);\n root2.sheets.forEach(function (sheet, idx) {\n book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + \"_\" + idx, true);\n });\n }\n });\n });\n if (out.SheetNames.length == 0) throw new Error(\"Empty NUMBERS file\");\n return out;\n}\n\nfunction parse_numbers_iwa(cfb) {\n var _a, _b, _c, _d;\n\n var M = {},\n indices = [];\n cfb.FullPaths.forEach(function (p) {\n if (p.match(/\\.iwpv2/)) throw new Error(\"Unsupported password protection\");\n });\n cfb.FileIndex.forEach(function (s) {\n if (!s.name.match(/\\.iwa$/)) return;\n var o;\n\n try {\n o = decompress_iwa_file(s.content);\n } catch (e) {\n return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n }\n\n var packets;\n\n try {\n packets = parse_iwa_file(o);\n } catch (e) {\n return console.log(\"## \" + (e.message || e));\n }\n\n packets.forEach(function (packet) {\n M[packet.id] = packet.messages;\n indices.push(packet.id);\n });\n });\n if (!indices.length) throw new Error(\"File has no messages\");\n var docroot = ((_d = (_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.meta) == null ? void 0 : _c[1]) == null ? void 0 : _d[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n if (!docroot) indices.forEach(function (idx) {\n M[idx].forEach(function (iwam) {\n var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n\n if (mtype == 1) {\n if (!docroot) docroot = iwam;else throw new Error(\"Document has multiple roots\");\n }\n });\n });\n if (!docroot) throw new Error(\"Cannot find Document root\");\n return parse_TN_DocumentArchive(M, docroot);\n}\n\nfunction write_tile_row(tri, data, SST) {\n var _a, _b, _c, _d;\n\n if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0])) throw \"Mutation only works on post-BNC storages!\";\n var wide_offsets = ((_d = (_c = tri[8]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && varint_to_i32(tri[8][0].data) > 0 || false;\n if (wide_offsets) throw \"Math only works with normal offsets\";\n var cnt = 0;\n var dv = u8_to_dataview(tri[7][0].data),\n last_offset = 0,\n cell_storage = [];\n\n var _dv = u8_to_dataview(tri[4][0].data),\n _last_offset = 0,\n _cell_storage = [];\n\n for (var C = 0; C < data.length; ++C) {\n if (data[C] == null) {\n dv.setUint16(C * 2, 65535, true);\n\n _dv.setUint16(C * 2, 65535);\n\n continue;\n }\n\n dv.setUint16(C * 2, last_offset, true);\n\n _dv.setUint16(C * 2, _last_offset, true);\n\n var celload, _celload;\n\n switch (typeof data[C]) {\n case \"string\":\n celload = write_new_storage({\n t: \"s\",\n v: data[C]\n }, SST);\n _celload = write_old_storage({\n t: \"s\",\n v: data[C]\n }, SST);\n break;\n\n case \"number\":\n celload = write_new_storage({\n t: \"n\",\n v: data[C]\n }, SST);\n _celload = write_old_storage({\n t: \"n\",\n v: data[C]\n }, SST);\n break;\n\n case \"boolean\":\n celload = write_new_storage({\n t: \"b\",\n v: data[C]\n }, SST);\n _celload = write_old_storage({\n t: \"b\",\n v: data[C]\n }, SST);\n break;\n\n default:\n throw new Error(\"Unsupported value \" + data[C]);\n }\n\n cell_storage.push(celload);\n last_offset += celload.length;\n\n _cell_storage.push(_celload);\n\n _last_offset += _celload.length;\n ++cnt;\n }\n\n tri[2][0].data = write_varint49(cnt);\n\n for (; C < tri[7][0].data.length / 2; ++C) {\n dv.setUint16(C * 2, 65535, true);\n\n _dv.setUint16(C * 2, 65535, true);\n }\n\n tri[6][0].data = u8concat(cell_storage);\n tri[3][0].data = u8concat(_cell_storage);\n return cnt;\n}\n\nfunction write_numbers_iwa(wb, opts) {\n if (!opts || !opts.numbers) throw new Error(\"Must pass a `numbers` option -- check the README\");\n var ws = wb.Sheets[wb.SheetNames[0]];\n if (wb.SheetNames.length > 1) console.error(\"The Numbers writer currently writes only the first table\");\n var range = decode_range(ws[\"!ref\"]);\n range.s.r = range.s.c = 0;\n var trunc = false;\n\n if (range.e.c > 9) {\n trunc = true;\n range.e.c = 9;\n }\n\n if (range.e.r > 49) {\n trunc = true;\n range.e.r = 49;\n }\n\n if (trunc) console.error(\"The Numbers writer is currently limited to \".concat(encode_range(range)));\n var data = sheet_to_json(ws, {\n range: range,\n header: 1\n });\n var SST = [\"~Sh33tJ5~\"];\n data.forEach(function (row) {\n return row.forEach(function (cell) {\n if (typeof cell == \"string\") SST.push(cell);\n });\n });\n var dependents = {};\n var indices = [];\n var cfb = CFB.read(opts.numbers, {\n type: \"base64\"\n });\n cfb.FileIndex.map(function (fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function (row) {\n var fi = row[0],\n fp = row[1];\n if (fi.type != 2) return;\n if (!fi.name.match(/\\.iwa/)) return;\n var old_content = fi.content;\n var raw1 = decompress_iwa_file(old_content);\n var x2 = parse_iwa_file(raw1);\n x2.forEach(function (packet2) {\n indices.push(packet2.id);\n dependents[packet2.id] = {\n deps: [],\n location: fp,\n type: varint_to_i32(packet2.messages[0].meta[1][0].data)\n };\n });\n });\n indices.sort(function (x2, y2) {\n return x2 - y2;\n });\n var indices_varint = indices.filter(function (x2) {\n return x2 > 1;\n }).map(function (x2) {\n return [x2, write_varint49(x2)];\n });\n cfb.FileIndex.map(function (fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function (row) {\n var fi = row[0],\n fp = row[1];\n if (!fi.name.match(/\\.iwa/)) return;\n var x2 = parse_iwa_file(decompress_iwa_file(fi.content));\n x2.forEach(function (ia) {\n ia.messages.forEach(function (m) {\n indices_varint.forEach(function (ivi) {\n if (ia.messages.some(function (mess) {\n return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);\n })) {\n dependents[ivi[0]].deps.push(ia.id);\n }\n });\n });\n });\n });\n\n function get_unique_msgid() {\n for (var i = 927262; i < 2e6; ++i) {\n if (!dependents[i]) return i;\n }\n\n throw new Error(\"Too many messages\");\n }\n\n var entry = CFB.find(cfb, dependents[1].location);\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var docroot;\n\n for (var xi = 0; xi < x.length; ++xi) {\n var packet = x[xi];\n if (packet.id == 1) docroot = packet;\n }\n\n var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref) docroot = packet;\n }\n\n sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref) docroot = packet;\n }\n\n sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);\n entry = CFB.find(cfb, dependents[sheetrootref].location);\n x = parse_iwa_file(decompress_iwa_file(entry.content));\n\n for (xi = 0; xi < x.length; ++xi) {\n packet = x[xi];\n if (packet.id == sheetrootref) docroot = packet;\n }\n\n var pb = parse_shallow(docroot.messages[0].data);\n {\n pb[6][0].data = write_varint49(range.e.r + 1);\n pb[7][0].data = write_varint49(range.e.c + 1);\n var cruidsref = parse_TSP_Reference(pb[46][0].data);\n var oldbucket = CFB.find(cfb, dependents[cruidsref].location);\n\n var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n\n {\n for (var j = 0; j < _x.length; ++j) {\n if (_x[j].id == cruidsref) break;\n }\n\n if (_x[j].id != cruidsref) throw \"Bad ColumnRowUIDMapArchive\";\n var cruids = parse_shallow(_x[j].messages[0].data);\n cruids[1] = [];\n cruids[2] = [], cruids[3] = [];\n\n for (var C = 0; C <= range.e.c; ++C) {\n var uuid = [];\n uuid[1] = uuid[2] = [{\n type: 0,\n data: write_varint49(C + 420690)\n }];\n cruids[1].push({\n type: 2,\n data: write_shallow(uuid)\n });\n cruids[2].push({\n type: 0,\n data: write_varint49(C)\n });\n cruids[3].push({\n type: 0,\n data: write_varint49(C)\n });\n }\n\n cruids[4] = [];\n cruids[5] = [], cruids[6] = [];\n\n for (var R = 0; R <= range.e.r; ++R) {\n uuid = [];\n uuid[1] = uuid[2] = [{\n type: 0,\n data: write_varint49(R + 726270)\n }];\n cruids[4].push({\n type: 2,\n data: write_shallow(uuid)\n });\n cruids[5].push({\n type: 0,\n data: write_varint49(R)\n });\n cruids[6].push({\n type: 0,\n data: write_varint49(R)\n });\n }\n\n _x[j].messages[0].data = write_shallow(cruids);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n delete pb[46];\n var store = parse_shallow(pb[4][0].data);\n {\n store[7][0].data = write_varint49(range.e.r + 1);\n var row_headers = parse_shallow(store[1][0].data);\n var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);\n oldbucket = CFB.find(cfb, dependents[row_header_ref].location);\n _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n {\n if (_x[0].id != row_header_ref) throw \"Bad HeaderStorageBucket\";\n var base_bucket = parse_shallow(_x[0].messages[0].data);\n\n for (R = 0; R < data.length; ++R) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n\n _bucket[1][0].data = write_varint49(R);\n _bucket[4][0].data = write_varint49(data[R].length);\n base_bucket[2][R] = {\n type: base_bucket[2][0].type,\n data: write_shallow(_bucket)\n };\n }\n\n _x[0].messages[0].data = write_shallow(base_bucket);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n var col_header_ref = parse_TSP_Reference(store[2][0].data);\n oldbucket = CFB.find(cfb, dependents[col_header_ref].location);\n _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));\n {\n if (_x[0].id != col_header_ref) throw \"Bad HeaderStorageBucket\";\n base_bucket = parse_shallow(_x[0].messages[0].data);\n\n for (C = 0; C <= range.e.c; ++C) {\n _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(C);\n _bucket[4][0].data = write_varint49(range.e.r + 1);\n base_bucket[2][C] = {\n type: base_bucket[2][0].type,\n data: write_shallow(_bucket)\n };\n }\n\n _x[0].messages[0].data = write_shallow(base_bucket);\n }\n oldbucket.content = compress_iwa_file(write_iwa_file(_x));\n oldbucket.size = oldbucket.content.length;\n var sstref = parse_TSP_Reference(store[4][0].data);\n\n (function () {\n var sentry = CFB.find(cfb, dependents[sstref].location);\n var sx = parse_iwa_file(decompress_iwa_file(sentry.content));\n var sstroot;\n\n for (var sxi = 0; sxi < sx.length; ++sxi) {\n var packet2 = sx[sxi];\n if (packet2.id == sstref) sstroot = packet2;\n }\n\n var sstdata = parse_shallow(sstroot.messages[0].data);\n {\n sstdata[3] = [];\n var newsst = [];\n SST.forEach(function (str, i) {\n newsst[1] = [{\n type: 0,\n data: write_varint49(i)\n }];\n newsst[2] = [{\n type: 0,\n data: write_varint49(1)\n }];\n newsst[3] = [{\n type: 2,\n data: stru8(str)\n }];\n sstdata[3].push({\n type: 2,\n data: write_shallow(newsst)\n });\n });\n }\n sstroot.messages[0].data = write_shallow(sstdata);\n var sy = write_iwa_file(sx);\n var raw32 = compress_iwa_file(sy);\n sentry.content = raw32;\n sentry.size = sentry.content.length;\n })();\n\n var tile = parse_shallow(store[3][0].data);\n {\n var t = tile[1][0];\n delete tile[2];\n var tl = parse_shallow(t.data);\n {\n var tileref = parse_TSP_Reference(tl[2][0].data);\n\n (function () {\n var tentry = CFB.find(cfb, dependents[tileref].location);\n var tx = parse_iwa_file(decompress_iwa_file(tentry.content));\n var tileroot;\n\n for (var sxi = 0; sxi < tx.length; ++sxi) {\n var packet2 = tx[sxi];\n if (packet2.id == tileref) tileroot = packet2;\n }\n\n var tiledata = parse_shallow(tileroot.messages[0].data);\n {\n delete tiledata[6];\n delete tile[7];\n var rowload = new Uint8Array(tiledata[5][0].data);\n tiledata[5] = [];\n var cnt = 0;\n\n for (var R2 = 0; R2 <= range.e.r; ++R2) {\n var tilerow = parse_shallow(rowload);\n cnt += write_tile_row(tilerow, data[R2], SST);\n tilerow[1][0].data = write_varint49(R2);\n tiledata[5].push({\n data: write_shallow(tilerow),\n type: 2\n });\n }\n\n tiledata[1] = [{\n type: 0,\n data: write_varint49(range.e.c + 1)\n }];\n tiledata[2] = [{\n type: 0,\n data: write_varint49(range.e.r + 1)\n }];\n tiledata[3] = [{\n type: 0,\n data: write_varint49(cnt)\n }];\n tiledata[4] = [{\n type: 0,\n data: write_varint49(range.e.r + 1)\n }];\n }\n tileroot.messages[0].data = write_shallow(tiledata);\n var ty = write_iwa_file(tx);\n var raw32 = compress_iwa_file(ty);\n tentry.content = raw32;\n tentry.size = tentry.content.length;\n })();\n }\n t.data = write_shallow(tl);\n }\n store[3][0].data = write_shallow(tile);\n }\n pb[4][0].data = write_shallow(store);\n }\n docroot.messages[0].data = write_shallow(pb);\n var y = write_iwa_file(x);\n var raw3 = compress_iwa_file(y);\n entry.content = raw3;\n entry.size = entry.content.length;\n return cfb;\n}\n\nfunction fix_opts_func(defaults\n/*:Array >*/\n)\n/*:{(o:any):void}*/\n{\n return function fix_opts(opts) {\n for (var i = 0; i != defaults.length; ++i) {\n var d = defaults[i];\n if (opts[d[0]] === undefined) opts[d[0]] = d[1];\n if (d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n }\n };\n}\n\nfunction fix_read_opts(opts) {\n fix_opts_func([['cellNF', false],\n /* emit cell number format string as .z */\n ['cellHTML', true],\n /* emit html string as .h */\n ['cellFormula', true],\n /* emit formulae as .f */\n ['cellStyles', false],\n /* emits style/theme as .s */\n ['cellText', true],\n /* emit formatted text as .w */\n ['cellDates', false],\n /* emit date cells with type `d` */\n ['sheetStubs', false],\n /* emit empty cells */\n ['sheetRows', 0, 'n'],\n /* read n rows (0 = read all rows) */\n ['bookDeps', false],\n /* parse calculation chains */\n ['bookSheets', false],\n /* only try to get sheet names (no Sheets) */\n ['bookProps', false],\n /* only try to get properties (no Sheets) */\n ['bookFiles', false],\n /* include raw file structure (keys, files, cfb) */\n ['bookVBA', false],\n /* include vba raw data (vbaraw) */\n ['password', ''],\n /* password */\n ['WTF', false]\n /* WTF mode (throws errors) */\n ])(opts);\n}\n\nfunction fix_write_opts(opts) {\n fix_opts_func([['cellDates', false],\n /* write date cells with type `d` */\n ['bookSST', false],\n /* Generate Shared String Table */\n ['bookType', 'xlsx'],\n /* Type of workbook (xlsx/m/b) */\n ['compression', false],\n /* Use file compression */\n ['WTF', false]\n /* WTF mode (throws errors) */\n ])(opts);\n}\n\nfunction get_sheet_type(n\n/*:string*/\n)\n/*:string*/\n{\n if (RELS.WS.indexOf(n) > -1) return \"sheet\";\n if (RELS.CS && n == RELS.CS) return \"chart\";\n if (RELS.DS && n == RELS.DS) return \"dialog\";\n if (RELS.MS && n == RELS.MS) return \"macro\";\n return n && n.length ? n : \"sheet\";\n}\n\nfunction safe_parse_wbrels(wbrels, sheets) {\n if (!wbrels) return 0;\n\n try {\n wbrels = sheets.map(function pwbr(w) {\n if (!w.id) w.id = w.strRelID;\n return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)];\n });\n } catch (e) {\n return null;\n }\n\n return !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path\n/*:string*/\n, relsPath\n/*:string*/\n, sheet, idx\n/*:number*/\n, sheetRels, sheets, stype\n/*:string*/\n, opts, wb, themes, styles) {\n try {\n sheetRels[sheet] = parse_rels(getzipstr(zip, relsPath, true), path);\n var data = getzipdata(zip, path);\n\n var _ws;\n\n switch (stype) {\n case 'sheet':\n _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n case 'chart':\n _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n if (!_ws || !_ws['!drawel']) break;\n var dfile = resolve_path(_ws['!drawel'].Target, path);\n var drelsp = get_rels_path(dfile);\n var draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n var chartp = resolve_path(draw, dfile);\n var crelsp = get_rels_path(chartp);\n _ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n break;\n\n case 'macro':\n _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n case 'dialog':\n _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n break;\n\n default:\n throw new Error(\"Unrecognized sheet type \" + stype);\n }\n\n sheets[sheet] = _ws;\n /* scan rels for comments and threaded comments */\n\n var tcomments = [];\n if (sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function (n) {\n var dfile = \"\";\n\n if (sheetRels[sheet][n].Type == RELS.CMNT) {\n dfile = resolve_path(sheetRels[sheet][n].Target, path);\n var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n if (!comments || !comments.length) return;\n sheet_insert_comments(_ws, comments, false);\n }\n\n if (sheetRels[sheet][n].Type == RELS.TCMNT) {\n dfile = resolve_path(sheetRels[sheet][n].Target, path);\n tcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n }\n });\n if (tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n } catch (e) {\n if (opts.WTF) throw e;\n }\n}\n\nfunction strip_front_slash(x\n/*:string*/\n)\n/*:string*/\n{\n return x.charAt(0) == '/' ? x.slice(1) : x;\n}\n\nfunction parse_zip(zip\n/*:ZIP*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n make_ssf();\n opts = opts || {};\n fix_read_opts(opts);\n /* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\n if (safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n /* UOC */\n\n if (safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n /* Numbers */\n\n if (safegetzipfile(zip, 'Index/Document.iwa')) {\n if (typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\n if (typeof parse_numbers_iwa != \"undefined\") {\n if (zip.FileIndex) return parse_numbers_iwa(zip);\n\n var _zip = CFB.utils.cfb_new();\n\n zipentries(zip).forEach(function (e) {\n zip_add_file(_zip, e, getzipbin(zip, e));\n });\n return parse_numbers_iwa(_zip);\n }\n\n throw new Error('Unsupported NUMBERS file');\n }\n\n if (!safegetzipfile(zip, '[Content_Types].xml')) {\n if (safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n if (safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n throw new Error('Unsupported ZIP file');\n }\n\n var entries = zipentries(zip);\n var dir = parse_ct(getzipstr(zip, '[Content_Types].xml')\n /*:?any*/\n );\n var xlsb = false;\n var sheets, binname;\n\n if (dir.workbooks.length === 0) {\n binname = \"xl/workbook.xml\";\n if (getzipdata(zip, binname, true)) dir.workbooks.push(binname);\n }\n\n if (dir.workbooks.length === 0) {\n binname = \"xl/workbook.bin\";\n if (!getzipdata(zip, binname, true)) throw new Error(\"Could not find workbook\");\n dir.workbooks.push(binname);\n xlsb = true;\n }\n\n if (dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n var themes = {}\n /*:any*/\n ;\n var styles = {}\n /*:any*/\n ;\n\n if (!opts.bookSheets && !opts.bookProps) {\n strs = [];\n if (dir.sst) try {\n strs = parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts);\n } catch (e) {\n if (opts.WTF) throw e;\n }\n if (opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//, ''), true) || \"\", dir.themes[0], opts);\n if (dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n }\n /*var externbooks = */\n\n\n dir.links.map(function (link) {\n try {\n var rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n return parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n } catch (e) {}\n });\n var wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n var props = {},\n propdata = \"\";\n\n if (dir.coreprops.length) {\n propdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n if (propdata) props = parse_core_props(propdata);\n\n if (dir.extprops.length !== 0) {\n propdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n if (propdata) parse_ext_props(propdata, props, opts);\n }\n }\n\n var custprops = {};\n\n if (!opts.bookSheets || opts.bookProps) {\n if (dir.custprops.length !== 0) {\n propdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n if (propdata) custprops = parse_cust_props(propdata, opts);\n }\n }\n\n var out = {}\n /*:any*/\n ;\n\n if (opts.bookSheets || opts.bookProps) {\n if (wb.Sheets) sheets = wb.Sheets.map(function pluck(x) {\n return x.name;\n });else if (props.Worksheets && props.SheetNames.length > 0) sheets = props.SheetNames;\n\n if (opts.bookProps) {\n out.Props = props;\n out.Custprops = custprops;\n }\n\n if (opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n if (opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n }\n\n sheets = {};\n var deps = {};\n if (opts.bookDeps && dir.calcchain) deps = parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)), dir.calcchain, opts);\n var i = 0;\n var sheetRels = {}\n /*:any*/\n ;\n var path, relsPath;\n {\n var wbsheets = wb.Sheets;\n props.Worksheets = wbsheets.length;\n props.SheetNames = [];\n\n for (var j = 0; j != wbsheets.length; ++j) {\n props.SheetNames[j] = wbsheets[j].name;\n }\n }\n var wbext = xlsb ? \"bin\" : \"xml\";\n var wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n var wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi + 1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi + 1) + \".rels\").replace(/^\\//, \"\");\n if (!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n var wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n if ((dir.metadata || []).length >= 1) {\n /* TODO: MDX and other types of metadata */\n opts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])), dir.metadata[0], opts);\n }\n\n if ((dir.people || []).length >= 1) {\n opts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])), opts);\n }\n\n if (wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n /* Numbers iOS hack */\n\n var nmode = getzipdata(zip, \"xl/worksheets/sheet.xml\", true) ? 1 : 0;\n\n wsloop: for (i = 0; i != props.Worksheets; ++i) {\n var stype = \"sheet\";\n\n if (wbrels && wbrels[i]) {\n path = 'xl/' + wbrels[i][1].replace(/[\\/]?xl\\//, \"\");\n if (!safegetzipfile(zip, path)) path = wbrels[i][1];\n if (!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/, \"\") + wbrels[i][1];\n stype = wbrels[i][2];\n } else {\n path = 'xl/worksheets/sheet' + (i + 1 - nmode) + \".\" + wbext;\n path = path.replace(/sheet0\\./, \"sheet.\");\n }\n\n relsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n if (opts && opts.sheets != null) switch (typeof opts.sheets) {\n case \"number\":\n if (i != opts.sheets) continue wsloop;\n break;\n\n case \"string\":\n if (props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop;\n break;\n\n default:\n if (Array.isArray && Array.isArray(opts.sheets)) {\n var snjseen = false;\n\n for (var snj = 0; snj != opts.sheets.length; ++snj) {\n if (typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen = 1;\n if (typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n }\n\n if (!snjseen) continue wsloop;\n }\n\n }\n safe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n }\n\n out = {\n Directory: dir,\n Workbook: wb,\n Props: props,\n Custprops: custprops,\n Deps: deps,\n Sheets: sheets,\n SheetNames: props.SheetNames,\n Strings: strs,\n Styles: styles,\n Themes: themes,\n SSF: dup(table_fmt)\n }\n /*:any*/\n ;\n\n if (opts && opts.bookFiles) {\n if (zip.files) {\n out.keys = entries;\n out.files = zip.files;\n } else {\n out.keys = [];\n out.files = {};\n zip.FullPaths.forEach(function (p, idx) {\n p = p.replace(/^Root Entry[\\/]/, \"\");\n out.keys.push(p);\n out.files[p] = zip.FileIndex[idx];\n });\n }\n }\n\n if (opts && opts.bookVBA) {\n if (dir.vba.length > 0) out.vbaraw = getzipdata(zip, strip_front_slash(dir.vba[0]), true);else if (dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin', true);\n }\n\n return out;\n}\n/* [MS-OFFCRYPTO] 2.1.1 */\n\n\nfunction parse_xlsxcfb(cfb, _opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n var opts = _opts || {};\n var f = 'Workbook',\n data = CFB.find(cfb, f);\n\n try {\n f = '/!DataSpaces/Version';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*var version = */\n\n parse_DataSpaceVersionInfo(data.content);\n /* 2.3.4.1 */\n\n f = '/!DataSpaces/DataSpaceMap';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var dsm = parse_DataSpaceMap(data.content);\n if (dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\") throw new Error(\"ECMA-376 Encrypted file bad \" + f);\n /* 2.3.4.2 */\n\n f = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var seds = parse_DataSpaceDefinition(data.content);\n if (seds.length != 1 || seds[0] != \"StrongEncryptionTransform\") throw new Error(\"ECMA-376 Encrypted file bad \" + f);\n /* 2.3.4.3 */\n\n f = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*var hdr = */\n\n parse_Primary(data.content);\n } catch (e) {}\n\n f = '/EncryptionInfo';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n var einfo = parse_EncryptionInfo(data.content);\n /* 2.3.4.4 */\n\n f = '/EncryptedPackage';\n data = CFB.find(cfb, f);\n if (!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n /*global decrypt_agile */\n\n /*:: declare var decrypt_agile:any; */\n\n if (einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n /*global decrypt_std76 */\n\n /*:: declare var decrypt_std76:any; */\n\n if (einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n throw new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n)\n/*:ZIP*/\n{\n if (opts.bookType == \"ods\") return write_ods(wb, opts);\n if (opts.bookType == \"numbers\") return write_numbers_iwa(wb, opts);\n if (opts.bookType == \"xlsb\") return write_zip_xlsxb(wb, opts);\n return write_zip_xlsx(wb, opts);\n}\n/* XLSX and XLSB writing are very similar. Originally they were unified in one\n export function. This is horrible for tree shaking in the common case (most\n applications need to export files in one format) so this function supports\n both formats while write_zip_xlsx only handles XLSX */\n\n\nfunction write_zip_xlsxb(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n)\n/*:ZIP*/\n{\n _shapeid = 1024;\n\n if (wb && !wb.SSF) {\n wb.SSF = dup(table_fmt);\n }\n\n if (wb && wb.SSF) {\n make_ssf();\n SSF_load_table(wb.SSF); // $FlowIgnore\n\n opts.revssf = evert_num(wb.SSF);\n opts.revssf[wb.SSF[65535]] = 0;\n opts.ssf = wb.SSF;\n }\n\n opts.rels = {};\n opts.wbrels = {};\n opts.Strings =\n /*::((*/\n []\n /*:: :any):SST)*/\n ;\n opts.Strings.Count = 0;\n opts.Strings.Unique = 0;\n if (browser_has_Map) opts.revStrings = new Map();else {\n opts.revStrings = {};\n opts.revStrings.foo = [];\n delete opts.revStrings.foo;\n }\n var wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n var ct = new_ct();\n fix_write_opts(opts = opts || {});\n var zip = zip_new();\n var f = \"\",\n rId = 0;\n opts.cellXfs = [];\n get_cell_style(opts.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n if (!wb.Props) wb.Props = {};\n f = \"docProps/core.xml\";\n zip_add_file(zip, f, write_core_props(wb.Props, opts));\n ct.coreprops.push(f);\n add_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n /*::if(!wb.Props) throw \"unreachable\"; */\n\n f = \"docProps/app.xml\";\n\n if (wb.Props && wb.Props.SheetNames) {\n /* empty */\n } else if (!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;else {\n var _sn = [];\n\n for (var _i = 0; _i < wb.SheetNames.length; ++_i) {\n if ((wb.Workbook.Sheets[_i] || {}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n }\n\n wb.Props.SheetNames = _sn;\n }\n\n wb.Props.Worksheets = wb.Props.SheetNames.length;\n zip_add_file(zip, f, write_ext_props(wb.Props, opts));\n ct.extprops.push(f);\n add_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n if (wb.Custprops !== wb.Props && keys(wb.Custprops || {}).length > 0) {\n f = \"docProps/custom.xml\";\n zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n ct.custprops.push(f);\n add_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n }\n\n for (rId = 1; rId <= wb.SheetNames.length; ++rId) {\n var wsrels = {\n '!id': {}\n };\n var ws = wb.Sheets[wb.SheetNames[rId - 1]];\n\n var _type = (ws || {})[\"!type\"] || \"sheet\";\n\n switch (_type) {\n case \"chart\":\n /* falls through */\n\n default:\n f = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n zip_add_file(zip, f, write_ws(rId - 1, f, opts, wb, wsrels));\n ct.sheets.push(f);\n add_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n }\n\n if (ws) {\n var comments = ws['!comments'];\n var need_vml = false;\n var cf = \"\";\n\n if (comments && comments.length > 0) {\n cf = \"xl/comments\" + rId + \".\" + wbext;\n zip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n ct.comments.push(cf);\n add_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n need_vml = true;\n }\n\n if (ws['!legacy']) {\n if (need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + rId + \".vml\", write_comments_vml(rId, ws['!comments']));\n }\n\n delete ws['!comments'];\n delete ws['!legacy'];\n }\n\n if (wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n }\n\n if (opts.Strings != null && opts.Strings.length > 0) {\n f = \"xl/sharedStrings.\" + wbext;\n zip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n ct.strs.push(f);\n add_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n }\n\n f = \"xl/workbook.\" + wbext;\n zip_add_file(zip, f, write_wb(wb, f, opts));\n ct.workbooks.push(f);\n add_rels(opts.rels, 1, f, RELS.WB);\n /* TODO: something more intelligent with themes */\n\n f = \"xl/theme/theme1.xml\";\n zip_add_file(zip, f, write_theme(wb.Themes, opts));\n ct.themes.push(f);\n add_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n /* TODO: something more intelligent with styles */\n\n f = \"xl/styles.\" + wbext;\n zip_add_file(zip, f, write_sty(wb, f, opts));\n ct.styles.push(f);\n add_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n if (wb.vbaraw && vbafmt) {\n f = \"xl/vbaProject.bin\";\n zip_add_file(zip, f, wb.vbaraw);\n ct.vba.push(f);\n add_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n }\n\n f = \"xl/metadata.\" + wbext;\n zip_add_file(zip, f, write_xlmeta(f));\n ct.metadata.push(f);\n add_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n zip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n zip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n delete opts.revssf;\n delete opts.ssf;\n return zip;\n}\n\nfunction write_zip_xlsx(wb\n/*:Workbook*/\n, opts\n/*:WriteOpts*/\n)\n/*:ZIP*/\n{\n _shapeid = 1024;\n\n if (wb && !wb.SSF) {\n wb.SSF = dup(table_fmt);\n }\n\n if (wb && wb.SSF) {\n make_ssf();\n SSF_load_table(wb.SSF); // $FlowIgnore\n\n opts.revssf = evert_num(wb.SSF);\n opts.revssf[wb.SSF[65535]] = 0;\n opts.ssf = wb.SSF;\n }\n\n opts.rels = {};\n opts.wbrels = {};\n opts.Strings =\n /*::((*/\n []\n /*:: :any):SST)*/\n ;\n opts.Strings.Count = 0;\n opts.Strings.Unique = 0;\n if (browser_has_Map) opts.revStrings = new Map();else {\n opts.revStrings = {};\n opts.revStrings.foo = [];\n delete opts.revStrings.foo;\n }\n var wbext = \"xml\";\n var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n var ct = new_ct();\n fix_write_opts(opts = opts || {});\n var zip = zip_new();\n var f = \"\",\n rId = 0;\n opts.cellXfs = [];\n get_cell_style(opts.cellXfs, {}, {\n revssf: {\n \"General\": 0\n }\n });\n if (!wb.Props) wb.Props = {};\n f = \"docProps/core.xml\";\n zip_add_file(zip, f, write_core_props(wb.Props, opts));\n ct.coreprops.push(f);\n add_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n /*::if(!wb.Props) throw \"unreachable\"; */\n\n f = \"docProps/app.xml\";\n\n if (wb.Props && wb.Props.SheetNames) {\n /* empty */\n } else if (!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;else {\n var _sn = [];\n\n for (var _i = 0; _i < wb.SheetNames.length; ++_i) {\n if ((wb.Workbook.Sheets[_i] || {}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n }\n\n wb.Props.SheetNames = _sn;\n }\n\n wb.Props.Worksheets = wb.Props.SheetNames.length;\n zip_add_file(zip, f, write_ext_props(wb.Props, opts));\n ct.extprops.push(f);\n add_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n if (wb.Custprops !== wb.Props && keys(wb.Custprops || {}).length > 0) {\n f = \"docProps/custom.xml\";\n zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n ct.custprops.push(f);\n add_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n }\n\n var people = [\"SheetJ5\"];\n opts.tcid = 0;\n\n for (rId = 1; rId <= wb.SheetNames.length; ++rId) {\n var wsrels = {\n '!id': {}\n };\n var ws = wb.Sheets[wb.SheetNames[rId - 1]];\n\n var _type = (ws || {})[\"!type\"] || \"sheet\";\n\n switch (_type) {\n case \"chart\":\n /* falls through */\n\n default:\n f = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n zip_add_file(zip, f, write_ws_xml(rId - 1, opts, wb, wsrels));\n ct.sheets.push(f);\n add_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n }\n\n if (ws) {\n var comments = ws['!comments'];\n var need_vml = false;\n var cf = \"\";\n\n if (comments && comments.length > 0) {\n var needtc = false;\n comments.forEach(function (carr) {\n carr[1].forEach(function (c) {\n if (c.T == true) needtc = true;\n });\n });\n\n if (needtc) {\n cf = \"xl/threadedComments/threadedComment\" + rId + \".\" + wbext;\n zip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n ct.threadedcomments.push(cf);\n add_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".\" + wbext, RELS.TCMNT);\n }\n\n cf = \"xl/comments\" + rId + \".\" + wbext;\n zip_add_file(zip, cf, write_comments_xml(comments, opts));\n ct.comments.push(cf);\n add_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n need_vml = true;\n }\n\n if (ws['!legacy']) {\n if (need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + rId + \".vml\", write_comments_vml(rId, ws['!comments']));\n }\n\n delete ws['!comments'];\n delete ws['!legacy'];\n }\n\n if (wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n }\n\n if (opts.Strings != null && opts.Strings.length > 0) {\n f = \"xl/sharedStrings.\" + wbext;\n zip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n ct.strs.push(f);\n add_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n }\n\n f = \"xl/workbook.\" + wbext;\n zip_add_file(zip, f, write_wb_xml(wb, opts));\n ct.workbooks.push(f);\n add_rels(opts.rels, 1, f, RELS.WB);\n /* TODO: something more intelligent with themes */\n\n f = \"xl/theme/theme1.xml\";\n zip_add_file(zip, f, write_theme(wb.Themes, opts));\n ct.themes.push(f);\n add_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n /* TODO: something more intelligent with styles */\n\n f = \"xl/styles.\" + wbext;\n zip_add_file(zip, f, write_sty_xml(wb, opts));\n ct.styles.push(f);\n add_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n if (wb.vbaraw && vbafmt) {\n f = \"xl/vbaProject.bin\";\n zip_add_file(zip, f, wb.vbaraw);\n ct.vba.push(f);\n add_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n }\n\n f = \"xl/metadata.\" + wbext;\n zip_add_file(zip, f, write_xlmeta_xml());\n ct.metadata.push(f);\n add_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n if (people.length > 1) {\n f = \"xl/persons/person.xml\";\n zip_add_file(zip, f, write_people_xml(people, opts));\n ct.people.push(f);\n add_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n }\n\n zip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n zip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n zip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n delete opts.revssf;\n delete opts.ssf;\n return zip;\n}\n\nfunction firstbyte(f\n/*:RawData*/\n, o\n/*:?TypeOpts*/\n)\n/*:Array*/\n{\n var x = \"\";\n\n switch ((o || {}).type || \"base64\") {\n case 'buffer':\n return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\n case 'base64':\n x = Base64_decode(f.slice(0, 12));\n break;\n\n case 'binary':\n x = f;\n break;\n\n case 'array':\n return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\n default:\n throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n }\n\n return [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb\n/*:CFBContainer*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n if (CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n return parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data\n/*:RawData*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n var zip,\n d = data;\n var o = opts || {};\n if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? \"buffer\" : \"base64\";\n zip = zip_read(d, o);\n return parse_zip(zip, o);\n}\n\nfunction read_plaintext(data\n/*:string*/\n, o\n/*:ParseOpts*/\n)\n/*:Workbook*/\n{\n var i = 0;\n\n main: while (i < data.length) {\n switch (data.charCodeAt(i)) {\n case 0x0A:\n case 0x0D:\n case 0x20:\n ++i;\n break;\n\n case 0x3C:\n return parse_xlml(data.slice(i), o);\n\n default:\n break main;\n }\n }\n\n return PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data\n/*:RawData*/\n, o\n/*:ParseOpts*/\n)\n/*:Workbook*/\n{\n var str = \"\",\n bytes = firstbyte(data, o);\n\n switch (o.type) {\n case 'base64':\n str = Base64_decode(data);\n break;\n\n case 'binary':\n str = data;\n break;\n\n case 'buffer':\n str = data.toString('binary');\n break;\n\n case 'array':\n str = cc2str(data);\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n\n if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n o.type = \"binary\";\n return read_plaintext(str, o);\n}\n\nfunction read_utf16(data\n/*:RawData*/\n, o\n/*:ParseOpts*/\n)\n/*:Workbook*/\n{\n var d = data;\n if (o.type == 'base64') d = Base64_decode(d);\n d = $cptable.utils.decode(1200, d.slice(2), 'str');\n o.type = \"binary\";\n return read_plaintext(d, o);\n}\n\nfunction bstrify(data\n/*:string*/\n)\n/*:string*/\n{\n return !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n if (str) {\n o.type = \"string\";\n return PRN.to_workbook(data, o);\n }\n\n return PRN.to_workbook(d, o);\n}\n\nfunction readSync(data\n/*:RawData*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n reset_cp();\n var o = opts || {};\n if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n if (typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n var d = data,\n n = [0, 0, 0, 0],\n str = false;\n\n if (o.cellStyles) {\n o.cellNF = true;\n o.sheetStubs = true;\n }\n\n _ssfopts = {};\n if (o.dateNF) _ssfopts.dateNF = o.dateNF;\n if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? \"buffer\" : \"base64\";\n\n if (o.type == \"file\") {\n o.type = has_buf ? \"buffer\" : \"binary\";\n d = read_binary(data);\n if (typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\";\n }\n\n if (o.type == \"string\") {\n str = true;\n o.type = \"binary\";\n o.codepage = 65001;\n d = bstrify(data);\n }\n\n if (o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n // $FlowIgnore\n var ab = new ArrayBuffer(3),\n vu = new Uint8Array(ab);\n vu.foo = \"bar\"; // $FlowIgnore\n\n if (!vu.foo) {\n o = dup(o);\n o.type = 'array';\n return readSync(ab2a(d), o);\n }\n }\n\n switch ((n = firstbyte(d, o))[0]) {\n case 0xD0:\n if (n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o);\n break;\n\n case 0x09:\n if (n[1] <= 0x08) return parse_xlscfb(d, o);\n break;\n\n case 0x3C:\n return parse_xlml(d, o);\n\n case 0x49:\n if (n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n if (n[1] === 0x44) return read_wb_ID(d, o);\n break;\n\n case 0x54:\n if (n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o);\n break;\n\n case 0x50:\n return n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09 ? read_zip(d, o) : read_prn(data, d, o, str);\n\n case 0xEF:\n return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\n case 0xFF:\n if (n[1] === 0xFE) {\n return read_utf16(d, o);\n } else if (n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\n break;\n\n case 0x00:\n if (n[1] === 0x00) {\n if (n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n if (n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n }\n\n break;\n\n case 0x03:\n case 0x83:\n case 0x8B:\n case 0x8C:\n return DBF.to_workbook(d, o);\n\n case 0x7B:\n if (n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o);\n break;\n\n case 0x0A:\n case 0x0D:\n case 0x20:\n return read_plaintext_raw(d, o);\n\n case 0x89:\n if (n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\");\n break;\n }\n\n if (DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n return read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename\n/*:string*/\n, opts\n/*:?ParseOpts*/\n)\n/*:Workbook*/\n{\n var o = opts || {};\n o.type = 'file';\n return readSync(filename, o);\n}\n\nfunction write_cfb_ctr(cfb\n/*:CFBContainer*/\n, o\n/*:WriteOpts*/\n)\n/*:any*/\n{\n switch (o.type) {\n case \"base64\":\n case \"binary\":\n break;\n\n case \"buffer\":\n case \"array\":\n o.type = \"\";\n break;\n\n case \"file\":\n return write_dl(o.file, CFB.write(cfb, {\n type: has_buf ? 'buffer' : \"\"\n }));\n\n case \"string\":\n throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n\n return CFB.write(cfb, o);\n}\n/*:: declare var encrypt_agile:any; */\n\n\nfunction write_zip_type(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n)\n/*:any*/\n{\n var o = dup(opts || {});\n var z = write_zip(wb, o);\n return write_zip_denouement(z, o);\n}\n\nfunction write_zip_typeXLSX(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n)\n/*:any*/\n{\n var o = dup(opts || {});\n var z = write_zip_xlsx(wb, o);\n return write_zip_denouement(z, o);\n}\n\nfunction write_zip_denouement(z\n/*:any*/\n, o\n/*:?WriteOpts*/\n)\n/*:any*/\n{\n var oopts = {};\n var ftype = has_buf ? \"nodebuffer\" : typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\";\n if (o.compression) oopts.compression = 'DEFLATE';\n if (o.password) oopts.type = ftype;else switch (o.type) {\n case \"base64\":\n oopts.type = \"base64\";\n break;\n\n case \"binary\":\n oopts.type = \"string\";\n break;\n\n case \"string\":\n throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\n case \"buffer\":\n case \"file\":\n oopts.type = ftype;\n break;\n\n default:\n throw new Error(\"Unrecognized type \" + o.type);\n }\n var out = z.FullPaths ? CFB.write(z, {\n fileType: \"zip\",\n type:\n /*::(*/\n {\n \"nodebuffer\": \"buffer\",\n \"string\": \"binary\"\n }\n /*:: :any)*/\n [oopts.type] || oopts.type,\n compression: !!o.compression\n }) : z.generate(oopts);\n\n if (typeof Deno !== \"undefined\") {\n if (typeof out == \"string\") {\n if (o.type == \"binary\" || o.type == \"base64\") return out;\n out = new Uint8Array(s2ab(out));\n }\n }\n /*jshint -W083 */\n\n\n if (o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n\n /*jshint +W083 */\n\n if (o.type === \"file\") return write_dl(o.file, out);\n return o.type == \"string\" ? utf8read(\n /*::(*/\n out\n /*:: :any)*/\n ) : out;\n}\n\nfunction write_cfb_type(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n)\n/*:any*/\n{\n var o = opts || {};\n var cfb\n /*:CFBContainer*/\n = write_xlscfb(wb, o);\n return write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out\n/*:string*/\n, opts\n/*:WriteOpts*/\n, bom\n/*:?string*/\n)\n/*:any*/\n{\n if (!bom) bom = \"\";\n var o = bom + out;\n\n switch (opts.type) {\n case \"base64\":\n return Base64_encode(utf8write(o));\n\n case \"binary\":\n return utf8write(o);\n\n case \"string\":\n return out;\n\n case \"file\":\n return write_dl(opts.file, o, 'utf8');\n\n case \"buffer\":\n {\n if (has_buf) return Buffer_from(o, 'utf8');else if (typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);else return write_string_type(o, {\n type: 'binary'\n }).split(\"\").map(function (c) {\n return c.charCodeAt(0);\n });\n }\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out\n/*:string*/\n, opts\n/*:WriteOpts*/\n)\n/*:any*/\n{\n switch (opts.type) {\n case \"base64\":\n return Base64_encode(out);\n\n case \"binary\":\n return out;\n\n case \"string\":\n return out;\n\n /* override in sheet_to_txt */\n\n case \"file\":\n return write_dl(opts.file, out, 'binary');\n\n case \"buffer\":\n {\n if (has_buf) return Buffer_from(out, 'binary');else return out.split(\"\").map(function (c) {\n return c.charCodeAt(0);\n });\n }\n }\n\n throw new Error(\"Unrecognized type \" + opts.type);\n}\n/* TODO: test consistency */\n\n\nfunction write_binary_type(out, opts\n/*:WriteOpts*/\n)\n/*:any*/\n{\n switch (opts.type) {\n case \"string\":\n case \"base64\":\n case \"binary\":\n var bstr = \"\"; // $FlowIgnore\n\n for (var i = 0; i < out.length; ++i) {\n bstr += String.fromCharCode(out[i]);\n }\n\n return opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\n case \"file\":\n return write_dl(opts.file, out);\n\n case \"buffer\":\n return out;\n\n default:\n throw new Error(\"Unrecognized type \" + opts.type);\n }\n}\n\nfunction writeSyncXLSX(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n) {\n reset_cp();\n check_wb(wb);\n var o = dup(opts || {});\n\n if (o.cellStyles) {\n o.cellNF = true;\n o.sheetStubs = true;\n }\n\n if (o.type == \"array\") {\n o.type = \"binary\";\n var out\n /*:string*/\n = writeSyncXLSX(wb, o)\n /*:any*/\n ;\n o.type = \"array\";\n return s2ab(out);\n }\n\n return write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb\n/*:Workbook*/\n, opts\n/*:?WriteOpts*/\n) {\n reset_cp();\n check_wb(wb);\n var o = dup(opts || {});\n\n if (o.cellStyles) {\n o.cellNF = true;\n o.sheetStubs = true;\n }\n\n if (o.type == \"array\") {\n o.type = \"binary\";\n var out\n /*:string*/\n = writeSync(wb, o)\n /*:any*/\n ;\n o.type = \"array\";\n return s2ab(out);\n }\n\n var idx = 0;\n\n if (o.sheet) {\n if (typeof o.sheet == \"number\") idx = o.sheet;else idx = wb.SheetNames.indexOf(o.sheet);\n if (!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + typeof o.sheet);\n }\n\n switch (o.bookType || 'xlsb') {\n case 'xml':\n case 'xlml':\n return write_string_type(write_xlml(wb, o), o);\n\n case 'slk':\n case 'sylk':\n return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'htm':\n case 'html':\n return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'txt':\n return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'csv':\n return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\uFEFF\");\n\n case 'dif':\n return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'dbf':\n return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'prn':\n return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'rtf':\n return write_string_type(RTF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'eth':\n return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'fods':\n return write_string_type(write_ods(wb, o), o);\n\n case 'wk1':\n return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\n case 'wk3':\n return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\n case 'biff2':\n if (!o.biff) o.biff = 2;\n\n /* falls through */\n\n case 'biff3':\n if (!o.biff) o.biff = 3;\n\n /* falls through */\n\n case 'biff4':\n if (!o.biff) o.biff = 4;\n return write_binary_type(write_biff_buf(wb, o), o);\n\n case 'biff5':\n if (!o.biff) o.biff = 5;\n\n /* falls through */\n\n case 'biff8':\n case 'xla':\n case 'xls':\n if (!o.biff) o.biff = 8;\n return write_cfb_type(wb, o);\n\n case 'xlsx':\n case 'xlsm':\n case 'xlam':\n case 'xlsb':\n case 'numbers':\n case 'ods':\n return write_zip_type(wb, o);\n\n default:\n throw new Error(\"Unrecognized bookType |\" + o.bookType + \"|\");\n }\n}\n\nfunction resolve_book_type(o\n/*:WriteFileOpts*/\n) {\n if (o.bookType) return;\n var _BT = {\n \"xls\": \"biff8\",\n \"htm\": \"html\",\n \"slk\": \"sylk\",\n \"socialcalc\": \"eth\",\n \"Sh33tJS\": \"WTF\"\n };\n var ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n if (ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n o.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb\n/*:Workbook*/\n, filename\n/*:string*/\n, opts\n/*:?WriteFileOpts*/\n) {\n var o = opts || {};\n o.type = 'file';\n o.file = filename;\n resolve_book_type(o);\n return writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb\n/*:Workbook*/\n, filename\n/*:string*/\n, opts\n/*:?WriteFileOpts*/\n) {\n var o = opts || {};\n o.type = 'file';\n o.file = filename;\n resolve_book_type(o);\n return writeSyncXLSX(wb, o);\n}\n\nfunction writeFileAsync(filename\n/*:string*/\n, wb\n/*:Workbook*/\n, opts\n/*:?WriteFileOpts*/\n, cb\n/*:?(e?:ErrnoError)=>void*/\n) {\n var o = opts || {};\n o.type = 'file';\n o.file = filename;\n resolve_book_type(o);\n o.type = 'buffer';\n var _cb = cb;\n if (!(_cb instanceof Function)) _cb = opts\n /*:any*/\n ;\n return _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\n\n\nfunction make_json_row(sheet\n/*:Worksheet*/\n, r\n/*:Range*/\n, R\n/*:number*/\n, cols\n/*:Array*/\n, header\n/*:number*/\n, hdr\n/*:Array*/\n, dense\n/*:boolean*/\n, o\n/*:Sheet2JSONOpts*/\n)\n/*:MJRObject*/\n{\n var rr = encode_row(R);\n var defval = o.defval,\n raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n var isempty = true;\n var row\n /*:any*/\n = header === 1 ? [] : {};\n\n if (header !== 1) {\n if (Object.defineProperty) try {\n Object.defineProperty(row, '__rowNum__', {\n value: R,\n enumerable: false\n });\n } catch (e) {\n row.__rowNum__ = R;\n } else row.__rowNum__ = R;\n }\n\n if (!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n var val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n if (val === undefined || val.t === undefined) {\n if (defval === undefined) continue;\n\n if (hdr[C] != null) {\n row[hdr[C]] = defval;\n }\n\n continue;\n }\n\n var v = val.v;\n\n switch (val.t) {\n case 'z':\n if (v == null) break;\n continue;\n\n case 'e':\n v = v == 0 ? null : void 0;\n break;\n\n case 's':\n case 'd':\n case 'b':\n case 'n':\n break;\n\n default:\n throw new Error('unrecognized type ' + val.t);\n }\n\n if (hdr[C] != null) {\n if (v == null) {\n if (val.t == \"e\" && v === null) row[hdr[C]] = null;else if (defval !== undefined) row[hdr[C]] = defval;else if (raw && v === null) row[hdr[C]] = null;else continue;\n } else {\n row[hdr[C]] = raw && (val.t !== \"n\" || val.t === \"n\" && o.rawNumbers !== false) ? v : format_cell(val, v, o);\n }\n\n if (v != null) isempty = false;\n }\n }\n return {\n row: row,\n isempty: isempty\n };\n}\n\nfunction sheet_to_json(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2JSONOpts*/\n) {\n if (sheet == null || sheet[\"!ref\"] == null) return [];\n var val = {\n t: 'n',\n v: 0\n },\n header = 0,\n offset = 1,\n hdr\n /*:Array*/\n = [],\n v = 0,\n vv = \"\";\n var r = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var o = opts || {};\n var range = o.range != null ? o.range : sheet[\"!ref\"];\n if (o.header === 1) header = 1;else if (o.header === \"A\") header = 2;else if (Array.isArray(o.header)) header = 3;else if (o.header == null) header = 0;\n\n switch (typeof range) {\n case 'string':\n r = safe_decode_range(range);\n break;\n\n case 'number':\n r = safe_decode_range(sheet[\"!ref\"]);\n r.s.r = range;\n break;\n\n default:\n r = range;\n }\n\n if (header > 0) offset = 0;\n var rr = encode_row(r.s.r);\n var cols\n /*:Array*/\n = [];\n var out\n /*:Array*/\n = [];\n var outi = 0,\n counter = 0;\n var dense = Array.isArray(sheet);\n var R = r.s.r,\n C = 0;\n var header_cnt = {};\n if (dense && !sheet[R]) sheet[R] = [];\n var colinfo\n /*:Array*/\n = o.skipHidden && sheet[\"!cols\"] || [];\n var rowinfo\n /*:Array*/\n = o.skipHidden && sheet[\"!rows\"] || [];\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n if ((colinfo[C] || {}).hidden) continue;\n cols[C] = encode_col(C);\n val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n switch (header) {\n case 1:\n hdr[C] = C - r.s.c;\n break;\n\n case 2:\n hdr[C] = cols[C];\n break;\n\n case 3:\n hdr[C] = o.header[C - r.s.c];\n break;\n\n default:\n if (val == null) val = {\n w: \"__EMPTY\",\n t: \"s\"\n };\n vv = v = format_cell(val, null, o);\n counter = header_cnt[v] || 0;\n if (!counter) header_cnt[v] = 1;else {\n do {\n vv = v + \"_\" + counter++;\n } while (header_cnt[vv]);\n\n header_cnt[v] = counter;\n header_cnt[vv] = 1;\n }\n hdr[C] = vv;\n }\n }\n\n for (R = r.s.r + offset; R <= r.e.r; ++R) {\n if ((rowinfo[R] || {}).hidden) continue;\n var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n }\n\n out.length = outi;\n return out;\n}\n\nvar qreg = /\"/g;\n\nfunction make_csv_row(sheet\n/*:Worksheet*/\n, r\n/*:Range*/\n, R\n/*:number*/\n, cols\n/*:Array*/\n, fs\n/*:number*/\n, rs\n/*:number*/\n, FS\n/*:string*/\n, o\n/*:Sheet2CSVOpts*/\n)\n/*:?string*/\n{\n var isempty = true;\n var row\n /*:Array*/\n = [],\n txt = \"\",\n rr = encode_row(R);\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!cols[C]) continue;\n var val = o.dense ? (sheet[R] || [])[C] : sheet[cols[C] + rr];\n if (val == null) txt = \"\";else if (val.v != null) {\n isempty = false;\n txt = '' + (o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\n for (var i = 0, cc = 0; i !== txt.length; ++i) {\n if ((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {\n txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\";\n break;\n }\n }\n\n if (txt == \"ID\") txt = '\"ID\"';\n } else if (val.f != null && !val.F) {\n isempty = false;\n txt = '=' + val.f;\n if (txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n } else txt = \"\";\n /* NOTE: Excel CSV does not support array formulae */\n\n row.push(txt);\n }\n\n if (o.blankrows === false && isempty) return null;\n return row.join(FS);\n}\n\nfunction sheet_to_csv(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2CSVOpts*/\n)\n/*:string*/\n{\n var out\n /*:Array*/\n = [];\n var o = opts == null ? {} : opts;\n if (sheet == null || sheet[\"!ref\"] == null) return \"\";\n var r = safe_decode_range(sheet[\"!ref\"]);\n var FS = o.FS !== undefined ? o.FS : \",\",\n fs = FS.charCodeAt(0);\n var RS = o.RS !== undefined ? o.RS : \"\\n\",\n rs = RS.charCodeAt(0);\n var endregex = new RegExp((FS == \"|\" ? \"\\\\|\" : FS) + \"+$\");\n var row = \"\",\n cols\n /*:Array*/\n = [];\n o.dense = Array.isArray(sheet);\n var colinfo\n /*:Array*/\n = o.skipHidden && sheet[\"!cols\"] || [];\n var rowinfo\n /*:Array*/\n = o.skipHidden && sheet[\"!rows\"] || [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);\n }\n\n var w = 0;\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n if ((rowinfo[R] || {}).hidden) continue;\n row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\n if (row == null) {\n continue;\n }\n\n if (o.strip) row = row.replace(endregex, \"\");\n if (row || o.blankrows !== false) out.push((w++ ? RS : \"\") + row);\n }\n\n delete o.dense;\n return out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2CSVOpts*/\n) {\n if (!opts) opts = {};\n opts.FS = \"\\t\";\n opts.RS = \"\\n\";\n var s = sheet_to_csv(sheet, opts);\n if (typeof $cptable == 'undefined' || opts.type == 'string') return s;\n var o = $cptable.utils.encode(1200, s, 'str');\n return String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet\n/*:Worksheet*/\n)\n/*:Array*/\n{\n var y = \"\",\n x,\n val = \"\";\n if (sheet == null || sheet[\"!ref\"] == null) return [];\n var r = safe_decode_range(sheet['!ref']),\n rr = \"\",\n cols\n /*:Array*/\n = [],\n C;\n var cmds\n /*:Array*/\n = [];\n var dense = Array.isArray(sheet);\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n cols[C] = encode_col(C);\n }\n\n for (var R = r.s.r; R <= r.e.r; ++R) {\n rr = encode_row(R);\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n y = cols[C] + rr;\n x = dense ? (sheet[R] || [])[C] : sheet[y];\n val = \"\";\n if (x === undefined) continue;else if (x.F != null) {\n y = x.F;\n if (!x.f) continue;\n val = x.f;\n if (y.indexOf(\":\") == -1) y = y + \":\" + y;\n }\n if (x.f != null) val = x.f;else if (x.t == 'z') continue;else if (x.t == 'n' && x.v != null) val = \"\" + x.v;else if (x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";else if (x.w !== undefined) val = \"'\" + x.w;else if (x.v === undefined) continue;else if (x.t == 's') val = \"'\" + x.v;else val = \"\" + x.v;\n cmds[cmds.length] = y + \"=\" + val;\n }\n }\n\n return cmds;\n}\n\nfunction sheet_add_json(_ws\n/*:?Worksheet*/\n, js\n/*:Array*/\n, opts)\n/*:Worksheet*/\n{\n var o = opts || {};\n var offset = +!o.skipHeader;\n var ws\n /*:Worksheet*/\n = _ws || {}\n /*:any*/\n ;\n var _R = 0,\n _C = 0;\n\n if (ws && o.origin != null) {\n if (typeof o.origin == 'number') _R = o.origin;else {\n var _origin\n /*:CellAddress*/\n = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\n _R = _origin.r;\n _C = _origin.c;\n }\n }\n\n var cell\n /*:Cell*/\n ;\n var range\n /*:Range*/\n = {\n s: {\n c: 0,\n r: 0\n },\n e: {\n c: _C,\n r: _R + js.length - 1 + offset\n }\n }\n /*:any*/\n ;\n\n if (ws['!ref']) {\n var _range = safe_decode_range(ws['!ref']);\n\n range.e.c = Math.max(range.e.c, _range.e.c);\n range.e.r = Math.max(range.e.r, _range.e.r);\n\n if (_R == -1) {\n _R = _range.e.r + 1;\n range.e.r = _R + js.length - 1 + offset;\n }\n } else {\n if (_R == -1) {\n _R = 0;\n range.e.r = js.length - 1 + offset;\n }\n }\n\n var hdr\n /*:Array*/\n = o.header || [],\n C = 0;\n js.forEach(function (JS, R\n /*:number*/\n ) {\n keys(JS).forEach(function (k) {\n if ((C = hdr.indexOf(k)) == -1) hdr[C = hdr.length] = k;\n var v = JS[k];\n var t = 'z';\n var z = \"\";\n var ref = encode_cell({\n c: _C + C,\n r: _R + R + offset\n });\n cell = ws_get_cell_stub(ws, ref);\n\n if (v && typeof v === 'object' && !(v instanceof Date)) {\n ws[ref] = v;\n } else {\n if (typeof v == 'number') t = 'n';else if (typeof v == 'boolean') t = 'b';else if (typeof v == 'string') t = 's';else if (v instanceof Date) {\n t = 'd';\n\n if (!o.cellDates) {\n t = 'n';\n v = datenum(v);\n }\n\n z = o.dateNF || table_fmt[14];\n } else if (v === null && o.nullError) {\n t = 'e';\n v = 0;\n }\n if (!cell) ws[ref] = cell = {\n t: t,\n v: v\n }\n /*:any*/\n ;else {\n cell.t = t;\n cell.v = v;\n delete cell.w;\n delete cell.R;\n if (z) cell.z = z;\n }\n if (z) cell.z = z;\n }\n });\n });\n range.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\n var __R = encode_row(_R);\n\n if (offset) for (C = 0; C < hdr.length; ++C) {\n ws[encode_col(C + _C) + __R] = {\n t: 's',\n v: hdr[C]\n };\n }\n ws['!ref'] = encode_range(range);\n return ws;\n}\n\nfunction json_to_sheet(js\n/*:Array*/\n, opts)\n/*:Worksheet*/\n{\n return sheet_add_json(null, js, opts);\n}\n/* get cell, creating a stub if necessary */\n\n\nfunction ws_get_cell_stub(ws\n/*:Worksheet*/\n, R, C\n/*:?number*/\n)\n/*:Cell*/\n{\n /* A1 cell address */\n if (typeof R == \"string\") {\n /* dense */\n if (Array.isArray(ws)) {\n var RC = decode_cell(R);\n if (!ws[RC.r]) ws[RC.r] = [];\n return ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {\n t: 'z'\n });\n }\n\n return ws[R] || (ws[R] = {\n t: 'z'\n });\n }\n /* cell address object */\n\n\n if (typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n /* R and C are 0-based indices */\n\n return ws_get_cell_stub(ws, encode_cell({\n r: R,\n c: C || 0\n }));\n}\n/* find sheet index for given name / validate index */\n\n\nfunction wb_sheet_idx(wb\n/*:Workbook*/\n, sh\n/*:number|string*/\n) {\n if (typeof sh == \"number\") {\n if (sh >= 0 && wb.SheetNames.length > sh) return sh;\n throw new Error(\"Cannot find sheet # \" + sh);\n } else if (typeof sh == \"string\") {\n var idx = wb.SheetNames.indexOf(sh);\n if (idx > -1) return idx;\n throw new Error(\"Cannot find sheet name |\" + sh + \"|\");\n } else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n/* simple blank workbook object */\n\n\nfunction book_new()\n/*:Workbook*/\n{\n return {\n SheetNames: [],\n Sheets: {}\n };\n}\n/* add a worksheet to the end of a given workbook */\n\n\nfunction book_append_sheet(wb\n/*:Workbook*/\n, ws\n/*:Worksheet*/\n, name\n/*:?string*/\n, roll\n/*:?boolean*/\n)\n/*:string*/\n{\n var i = 1;\n if (!name) for (; i <= 0xFFFF; ++i, name = undefined) {\n if (wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n }\n if (!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\n if (roll && wb.SheetNames.indexOf(name) >= 0) {\n var m = name.match(/(^.*?)(\\d+)$/);\n i = m && +m[2] || 0;\n var root = m && m[1] || name;\n\n for (++i; i <= 0xFFFF; ++i) {\n if (wb.SheetNames.indexOf(name = root + i) == -1) break;\n }\n }\n\n check_ws_name(name);\n if (wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n wb.SheetNames.push(name);\n wb.Sheets[name] = ws;\n return name;\n}\n/* set sheet visibility (visible/hidden/very hidden) */\n\n\nfunction book_set_sheet_visibility(wb\n/*:Workbook*/\n, sh\n/*:number|string*/\n, vis\n/*:number*/\n) {\n if (!wb.Workbook) wb.Workbook = {};\n if (!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n var idx = wb_sheet_idx(wb, sh); // $FlowIgnore\n\n if (!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n switch (vis) {\n case 0:\n case 1:\n case 2:\n break;\n\n default:\n throw new Error(\"Bad sheet visibility setting \" + vis);\n } // $FlowIgnore\n\n\n wb.Workbook.Sheets[idx].Hidden = vis;\n}\n/* set number format */\n\n\nfunction cell_set_number_format(cell\n/*:Cell*/\n, fmt\n/*:string|number*/\n) {\n cell.z = fmt;\n return cell;\n}\n/* set cell hyperlink */\n\n\nfunction cell_set_hyperlink(cell\n/*:Cell*/\n, target\n/*:string*/\n, tooltip\n/*:?string*/\n) {\n if (!target) {\n delete cell.l;\n } else {\n cell.l = {\n Target: target\n }\n /*:Hyperlink*/\n ;\n if (tooltip) cell.l.Tooltip = tooltip;\n }\n\n return cell;\n}\n\nfunction cell_set_internal_link(cell\n/*:Cell*/\n, range\n/*:string*/\n, tooltip\n/*:?string*/\n) {\n return cell_set_hyperlink(cell, \"#\" + range, tooltip);\n}\n/* add to cell comments */\n\n\nfunction cell_add_comment(cell\n/*:Cell*/\n, text\n/*:string*/\n, author\n/*:?string*/\n) {\n if (!cell.c) cell.c = [];\n cell.c.push({\n t: text,\n a: author || \"SheetJS\"\n });\n}\n/* set array formula and flush related cells */\n\n\nfunction sheet_set_array_formula(ws\n/*:Worksheet*/\n, range, formula\n/*:string*/\n, dynamic\n/*:boolean*/\n) {\n var rng = typeof range != \"string\" ? range : safe_decode_range(range);\n var rngstr = typeof range == \"string\" ? range : encode_range(range);\n\n for (var R = rng.s.r; R <= rng.e.r; ++R) {\n for (var C = rng.s.c; C <= rng.e.c; ++C) {\n var cell = ws_get_cell_stub(ws, R, C);\n cell.t = 'n';\n cell.F = rngstr;\n delete cell.v;\n\n if (R == rng.s.r && C == rng.s.c) {\n cell.f = formula;\n if (dynamic) cell.D = true;\n }\n }\n }\n\n return ws;\n}\n\nvar utils\n/*:any*/\n= {\n encode_col: encode_col,\n encode_row: encode_row,\n encode_cell: encode_cell,\n encode_range: encode_range,\n decode_col: decode_col,\n decode_row: decode_row,\n split_cell: split_cell,\n decode_cell: decode_cell,\n decode_range: decode_range,\n format_cell: format_cell,\n sheet_add_aoa: sheet_add_aoa,\n sheet_add_json: sheet_add_json,\n sheet_add_dom: sheet_add_dom,\n aoa_to_sheet: aoa_to_sheet,\n json_to_sheet: json_to_sheet,\n table_to_sheet: parse_dom_table,\n table_to_book: table_to_book,\n sheet_to_csv: sheet_to_csv,\n sheet_to_txt: sheet_to_txt,\n sheet_to_json: sheet_to_json,\n sheet_to_html: sheet_to_html,\n sheet_to_formulae: sheet_to_formulae,\n sheet_to_row_object_array: sheet_to_json,\n sheet_get_cell: ws_get_cell_stub,\n book_new: book_new,\n book_append_sheet: book_append_sheet,\n book_set_sheet_visibility: book_set_sheet_visibility,\n cell_set_number_format: cell_set_number_format,\n cell_set_hyperlink: cell_set_hyperlink,\n cell_set_internal_link: cell_set_internal_link,\n cell_add_comment: cell_add_comment,\n sheet_set_array_formula: sheet_set_array_formula,\n consts: {\n SHEET_VISIBLE: 0,\n SHEET_HIDDEN: 1,\n SHEET_VERY_HIDDEN: 2\n }\n};\n\nvar _Readable;\n\nfunction set_readable(R) {\n _Readable = R;\n}\n\nfunction write_csv_stream(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2CSVOpts*/\n) {\n var stream = _Readable();\n\n var o = opts == null ? {} : opts;\n\n if (sheet == null || sheet[\"!ref\"] == null) {\n stream.push(null);\n return stream;\n }\n\n var r = safe_decode_range(sheet[\"!ref\"]);\n var FS = o.FS !== undefined ? o.FS : \",\",\n fs = FS.charCodeAt(0);\n var RS = o.RS !== undefined ? o.RS : \"\\n\",\n rs = RS.charCodeAt(0);\n var endregex = new RegExp((FS == \"|\" ? \"\\\\|\" : FS) + \"+$\");\n var row\n /*:?string*/\n = \"\",\n cols\n /*:Array*/\n = [];\n o.dense = Array.isArray(sheet);\n var colinfo\n /*:Array*/\n = o.skipHidden && sheet[\"!cols\"] || [];\n var rowinfo\n /*:Array*/\n = o.skipHidden && sheet[\"!rows\"] || [];\n\n for (var C = r.s.c; C <= r.e.c; ++C) {\n if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);\n }\n\n var R = r.s.r;\n var BOM = false,\n w = 0;\n\n stream._read = function () {\n if (!BOM) {\n BOM = true;\n return stream.push(\"\\uFEFF\");\n }\n\n while (R <= r.e.r) {\n ++R;\n if ((rowinfo[R - 1] || {}).hidden) continue;\n row = make_csv_row(sheet, r, R - 1, cols, fs, rs, FS, o);\n\n if (row != null) {\n if (o.strip) row = row.replace(endregex, \"\");\n if (row || o.blankrows !== false) return stream.push((w++ ? RS : \"\") + row);\n }\n }\n\n return stream.push(null);\n };\n\n return stream;\n}\n\nfunction write_html_stream(ws\n/*:Worksheet*/\n, opts\n/*:?Sheet2HTMLOpts*/\n) {\n var stream = _Readable();\n\n var o = opts || {};\n var header = o.header != null ? o.header : HTML_BEGIN;\n var footer = o.footer != null ? o.footer : HTML_END;\n stream.push(header);\n var r = decode_range(ws['!ref']);\n o.dense = Array.isArray(ws);\n stream.push(make_html_preamble(ws, r, o));\n var R = r.s.r;\n var end = false;\n\n stream._read = function () {\n if (R > r.e.r) {\n if (!end) {\n end = true;\n stream.push(\"\" + footer);\n }\n\n return stream.push(null);\n }\n\n while (R <= r.e.r) {\n stream.push(make_html_row(ws, r, R, o));\n ++R;\n break;\n }\n };\n\n return stream;\n}\n\nfunction write_json_stream(sheet\n/*:Worksheet*/\n, opts\n/*:?Sheet2CSVOpts*/\n) {\n var stream = _Readable({\n objectMode: true\n });\n\n if (sheet == null || sheet[\"!ref\"] == null) {\n stream.push(null);\n return stream;\n }\n\n var val = {\n t: 'n',\n v: 0\n },\n header = 0,\n offset = 1,\n hdr\n /*:Array*/\n = [],\n v = 0,\n vv = \"\";\n var r = {\n s: {\n r: 0,\n c: 0\n },\n e: {\n r: 0,\n c: 0\n }\n };\n var o = opts || {};\n var range = o.range != null ? o.range : sheet[\"!ref\"];\n if (o.header === 1) header = 1;else if (o.header === \"A\") header = 2;else if (Array.isArray(o.header)) header = 3;\n\n switch (typeof range) {\n case 'string':\n r = safe_decode_range(range);\n break;\n\n case 'number':\n r = safe_decode_range(sheet[\"!ref\"]);\n r.s.r = range;\n break;\n\n default:\n r = range;\n }\n\n if (header > 0) offset = 0;\n var rr = encode_row(r.s.r);\n var cols\n /*:Array*/\n = [];\n var counter = 0;\n var dense = Array.isArray(sheet);\n var R = r.s.r,\n C = 0;\n var header_cnt = {};\n if (dense && !sheet[R]) sheet[R] = [];\n var colinfo\n /*:Array*/\n = o.skipHidden && sheet[\"!cols\"] || [];\n var rowinfo\n /*:Array*/\n = o.skipHidden && sheet[\"!rows\"] || [];\n\n for (C = r.s.c; C <= r.e.c; ++C) {\n if ((colinfo[C] || {}).hidden) continue;\n cols[C] = encode_col(C);\n val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\n switch (header) {\n case 1:\n hdr[C] = C - r.s.c;\n break;\n\n case 2:\n hdr[C] = cols[C];\n break;\n\n case 3:\n hdr[C] = o.header[C - r.s.c];\n break;\n\n default:\n if (val == null) val = {\n w: \"__EMPTY\",\n t: \"s\"\n };\n vv = v = format_cell(val, null, o);\n counter = header_cnt[v] || 0;\n if (!counter) header_cnt[v] = 1;else {\n do {\n vv = v + \"_\" + counter++;\n } while (header_cnt[vv]);\n\n header_cnt[v] = counter;\n header_cnt[vv] = 1;\n }\n hdr[C] = vv;\n }\n }\n\n R = r.s.r + offset;\n\n stream._read = function () {\n while (R <= r.e.r) {\n if ((rowinfo[R - 1] || {}).hidden) continue;\n var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n ++R;\n\n if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n stream.push(row.row);\n return;\n }\n }\n\n return stream.push(null);\n };\n\n return stream;\n}\n\nvar __stream = {\n to_json: write_json_stream,\n to_html: write_html_stream,\n to_csv: write_csv_stream,\n set_readable: set_readable\n};\nexport var version = XLSX.version;\nexport { parse_xlscfb, parse_zip, readSync as read, readFileSync as readFile, readFileSync, writeSync as write, writeFileSync as writeFile, writeFileSync, writeFileAsync, writeSyncXLSX as writeXLSX, writeFileSyncXLSX as writeFileXLSX, utils, __stream as stream, SSF, CFB };"],"names":["XLSX","current_codepage","current_ansi","VALID_ANSI","CS2CP","set_ansi","cp","indexOf","set_cp","reset_cp","char_codes","data","o","i","len","length","charCodeAt","utf16beread","String","fromCharCode","join","$cptable","debom","c1","c2","utf16leread","slice","_getchar","x","_getansi","DENSE","Base64_map","Base64_encode","input","c3","e1","e2","e3","e4","isNaN","charAt","Base64_decode","replace","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","from","e","buf","enc","bind","new_raw_buf","alloc","Uint8Array","Array","new_unsafe_buf","allocUnsafe","s2a","s","split","map","a2s","isArray","c","ab2a","ArrayBuffer","Error","bconcat","bufs","concat","isBuffer","maxlen","set","apply","call","chr0","chr1","_strrev","pad0","v","d","t","fill","pad_","rpad_","p2_32","Math","pow","pad0r","round","pad0r1","pad0r2","SSF_isgeneral","days","months","table_fmt","SSF_default_map","SSF_default_str","SSF_frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","floor","q","SSF_parse_date_code","opts","b2","date","time","dow","dout","out","T","u","y","m","H","M","S","abs","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","SSF_fix_hijri","SSFbasedate","SSFdnthresh","getTime","SSFbase1904","datenum_local","epoch","getTimezoneOffset","SSF_strip_decimal","SSF_general_num","V","log","LOG10E","toPrecision","w","toFixed","toExponential","SSF_small_exp","substr","SSF_large_exp","SSF_normalize_exp","toUpperCase","SSF_general","toString","SSF_format","SSF_write_date","type","fmt","val","ss0","ss","tt","outl","commaify","j","pct1","write_num_exp","idx","match","period","ee","fakee","$$","$1","$2","$3","frac1","dec1","closeparen","phone","hashq","str","cc","rnd","dd","dec","_frac","write_num_flt","ffmt","write_num","write_num_cm","sfmt","mul","write_num_pct","r","ri","ff","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f1","carry","oa","min","max","lres","rres","flr","write_num_exp2","write_num_int","write_num_cm2","write_num_pct2","write_num_f2","lastIndexOf","SSF_abstime","fmt_is_date","cfregex2","chkcond","thresh","parseFloat","choose_fmt","f","in_str","SSF_split_fmt","l","lat","m1","m2","dateNF","table","flen","dt","lst","hr","toLowerCase","ssm","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","eval_fmt","SSF_load","undefined","make_ssf","SSFImplicit","dateNFregex","CRC32","version","T0","n","Int32Array","signed_crc_table","TT","subarray","slice_by_16_tables","T1","T2","T3","T4","T5","T6","T7","T8","T9","Ta","Tb","Tc","Td","Te","Tf","bstr","seed","C","L","CFB","fs","exports","dirname","p","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","write_shift","ymd","parse_extra_field","blob","prep_blob","flags","read_shift","sz","tgt","mtime","atime","ctime","mt","get_fs","parse","file","options","parse_zip","root","di","row","test","mboundary","boundary","FileIndex","FullPaths","init_cfb","start_di","fcnt","line","parse_mime","parse_mad","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","mv","chk","HEADER_SIGNATURE","check_get_mver","header","shift","check_shifts","dir_cnt","sectors","nsectors","ceil","sectorify","sleuth_fat","sector_list","sl","chkd","buf_chain","modulus","k","seen","push","addr","__readInt32LE","nodes","__toBuffer","make_sector_list","name","ENDOFCHAIN","Paths","files","mini","minifat_store","pl","sector","namelen","__utf16le","color","R","clsid","state","start","size","ct","read_date","storage","get_sector_list","content","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","raw","entry","payload","MSSZ","new_buf","cnt","offset","__readUInt32LE","cfb","CLSID","nm","find","rebuild_cfb","seed_cfb","gc","_file","pop","now","fullPaths","Object","create","HEADER_CLSID","sort","Z","namecmp","elt","_write","_opts","fileType","fp","fi","ca","cstr","dispcnt","csl","qp","get_content_type","write_quoted_printable","write_base64_76","write_mad","cdirs","method","compression","start_cd","crcs","sz_cd","namebuf","outbuf","_deflateRawSync","write_zip","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","copy","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","bit_swap_8","use_typed_arrays","bitswap8","bit_swap_n","b","rev","read_bits_2","bl","h","read_bits_3","read_bits_5","read_bits_7","read_bits_n","write_bits_3","write_bits_1","write_bits_8","write_bits_16","realloc","a","zero_fill_array","build_tree","clens","cmap","MAX","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","_deflateRaw","DST_LN_RE","LEN_LN_RE","boff","write_stored","addrs","hash","mlen","len_eb","dst_eb","write_huff_fixed","off","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","read_bits_4","next_code","hcodes","h1","h2","_inflate","usz","woff","OL","max_len_1","max_len_2","bits","code","dst","inflate","warn_or_throw","wrn","msg","console","error","csz","efsz","fcsz","EF","parse_local_file","meth","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_dos_date","_csz","_usz","ef","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","cfb_add","unsafe","ContentTypeMap","ctype","ext","text","encoded","si","end","tmp","fdata","fname","cte","trim","oi","parse_quoted_printable","fpath","utils","cfb_gc","path","UCFullPaths","UCPaths","UCPath","read","readFileSync","read_file","write","writeFileSync","writeFile","cfb_new","cfb_del","splice","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","message","_inflateRaw","_fs","keys","ks","o2","prototype","hasOwnProperty","evert","obj","K","basedate","datenum","refdate","dnthresh","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date_1","good_pd_date","good_pd","parseDate","fixdate","cc2str","arr","debomit","utf8write","TextDecoder","decode","dup","JSON","stringify","fuzzynum","Number","isFinite","NaN","wt","lower_months","fuzzydate","getYear","lower","split_regex","safe_split_regex","re","def","getdatastr","asNodeBuffer","asBinary","_data","getContent","getdatabin","safegetzipfile","zip","g","getzipfile","getzipdata","safe","getzipstr","getzipbin","zipentries","zip_add_file","res","widx","ridx","utf8decode","zip_read","resolve_path","result","target","step","XML_HEADER","attregexg","tagregex1","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","skip_LC","z","eq","quot","strip_ns","encodings","rencoding","unescapexml","encregex","coderegex","decregex","htmlcharegex","escapehtml","xlml_fixstr","entregex","entrepl","parsexmlbool","value","utf8reada","orig","utf8readb","ww","utf8readc","utf8corpus","utf8read","matchtag","mtcache","RegExp","htmldecode","entities","vtregex","vt_cache","vtvregex","vtmregex","parseVector","matches","baseType","WTF","forEach","wtregex","wxt_helper","writextag","xlml_normalize","xlmlregex","XMLNS","CORE_PROPS","CUST_PROPS","EXT_PROPS","CT","RELS","TCMNT","XMLNS_main","___toBuffer","___utf16le","__readUInt16LE","___hexlify","__hexlify","___utf8","__readUInt8","__utf8","___lpstr","__lpstr","___cpstr","__cpstr","___lpwstr","__lpwstr","___lpp4","__lpp4","___8lpp4","__8lpp4","___double","Infinity","read_double_le","__double","is_buf","cpdoit","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","this","lens","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cppayload","encode","bs","av","LN2","write_double_le","hexstr","fld","pos","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","next","_bufs","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","fix_row","encode_range_xls","encode_row","encode_col","decode_row","rowstr","decode_col","colstr","col","decode_cell","decode_range","encode_range","cs","ce","safe_decode_range","safe_format_cell","XF","numFmtId","format_cell","BErr","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","origin","_origin","_range","__R","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","parse_XLWideString","cchCharacters","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","parse_BrtCommentText","parse_XLSBCell","iStyleRef","parse_XLSBShortCell","parse_XLSBCodeName","parse_XLNullableWideString","parse_XLNameWideString","parse_RelID","parse_RkNumber","fX100","fInt","RK","parse_RfX","parse_UncheckedRfX","parse_Xnum","parse_ClipboardFormatOrString","VT_I2","VT_I4","VT_VARIANT","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","CountryEnum","XLSFillPattern","rgbify","XLSIcv","RBErr","ct2type","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","CMNT","SST","STY","THEME","CHART","CHARTEX","CS","WS","DS","MS","IMG","DRAW","XLMETA","PEOPLE","VBA","get_rels_path","parse_rels","currentFilePath","rels","rel","Type","Target","Id","TargetMode","canonictarget","CT_ODS","CORE_PROPS_REGEX","parse_core_props","cur","load_props_pairs","HP","TOP","props","hp","parts","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","custregex","evert_XLMLDPM","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","Application","LastPrinted","CreatedDate","ModifiedDate","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","xlml_set_prop","Props","parse_FILETIME","dwLowDateTime","dwHighDateTime","toISOString","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","parse_dictionary","CodePage","dict","pid","parse_BLOB","bytes","ret","Size","parse_ClipboardData","parse_VtUnalignedString","cElements","parse_VtVecHeadingPairValue","parse_VtVecLpwstrValue","parse_VtVecUnalignedLpstrValue","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","rval","FMTID","parsenoop2","parseuint16","parseuint16a","parslurp","parse_ShortXLUnicodeString","cch","encoding","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","width","cRun","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","parse_HyperlinkMoniker","extra","url","parse_URLMoniker","cAnti","preamble","ansiPath","parse_FileMoniker","parse_HyperlinkString","parse_LongRGBA","parse_LongRGB","parse_XLSCell","ixfe","parse_XTI","parse_RkRec","parse_Ref8U","rwFirst","rwLast","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtSkip","FtTab","cf","fSharedNote","parse_BOF","BIFFVer","parse_DefaultRowHeight","miyRw","Unsynced","DyZero","ExAsc","ExDsc","parse_BIFF2Format","parse_Dimensions","parse_BoolErr","parse_Bes","parse_XLHeaderFooter","parse_ExternName","body","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","sbcch","udfName","parse_AddinUdf","Name","XLSLblBuiltIn","parse_Lbl","chKey","cce","itab","npflen","rgce","rgcb","parse_Rgce","parse_RgbExtra","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_Array","ref","parse_ArrayParsedFormula","parse_BIFF5OT","cchName","parse_ColInfo","cellStyles","colFirst","colLast","coldx","level","parse_Blank","parse_Scl","parse_String","DBF_SUPPORTED_VERSIONS","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","ft","memo","vfp","l7","nrow","fpos","rlen","current_cp","codepage","fields","field","hend","sheetRows","dbf_to_aoa","wch","_RLEN","to_workbook","to_sheet","from_sheet","ba","aoa","sheet_to_json","headers","cols","hcnt","coltypes","colwidths","coldecimals","guess","_guess","hf","_f","hb","rout","_n","_s","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","sylk_char_regex","sylk_char_fn","_","decode_sylk_char","newcc","sylk_to_aoa_str","records","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","rstr","record","C_seen_K","C_seen_X","C_seen_S","C_seen_E","formula","rc_to_a1","shrbase","shift_formula_str","F_seen","hidden","process_col","hpt","hpx","pt2px","sylk_to_sheet","aoasht","sylk_to_aoa","write_ws_cell_sylk","F","a1_to_rc","RS","rec","wpx","width2px","px2char","rows","px2pt","write_ws_rows_sylk","coord","DIF","dif_to_aoa_str","metadata","dif_to_sheet","dif_to_aoa","push_field","topic","push_value","ETH","eth_to_sheet","eth_to_aoa","sep","meta","sheet_to_eth_data","PRN","set_text_arr","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","FS","sepcc","startcc","_re","dateNF_regex","finish_cell","Y","datestr","timestr","dateNF_fix","cellText","cellNF","outer","prn_to_sheet_str","lines","prn_to_aoa_str","prn_to_sheet","firstbyte","WK_","lotushopper","Enum","WK1Enum","lotus_to_workbook_buf","next_n","sidx","snames","realnames","refguess","vers","qpro","tmpcell","WK3Enum","osheets","rnames","parse_cell","parse_LABEL","write_LABEL","write_INTEGER","write_NUMBER","wk1_parse_rc","FuncTab","BinOpTab","parse_cell_3","write_LABEL_16","wsidx","parse_NUMBER_17","v1","v2","write_NUMBER_17","log2","parse_NUMBER_27","parse_SHEETNAMECS","write_XFORMAT_SHEETNAME","argc","argL","argR","args","wk1_fmla_to_csf","sheet_to_wk1","write_biff_rec","write_BOF_WK1","write_RANGE","max_R","book_to_wk3","wb","wscnt","write_BOF_WK3","parse_rs","tregex","rpregex","parse_r","rpr","font","pass","shadow","outline","strike","uval","rgb","family","valign","parse_rpr","rregex","rend","rs","filter","rs_to_html","nlregex","r_to_html","terms","intro","outro","style","align","parse_rpr2","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceMapEntry","comps","parse_Primary","hdr","U","W","parse_TransformInfoHeader","ename","cmode","parse_EncryptionHeader","Flags","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","KeyData","xml","encryptedHmacKey","encryptedHmacValue","encs","uri","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordDecoded","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","XorRor","byte1","byte2","Byte","password","Temp","PasswordLastChar","PadIndex","XorKey","CurrentElement","Char","CreateXorKey_Method1","Index","ObfuscationArray","crypto_MakeXorDecryptor","XorArrayIndex","XorArray","Data","O","Value","crypto_DecryptData_Method1","parse_FilePassHeader","Info","EncryptionVersionInfo","EncryptedVerifier","EncryptedVerifierHash","parse_RC4Header","EncryptionHeader","EncryptionVerifier","parse_RC4CryptoHeader","RTF","rtf_to_sheet","rtf_to_sheet_str","rowtf","rtfre","last_index","exec","lastIndex","rgb2Hex","rgb_tint","hex","tint","hsl","G","H6","L2","rgb2HSL","hex2RGB","X","h6","hsl2RGB","DEF_MDW","MAX_MDW","MIN_MDW","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","delta","_MDW","coll","customWidth","PPI","pt","XLMLPatternTypeMap","cellXF_uint","cellXF_bool","parse_sty_xml","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","themes","styles","NumberFmt","formatCode","parse_numFmts","Fonts","bold","italic","underline","condense","extend","vertAlign","scheme","auto","indexed","index","icv","theme","themeElements","clrScheme","parse_fonts","Fills","patternType","bgColor","fgColor","parse_fills","Borders","border","diagonalUp","diagonalDown","parse_borders","xf","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","parse_cellXfs","parse_BrtFill","parse_BrtBorder","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","themeltregex","parse_theme_xml","write_theme","parse_themeElements","Themes","themeXLSX","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_ColorTheme","parse_ExtProp","extType","parse_XFExtGradient","sheet_insert_comments","comments","threaded","people","comment","author","parse_BrtCommentAuthor","CT_VBA","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_PtgAttrBaxcel","bitSemi","parse_PtgAttrSpaceType","parse_SerAr","parse_PtgExtraMem","count","parse_PtgExtraArray","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfLel","PtgListRT","PtgTypes","iftab","FtabArgc","Ftab","cparams","tab","parsetab","Cetab","nameindex","rl","parse_RgceLocRel_BIFF2","cl","parse_RgceLocRel","area","parse_RgceAreaRel","ixti","parse_PtgNameX_BIFF5","PtgDupes","Ptg18","coltype","rt","Ptg19","bitIf","bitGoto","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","sname","formula_quote_sheet_name","stringify_formula","stack","nameidx","last_sp","sp","fflen","func","lbl","names","xlfn","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","_left","parse_SharedParsedFormula","parse_Formula","parse_FormulaValue","cbf","parse_XLSCellParsedFormula","shared","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","ods_to_csf_3D","strs","_ssfopts","default_margins","margins","mode","defs","left","right","top","bottom","footer","safe_format","fmtid","fillid","raw_rgb","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","sheetprregex2","svsregex","parse_ws_xml","data1","data2","mtch","sheetPr","parse_ws_xml_sheetpr","parse_ws_xml_sheetpr2","parse_ws_xml_dim","svs","Views","sviewregex","zoomScale","zoom","rightToLeft","RTL","parse_ws_xml_sheetviews","columns","seencol","coli","colm","colM","outlineLevel","parse_ws_xml_cols","parse_ws_xml_data","afilter","parse_ws_xml_autofilter","merges","_merge","hlink","location","Rel","tooltip","Tooltip","rng","parse_ws_xml_hlinks","margin","parse_ws_xml_margins","tmpref","codeName","CodeName","cellregex","rowregex","isregex","refregex","match_v","match_f","sdata","sstr","ftag","cells","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","rstarti","outa","ht","rslice","cellFormula","___f","_tag","fillId","cm","xlmeta","Cell","_r","parse_BrtWsDim","parse_BrtShortReal","parse_BrtMergeCell","BrtMarginKeys","parse_chart","csheet","nc","cache","num","nf","parse_Cache","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","defaults","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","badchars","check_ws_name","_good","wbnsregex","parse_BrtFRTArchID$","ArchID","parse_wb","xmlns","Names","Sheet","Ref","Ptg","parse_wb_bin","dname","dnstart","Hidden","Comment","localSheetId","parse_wb_xml","parse_ws","ai","af","vm","RR","aii","_d","relId","rfx","above","parse_ws_bin","parse_cs","parse_cs_bin","parse_cs_xml","parse_sty","parse_sty_bin","parse_sst","Count","Unique","parse_sst_bin","sst","uniqueCount","parse_sst_xml","parse_cmnt","authors","iauthor","parse_comments_bin","commentList","authtag","cmnttag","authorId","guid","textMatch","parse_comments_xml","parse_cc","parse_cc_bin","parse_cc_xml","parse_xlink","parse_xlink_bin","parse_xlmeta","Types","metatype","parse_xlmeta_bin","lastmeta","offsets","parse_xlmeta_xml","XLMLFormatMap","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_set_custprop","Custprops","key","oval","safe_format_xlml","format","xlml_format","process_style_xlml","stag","Interior","I","Pattern","ID","parse_xlml_data","csty","sid","StyleID","interiors","Parent","UTC","Formula","ArrayRange","xlml_clean_comment","parse_xlml_xml","Rn","opening","ishtml","_o","html_to_sheet","book_append_sheet","html_to_workbook","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","Workbook","wsprops","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","Range","parse_fods","Margin","pagemargins","Top","Left","Right","Bottom","bookSheets","bookProps","SSF","parse_xlml","fix_read_opts","parse_compobj","AnsiUserType","AnsiClipboardFormat","parse_ClipboardFormatOrAnsiString","Reserved1","UnicodeClipboardFormat","parse_ClipboardFormatOrUnicodeString","Reserved2","CONTINUE_RT","slurp","RecordType","insitu","nextrt","XLSRecordEnum","ll","safe_format_xf","make_cell","parse_workbook","lastcell","cmnt","rngC","rngR","temp_val","country","Directory","last_formula","cur_sheet","Preamble","last_cell","XFs","palette","get_rgb","addcell","file_depth","xfd","icvFore","icvBack","process_cell_style","afi","rrtabid","lastuser","winlocked","wtf","objects","last_lbl","last_RT","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","fDialog","fBelow","fRight","ExternCount","tmpri","biffguess","fakebs8","hs","rknum","rkrec","_fr","_fc","_fe","_arraystart","isst","_j","_ixfe","b4idx","b2idx","cmo","lastobj","TxO","ImData","noteobj","xfe","Strings","Encryption","Metadata","Country","PSCLSID","SI","DSI","UDI","parse_xlscfb","CompObj","WorkbookP","bookVBA","vbaraw","newcfb","newpath","make_vba_xls","DocSummary","Summary","HeadingPairs","TitlesOfParts","parse_xls_props","bookFiles","grbit","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","parse_FontFlags","bCharSet","charset","xColorType","nTS","bR","bG","bB","parse_BrtColor","ixfeParent","ifmt","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","filterPrivacy","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","iTabID","strRelID","fAlwaysCalc","display","idObj","stAuthor","parse_NoteSh","verificationBytes","verifier","parse_XORObfuscation","dyHeight","fl","Pos","Dim","CurTab","FirstTab","Selected","TabRatio","UserName","fts","parse_BIFF5Obj","parse_FtArray","ccv","rw","rkrecs","lastcol","ixfes","fStyle","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","fsxButton","parse_CellStyleXF","cmcs","ucnt","extsst","dsst","ctab","virtPath","rgst","texts","accel","parse_ControlInfo","cchText","sVer","displayName","targetFrameName","moniker","oleMoniker","fileTime","Loc","parse_Hyperlink","xnum","cUse","wzTooltip","cxfs","crc","cexts","cchComment","themeXML","parse_frtHeader","env","lcb","mtch2","hd","midx","colspan","rowspan","_t","make_html_row","editable","HTML_BEGIN","HTML_END","make_html_preamble","sheet_to_html","sheet_add_dom","or_R","or_C","getElementsByTagName","is_dom_element_hidden","elts","children","hasAttribute","getAttribute","innerHTML","Aelts","Aelti","parse_dom_table","element","get_computed_style","ownerDocument","defaultView","getComputedStyle","get_get_computed_style_function","getPropertyValue","parse_text_p","fixed","number_formats_ods","day","month","year","hours","minutes","seconds","era","quarter","parse_content_xml","sheetag","rowtag","NFtag","NF","ctag","textp","textpidx","textR","row_ol","number_format_map","mrange","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","nrange","ptp","href","parse_ods","FEtag","parse_manifest","u8_to_dataview","array","DataView","buffer","byteOffset","byteLength","u8str","u8","u8concat","u8a","reduce","acc","popcnt","parse_varint49","ptr","varint","varint_to_i32","i32","parse_shallow","mappa","parse_iwa_file","_a","messages","mi","merge","parse_snappy_chunk","chunks","decompress_iwa_file","parse_new_storage","rsst","dv","getUint32","data_offset","d128","ieee","exp","mantissa","readDecimal128LE","getFloat64","parse_cell_storage","parse_old_storage","parse_TSP_Reference","parse_TST_TableDataList","pb","entries","le","rtp","rtpref","mtype","tswpsa","parse_TST_Tile","_b","_c","_e","_g","_h","_i","_k","_l","_m","used_storage_u8","used_storage","wide_offsets","used_storage_offsets","getUint16","parse_TST_TileRowInfo","nrows","parse_TST_TableInfoArchive","tableref","store","tile","tl","_tile","parse_TST_TableModelArchive","parse_TN_DocumentArchive","root2","parse_TN_SheetArchive","parse_numbers_iwa","indices","packets","packet","docroot","iwam","fix_opts_func","safe_parse_sheet","relsPath","sheetRels","stype","dfile","drelsp","draw","parse_drawing","chartp","crelsp","parse_ds","tcomments","tidx","personId","parse_tcmnt_xml","strip_front_slash","_zip","binname","dir","workbooks","charts","dialogs","macros","threadedcomments","links","coreprops","extprops","custprops","calcchains","vba","drawings","TODO","ctext","Extension","ContentType","PartName","calcchain","parse_ct","xlsb","parse_theme","link","propdata","parse_ext_props","toks","warn","parse_cust_props","deps","bookDeps","wbsheets","wbext","wbrelsi","wbrelsfile","wbrels","displayname","parse_people_xml","safe_parse_wbrels","nmode","wsloop","snjseen","snj","Deps","Styles","bin","parse_xlsxcfb","parse_DataSpaceVersionInfo","dsm","parse_DataSpaceMap","seds","parse_DataSpaceDefinition","einfo","parse_EncryptionInfo","decrypt_agile","decrypt_std76","read_plaintext","main","read_prn","readSync","Deno","$","File","Folder","infile","open","close","read_binary","bstrify","ab","vu","foo","read_cfb","OLD_WTF","read_wb_ID","read_zip","read_utf16","read_plaintext_raw","make_json_row","defval","isempty","defineProperty","enumerable","__rowNum__","rawNumbers","outi","counter","header_cnt","skipHidden","blankrows","qreg","make_csv_row","txt","forceQuotes","sheet_to_csv","endregex","strip","sheet_to_txt","sheet_add_json","js","skipHeader","JS","ws_get_cell_stub","RC","book_new","roll","cell_set_hyperlink","split_cell","json_to_sheet","table_to_sheet","table_to_book","sheet_to_formulae","cmds","sheet_to_row_object_array","sheet_get_cell","book_set_sheet_visibility","sh","vis","wb_sheet_idx","cell_set_number_format","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","dynamic","rngstr","SHEET_VISIBLE","SHEET_HIDDEN","SHEET_VERY_HIDDEN"],"sourceRoot":""}