@gen-epix/ui-client-casedb 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/dist/@types/mui.d.ts +1 -1
  2. package/dist/@types/{ui-casedb.d.ts → ui-client-casedb.d.ts} +1 -1
  3. package/dist/_chunks/AddCasesToEventDialog.js +74 -74
  4. package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
  5. package/dist/_chunks/CaseContentForm.js +2 -2
  6. package/dist/_chunks/CaseContentForm.js.map +1 -1
  7. package/dist/_chunks/CaseDbDownloadUtil.js +40 -35
  8. package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
  9. package/dist/_chunks/CaseInfoDialog.js +195 -195
  10. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  11. package/dist/_chunks/CaseSetInfoDialog.js +131 -131
  12. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  13. package/dist/_chunks/CaseTypeInfoDialog.js +63 -61
  14. package/dist/_chunks/CaseTypeInfoDialog.js.map +1 -1
  15. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js +6 -6
  16. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
  17. package/dist/_chunks/CompletCaseTypeLoader.js +3 -3
  18. package/dist/_chunks/CompletCaseTypeLoader.js.map +1 -1
  19. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js +1 -1
  20. package/dist/_chunks/CreateEventDialogSuccessNotificationMessage.js.map +1 -1
  21. package/dist/_chunks/CustomTabPanel.js.map +1 -1
  22. package/dist/_chunks/Dashboard.js +399 -386
  23. package/dist/_chunks/Dashboard.js.map +1 -1
  24. package/dist/_chunks/DashboardStoreLoader.js +5 -5
  25. package/dist/_chunks/DashboardStoreLoader.js.map +1 -1
  26. package/dist/_chunks/DataCollectionAccessInfo.js +21 -21
  27. package/dist/_chunks/DataCollectionAccessInfo.js.map +1 -1
  28. package/dist/_chunks/EpiCurveUtil.js +4 -4
  29. package/dist/_chunks/EpiCurveUtil.js.map +1 -1
  30. package/dist/_chunks/EpiCurveWidget.js +189 -183
  31. package/dist/_chunks/EpiCurveWidget.js.map +1 -1
  32. package/dist/_chunks/FilterUtil.js +103 -101
  33. package/dist/_chunks/FilterUtil.js.map +1 -1
  34. package/dist/_chunks/FindSimilarCasesDialog.js +16 -16
  35. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  36. package/dist/_chunks/FindSimilarCasesUtil.js +9 -9
  37. package/dist/_chunks/FindSimilarCasesUtil.js.map +1 -1
  38. package/dist/_chunks/HomePageTrends.js +8 -8
  39. package/dist/_chunks/HomePageTrends.js.map +1 -1
  40. package/dist/_chunks/LegendaItem.js +3 -3
  41. package/dist/_chunks/LegendaItem.js.map +1 -1
  42. package/dist/_chunks/LineListWidget.js +23 -21
  43. package/dist/_chunks/LineListWidget.js.map +1 -1
  44. package/dist/_chunks/PanelSeparator.js +374 -384
  45. package/dist/_chunks/PanelSeparator.js.map +1 -1
  46. package/dist/_chunks/Upload.js +222 -207
  47. package/dist/_chunks/Upload.js.map +1 -1
  48. package/dist/_chunks/UploadUtil.js +1970 -841
  49. package/dist/_chunks/UploadUtil.js.map +1 -1
  50. package/dist/_chunks/UserRightsDialog.js +12 -12
  51. package/dist/_chunks/UserRightsDialog.js.map +1 -1
  52. package/dist/_chunks/_MapCache.js +2 -2
  53. package/dist/_chunks/_baseGet.js +1 -1
  54. package/dist/_chunks/_baseGet.js.map +1 -1
  55. package/dist/_chunks/_baseIteratee.js +1 -1
  56. package/dist/_chunks/_baseIteratee.js.map +1 -1
  57. package/dist/_chunks/_setToString.js.map +1 -1
  58. package/dist/_chunks/{chunk-KS7C4IRE.js → chunk-BV7QT456.js} +330 -495
  59. package/dist/_chunks/chunk-BV7QT456.js.map +1 -0
  60. package/dist/_chunks/cloneDeep.js +11 -9
  61. package/dist/_chunks/cloneDeep.js.map +1 -1
  62. package/dist/_chunks/dashboardStore.js +259 -261
  63. package/dist/_chunks/dashboardStore.js.map +1 -1
  64. package/dist/_chunks/esm.js +2900 -2868
  65. package/dist/_chunks/esm.js.map +1 -1
  66. package/dist/_chunks/format.js +8 -8
  67. package/dist/_chunks/format.js.map +1 -1
  68. package/dist/_chunks/index.esm.js +919 -796
  69. package/dist/_chunks/index.esm.js.map +1 -1
  70. package/dist/_chunks/index.module.js +1 -1
  71. package/dist/_chunks/index.module.js.map +1 -1
  72. package/dist/_chunks/protectedTokens.js +79 -81
  73. package/dist/_chunks/protectedTokens.js.map +1 -1
  74. package/dist/_chunks/react.js +1 -1
  75. package/dist/_chunks/react.js.map +1 -1
  76. package/dist/_chunks/round.js +1 -1
  77. package/dist/_chunks/round.js.map +1 -1
  78. package/dist/_chunks/shallow.js +2 -2
  79. package/dist/_chunks/shallow.js.map +1 -1
  80. package/dist/_chunks/sync.js +198 -161
  81. package/dist/_chunks/sync.js.map +1 -1
  82. package/dist/_chunks/toDate.js +1 -1
  83. package/dist/_chunks/toDate.js.map +1 -1
  84. package/dist/_chunks/toString.js +1 -1
  85. package/dist/_chunks/toString.js.map +1 -1
  86. package/dist/_chunks/useUnit.js.map +1 -1
  87. package/dist/_chunks/vanilla.js +1 -1
  88. package/dist/_chunks/vanilla.js.map +1 -1
  89. package/dist/_chunks/yup.js +5 -5
  90. package/dist/_chunks/yup.js.map +1 -1
  91. package/dist/classes/filters/SelectionFilter.d.ts +2 -2
  92. package/dist/classes/filters/TreeFilter.d.ts +2 -2
  93. package/dist/classes/services/DataService/index.js +3 -3
  94. package/dist/classes/services/DataService/index.js.map +1 -1
  95. package/dist/classes/services/EventBusService/EventBusService.d.ts +1 -1
  96. package/dist/classes/services/EventBusService/index.js.map +1 -1
  97. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js +1 -1
  98. package/dist/classes/services/LineListService/LineListServiceAbstract/index.js.map +1 -1
  99. package/dist/components/app/CaseDbApp/index.js +8 -5
  100. package/dist/components/app/CaseDbApp/index.js.map +1 -1
  101. package/dist/components/form/fields/ArrangementEditor/index.js +83 -83
  102. package/dist/components/form/fields/ArrangementEditor/index.js.map +1 -1
  103. package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialog.d.ts +2 -2
  104. package/dist/components/ui/CaseContentFormDialog/CaseContentFormDialog.d.ts +2 -2
  105. package/dist/components/ui/CaseContentFormDialog/index.js +1 -1
  106. package/dist/components/ui/CaseContentFormDialog/index.js.map +1 -1
  107. package/dist/components/ui/CaseInfoDialog/CaseInfoDialog.d.ts +2 -2
  108. package/dist/components/ui/CaseSetInfoDialog/CaseSetInfoDialog.d.ts +2 -2
  109. package/dist/components/ui/CaseSummary/index.js +1 -1
  110. package/dist/components/ui/CaseSummary/index.js.map +1 -1
  111. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialog.d.ts +2 -2
  112. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.d.ts +1 -1
  113. package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogWithLoader.d.ts +2 -2
  114. package/dist/components/ui/ContextMenu/index.js.map +1 -1
  115. package/dist/components/ui/CreateEventDialog/CreateEventDialog.d.ts +2 -2
  116. package/dist/components/ui/CreateEventDialog/index.js +9 -9
  117. package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
  118. package/dist/components/ui/Dashboard/DashboardDownloadSidebarItem.d.ts +1 -1
  119. package/dist/components/ui/Dashboard/DashboardSettingsSidebarItem.d.ts +1 -1
  120. package/dist/components/ui/Dashboard/DashboardWidget.d.ts +1 -1
  121. package/dist/components/ui/DashboardEditCases/index.js +1 -1
  122. package/dist/components/ui/DashboardEditCases/index.js.map +1 -1
  123. package/dist/components/ui/FileSelector/index.js +46 -46
  124. package/dist/components/ui/FileSelector/index.js.map +1 -1
  125. package/dist/components/ui/FindSimilarCasesDialog/FindSimilarCasesDialog.d.ts +2 -2
  126. package/dist/components/ui/Grouping/index.js +50 -50
  127. package/dist/components/ui/Grouping/index.js.map +1 -1
  128. package/dist/components/ui/HistogramWidget/index.js +1 -1
  129. package/dist/components/ui/HistogramWidget/index.js.map +1 -1
  130. package/dist/components/ui/MapWidget/index.js +7 -3
  131. package/dist/components/ui/MapWidget/index.js.map +1 -1
  132. package/dist/components/ui/RemoveCasesFromEventDialog/RemoveCasesFromEventDialog.d.ts +2 -2
  133. package/dist/components/ui/RemoveCasesFromEventDialog/index.js +6 -6
  134. package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
  135. package/dist/components/ui/RemoveFindSimilarCasesResultDialog/RemoveFindSimilarCasesResultDialog.d.ts +2 -2
  136. package/dist/components/ui/SequenceDownloadDialog/SequenceDownloadDialog.d.ts +2 -2
  137. package/dist/components/ui/SequenceDownloadDialog/index.js +22 -22
  138. package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
  139. package/dist/components/ui/TreeDescription/index.js.map +1 -1
  140. package/dist/components/ui/TreeWidget/index.js +11 -11
  141. package/dist/components/ui/TreeWidget/index.js.map +1 -1
  142. package/dist/components/ui/Upload/UploadCaseResultTable.d.ts +2 -2
  143. package/dist/components/ui/Upload/UploadEditColumnValuesDialog.d.ts +2 -2
  144. package/dist/components/ui/UserRightsDialog/UserRightsDialog.d.ts +2 -2
  145. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/UsersEffectiveRightsDetailsDialog.d.ts +2 -2
  146. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js +25 -11
  147. package/dist/components/ui/UsersEffectiveRightsDetailsDialog/index.js.map +1 -1
  148. package/dist/components/ui/Warning/index.js.map +1 -1
  149. package/dist/components/ui/WidgetHeaderIconButton/index.js.map +1 -1
  150. package/dist/components/ui/WidgetMenu/WidgetMenu.d.ts +1 -1
  151. package/dist/components/ui/WidgetMenu/index.js +2 -2
  152. package/dist/components/ui/WidgetMenu/index.js.map +1 -1
  153. package/dist/components/ui/WidgetUnavailable/index.js.map +1 -1
  154. package/dist/constants/query.d.ts +1 -1
  155. package/dist/constants/query.js +1 -1
  156. package/dist/constants/query.js.map +1 -1
  157. package/dist/context/caseAbac/CaseAbacContext.d.ts +1 -1
  158. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js +3 -3
  159. package/dist/dataHooks/useAssemblyProtocolsQuery/index.js.map +1 -1
  160. package/dist/dataHooks/useAssemblyProtocolsQuery/useAssemblyProtocolsQuery.d.ts +1 -1
  161. package/dist/dataHooks/useCaseRightsQuery/index.js +2 -2
  162. package/dist/dataHooks/useCaseRightsQuery/index.js.map +1 -1
  163. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js +3 -3
  164. package/dist/dataHooks/useCaseSetCategoriesQuery/index.js.map +1 -1
  165. package/dist/dataHooks/useCaseSetCategoriesQuery/useCaseSetCategoriesQuery.d.ts +1 -1
  166. package/dist/dataHooks/useCaseSetRightsQuery/index.js +2 -2
  167. package/dist/dataHooks/useCaseSetRightsQuery/index.js.map +1 -1
  168. package/dist/dataHooks/useCaseSetStatsQuery/index.js +3 -3
  169. package/dist/dataHooks/useCaseSetStatsQuery/index.js.map +1 -1
  170. package/dist/dataHooks/useCaseSetStatsQuery/useCaseSetStatsQuery.d.ts +1 -1
  171. package/dist/dataHooks/useCaseSetStatusesQuery/index.js +3 -3
  172. package/dist/dataHooks/useCaseSetStatusesQuery/index.js.map +1 -1
  173. package/dist/dataHooks/useCaseSetStatusesQuery/useCaseSetStatusesQuery.d.ts +1 -1
  174. package/dist/dataHooks/useCaseSetsQuery/index.js +3 -3
  175. package/dist/dataHooks/useCaseSetsQuery/index.js.map +1 -1
  176. package/dist/dataHooks/useCaseSetsQuery/useCaseSetsQuery.d.ts +1 -1
  177. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js +3 -3
  178. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/index.js.map +1 -1
  179. package/dist/dataHooks/useCaseTypeSetCategoriesQuery/useCaseTypeSetCategoriesQuery.d.ts +1 -1
  180. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/index.js.map +1 -1
  181. package/dist/dataHooks/useCaseTypeSetCategoryPurposeQuery/useCaseTypeSetCategoryPurposeQuery.d.ts +1 -1
  182. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js +2 -2
  183. package/dist/dataHooks/useCaseTypeSetMembersQuery/index.js.map +1 -1
  184. package/dist/dataHooks/useCaseTypeSetsQuery/index.js +3 -3
  185. package/dist/dataHooks/useCaseTypeSetsQuery/index.js.map +1 -1
  186. package/dist/dataHooks/useCaseTypeSetsQuery/useCaseTypeSetsQuery.d.ts +1 -1
  187. package/dist/dataHooks/useCaseTypeStatsQuery/index.js +2 -2
  188. package/dist/dataHooks/useCaseTypeStatsQuery/index.js.map +1 -1
  189. package/dist/dataHooks/useCaseTypesQuery/index.js +3 -3
  190. package/dist/dataHooks/useCaseTypesQuery/index.js.map +1 -1
  191. package/dist/dataHooks/useCaseTypesQuery/useCaseTypesQuery.d.ts +1 -1
  192. package/dist/dataHooks/useColSetMembersQuery/index.js +2 -2
  193. package/dist/dataHooks/useColSetMembersQuery/index.js.map +1 -1
  194. package/dist/dataHooks/useColSetsQuery/index.js +3 -3
  195. package/dist/dataHooks/useColSetsQuery/index.js.map +1 -1
  196. package/dist/dataHooks/useColSetsQuery/useColSetsQuery.d.ts +1 -1
  197. package/dist/dataHooks/useColTypesQuery/index.js.map +1 -1
  198. package/dist/dataHooks/useColTypesQuery/useColTypesQuery.d.ts +1 -1
  199. package/dist/dataHooks/useColsQuery/index.js +3 -3
  200. package/dist/dataHooks/useColsQuery/index.js.map +1 -1
  201. package/dist/dataHooks/useColsQuery/useColsQuery.d.ts +1 -1
  202. package/dist/dataHooks/useConceptQuery/index.js +3 -3
  203. package/dist/dataHooks/useConceptQuery/index.js.map +1 -1
  204. package/dist/dataHooks/useConceptQuery/useConceptQuery.d.ts +1 -1
  205. package/dist/dataHooks/useConceptRelationTypeQuery/index.js.map +1 -1
  206. package/dist/dataHooks/useConceptRelationTypeQuery/useConceptRelationTypeQuery.d.ts +1 -1
  207. package/dist/dataHooks/useConceptSetTypeQuery/index.js.map +1 -1
  208. package/dist/dataHooks/useConceptSetTypeQuery/useConceptSetTypeQuery.d.ts +1 -1
  209. package/dist/dataHooks/useConceptSetsQuery/index.js +3 -3
  210. package/dist/dataHooks/useConceptSetsQuery/index.js.map +1 -1
  211. package/dist/dataHooks/useConceptSetsQuery/useConceptSetsQuery.d.ts +1 -1
  212. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js +2 -2
  213. package/dist/dataHooks/useDataCollectionSetMembersQuery/index.js.map +1 -1
  214. package/dist/dataHooks/useDataCollectionsQuery/index.js +3 -3
  215. package/dist/dataHooks/useDataCollectionsQuery/index.js.map +1 -1
  216. package/dist/dataHooks/useDataCollectionsQuery/useDataCollectionsQuery.d.ts +1 -1
  217. package/dist/dataHooks/useDimTypesQuery/index.js.map +1 -1
  218. package/dist/dataHooks/useDimTypesQuery/useDimTypesQuery.d.ts +1 -1
  219. package/dist/dataHooks/useDimsQuery/index.js +3 -3
  220. package/dist/dataHooks/useDimsQuery/index.js.map +1 -1
  221. package/dist/dataHooks/useDimsQuery/useDimsQuery.d.ts +1 -1
  222. package/dist/dataHooks/useDiseasesQuery/index.js +3 -3
  223. package/dist/dataHooks/useDiseasesQuery/index.js.map +1 -1
  224. package/dist/dataHooks/useDiseasesQuery/useDiseasesQuery.d.ts +1 -1
  225. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js +3 -3
  226. package/dist/dataHooks/useEtiologicalAgentsQuery/index.js.map +1 -1
  227. package/dist/dataHooks/useEtiologicalAgentsQuery/useEtiologicalAgentsQuery.d.ts +1 -1
  228. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js +3 -3
  229. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/index.js.map +1 -1
  230. package/dist/dataHooks/useGeneticDistanceProtocolsQuery/useGeneticDistanceProtocolsQuery.d.ts +1 -1
  231. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js +2 -2
  232. package/dist/dataHooks/useOrganizationAccessCasePoliciesQuery/index.js.map +1 -1
  233. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js +2 -2
  234. package/dist/dataHooks/useOrganizationShareCasePoliciesQuery/index.js.map +1 -1
  235. package/dist/dataHooks/useRefColsQuery/index.js +3 -3
  236. package/dist/dataHooks/useRefColsQuery/index.js.map +1 -1
  237. package/dist/dataHooks/useRefColsQuery/useRefColsQuery.d.ts +1 -1
  238. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js +2 -2
  239. package/dist/dataHooks/useRefColsValidationRulesQuery/index.js.map +1 -1
  240. package/dist/dataHooks/useRefDimsQuery/index.js +3 -3
  241. package/dist/dataHooks/useRefDimsQuery/index.js.map +1 -1
  242. package/dist/dataHooks/useRefDimsQuery/useRefDimsQuery.d.ts +1 -1
  243. package/dist/dataHooks/useRegionQuery/index.js +3 -3
  244. package/dist/dataHooks/useRegionQuery/index.js.map +1 -1
  245. package/dist/dataHooks/useRegionQuery/useRegionQuery.d.ts +1 -1
  246. package/dist/dataHooks/useRegionRelationTypeQuery/index.js.map +1 -1
  247. package/dist/dataHooks/useRegionRelationTypeQuery/useRegionRelationTypeQuery.d.ts +1 -1
  248. package/dist/dataHooks/useRegionSetsQuery/index.js +3 -3
  249. package/dist/dataHooks/useRegionSetsQuery/index.js.map +1 -1
  250. package/dist/dataHooks/useRegionSetsQuery/useRegionSetsQuery.d.ts +1 -1
  251. package/dist/dataHooks/useSequencingProtocolsQuery/index.js +3 -3
  252. package/dist/dataHooks/useSequencingProtocolsQuery/index.js.map +1 -1
  253. package/dist/dataHooks/useSequencingProtocolsQuery/useSequencingProtocolsQuery.d.ts +1 -1
  254. package/dist/dataHooks/useTreeAlgorithmCodesQuery/index.js.map +1 -1
  255. package/dist/dataHooks/useTreeAlgorithmCodesQuery/useTreeAlgorithmCodesQuery.d.ts +1 -1
  256. package/dist/dataHooks/useUnitQuery/useUnit.d.ts +1 -1
  257. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js +2 -2
  258. package/dist/dataHooks/useUserAccessCasePoliciesQuery/index.js.map +1 -1
  259. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js +3 -3
  260. package/dist/dataHooks/useUserEffectiveRightsQuery/index.js.map +1 -1
  261. package/dist/dataHooks/useUserEffectiveRightsQuery/useUserEffectiveRightsQuery.d.ts +1 -1
  262. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js +2 -2
  263. package/dist/dataHooks/useUserShareCasePoliciesQuery/index.js.map +1 -1
  264. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js +2 -2
  265. package/dist/hooks/useOrganizationCasePolicyNameFactory/index.js.map +1 -1
  266. package/dist/hooks/useOrganizationCasePolicyNameFactory/useOrganizationCasePolicyNameFactory.d.ts +1 -1
  267. package/dist/hooks/useUserCasePolicyNameFactory/index.js +3 -3
  268. package/dist/hooks/useUserCasePolicyNameFactory/index.js.map +1 -1
  269. package/dist/hooks/useUserCasePolicyNameFactory/useUserCasePolicyNameFactory.d.ts +1 -1
  270. package/dist/locale/nl.json +1 -1
  271. package/dist/models/config.d.ts +1 -1
  272. package/dist/models/dashboard.d.ts +1 -1
  273. package/dist/models/dashboard.js.map +1 -1
  274. package/dist/models/theme.d.ts +2 -2
  275. package/dist/pages/CaseDbUsersAdminPage/index.js +5 -5
  276. package/dist/pages/CaseDbUsersAdminPage/index.js.map +1 -1
  277. package/dist/pages/CaseSetCategoryAdminPage/index.js +4 -4
  278. package/dist/pages/CaseSetCategoryAdminPage/index.js.map +1 -1
  279. package/dist/pages/CaseSetStatusAdminPage/index.js +4 -4
  280. package/dist/pages/CaseSetStatusAdminPage/index.js.map +1 -1
  281. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js +4 -4
  282. package/dist/pages/CaseTypeSetCategoriesAdminPage/index.js.map +1 -1
  283. package/dist/pages/CaseTypeSetsAdminPage/index.js +6 -6
  284. package/dist/pages/CaseTypeSetsAdminPage/index.js.map +1 -1
  285. package/dist/pages/CaseTypesAdminPage/index.js +5 -5
  286. package/dist/pages/CaseTypesAdminPage/index.js.map +1 -1
  287. package/dist/pages/CasesDetailPage/index.js +5 -5
  288. package/dist/pages/CasesDetailPage/index.js.map +1 -1
  289. package/dist/pages/CasesPage/index.js +10 -10
  290. package/dist/pages/CasesPage/index.js.map +1 -1
  291. package/dist/pages/ColSetsAdminPage/index.js +6 -6
  292. package/dist/pages/ColSetsAdminPage/index.js.map +1 -1
  293. package/dist/pages/ColsAdminPage/index.js +5 -5
  294. package/dist/pages/ColsAdminPage/index.js.map +1 -1
  295. package/dist/pages/ConceptRelationsAdminPage/index.js +19 -19
  296. package/dist/pages/ConceptRelationsAdminPage/index.js.map +1 -1
  297. package/dist/pages/ConceptSetsAdminPage/index.js +5 -5
  298. package/dist/pages/ConceptSetsAdminPage/index.js.map +1 -1
  299. package/dist/pages/ConceptsAdminPage/index.js +5 -5
  300. package/dist/pages/ConceptsAdminPage/index.js.map +1 -1
  301. package/dist/pages/DataCollectionSetsAdminPage/index.js +12 -12
  302. package/dist/pages/DataCollectionSetsAdminPage/index.js.map +1 -1
  303. package/dist/pages/DataCollectionVisualizationPage/index.js +4 -4
  304. package/dist/pages/DataCollectionVisualizationPage/index.js.map +1 -1
  305. package/dist/pages/DataCollectionsAdminPage/index.js +4 -4
  306. package/dist/pages/DataCollectionsAdminPage/index.js.map +1 -1
  307. package/dist/pages/DimsAdminPage/index.js +6 -6
  308. package/dist/pages/DimsAdminPage/index.js.map +1 -1
  309. package/dist/pages/DiseasesAdminPage/index.js +4 -4
  310. package/dist/pages/DiseasesAdminPage/index.js.map +1 -1
  311. package/dist/pages/EtiologicalAgentsAdminPage/index.js +4 -4
  312. package/dist/pages/EtiologicalAgentsAdminPage/index.js.map +1 -1
  313. package/dist/pages/EtiologiesAdminPage/index.js +3 -3
  314. package/dist/pages/EtiologiesAdminPage/index.js.map +1 -1
  315. package/dist/pages/EventsDetailPage/index.js +5 -5
  316. package/dist/pages/EventsDetailPage/index.js.map +1 -1
  317. package/dist/pages/EventsPage/index.js +11 -11
  318. package/dist/pages/EventsPage/index.js.map +1 -1
  319. package/dist/pages/HomePage/index.js +2 -2
  320. package/dist/pages/HomePage/index.js.map +1 -1
  321. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +4 -4
  322. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
  323. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js +4 -4
  324. package/dist/pages/OrganizationShareCasePoliciesAdminPage/index.js.map +1 -1
  325. package/dist/pages/RefColsAdminPage/index.js +7 -7
  326. package/dist/pages/RefColsAdminPage/index.js.map +1 -1
  327. package/dist/pages/RefDimsAdminPage/index.js +5 -5
  328. package/dist/pages/RefDimsAdminPage/index.js.map +1 -1
  329. package/dist/pages/RegionRelationsAdminPage/index.js +3 -3
  330. package/dist/pages/RegionRelationsAdminPage/index.js.map +1 -1
  331. package/dist/pages/RegionSetShapesAdminPage/index.js +4 -4
  332. package/dist/pages/RegionSetShapesAdminPage/index.js.map +1 -1
  333. package/dist/pages/RegionSetsAdminPage/index.js +5 -5
  334. package/dist/pages/RegionSetsAdminPage/index.js.map +1 -1
  335. package/dist/pages/RegionsAdminPage/index.js +5 -5
  336. package/dist/pages/RegionsAdminPage/index.js.map +1 -1
  337. package/dist/pages/TrendsPage/index.js +1 -1
  338. package/dist/pages/TrendsPage/index.js.map +1 -1
  339. package/dist/pages/UploadPage/index.js +1 -1
  340. package/dist/pages/UploadPage/index.js.map +1 -1
  341. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js +4 -4
  342. package/dist/pages/UserAccessCasePoliciesAdminPage/index.js.map +1 -1
  343. package/dist/pages/UserEffectiveRightsAdminPage/index.js +12 -12
  344. package/dist/pages/UserEffectiveRightsAdminPage/index.js.map +1 -1
  345. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +8 -8
  346. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
  347. package/dist/pages/UserShareCasePoliciesAdminPage/index.js +4 -4
  348. package/dist/pages/UserShareCasePoliciesAdminPage/index.js.map +1 -1
  349. package/dist/routes/adminRoutes.d.ts +1 -1
  350. package/dist/routes/index.js +11 -8
  351. package/dist/routes/index.js.map +1 -1
  352. package/dist/routes/routes.d.ts +1 -1
  353. package/dist/setup/setup.js +5 -5
  354. package/dist/setup/setup.js.map +1 -1
  355. package/dist/stores/dashboardStore/dashboardStore.d.ts +1 -1
  356. package/dist/stores/uploadStore/index.js +2 -2
  357. package/dist/stores/uploadStore/index.js.map +1 -1
  358. package/dist/stores/uploadStore/uploadStore.d.ts +1 -1
  359. package/dist/stores/userProfileStore/index.js +2 -2
  360. package/dist/stores/userProfileStore/index.js.map +1 -1
  361. package/dist/theme/demoTheme/index.js +2 -2
  362. package/dist/theme/demoTheme/index.js.map +1 -1
  363. package/dist/utils/CaseDbDataUtil/CaseDbDataUtil.d.ts +1 -1
  364. package/dist/utils/CaseDbDataUtil/index.js +1 -1
  365. package/dist/utils/CaseDbDataUtil/index.js.map +1 -1
  366. package/dist/utils/CaseDbStandardConfigUtil/index.js +2488 -1408
  367. package/dist/utils/CaseDbStandardConfigUtil/index.js.map +1 -1
  368. package/dist/utils/CaseDbTableUtil/CaseDbTableUtil.d.ts +1 -1
  369. package/dist/utils/CaseDbTableUtil/index.js +1 -1
  370. package/dist/utils/CaseDbTableUtil/index.js.map +1 -1
  371. package/dist/utils/CaseSelectionUtil/index.js.map +1 -1
  372. package/dist/utils/CaseTypeFormUtil/CaseTypeFormUtil.d.ts +1 -1
  373. package/dist/utils/CaseTypeFormUtil/index.js +7 -10
  374. package/dist/utils/CaseTypeFormUtil/index.js.map +1 -1
  375. package/dist/utils/CaseTypeUtil/index.js +1 -1
  376. package/dist/utils/CaseTypeUtil/index.js.map +1 -1
  377. package/dist/utils/CaseUtil/index.js +3 -3
  378. package/dist/utils/CaseUtil/index.js.map +1 -1
  379. package/dist/utils/DashboardUtil/index.js +1 -1
  380. package/dist/utils/DashboardUtil/index.js.map +1 -1
  381. package/dist/utils/DataSetUtil/index.js.map +1 -1
  382. package/dist/utils/FileUtil/index.js +1 -1
  383. package/dist/utils/FileUtil/index.js.map +1 -1
  384. package/dist/utils/FilterUtil/FilterUtil.d.ts +2 -2
  385. package/dist/utils/HistogramUtil/index.js +1 -1
  386. package/dist/utils/HistogramUtil/index.js.map +1 -1
  387. package/dist/utils/MapUtil/index.js +1 -1
  388. package/dist/utils/MapUtil/index.js.map +1 -1
  389. package/dist/utils/StratificationUtil/index.js +3 -2
  390. package/dist/utils/StratificationUtil/index.js.map +1 -1
  391. package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -1
  392. package/package.json +19 -11
  393. package/dist/_chunks/chunk-KS7C4IRE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","names":[],"sources":["../../../../node_modules/.pnpm/fflate@0.8.3/node_modules/fflate/esm/browser.js","../../../../node_modules/.pnpm/csv@6.6.1/node_modules/csv/dist/esm/sync.js"],"sourcesContent":["// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n , // determined by compression function\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data[0]) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush(ev.data[1]);\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n // can fail for cross-realm Uint8Array, but ok - only a small performance penalty\n w.postMessage([d, t = f], d.buffer instanceof ArrayBuffer ? [d.buffer] : []);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function (sync) { w.postMessage([0, sync]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read 8 bytes\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n if (final) {\n // cleanup unneeded buffers/state to reduce memory usage\n this.s = this.o = {};\n this.b = et;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible. A separate DEFLATE stream may be concatenated\n * with the current output after a sync flush.\n */\n Deflate.prototype.flush = function (sync) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n // could technically skip writing the type-0 block for (this.s.r & 7) == 0,\n // but the deterministic trailer (00 00 FF FF) is useful in some situations\n if (sync) {\n var c = new u8(6);\n c[0] = this.s.r >> 3;\n // write empty, non-final type-0 block\n var ep = wfblk(c, this.s.r, et);\n this.s.r = 0;\n this.ondata(c.subarray(0, ep >> 3), false);\n }\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Gzip.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, 0);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n else if (final) {\n Inflate.prototype.c.call(this, final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Zlib.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (ArrayBuffer.isView(val))\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), efl = b2(d, b + 30), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z64hs(d, es, efl, z, b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)), sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + efl + b2(d, b + 32), off];\n};\n// read zip64 header sizes\nvar z64hs = function (d, b, l, z, sc, su, off) {\n var nsc = sc == 4294967295, nsu = su == 4294967295, noff = off == 4294967295, e = b + l;\n var nf = nsc + nsu + noff;\n if (z && nf) {\n for (; b + 4 < e; b += 4 + b2(d, b + 2)) {\n if (b2(d, b) == 1) {\n return [\n nsc ? b8(d, b + 4 + 8 * nsu) : sc,\n nsu ? b8(d, b + 4) : su,\n noff ? b8(d, b + 4 + 8 * (nsu + nsc)) : off,\n 1\n ];\n }\n }\n // z == 2 for unknown whether or not zip64\n if (z < 2)\n err(13);\n }\n return [sc, su, off, 0];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n // we shouldn't really do this cast, but properly handling ArrayBufferLike\n // makes the API unergonomic with Buffer\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (chunk, final) {\n // same as ZipPassThrough: cast to retain Buffer ergonomics\n this.ondata(null, chunk, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (chunk, final) {\n try {\n this.i.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (chunk, final) {\n if (this.i.terminate)\n chunk = slc(chunk, 0);\n this.i.push(chunk, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var lsc = b4(buf, i + 18), lsu = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n var _a = z64hs(buf, i, es, 2, lsc, lsu, 0), sc_1 = _a[0], su_1 = _a[1], z64 = _a[3];\n if (dd)\n sc_1 = -1 - z64;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n","var global$1 = (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n }\n\n revLookup['-'.charCodeAt(0)] = 62;\n revLookup['_'.charCodeAt(0)] = 63;\n}\n\nfunction toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr;\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders);\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len;\n\n var L = 0;\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n arr[L++] = (tmp >> 16) & 0xFF;\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n arr[L++] = tmp & 0xFF;\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp;\n var output = [];\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n output.push(tripletToBase64(tmp));\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n var output = '';\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n output += lookup[tmp >> 2];\n output += lookup[(tmp << 4) & 0x3F];\n output += '==';\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n output += lookup[tmp >> 10];\n output += lookup[(tmp >> 4) & 0x3F];\n output += lookup[(tmp << 2) & 0x3F];\n output += '=';\n }\n\n parts.push(output);\n\n return parts.join('')\n}\n\nfunction read$1 (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? (nBytes - 1) : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n\n i += d;\n\n e = s & ((1 << (-nBits)) - 1);\n s >>= (-nBits);\n nBits += eLen;\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1);\n e >>= (-nBits);\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nfunction write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n var i = isLE ? 0 : (nBytes - 1);\n var d = isLE ? 1 : -1;\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m;\n eLen += mLen;\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n}\n\nvar toString = {}.toString;\n\nvar isArray$1 = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\nvar INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined\n ? global$1.TYPED_ARRAY_SUPPORT\n : true;\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nkMaxLength();\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length);\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length);\n }\n that.length = length;\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype;\n return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) ;\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size);\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n assertSize(size);\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0;\n that = createBuffer(that, length);\n\n var actual = that.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual);\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n that = createBuffer(that, length);\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array);\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset);\n } else {\n array = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array;\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array);\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0;\n that = createBuffer(that, len);\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len);\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray$1(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\nBuffer.isBuffer = isBuffer$1;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n};\n\nBuffer.concat = function concat (list, length) {\n if (!isArray$1(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i;\n if (length === undefined) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n return buffer\n};\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false;\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0;\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length;\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length;\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length;\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n return this\n};\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0;\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n var str = '';\n var max = INSPECT_MAX_BYTES;\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\n return '<Buffer ' + str + '>'\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0;\n }\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n if (thisStart === undefined) {\n thisStart = 0;\n }\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n byteOffset = +byteOffset; // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1);\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i;\n if (dir) {\n var foundIndex = -1;\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n if (length > remaining) {\n length = remaining;\n }\n }\n\n // must be an even number of digits\n var strLen = string.length;\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed;\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0;\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0;\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8';\n\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n};\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return fromByteArray(buf)\n } else {\n return fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n\n var i = start;\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n break\n case 2:\n secondByte = buf[i + 1];\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = '';\n var i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n );\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length;\n\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n\n var out = '';\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n\n var newBuf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | (this[offset + 1] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | (this[offset] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read$1(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read$1(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read$1(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read$1(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8;\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24);\n this[offset + 2] = (value >>> 16);\n this[offset + 1] = (value >>> 8);\n this[offset] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n this[offset + 2] = (value >>> 16);\n this[offset + 3] = (value >>> 24);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648);\n if (value < 0) value = 0xffffffff + value + 1;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n );\n }\n\n return len\n};\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n if (code < 256) {\n val = code;\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n\n if (!val) val = 0;\n\n var i;\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint;\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null;\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo;\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i];\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nfunction isBuffer$1(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount$1.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount$1;\nfunction listenerCount$1(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\n// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global$1.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global$1.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nvar env = {};\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global$1.performance || {};\nperformance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() };\n\nvar process = {\n env: env};\n\nvar inherits;\nif (typeof Object.create === 'function'){\n inherits = function inherits(ctor, superCtor) {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n inherits = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n };\n}\nvar inherits$1 = inherits;\n\nvar formatRegExp = /%[sdj%]/g;\nfunction format(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n}\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nfunction deprecate(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global$1.process)) {\n return function() {\n return deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\nvar debugs = {};\nvar debugEnviron;\nfunction debuglog(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = 0;\n debugs[set] = function() {\n var msg = format.apply(null, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n}\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n _extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var length = output.reduce(function(prev, cur) {\n if (cur.indexOf('\\n') >= 0) ;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nfunction isNull(arg) {\n return arg === null;\n}\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\n\nfunction isSymbol$1(arg) {\n return typeof arg === 'symbol';\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\n\nfunction isBuffer(maybeBuf) {\n return isBuffer$1(maybeBuf);\n}\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nfunction log() {\n console.log('%s - %s', timestamp(), format.apply(null, arguments));\n}\n\nfunction _extend(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n}\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar util = {\n inherits: inherits$1,\n _extend: _extend,\n log: log,\n isBuffer: isBuffer,\n isPrimitive: isPrimitive,\n isFunction: isFunction,\n isError: isError,\n isDate: isDate,\n isObject: isObject,\n isRegExp: isRegExp,\n isUndefined: isUndefined,\n isSymbol: isSymbol$1,\n isString: isString,\n isNumber: isNumber,\n isNullOrUndefined: isNullOrUndefined,\n isNull: isNull,\n isBoolean: isBoolean,\n isArray: isArray,\n inspect: inspect,\n deprecate: deprecate,\n format: format,\n debuglog: debuglog\n};\n\nfunction BufferList() {\n this.head = null;\n this.tail = null;\n this.length = 0;\n}\n\nBufferList.prototype.push = function (v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n};\n\nBufferList.prototype.unshift = function (v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n};\n\nBufferList.prototype.shift = function () {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n};\n\nBufferList.prototype.clear = function () {\n this.head = this.tail = null;\n this.length = 0;\n};\n\nBufferList.prototype.join = function (s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n};\n\nBufferList.prototype.concat = function (n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n p.data.copy(ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n};\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar isBufferEncoding = Buffer.isEncoding\n || function(encoding) {\n switch (encoding && encoding.toLowerCase()) {\n case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n default: return false;\n }\n };\n\n\nfunction assertEncoding(encoding) {\n if (encoding && !isBufferEncoding(encoding)) {\n throw new Error('Unknown encoding: ' + encoding);\n }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nfunction StringDecoder(encoding) {\n this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n assertEncoding(encoding);\n switch (this.encoding) {\n case 'utf8':\n // CESU-8 represents each of Surrogate Pair by 3-bytes\n this.surrogateSize = 3;\n break;\n case 'ucs2':\n case 'utf16le':\n // UTF-16 represents each of Surrogate Pair by 2-bytes\n this.surrogateSize = 2;\n this.detectIncompleteChar = utf16DetectIncompleteChar;\n break;\n case 'base64':\n // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n this.surrogateSize = 3;\n this.detectIncompleteChar = base64DetectIncompleteChar;\n break;\n default:\n this.write = passThroughWrite;\n return;\n }\n\n // Enough space to store all bytes of a single character. UTF-8 needs 4\n // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n this.charBuffer = new Buffer(6);\n // Number of bytes received for the current incomplete multi-byte character.\n this.charReceived = 0;\n // Number of bytes expected for the current incomplete multi-byte character.\n this.charLength = 0;\n}\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n var charStr = '';\n // if our last write ended with an incomplete multibyte character\n while (this.charLength) {\n // determine how many remaining bytes this buffer has to offer for this char\n var available = (buffer.length >= this.charLength - this.charReceived) ?\n this.charLength - this.charReceived :\n buffer.length;\n\n // add the new bytes to the char buffer\n buffer.copy(this.charBuffer, this.charReceived, 0, available);\n this.charReceived += available;\n\n if (this.charReceived < this.charLength) {\n // still not enough chars in this buffer? wait for more ...\n return '';\n }\n\n // remove bytes belonging to the current character from the buffer\n buffer = buffer.slice(available, buffer.length);\n\n // get the character that was split\n charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n var charCode = charStr.charCodeAt(charStr.length - 1);\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n this.charLength += this.surrogateSize;\n charStr = '';\n continue;\n }\n this.charReceived = this.charLength = 0;\n\n // if there are no more bytes in this buffer, just emit our char\n if (buffer.length === 0) {\n return charStr;\n }\n break;\n }\n\n // determine and set charLength / charReceived\n this.detectIncompleteChar(buffer);\n\n var end = buffer.length;\n if (this.charLength) {\n // buffer the incomplete character bytes we got\n buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n end -= this.charReceived;\n }\n\n charStr += buffer.toString(this.encoding, 0, end);\n\n var end = charStr.length - 1;\n var charCode = charStr.charCodeAt(end);\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n var size = this.surrogateSize;\n this.charLength += size;\n this.charReceived += size;\n this.charBuffer.copy(this.charBuffer, size, 0, size);\n buffer.copy(this.charBuffer, 0, 0, size);\n return charStr.substring(0, end);\n }\n\n // or just emit the charStr\n return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n // determine how many bytes we have to check at the end of this buffer\n var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n // Figure out if one of the last i bytes of our buffer announces an\n // incomplete char.\n for (; i > 0; i--) {\n var c = buffer[buffer.length - i];\n\n // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n // 110XXXXX\n if (i == 1 && c >> 5 == 0x06) {\n this.charLength = 2;\n break;\n }\n\n // 1110XXXX\n if (i <= 2 && c >> 4 == 0x0E) {\n this.charLength = 3;\n break;\n }\n\n // 11110XXX\n if (i <= 3 && c >> 3 == 0x1E) {\n this.charLength = 4;\n break;\n }\n }\n this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n var res = '';\n if (buffer && buffer.length)\n res = this.write(buffer);\n\n if (this.charReceived) {\n var cr = this.charReceived;\n var buf = this.charBuffer;\n var enc = this.encoding;\n res += buf.slice(0, cr).toString(enc);\n }\n\n return res;\n};\n\nfunction passThroughWrite(buffer) {\n return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 2;\n this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 3;\n this.charLength = this.charReceived ? 3 : 0;\n}\n\nReadable.ReadableState = ReadableState;\n\nvar debug = debuglog('stream');\ninherits$1(Readable, EventEmitter);\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') {\n return emitter.prependListener(event, fn);\n } else {\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event])\n emitter.on(event, fn);\n else if (Array.isArray(emitter._events[event]))\n emitter._events[event].unshift(fn);\n else\n emitter._events[event] = [fn, emitter._events[event]];\n }\n}\nfunction listenerCount (emitter, type) {\n return emitter.listeners(type).length;\n}\nfunction ReadableState(options, stream) {\n\n options = options || {};\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // when piping, we only care about 'readable' events that happen\n // after read()ing all the bytes and not getting any pushback.\n this.ranOut = false;\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options && typeof options.read === 'function') this._read = options.read;\n\n EventEmitter.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n\n if (!state.objectMode && typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n }\n\n return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n var state = this._readableState;\n return readableAddChunk(this, state, chunk, '', true);\n};\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n var er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (state.ended && !addToFront) {\n var e = new Error('stream.push() after EOF');\n stream.emit('error', e);\n } else if (state.endEmitted && addToFront) {\n var _e = new Error('stream.unshift() after end event');\n stream.emit('error', _e);\n } else {\n var skipAdd;\n if (state.decoder && !addToFront && !encoding) {\n chunk = state.decoder.write(chunk);\n skipAdd = !state.objectMode && chunk.length === 0;\n }\n\n if (!addToFront) state.reading = false;\n\n // Don't add to the buffer if we've decoded to an empty string chunk and\n // we're not in object mode\n if (!skipAdd) {\n // if we want the data now, just emit it.\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n }\n\n maybeReadMore(stream, state);\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n\n return needMoreData(state);\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n var er = null;\n if (!isBuffer$1(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false);\n\n var endFn = doEnd ? onend : cleanup;\n if (state.endEmitted) nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable) {\n debug('onunpipe');\n if (readable === src) {\n cleanup();\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', cleanup);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (listenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && src.listeners('data').length) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var _i = 0; _i < len; _i++) {\n dests[_i].emit('unpipe', this);\n }return this;\n }\n\n // try to find the right one.\n var i = indexOf(state.pipes, dest);\n if (i === -1) return this;\n\n state.pipes.splice(i, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = EventEmitter.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var state = this._readableState;\n var paused = false;\n\n var self = this;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) self.push(chunk);\n }\n\n self.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = self.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n forEach(events, function (ev) {\n stream.on(ev, self.emit.bind(self, ev));\n });\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n self._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction forEach(xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\nWritable.WritableState = WritableState;\ninherits$1(Writable, EventEmitter);\n\nfunction nop() {}\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\nfunction WritableState(options, stream) {\n Object.defineProperty(this, 'buffer', {\n get: deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')\n });\n options = options || {};\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function writableStateGetBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\nfunction Writable(options) {\n\n // Writable ctor is applied to Duplexes, though they're not\n // instanceof Writable, they're instanceof Readable.\n if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options);\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n }\n\n EventEmitter.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n nextTick(cb, er);\n}\n\n// If we get something that is not a buffer, string, null, or undefined,\n// and we're not in objectMode, then that's an error.\n// Otherwise stream chunks are all considered to be of length=1, and the\n// watermarks determine how many objects to keep in the buffer, rather than\n// how many bytes or characters.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n // Always throw error if a null is written\n // if we are not in object mode then throw\n // if it is not a buffer, string, or undefined.\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, cb) {\n chunk = decodeChunk(state, chunk, encoding);\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) nextTick(cb, er);else cb(er);\n\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n nextTick(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n while (entry) {\n buffer[count] = entry;\n entry = entry.next;\n count += 1;\n }\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequestCount = 0;\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished) {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n if (state.pendingcb === 0) {\n prefinish(stream, state);\n state.finished = true;\n stream.emit('finish');\n } else {\n prefinish(stream, state);\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function (err) {\n var entry = _this.entry;\n _this.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = _this;\n } else {\n state.corkedRequestsFree = _this;\n }\n };\n}\n\ninherits$1(Duplex, Readable);\n\nvar keys = Object.keys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\ninherits$1(Transform, Duplex);\n\nfunction TransformState(stream) {\n this.afterTransform = function (er, data) {\n return afterTransform(stream, er, data);\n };\n\n this.needTransform = false;\n this.transforming = false;\n this.writecb = null;\n this.writechunk = null;\n this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n var ts = stream._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data !== null && data !== undefined) stream.push(data);\n\n cb(er);\n\n var rs = stream._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n stream._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = new TransformState(this);\n\n // when the writable side finishes, then flush out anything remaining.\n var stream = this;\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n this.once('prefinish', function () {\n if (typeof this._flush === 'function') this._flush(function (er) {\n done(stream, er);\n });else done(stream);\n });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('Not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nfunction done(stream, er) {\n if (er) return stream.emit('error', er);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n var ws = stream._writableState;\n var ts = stream._transformState;\n\n if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}\n\ninherits$1(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};\n\ninherits$1(Stream, EventEmitter);\nStream.Readable = Readable;\nStream.Writable = Writable;\nStream.Duplex = Duplex;\nStream.Transform = Transform;\nStream.PassThrough = PassThrough;\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EventEmitter.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EventEmitter.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n\nconst init_state$1 = (options) => {\n // State\n return {\n start_time: options.duration ? Date.now() : null,\n fixed_size_buffer: \"\",\n count_written: 0,\n count_created: 0,\n };\n};\n\n// Generate a random number between 0 and 1 with 2 decimals. The function is idempotent if it detect the \"seed\" option.\nconst random = function (options = {}) {\n if (options.seed) {\n return (options.seed = ((options.seed * Math.PI * 100) % 100) / 100);\n } else {\n return Math.random();\n }\n};\n\nconst types = {\n // Generate an ASCII value.\n ascii: function ({ options }) {\n const column = [];\n const nb_chars = Math.ceil(random(options) * options.maxWordLength);\n for (let i = 0; i < nb_chars; i++) {\n const char = Math.floor(random(options) * 32);\n column.push(String.fromCharCode(char + (char < 16 ? 65 : 97 - 16)));\n }\n return column.join(\"\");\n },\n // Generate an integer value.\n int: function ({ options }) {\n return Math.floor(random(options) * Math.pow(2, 52));\n },\n // Generate an boolean value.\n bool: function ({ options }) {\n return Math.floor(random(options) * 2);\n },\n};\n\nconst camelize = function (str) {\n return str.replace(/_([a-z])/gi, function (_, match) {\n return match.toUpperCase();\n });\n};\n\nconst normalize_options$2 = (opts) => {\n // Convert Stream Readable options if underscored\n if (opts.object_mode) {\n opts.objectMode = opts.object_mode;\n }\n if (opts.high_water_mark) {\n opts.highWaterMark = opts.high_water_mark;\n }\n // See https://nodejs.org/api/stream.html#stream_new_stream_readable_options\n // Node.js 20 introduced `stream.getDefaultHighWaterMark(opts.objectMode)`\n // opts.highWaterMark = opts.highWaterMark ?? (opts.objectMode ? 16 : 16384);\n // opts.highWaterMark = opts.highWaterMark ?? stream.getDefaultHighWaterMark(opts.objectMode);\n // Clone and camelize options\n const options = {};\n for (const k in opts) {\n options[camelize(k)] = opts[k];\n }\n // Normalize options\n const dft = {\n columns: 8,\n delimiter: \",\",\n duration: null,\n encoding: null,\n end: null,\n eof: false,\n fixedSize: false,\n length: -1,\n maxWordLength: 16,\n rowDelimiter: \"\\n\",\n seed: false,\n sleep: 0,\n };\n for (const k in dft) {\n if (options[k] === undefined) {\n options[k] = dft[k];\n }\n }\n // Default values\n if (options.eof === true) {\n options.eof = options.rowDelimiter;\n }\n if (typeof options.columns === \"number\") {\n options.columns = new Array(options.columns);\n }\n const accepted_header_types = Object.keys(types).filter(\n (t) => ![\"super_\", \"camelize\"].includes(t),\n );\n for (let i = 0; i < options.columns.length; i++) {\n const v = options.columns[i] || \"ascii\";\n if (typeof v === \"string\") {\n if (!accepted_header_types.includes(v)) {\n throw Error(\n `Invalid column type: got \"${v}\", default values are ${JSON.stringify(accepted_header_types)}`,\n );\n }\n options.columns[i] = types[v];\n }\n }\n return options;\n};\n\nconst read = (options, state, size, push, close) => {\n // Already started\n const data = [];\n let recordsLength = 0;\n // Get remaining buffer when fixedSize is enable\n if (options.fixedSize) {\n recordsLength = state.fixed_size_buffer.length;\n if (recordsLength !== 0) {\n data.push(state.fixed_size_buffer);\n }\n }\n // eslint-disable-next-line\n while(true){\n // Exit\n if (\n state.count_created === options.length ||\n (options.end && Date.now() > options.end) ||\n (options.duration && Date.now() > state.start_time + options.duration)\n ) {\n // Flush\n if (data.length) {\n if (options.objectMode) {\n for (const record of data) {\n push(record);\n }\n } else {\n push(data.join(\"\") + (options.eof ? options.eof : \"\"));\n }\n state.end = true;\n } else {\n close();\n }\n return;\n }\n // Create the record\n let record = [];\n let recordLength;\n for (const fn of options.columns) {\n const result = fn({ options: options, state: state });\n const type = typeof result;\n if (result !== null && type !== \"string\" && type !== \"number\") {\n close(\n Error(\n [\n \"INVALID_VALUE:\",\n \"values returned by column function must be\",\n \"a string, a number or null,\",\n `got ${JSON.stringify(result)}`,\n ].join(\" \"),\n ),\n );\n return;\n }\n record.push(result);\n }\n // Obtain record length\n if (options.objectMode) {\n recordLength = 0;\n // recordLength is currently equal to the number of columns\n // This is wrong and shall equal to 1 record only\n for (const column of record) {\n recordLength += column.length;\n }\n } else {\n // Stringify the record\n record =\n (state.count_created === 0 ? \"\" : options.rowDelimiter) +\n record.join(options.delimiter);\n recordLength = record.length;\n }\n state.count_created++;\n if (recordsLength + recordLength > size) {\n if (options.objectMode) {\n data.push(record);\n for (const record of data) {\n push(record);\n }\n } else {\n if (options.fixedSize) {\n state.fixed_size_buffer = record.substr(size - recordsLength);\n data.push(record.substr(0, size - recordsLength));\n } else {\n data.push(record);\n }\n push(data.join(\"\"));\n }\n return;\n }\n recordsLength += recordLength;\n data.push(record);\n }\n};\n\nconst Generator = function (options = {}) {\n this.options = normalize_options$2(options);\n // Call parent constructor\n Stream.Readable.call(this, this.options);\n this.state = init_state$1(this.options);\n return this;\n};\nutil.inherits(Generator, Stream.Readable);\n\n// Stop the generation.\nGenerator.prototype.end = function () {\n this.push(null);\n};\n// Put new data into the read queue.\nGenerator.prototype._read = function (size) {\n setImmediate(() => {\n this.__read(size);\n });\n};\nGenerator.prototype.__read = function (size) {\n read(\n this.options,\n this.state,\n size,\n (chunk) => {\n this.__push(chunk);\n },\n (err) => {\n if (err) {\n this.destroy(err);\n } else {\n this.push(null);\n }\n },\n );\n};\n// Put new data into the read queue.\nGenerator.prototype.__push = function (record) {\n const push = () => {\n this.state.count_written++;\n this.push(record);\n if (this.state.end === true) {\n return this.push(null);\n }\n };\n if (this.options.sleep > 0) setTimeout(push, this.options.sleep);\n else push();\n};\n\n/*\nCSV Generate - sync module\n\nPlease look at the [project documentation](https://csv.js.org/generate/) for\nadditional information.\n*/\n\n\nconst generate = function (options) {\n if (typeof options === \"string\" && /\\d+/.test(options)) {\n options = parseInt(options);\n }\n if (Number.isInteger(options)) {\n options = { length: options };\n } else if (typeof options !== \"object\" || options === null) {\n throw Error(\"Invalid Argument: options must be an object or an integer\");\n }\n if (!Number.isInteger(options.length)) {\n throw Error(\"Invalid Argument: length is not defined\");\n }\n const chunks = [];\n let work = true;\n const generator = new Generator(options);\n generator.push = function (chunk) {\n if (chunk === null) {\n return (work = false);\n }\n chunks.push(chunk);\n };\n while (work) {\n generator.__read(options.highWaterMark);\n }\n if (!options.objectMode) {\n return chunks.join(\"\");\n } else {\n return chunks;\n }\n};\n\nlet CsvError$1 = class CsvError extends Error {\n constructor(code, message, options, ...contexts) {\n if (Array.isArray(message)) message = message.join(\" \").trim();\n super(message);\n if (Error.captureStackTrace !== undefined) {\n Error.captureStackTrace(this, CsvError);\n }\n this.code = code;\n for (const context of contexts) {\n for (const key in context) {\n const value = context[key];\n this[key] = isBuffer$1(value)\n ? value.toString(options.encoding)\n : value == null\n ? value\n : JSON.parse(JSON.stringify(value));\n }\n }\n }\n};\n\nconst is_object$1 = function (obj) {\n return typeof obj === \"object\" && obj !== null && !Array.isArray(obj);\n};\n\nconst normalize_columns_array = function (columns) {\n const normalizedColumns = [];\n for (let i = 0, l = columns.length; i < l; i++) {\n const column = columns[i];\n if (column === undefined || column === null || column === false) {\n normalizedColumns[i] = { disabled: true };\n } else if (typeof column === \"string\" || typeof column === \"number\") {\n normalizedColumns[i] = { name: `${column}` };\n } else if (is_object$1(column)) {\n if (typeof column.name !== \"string\") {\n throw new CsvError$1(\"CSV_OPTION_COLUMNS_MISSING_NAME\", [\n \"Option columns missing name:\",\n `property \"name\" is required at position ${i}`,\n \"when column is an object literal\",\n ]);\n }\n normalizedColumns[i] = column;\n } else {\n throw new CsvError$1(\"CSV_INVALID_COLUMN_DEFINITION\", [\n \"Invalid column definition:\",\n \"expect a string or a literal object,\",\n `got ${JSON.stringify(column)} at position ${i}`,\n ]);\n }\n }\n return normalizedColumns;\n};\n\nclass ResizeableBuffer {\n constructor(size = 100) {\n this.size = size;\n this.length = 0;\n this.buf = Buffer.allocUnsafe(size);\n }\n prepend(val) {\n if (isBuffer$1(val)) {\n const length = this.length + val.length;\n if (length >= this.size) {\n this.resize();\n if (length >= this.size) {\n throw Error(\"INVALID_BUFFER_STATE\");\n }\n }\n const buf = this.buf;\n this.buf = Buffer.allocUnsafe(this.size);\n val.copy(this.buf, 0);\n buf.copy(this.buf, val.length);\n this.length += val.length;\n } else {\n const length = this.length++;\n if (length === this.size) {\n this.resize();\n }\n const buf = this.clone();\n this.buf[0] = val;\n buf.copy(this.buf, 1, 0, length);\n }\n }\n append(val) {\n const length = this.length++;\n if (length === this.size) {\n this.resize();\n }\n this.buf[length] = val;\n }\n clone() {\n return Buffer.from(this.buf.slice(0, this.length));\n }\n resize() {\n const length = this.length;\n this.size = this.size * 2;\n const buf = Buffer.allocUnsafe(this.size);\n this.buf.copy(buf, 0, 0, length);\n this.buf = buf;\n }\n toString(encoding) {\n if (encoding) {\n return this.buf.slice(0, this.length).toString(encoding);\n } else {\n return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length));\n }\n }\n toJSON() {\n return this.toString(\"utf8\");\n }\n reset() {\n this.length = 0;\n }\n}\n\nconst init_state = function (options) {\n // ECMAScript WhiteSpace + LineTerminator codepoints, encoded under\n // `options.encoding`. Aligns trimming with `String.prototype.trim()`.\n // https://tc39.es/ecma262/#sec-white-space\n // https://tc39.es/ecma262/#sec-line-terminators\n //\n // Codepoints unrepresentable in the target encoding are dropped: Node's\n // Buffer substitutes them with `?` (0x3F), and including those would cause\n // literal `?` bytes in the input to be trimmed under `latin1`/`ascii`.\n const timchars = [\n // Basic Latin\n 0x0020, // [Space](https://www.fileformat.info/info/unicode/char/0020/index.htm)\n 0x0009, // [CHARACTER TABULATION (HT)](https://www.fileformat.info/info/unicode/char/0009/index.htm)\n 0x000a, // [LINE FEED (LF)](https://www.fileformat.info/info/unicode/char/000a/index.htm)\n 0x000d, // [CARRIAGE RETURN (CR)](https://www.fileformat.info/info/unicode/char/000d/index.htm)\n 0x000c, // [FORM FEED (FF)](https://www.fileformat.info/info/unicode/char/000c/index.htm)\n 0x000b, // [LINE TABULATION (VT)](https://www.fileformat.info/info/unicode/char/000b/index.htm)\n // Latin-1 Supplement\n 0x00a0, // [NO-BREAK SPACE (NBSP)](https://www.fileformat.info/info/unicode/char/00a0/index.htm)\n // Ogham\n 0x1680, // [OGHAM SPACE MARK](https://www.fileformat.info/info/unicode/char/1680/index.htm)\n // General Punctuation\n 0x2000, // [EN QUAD](https://www.fileformat.info/info/unicode/char/2000/index.htm)\n 0x2001, // [EM QUAD](https://www.fileformat.info/info/unicode/char/2001/index.htm)\n 0x2002, // [EN SPACE](https://www.fileformat.info/info/unicode/char/2002/index.htm)\n 0x2003, // [EM SPACE](https://www.fileformat.info/info/unicode/char/2003/index.htm)\n 0x2004, // [THREE-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2004/index.htm)\n 0x2005, // [FOUR-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2005/index.htm)\n 0x2006, // [SIX-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2006/index.htm)\n 0x2007, // [FIGURE SPACE](https://www.fileformat.info/info/unicode/char/2007/index.htm)\n 0x2008, // [PUNCTUATION SPACE](https://www.fileformat.info/info/unicode/char/2008/index.htm)\n 0x2009, // [THIN SPACE](https://www.fileformat.info/info/unicode/char/2009/index.htm)\n 0x200a, // [HAIR SPACE](https://www.fileformat.info/info/unicode/char/200a/index.htm)\n 0x2028, // [LINE SEPARATOR](https://www.fileformat.info/info/unicode/char/2028/index.htm)\n 0x2029, // [PARAGRAPH SEPARATOR](https://www.fileformat.info/info/unicode/char/2029/index.htm)\n 0x202f, // [NARROW NO-BREAK SPACE (NNBSP)](https://www.fileformat.info/info/unicode/char/202f/index.htm)\n 0x205f, // [MEDIUM MATHEMATICAL SPACE (MMSP)](https://www.fileformat.info/info/unicode/char/205f/index.htm)\n 0x3000, // [IDEOGRAPHIC SPACE](https://www.fileformat.info/info/unicode/char/3000/index.htm)\n 0xfeff, // [ZERO WIDTH NO-BREAK SPACE (BOM)](https://www.fileformat.info/info/unicode/char/feff/index.htm)\n ].reduce((acc, codepoint) => {\n const encoded = Buffer.from(\n String.fromCharCode(codepoint),\n options.encoding,\n );\n if (codepoint !== 0x3f && encoded.length === 1 && encoded[0] === 0x3f) {\n return acc;\n }\n acc.push(encoded);\n return acc;\n }, []);\n // First-byte lookup table for `__isCharTrimable`. Non-whitespace bytes\n // (the common case) bail out in O(1) without scanning every timchar.\n const timcharFirstBytes = new Uint8Array(256);\n for (const t of timchars) timcharFirstBytes[t[0]] = 1;\n return {\n bomSkipped: false,\n bufBytesStart: 0,\n castField: options.cast_function,\n commenting: false,\n delimiterBufPrevious: undefined,\n delimiterDiscovered: false,\n // Current error encountered by a record\n error: undefined,\n enabled: options.from_line === 1,\n escaping: false,\n escapeIsQuote:\n isBuffer$1(options.escape) &&\n isBuffer$1(options.quote) &&\n Buffer.compare(options.escape, options.quote) === 0,\n // columns can be `false`, `true`, `Array`\n expectedRecordLength: Array.isArray(options.columns)\n ? options.columns.length\n : undefined,\n field: new ResizeableBuffer(20),\n firstLineToHeaders: options.cast_first_line_to_header,\n needMoreDataSize: Math.max(\n // Skip if the remaining buffer smaller than comment\n options.comment !== null ? options.comment.length : 0,\n // Skip if the remaining buffer can be delimiter\n ...(options.delimiter\n ? options.delimiter.map((delimiter) => delimiter.length)\n : []),\n // Auto discovery of delimiter is limited to 1 character\n options.delimiter_auto ? 1 : 0,\n // Skip if the remaining buffer can be escape sequence\n options.quote !== null ? options.quote.length : 0,\n // Skip if the remaining buffer can be a multi-byte trim character\n ...timchars.map((t) => t.length),\n ),\n previousBuf: undefined,\n quoting: false,\n stop: false,\n rawBuffer: new ResizeableBuffer(100),\n record: [],\n recordHasError: false,\n record_length: 0,\n recordDelimiterMaxLength:\n options.record_delimiter.length === 0\n ? 0\n : Math.max(...options.record_delimiter.map((v) => v.length)),\n trimChars: [\n Buffer.from(\" \", options.encoding)[0],\n Buffer.from(\"\\t\", options.encoding)[0],\n ],\n wasQuoting: false,\n wasRowDelimiter: false,\n timchars: timchars,\n timcharFirstBytes: timcharFirstBytes,\n };\n};\n\nconst underscore$1 = function (str) {\n return str.replace(/([A-Z])/g, function (_, match) {\n return \"_\" + match.toLowerCase();\n });\n};\n\nconst normalize_options$1 = function (opts) {\n const options = {};\n // Merge with user options\n for (const opt in opts) {\n options[underscore$1(opt)] = opts[opt];\n }\n // Normalize option `encoding`\n // Note: defined first because other options depends on it\n // to convert chars/strings into buffers.\n if (options.encoding === undefined || options.encoding === true) {\n options.encoding = \"utf8\";\n } else if (options.encoding === null || options.encoding === false) {\n options.encoding = null;\n } else if (\n typeof options.encoding !== \"string\" &&\n options.encoding !== null\n ) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_ENCODING\",\n [\n \"Invalid option encoding:\",\n \"encoding must be a string or null to return a buffer,\",\n `got ${JSON.stringify(options.encoding)}`,\n ],\n options,\n );\n }\n // Normalize option `bom`\n if (\n options.bom === undefined ||\n options.bom === null ||\n options.bom === false\n ) {\n options.bom = false;\n } else if (options.bom !== true) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_BOM\",\n [\n \"Invalid option bom:\",\n \"bom must be true,\",\n `got ${JSON.stringify(options.bom)}`,\n ],\n options,\n );\n }\n // Normalize option `cast`\n options.cast_function = null;\n if (\n options.cast === undefined ||\n options.cast === null ||\n options.cast === false ||\n options.cast === \"\"\n ) {\n options.cast = undefined;\n } else if (typeof options.cast === \"function\") {\n options.cast_function = options.cast;\n options.cast = true;\n } else if (options.cast !== true) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_CAST\",\n [\n \"Invalid option cast:\",\n \"cast must be true or a function,\",\n `got ${JSON.stringify(options.cast)}`,\n ],\n options,\n );\n }\n // Normalize option `cast_date`\n if (\n options.cast_date === undefined ||\n options.cast_date === null ||\n options.cast_date === false ||\n options.cast_date === \"\"\n ) {\n options.cast_date = false;\n } else if (options.cast_date === true) {\n options.cast_date = function (value) {\n const date = Date.parse(value);\n return !isNaN(date) ? new Date(date) : value;\n };\n } else if (typeof options.cast_date !== \"function\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_CAST_DATE\",\n [\n \"Invalid option cast_date:\",\n \"cast_date must be true or a function,\",\n `got ${JSON.stringify(options.cast_date)}`,\n ],\n options,\n );\n }\n // Normalize option `columns`\n options.cast_first_line_to_header = undefined;\n if (options.columns === true) {\n // Fields in the first line are converted as-is to columns\n options.cast_first_line_to_header = undefined;\n } else if (typeof options.columns === \"function\") {\n options.cast_first_line_to_header = options.columns;\n options.columns = true;\n } else if (Array.isArray(options.columns)) {\n options.columns = normalize_columns_array(options.columns);\n } else if (\n options.columns === undefined ||\n options.columns === null ||\n options.columns === false\n ) {\n options.columns = false;\n } else {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_COLUMNS\",\n [\n \"Invalid option columns:\",\n \"expect an array, a function or true,\",\n `got ${JSON.stringify(options.columns)}`,\n ],\n options,\n );\n }\n // Normalize option `group_columns_by_name`\n if (\n options.group_columns_by_name === undefined ||\n options.group_columns_by_name === null ||\n options.group_columns_by_name === false\n ) {\n options.group_columns_by_name = false;\n } else if (options.group_columns_by_name !== true) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME\",\n [\n \"Invalid option group_columns_by_name:\",\n \"expect an boolean,\",\n `got ${JSON.stringify(options.group_columns_by_name)}`,\n ],\n options,\n );\n } else if (options.columns === false) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME\",\n [\n \"Invalid option group_columns_by_name:\",\n \"the `columns` mode must be activated.\",\n ],\n options,\n );\n }\n // Normalize option `comment`\n if (\n options.comment === undefined ||\n options.comment === null ||\n options.comment === false ||\n options.comment === \"\"\n ) {\n options.comment = null;\n } else {\n if (typeof options.comment === \"string\") {\n options.comment = Buffer.from(options.comment, options.encoding);\n }\n if (!isBuffer$1(options.comment)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_COMMENT\",\n [\n \"Invalid option comment:\",\n \"comment must be a buffer or a string,\",\n `got ${JSON.stringify(options.comment)}`,\n ],\n options,\n );\n }\n }\n // Normalize option `comment_no_infix`\n if (\n options.comment_no_infix === undefined ||\n options.comment_no_infix === null ||\n options.comment_no_infix === false\n ) {\n options.comment_no_infix = false;\n } else if (options.comment_no_infix !== true) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_COMMENT\",\n [\n \"Invalid option comment_no_infix:\",\n \"value must be a boolean,\",\n `got ${JSON.stringify(options.comment_no_infix)}`,\n ],\n options,\n );\n }\n // Normalize option `delimiter_auto`\n if (\n options.delimiter_auto === undefined ||\n options.delimiter_auto === null ||\n options.delimiter_auto === false\n ) {\n options.delimiter_auto = false;\n } else if (options.delimiter_auto === true) {\n options.delimiter_auto = {};\n } else if (!is_object$1(options.delimiter_auto)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"delimiter_auto must be a boolean or a configuration object,\",\n `got ${JSON.stringify(options.delimiter_auto)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto) {\n if (options.delimiter_auto.preferred === undefined)\n options.delimiter_auto.preferred = {\n [\",\".charCodeAt(0)]: 1.8,\n [\"\\t\".charCodeAt(0)]: 1.8,\n [\";\".charCodeAt(0)]: 1.6,\n [\" \".charCodeAt(0)]: 1.6,\n [\":\".charCodeAt(0)]: 1.5,\n [\".\".charCodeAt(0)]: 1.4,\n [\"/\".charCodeAt(0)]: 1.4,\n };\n else if (!is_object$1(options.delimiter_auto.preferred)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"preferred must be an object,\",\n `got ${JSON.stringify(options.delimiter_auto.preferred)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto.score === undefined)\n options.delimiter_auto.score = (info, options) => {\n return (\n (info.total - info.std) * (options.preferred[info.char_code] || 1)\n );\n };\n else if (typeof options.delimiter_auto.score !== \"function\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"score must be a function,\",\n `got ${JSON.stringify(options.delimiter_auto.score)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto.size === undefined)\n options.delimiter_auto.size = 2048;\n else if (typeof options.delimiter_auto.size !== \"number\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"size must be a number,\",\n `got ${JSON.stringify(options.delimiter_auto.size)}`,\n ],\n options,\n );\n }\n }\n // Normalize option `delimiter`\n const delimiter_json = JSON.stringify(options.delimiter);\n if (options.delimiter_auto !== false) {\n options.delimiter = [];\n }\n if (!Array.isArray(options.delimiter)) {\n if (\n options.delimiter === undefined ||\n options.delimiter === null ||\n options.delimiter === false\n ) {\n options.delimiter = Buffer.from(\",\", options.encoding);\n }\n options.delimiter = [options.delimiter];\n }\n options.delimiter = options.delimiter.map(function (delimiter) {\n if (typeof delimiter === \"string\") {\n delimiter = Buffer.from(delimiter, options.encoding);\n }\n if (!isBuffer$1(delimiter) || delimiter.length === 0) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER\",\n [\n \"Invalid option delimiter:\",\n \"delimiter must be a non empty string or buffer or array of string|buffer,\",\n `got ${delimiter_json}`,\n ],\n options,\n );\n }\n return delimiter;\n });\n // Normalize option `escape`\n if (options.escape === undefined || options.escape === true) {\n options.escape = Buffer.from('\"', options.encoding);\n } else if (typeof options.escape === \"string\") {\n options.escape = Buffer.from(options.escape, options.encoding);\n } else if (options.escape === null || options.escape === false) {\n options.escape = null;\n }\n if (options.escape !== null) {\n if (!isBuffer$1(options.escape)) {\n throw new Error(\n `Invalid Option: escape must be a buffer, a string or a boolean, got ${JSON.stringify(options.escape)}`,\n );\n }\n }\n // Normalize option `from`\n if (options.from === undefined || options.from === null) {\n options.from = 1;\n } else {\n if (typeof options.from === \"string\" && /\\d+/.test(options.from)) {\n options.from = parseInt(options.from);\n }\n if (Number.isInteger(options.from)) {\n if (options.from < 0) {\n throw new Error(\n `Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`,\n );\n }\n }\n // Normalize option `from_line`\n if (options.from_line === undefined || options.from_line === null) {\n options.from_line = 1;\n } else {\n if (\n typeof options.from_line === \"string\" &&\n /\\d+/.test(options.from_line)\n ) {\n options.from_line = parseInt(options.from_line);\n }\n if (Number.isInteger(options.from_line)) {\n if (options.from_line <= 0) {\n throw new Error(\n `Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`,\n );\n }\n }\n // Normalize options `ignore_last_delimiters`\n if (\n options.ignore_last_delimiters === undefined ||\n options.ignore_last_delimiters === null\n ) {\n options.ignore_last_delimiters = false;\n } else if (typeof options.ignore_last_delimiters === \"number\") {\n options.ignore_last_delimiters = Math.floor(options.ignore_last_delimiters);\n if (options.ignore_last_delimiters === 0) {\n options.ignore_last_delimiters = false;\n }\n } else if (typeof options.ignore_last_delimiters !== \"boolean\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS\",\n [\n \"Invalid option `ignore_last_delimiters`:\",\n \"the value must be a boolean value or an integer,\",\n `got ${JSON.stringify(options.ignore_last_delimiters)}`,\n ],\n options,\n );\n }\n if (options.ignore_last_delimiters === true && options.columns === false) {\n throw new CsvError$1(\n \"CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS\",\n [\n \"The option `ignore_last_delimiters`\",\n \"requires the activation of the `columns` option\",\n ],\n options,\n );\n }\n // Normalize option `info`\n if (\n options.info === undefined ||\n options.info === null ||\n options.info === false\n ) {\n options.info = false;\n } else if (options.info !== true) {\n throw new Error(\n `Invalid Option: info must be true, got ${JSON.stringify(options.info)}`,\n );\n }\n // Normalize option `max_record_size`\n if (\n options.max_record_size === undefined ||\n options.max_record_size === null ||\n options.max_record_size === false\n ) {\n options.max_record_size = 0;\n } else if (\n Number.isInteger(options.max_record_size) &&\n options.max_record_size >= 0\n ) ; else if (\n typeof options.max_record_size === \"string\" &&\n /\\d+/.test(options.max_record_size)\n ) {\n options.max_record_size = parseInt(options.max_record_size);\n } else {\n throw new Error(\n `Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`,\n );\n }\n // Normalize option `objname`\n if (\n options.objname === undefined ||\n options.objname === null ||\n options.objname === false\n ) {\n options.objname = undefined;\n } else if (isBuffer$1(options.objname)) {\n if (options.objname.length === 0) {\n throw new Error(`Invalid Option: objname must be a non empty buffer`);\n }\n if (options.encoding === null) ; else {\n options.objname = options.objname.toString(options.encoding);\n }\n } else if (typeof options.objname === \"string\") {\n if (options.objname.length === 0) {\n throw new Error(`Invalid Option: objname must be a non empty string`);\n }\n // Great, nothing to do\n } else if (typeof options.objname === \"number\") ; else {\n throw new Error(\n `Invalid Option: objname must be a string or a buffer, got ${options.objname}`,\n );\n }\n if (options.objname !== undefined) {\n if (typeof options.objname === \"number\") {\n if (options.columns !== false) {\n throw Error(\n \"Invalid Option: objname index cannot be combined with columns or be defined as a field\",\n );\n }\n } else {\n // A string or a buffer\n if (options.columns === false) {\n throw Error(\n \"Invalid Option: objname field must be combined with columns or be defined as an index\",\n );\n }\n }\n }\n // Normalize option `on_record`\n if (options.on_record === undefined || options.on_record === null) {\n options.on_record = undefined;\n } else if (typeof options.on_record !== \"function\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_ON_RECORD\",\n [\n \"Invalid option `on_record`:\",\n \"expect a function,\",\n `got ${JSON.stringify(options.on_record)}`,\n ],\n options,\n );\n }\n // Normalize option `on_skip`\n // options.on_skip ??= (err, chunk) => {\n // this.emit('skip', err, chunk);\n // };\n if (\n options.on_skip !== undefined &&\n options.on_skip !== null &&\n typeof options.on_skip !== \"function\"\n ) {\n throw new Error(\n `Invalid Option: on_skip must be a function, got ${JSON.stringify(options.on_skip)}`,\n );\n }\n // Normalize option `quote`\n if (\n options.quote === null ||\n options.quote === false ||\n options.quote === \"\"\n ) {\n options.quote = null;\n } else {\n if (options.quote === undefined || options.quote === true) {\n options.quote = Buffer.from('\"', options.encoding);\n } else if (typeof options.quote === \"string\") {\n options.quote = Buffer.from(options.quote, options.encoding);\n }\n if (!isBuffer$1(options.quote)) {\n throw new Error(\n `Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`,\n );\n }\n }\n // Normalize option `raw`\n if (\n options.raw === undefined ||\n options.raw === null ||\n options.raw === false\n ) {\n options.raw = false;\n } else if (options.raw !== true) {\n throw new Error(\n `Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`,\n );\n }\n // Normalize option `record_delimiter`\n if (options.record_delimiter === undefined) {\n options.record_delimiter = [];\n } else if (\n typeof options.record_delimiter === \"string\" ||\n isBuffer$1(options.record_delimiter)\n ) {\n if (options.record_delimiter.length === 0) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a non empty string or buffer,\",\n `got ${JSON.stringify(options.record_delimiter)}`,\n ],\n options,\n );\n }\n options.record_delimiter = [options.record_delimiter];\n } else if (!Array.isArray(options.record_delimiter)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a string, a buffer or array of string|buffer,\",\n `got ${JSON.stringify(options.record_delimiter)}`,\n ],\n options,\n );\n }\n options.record_delimiter = options.record_delimiter.map(function (rd, i) {\n if (typeof rd !== \"string\" && !isBuffer$1(rd)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a string, a buffer or array of string|buffer\",\n `at index ${i},`,\n `got ${JSON.stringify(rd)}`,\n ],\n options,\n );\n } else if (rd.length === 0) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a non empty string or buffer\",\n `at index ${i},`,\n `got ${JSON.stringify(rd)}`,\n ],\n options,\n );\n }\n if (typeof rd === \"string\") {\n rd = Buffer.from(rd, options.encoding);\n }\n return rd;\n });\n // Normalize option `relax_column_count`\n if (typeof options.relax_column_count === \"boolean\") ; else if (\n options.relax_column_count === undefined ||\n options.relax_column_count === null\n ) {\n options.relax_column_count = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`,\n );\n }\n if (typeof options.relax_column_count_less === \"boolean\") ; else if (\n options.relax_column_count_less === undefined ||\n options.relax_column_count_less === null\n ) {\n options.relax_column_count_less = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`,\n );\n }\n if (typeof options.relax_column_count_more === \"boolean\") ; else if (\n options.relax_column_count_more === undefined ||\n options.relax_column_count_more === null\n ) {\n options.relax_column_count_more = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`,\n );\n }\n // Normalize option `relax_quotes`\n if (typeof options.relax_quotes === \"boolean\") ; else if (\n options.relax_quotes === undefined ||\n options.relax_quotes === null\n ) {\n options.relax_quotes = false;\n } else {\n throw new Error(\n `Invalid Option: relax_quotes must be a boolean, got ${JSON.stringify(options.relax_quotes)}`,\n );\n }\n // Normalize option `skip_empty_lines`\n if (typeof options.skip_empty_lines === \"boolean\") ; else if (\n options.skip_empty_lines === undefined ||\n options.skip_empty_lines === null\n ) {\n options.skip_empty_lines = false;\n } else {\n throw new Error(\n `Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`,\n );\n }\n // Normalize option `skip_records_with_empty_values`\n if (typeof options.skip_records_with_empty_values === \"boolean\") ; else if (\n options.skip_records_with_empty_values === undefined ||\n options.skip_records_with_empty_values === null\n ) {\n options.skip_records_with_empty_values = false;\n } else {\n throw new Error(\n `Invalid Option: skip_records_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_records_with_empty_values)}`,\n );\n }\n // Normalize option `skip_records_with_error`\n if (typeof options.skip_records_with_error === \"boolean\") ; else if (\n options.skip_records_with_error === undefined ||\n options.skip_records_with_error === null\n ) {\n options.skip_records_with_error = false;\n } else {\n throw new Error(\n `Invalid Option: skip_records_with_error must be a boolean, got ${JSON.stringify(options.skip_records_with_error)}`,\n );\n }\n // Normalize option `rtrim`\n if (\n options.rtrim === undefined ||\n options.rtrim === null ||\n options.rtrim === false\n ) {\n options.rtrim = false;\n } else if (options.rtrim !== true) {\n throw new Error(\n `Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`,\n );\n }\n // Normalize option `ltrim`\n if (\n options.ltrim === undefined ||\n options.ltrim === null ||\n options.ltrim === false\n ) {\n options.ltrim = false;\n } else if (options.ltrim !== true) {\n throw new Error(\n `Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`,\n );\n }\n // Normalize option `trim`\n if (\n options.trim === undefined ||\n options.trim === null ||\n options.trim === false\n ) {\n options.trim = false;\n } else if (options.trim !== true) {\n throw new Error(\n `Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`,\n );\n }\n // Normalize options `trim`, `ltrim` and `rtrim`\n if (options.trim === true && opts.ltrim !== false) {\n options.ltrim = true;\n } else if (options.ltrim !== true) {\n options.ltrim = false;\n }\n if (options.trim === true && opts.rtrim !== false) {\n options.rtrim = true;\n } else if (options.rtrim !== true) {\n options.rtrim = false;\n }\n // Normalize option `to`\n if (options.to === undefined || options.to === null) {\n options.to = -1;\n } else if (options.to !== -1) {\n if (typeof options.to === \"string\" && /\\d+/.test(options.to)) {\n options.to = parseInt(options.to);\n }\n if (Number.isInteger(options.to)) {\n if (options.to <= 0) {\n throw new Error(\n `Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`,\n );\n }\n }\n // Normalize option `to_line`\n if (options.to_line === undefined || options.to_line === null) {\n options.to_line = -1;\n } else if (options.to_line !== -1) {\n if (typeof options.to_line === \"string\" && /\\d+/.test(options.to_line)) {\n options.to_line = parseInt(options.to_line);\n }\n if (Number.isInteger(options.to_line)) {\n if (options.to_line <= 0) {\n throw new Error(\n `Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`,\n );\n }\n }\n return options;\n};\n\n// Discussed in [issue #400](https://github.com/adaltas/node-csv/issues/400)\n// See https://github.com/python/cpython/blob/ea1b1c579f600cc85d145c60862b2e6b98701b24/Lib/csv.py#L349\nconst delimiter_discover = function (records, options) {\n // Normalize the configuration\n if (!options) {\n ({ delimiter_auto: options } = normalize_options$1({ delimiter_auto: true }));\n }\n // Convert String to Buffer\n if (typeof records === \"string\") {\n records = Buffer.from(records);\n }\n // Convert Buffer to an array of records\n if (isBuffer$1(records)) {\n records = ((data) => {\n const records = [];\n const parser = transform$1({ delimiter: [] });\n const push = (record) => records.push(record);\n const close = () => {};\n const error = parser.parse(data, true, push, close);\n if (error !== undefined) throw error;\n return records;\n })(records);\n }\n // Info array initialization, 127 entries, one per char code\n const info = Array(127)\n .fill()\n .map(() => ({ lines: [] }));\n // Traverse each records, count occurences per char code\n records.map(([record], line) => {\n for (let i = 0, l = record.length; i < l; i++) {\n // Count the character frequency\n const code = record.charCodeAt(i);\n if (info[code].lines[line] === undefined) info[code].lines[line] = 0;\n info[code].lines[line]++;\n }\n });\n // Traverse each char code, compute the score\n info.map((info, i) => {\n info.char_code = i;\n info.std = std(info.lines);\n info.total = info.lines.reduce((acc, val) => acc + val, 0);\n info.preferred = !!options.preferred[i];\n info.score = options.score(info, options);\n });\n // Extract the dominant character\n const result = info.reduce(\n (acc, info) => (acc.score > info.score ? acc : info),\n {},\n );\n return String.fromCharCode(result.char_code);\n};\n\nconst std = function (array) {\n const n = array.length;\n if (n === 0) return 0;\n const mean = array.reduce((a, b) => a + b) / n;\n return Math.sqrt(\n array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n,\n );\n};\n\nconst isRecordEmpty = function (record) {\n return record.every(\n (field) =>\n field == null || (field.toString && field.toString().trim() === \"\"),\n );\n};\n\nconst cr = 13; // `\\r`, carriage return, 0x0D in hexadécimal, 13 in decimal\nconst nl = 10; // `\\n`, newline, 0x0A in hexadecimal, 10 in decimal\n\nconst boms = {\n // Note, the following are equals:\n // Buffer.from(\"\\ufeff\")\n // Buffer.from([239, 187, 191])\n // Buffer.from('EFBBBF', 'hex')\n utf8: Buffer.from([239, 187, 191]),\n // Note, the following are equals:\n // Buffer.from \"\\ufeff\", 'utf16le\n // Buffer.from([255, 254])\n utf16le: Buffer.from([255, 254]),\n};\n\nconst transform$1 = function (original_options = {}) {\n const info = {\n bytes: 0,\n bytes_records: 0,\n comment_lines: 0,\n empty_lines: 0,\n invalid_field_length: 0,\n lines: 1,\n records: 0,\n };\n const options = normalize_options$1(original_options);\n return {\n info: info,\n original_options: original_options,\n options: options,\n state: init_state(options),\n __needMoreData: function (i, bufLen, end) {\n if (end) return false;\n const { encoding, escape, quote } = this.options;\n const { quoting, needMoreDataSize, recordDelimiterMaxLength } =\n this.state;\n const numOfCharLeft = bufLen - i - 1;\n const requiredLength = Math.max(\n needMoreDataSize,\n // Skip if the remaining buffer smaller than record delimiter\n // If \"record_delimiter\" is yet to be discovered:\n // 1. It is equals to `[]` and \"recordDelimiterMaxLength\" equals `0`\n // 2. We set the length to windows line ending in the current encoding\n // Note, that encoding is known from user or bom discovery at that point\n // recordDelimiterMaxLength,\n recordDelimiterMaxLength === 0\n ? Buffer.from(\"\\r\\n\", encoding).length\n : recordDelimiterMaxLength,\n // Skip if remaining buffer can be an escaped quote\n quoting ? (escape === null ? 0 : escape.length) + quote.length : 0,\n // Skip if remaining buffer can be record delimiter following the closing quote\n quoting ? quote.length + recordDelimiterMaxLength : 0,\n );\n return numOfCharLeft < requiredLength;\n },\n // Central parser implementation\n parse: function (nextBuf, end, push, close) {\n const {\n bom,\n comment_no_infix,\n delimiter_auto,\n encoding,\n from_line,\n ltrim,\n max_record_size,\n raw,\n relax_quotes,\n rtrim,\n skip_empty_lines,\n to,\n to_line,\n } = this.options;\n let { comment, escape, quote, record_delimiter } = this.options;\n const {\n bomSkipped,\n delimiterDiscovered,\n delimiterBufPrevious,\n rawBuffer,\n escapeIsQuote,\n } = this.state;\n // Automatic delimiter discovery\n if (!delimiterDiscovered && delimiter_auto) {\n let delimiterBuf;\n if (delimiterBufPrevious === undefined) {\n delimiterBuf = nextBuf;\n } else if (\n delimiterBufPrevious !== undefined &&\n nextBuf === undefined\n ) {\n delimiterBuf = delimiterBufPrevious;\n } else {\n delimiterBuf = Buffer.concat([delimiterBufPrevious, nextBuf]);\n }\n // Ensure that nextBuf is not concatenated a second time during buffer reconciliation\n nextBuf = undefined;\n // this.delimiterBufPrevious = delimiterBuf;\n if (end || delimiterBuf.length > delimiter_auto.size) {\n this.options.delimiter = [\n Buffer.from(\n delimiter_discover(delimiterBuf, this.options.delimiter_auto),\n ),\n ];\n this.state.previousBuf = delimiterBuf;\n this.state.delimiterBufPrevious = undefined;\n this.state.delimiterDiscovered = true;\n } else {\n this.state.delimiterBufPrevious = delimiterBuf;\n return;\n }\n }\n // Previous buffers reconciliation\n const { previousBuf } = this.state;\n let buf;\n if (previousBuf === undefined) {\n if (nextBuf === undefined) {\n // Handle empty string\n close();\n return;\n } else {\n buf = nextBuf;\n }\n } else if (previousBuf !== undefined && nextBuf === undefined) {\n buf = previousBuf;\n } else {\n buf = Buffer.concat([previousBuf, nextBuf]);\n }\n // Handle UTF BOM\n if (bomSkipped === false) {\n if (bom === false) {\n this.state.bomSkipped = true;\n } else if (buf.length < 3) {\n // No enough data\n if (end === false) {\n // Wait for more data\n this.state.previousBuf = buf;\n return;\n }\n } else {\n for (const encoding in boms) {\n if (boms[encoding].compare(buf, 0, boms[encoding].length) === 0) {\n // Skip BOM\n const bomLength = boms[encoding].length;\n this.state.bufBytesStart += bomLength;\n buf = buf.slice(bomLength);\n // Renormalize original options with the new encoding\n const options = normalize_options$1({\n ...this.original_options,\n encoding: encoding,\n });\n // Properties are merged with the existing options instance\n for (const key in options) {\n this.options[key] = options[key];\n }\n // Options will re-evaluate the Buffer with the new encoding\n ({ comment, escape, quote } = this.options);\n break;\n }\n }\n this.state.bomSkipped = true;\n }\n }\n const bufLen = buf.length;\n let pos;\n for (pos = 0; pos < bufLen; pos++) {\n // Ensure we get enough space to look ahead\n // There should be a way to move this out of the loop\n if (this.__needMoreData(pos, bufLen, end)) {\n break;\n }\n if (this.state.wasRowDelimiter === true) {\n this.info.lines++;\n this.state.wasRowDelimiter = false;\n }\n if (to_line !== -1 && this.info.lines > to_line) {\n this.state.stop = true;\n close();\n return;\n }\n // Auto discovery of record_delimiter, unix, mac and windows supported\n if (this.state.quoting === false && record_delimiter.length === 0) {\n const record_delimiterCount = this.__autoDiscoverRecordDelimiter(\n buf,\n pos,\n );\n if (record_delimiterCount) {\n record_delimiter = this.options.record_delimiter;\n }\n }\n const chr = buf[pos];\n if (raw === true) {\n rawBuffer.append(chr);\n }\n if (\n (chr === cr || chr === nl) &&\n this.state.wasRowDelimiter === false\n ) {\n this.state.wasRowDelimiter = true;\n }\n // Previous char was a valid escape char\n // treat the current char as a regular char\n if (this.state.escaping === true) {\n this.state.escaping = false;\n } else {\n // Escape is only active inside quoted fields\n // We are quoting, the char is an escape chr and there is a chr to escape\n // if(escape !== null && this.state.quoting === true && chr === escape && pos + 1 < bufLen){\n if (\n escape !== null &&\n this.state.quoting === true &&\n this.__isEscape(buf, pos, chr) &&\n pos + escape.length < bufLen\n ) {\n if (escapeIsQuote) {\n if (this.__isQuote(buf, pos + escape.length)) {\n this.state.escaping = true;\n pos += escape.length - 1;\n continue;\n }\n } else {\n this.state.escaping = true;\n pos += escape.length - 1;\n continue;\n }\n }\n // Not currently escaping and chr is a quote\n // TODO: need to compare bytes instead of single char\n if (this.state.commenting === false && this.__isQuote(buf, pos)) {\n if (this.state.quoting === true) {\n const nextChr = buf[pos + quote.length];\n const isNextChrTrimable =\n rtrim && this.__isCharTrimable(buf, pos + quote.length);\n const isNextChrComment =\n comment !== null &&\n this.__compareBytes(comment, buf, pos + quote.length, nextChr);\n const isNextChrDelimiter = this.__isDelimiter(\n buf,\n pos + quote.length,\n nextChr,\n );\n const isNextChrRecordDelimiter =\n record_delimiter.length === 0\n ? this.__autoDiscoverRecordDelimiter(buf, pos + quote.length)\n : this.__isRecordDelimiter(nextChr, buf, pos + quote.length);\n // Escape a quote\n // Treat next char as a regular character\n if (\n escape !== null &&\n this.__isEscape(buf, pos, chr) &&\n this.__isQuote(buf, pos + escape.length)\n ) {\n pos += escape.length - 1;\n } else if (\n !nextChr ||\n isNextChrDelimiter ||\n isNextChrRecordDelimiter ||\n isNextChrComment ||\n isNextChrTrimable\n ) {\n this.state.quoting = false;\n this.state.wasQuoting = true;\n pos += quote.length - 1;\n continue;\n } else if (relax_quotes === false) {\n const err = this.__error(\n new CsvError$1(\n \"CSV_INVALID_CLOSING_QUOTE\",\n [\n \"Invalid Closing Quote:\",\n `got \"${String.fromCharCode(nextChr)}\"`,\n `at line ${this.info.lines}`,\n \"instead of delimiter, record delimiter, trimable character\",\n \"(if activated) or comment\",\n ],\n this.options,\n this.__infoField(),\n ),\n );\n if (err !== undefined) return err;\n } else {\n this.state.quoting = false;\n this.state.wasQuoting = true;\n this.state.field.prepend(quote);\n pos += quote.length - 1;\n }\n } else {\n if (this.state.field.length !== 0) {\n // In relax_quotes mode, treat opening quote preceded by chrs as regular\n if (relax_quotes === false) {\n const info = this.__infoField();\n const bom = Object.keys(boms)\n .map((b) =>\n boms[b].equals(this.state.field.toString()) ? b : false,\n )\n .filter(Boolean)[0];\n const err = this.__error(\n new CsvError$1(\n \"INVALID_OPENING_QUOTE\",\n [\n \"Invalid Opening Quote:\",\n `a quote is found on field ${JSON.stringify(info.column)} at line ${info.lines}, value is ${JSON.stringify(this.state.field.toString(encoding))}`,\n bom ? `(${bom} bom)` : undefined,\n ],\n this.options,\n info,\n {\n field: this.state.field,\n },\n ),\n );\n if (err !== undefined) return err;\n }\n } else {\n this.state.quoting = true;\n pos += quote.length - 1;\n continue;\n }\n }\n }\n if (this.state.quoting === false) {\n const recordDelimiterLength = this.__isRecordDelimiter(\n chr,\n buf,\n pos,\n );\n if (recordDelimiterLength !== 0) {\n // Do not emit comments which take a full line\n const skipCommentLine =\n this.state.commenting &&\n this.state.wasQuoting === false &&\n this.state.record.length === 0 &&\n this.state.field.length === 0;\n if (skipCommentLine) {\n this.info.comment_lines++;\n // Skip full comment line\n } else {\n // Activate records emission if above from_line\n if (\n this.state.enabled === false &&\n this.info.lines +\n (this.state.wasRowDelimiter === true ? 1 : 0) >=\n from_line\n ) {\n this.state.enabled = true;\n this.__resetField();\n this.__resetRecord();\n pos += recordDelimiterLength - 1;\n continue;\n }\n // Skip if line is empty and skip_empty_lines activated\n if (\n skip_empty_lines === true &&\n this.state.wasQuoting === false &&\n this.state.record.length === 0 &&\n this.state.field.length === 0\n ) {\n this.info.empty_lines++;\n pos += recordDelimiterLength - 1;\n continue;\n }\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n this.info.bytes =\n this.state.bufBytesStart + pos + recordDelimiterLength;\n const errRecord = this.__onRecord(push);\n if (errRecord !== undefined) return errRecord;\n if (to !== -1 && this.info.records >= to) {\n this.state.stop = true;\n close();\n return;\n }\n }\n this.state.commenting = false;\n pos += recordDelimiterLength - 1;\n continue;\n }\n if (this.state.commenting) {\n continue;\n }\n if (\n comment !== null &&\n (comment_no_infix === false ||\n (this.state.record.length === 0 &&\n this.state.field.length === 0))\n ) {\n const commentCount = this.__compareBytes(comment, buf, pos, chr);\n if (commentCount !== 0) {\n this.state.commenting = true;\n continue;\n }\n }\n const delimiterLength = this.__isDelimiter(buf, pos, chr);\n if (delimiterLength !== 0) {\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n pos += delimiterLength - 1;\n continue;\n }\n }\n }\n if (this.state.commenting === false) {\n if (\n max_record_size !== 0 &&\n this.state.record_length + this.state.field.length > max_record_size\n ) {\n return this.__error(\n new CsvError$1(\n \"CSV_MAX_RECORD_SIZE\",\n [\n \"Max Record Size:\",\n \"record exceed the maximum number of tolerated bytes\",\n `of ${max_record_size}`,\n `at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n }\n }\n const lappend =\n ltrim === false ||\n this.state.quoting === true ||\n this.state.field.length !== 0 ||\n !this.__isCharTrimable(buf, pos);\n // rtrim in non quoting is handle in __onField\n const rappend = rtrim === false || this.state.wasQuoting === false;\n if (lappend === true && rappend === true) {\n this.state.field.append(chr);\n } else if (rtrim === true && !this.__isCharTrimable(buf, pos)) {\n return this.__error(\n new CsvError$1(\n \"CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE\",\n [\n \"Invalid Closing Quote:\",\n \"found non trimable byte after quote\",\n `at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n } else {\n if (lappend === false) {\n pos += this.__isCharTrimable(buf, pos) - 1;\n }\n continue;\n }\n }\n if (end === true) {\n // Ensure we are not ending in a quoting state\n if (this.state.quoting === true) {\n const err = this.__error(\n new CsvError$1(\n \"CSV_QUOTE_NOT_CLOSED\",\n [\n \"Quote Not Closed:\",\n `the parsing is finished with an opening quote at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n if (err !== undefined) return err;\n } else {\n // Skip last line if it has no characters\n if (\n this.state.wasQuoting === true ||\n this.state.record.length !== 0 ||\n this.state.field.length !== 0\n ) {\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n const errRecord = this.__onRecord(push);\n if (errRecord !== undefined) return errRecord;\n } else if (this.state.wasRowDelimiter === true) {\n this.info.empty_lines++;\n } else if (this.state.commenting === true) {\n this.info.comment_lines++;\n }\n }\n } else {\n this.state.bufBytesStart += pos;\n this.state.previousBuf = buf.slice(pos);\n }\n if (this.state.wasRowDelimiter === true) {\n this.info.lines++;\n this.state.wasRowDelimiter = false;\n }\n },\n __onRecord: function (push) {\n const {\n columns,\n group_columns_by_name,\n encoding,\n info,\n from,\n relax_column_count,\n relax_column_count_less,\n relax_column_count_more,\n raw,\n skip_records_with_empty_values,\n } = this.options;\n const { enabled, record } = this.state;\n if (enabled === false) {\n return this.__resetRecord();\n }\n // Convert the first line into column names\n const recordLength = record.length;\n if (columns === true) {\n if (skip_records_with_empty_values === true && isRecordEmpty(record)) {\n this.__resetRecord();\n return;\n }\n return this.__firstLineToColumns(record);\n }\n if (columns === false && this.info.records === 0) {\n this.state.expectedRecordLength = recordLength;\n }\n if (recordLength !== this.state.expectedRecordLength) {\n const err =\n columns === false\n ? new CsvError$1(\n \"CSV_RECORD_INCONSISTENT_FIELDS_LENGTH\",\n [\n \"Invalid Record Length:\",\n `expect ${this.state.expectedRecordLength},`,\n `got ${recordLength} on line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n {\n record: record,\n },\n )\n : new CsvError$1(\n \"CSV_RECORD_INCONSISTENT_COLUMNS\",\n [\n \"Invalid Record Length:\",\n `columns length is ${columns.length},`, // rename columns\n `got ${recordLength} on line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n {\n record: record,\n },\n );\n if (\n relax_column_count === true ||\n (relax_column_count_less === true &&\n recordLength < this.state.expectedRecordLength) ||\n (relax_column_count_more === true &&\n recordLength > this.state.expectedRecordLength)\n ) {\n this.info.invalid_field_length++;\n this.state.error = err;\n // Error is undefined with skip_records_with_error\n } else {\n const finalErr = this.__error(err);\n if (finalErr) return finalErr;\n }\n }\n if (skip_records_with_empty_values === true && isRecordEmpty(record)) {\n this.__resetRecord();\n return;\n }\n if (this.state.recordHasError === true) {\n this.__resetRecord();\n this.state.recordHasError = false;\n return;\n }\n this.info.records++;\n if (from === 1 || this.info.records >= from) {\n const { objname } = this.options;\n // With columns, records are object\n if (columns !== false) {\n const obj = {};\n // Transform record array to an object\n for (let i = 0, l = record.length; i < l; i++) {\n if (columns[i] === undefined || columns[i].disabled) continue;\n // Turn duplicate columns into an array\n if (\n group_columns_by_name === true &&\n obj[columns[i].name] !== undefined\n ) {\n if (Array.isArray(obj[columns[i].name])) {\n obj[columns[i].name] = obj[columns[i].name].concat(record[i]);\n } else {\n obj[columns[i].name] = [obj[columns[i].name], record[i]];\n }\n } else {\n obj[columns[i].name] = record[i];\n }\n }\n // Without objname (default)\n if (raw === true || info === true) {\n const extRecord = Object.assign(\n { record: obj },\n raw === true\n ? { raw: this.state.rawBuffer.toString(encoding) }\n : {},\n info === true ? { info: this.__infoRecord() } : {},\n );\n const err = this.__push(\n objname === undefined ? extRecord : [obj[objname], extRecord],\n push,\n );\n if (err) {\n return err;\n }\n } else {\n const err = this.__push(\n objname === undefined ? obj : [obj[objname], obj],\n push,\n );\n if (err) {\n return err;\n }\n }\n // Without columns, records are array\n } else {\n if (raw === true || info === true) {\n const extRecord = Object.assign(\n { record: record },\n raw === true\n ? { raw: this.state.rawBuffer.toString(encoding) }\n : {},\n info === true ? { info: this.__infoRecord() } : {},\n );\n const err = this.__push(\n objname === undefined ? extRecord : [record[objname], extRecord],\n push,\n );\n if (err) {\n return err;\n }\n } else {\n const err = this.__push(\n objname === undefined ? record : [record[objname], record],\n push,\n );\n if (err) {\n return err;\n }\n }\n }\n }\n this.__resetRecord();\n },\n __firstLineToColumns: function (record) {\n const { firstLineToHeaders } = this.state;\n try {\n const headers =\n firstLineToHeaders === undefined\n ? record\n : firstLineToHeaders.call(null, record);\n if (!Array.isArray(headers)) {\n return this.__error(\n new CsvError$1(\n \"CSV_INVALID_COLUMN_MAPPING\",\n [\n \"Invalid Column Mapping:\",\n \"expect an array from column function,\",\n `got ${JSON.stringify(headers)}`,\n ],\n this.options,\n this.__infoField(),\n {\n headers: headers,\n },\n ),\n );\n }\n const normalizedHeaders = normalize_columns_array(headers);\n this.state.expectedRecordLength = normalizedHeaders.length;\n this.options.columns = normalizedHeaders;\n this.__resetRecord();\n return;\n } catch (err) {\n return err;\n }\n },\n __resetRecord: function () {\n if (this.options.raw === true) {\n this.state.rawBuffer.reset();\n }\n this.state.error = undefined;\n this.state.record = [];\n this.state.record_length = 0;\n },\n __onField: function () {\n const { cast, encoding, rtrim, max_record_size } = this.options;\n const { enabled, wasQuoting } = this.state;\n // Short circuit for the from_line options\n if (enabled === false) {\n return this.__resetField();\n }\n let field = this.state.field.toString(encoding);\n if (rtrim === true && wasQuoting === false) {\n field = field.trimRight();\n }\n if (cast === true) {\n const [err, f] = this.__cast(field);\n if (err !== undefined) return err;\n field = f;\n }\n this.state.record.push(field);\n // Increment record length if record size must not exceed a limit\n if (max_record_size !== 0 && typeof field === \"string\") {\n this.state.record_length += field.length;\n }\n this.__resetField();\n },\n __resetField: function () {\n this.state.field.reset();\n this.state.wasQuoting = false;\n },\n __push: function (record, push) {\n const { on_record } = this.options;\n if (on_record !== undefined) {\n const info = this.__infoRecord();\n try {\n record = on_record.call(null, record, info);\n } catch (err) {\n return err;\n }\n if (record === undefined || record === null) {\n return;\n }\n }\n this.info.bytes_records += this.info.bytes;\n push(record);\n },\n // Return a tuple with the error and the casted value\n __cast: function (field) {\n const { columns, relax_column_count } = this.options;\n const isColumns = Array.isArray(columns);\n // Dont loose time calling cast\n // because the final record is an object\n // and this field can't be associated to a key present in columns\n if (\n isColumns === true &&\n relax_column_count &&\n this.options.columns.length <= this.state.record.length\n ) {\n return [undefined, undefined];\n }\n if (this.state.castField !== null) {\n try {\n const info = this.__infoField();\n return [undefined, this.state.castField.call(null, field, info)];\n } catch (err) {\n return [err];\n }\n }\n if (this.__isFloat(field)) {\n return [undefined, parseFloat(field)];\n } else if (this.options.cast_date !== false) {\n const info = this.__infoField();\n return [undefined, this.options.cast_date.call(null, field, info)];\n }\n return [undefined, field];\n },\n __compareBytes: function (sourceBuf, targetBuf, targetPos, firstByte) {\n if (sourceBuf[0] !== firstByte) return 0;\n const sourceLength = sourceBuf.length;\n for (let i = 1; i < sourceLength; i++) {\n if (sourceBuf[i] !== targetBuf[targetPos + i]) return 0;\n }\n return sourceLength;\n },\n // Helper to test if a character is trimable\n __isCharTrimable: function (buf, pos) {\n const { timchars, timcharFirstBytes } = this.state;\n // Fast bail-out: non-whitespace bytes (the common case) are rejected\n // without scanning the full timchar list.\n const first = buf[pos];\n if (first === undefined || timcharFirstBytes[first] === 0) return 0;\n loop1: for (let i = 0; i < timchars.length; i++) {\n const timchar = timchars[i];\n for (let j = 0; j < timchar.length; j++) {\n if (timchar[j] !== buf[pos + j]) continue loop1;\n }\n return timchar.length;\n }\n return 0;\n },\n __isDelimiter: function (buf, pos, chr) {\n const { delimiter, ignore_last_delimiters } = this.options;\n if (\n ignore_last_delimiters === true &&\n this.state.record.length === this.options.columns.length - 1\n ) {\n return 0;\n } else if (\n ignore_last_delimiters !== false &&\n typeof ignore_last_delimiters === \"number\" &&\n this.state.record.length === ignore_last_delimiters - 1\n ) {\n return 0;\n }\n loop1: for (let i = 0; i < delimiter.length; i++) {\n const del = delimiter[i];\n if (del[0] === chr) {\n for (let j = 1; j < del.length; j++) {\n if (del[j] !== buf[pos + j]) continue loop1;\n }\n return del.length;\n }\n }\n return 0;\n },\n __isEscape: function (buf, pos, chr) {\n const { escape } = this.options;\n if (escape === null) return false;\n const l = escape.length;\n if (escape[0] === chr) {\n for (let i = 0; i < l; i++) {\n if (escape[i] !== buf[pos + i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n },\n __isFloat: function (value) {\n return value - parseFloat(value) + 1 >= 0; // Borrowed from jquery\n },\n // Keep it in case we implement the `cast_int` option\n // __isInt(value){\n // // return Number.isInteger(parseInt(value))\n // // return !isNaN( parseInt( obj ) );\n // return /^(\\-|\\+)?[1-9][0-9]*$/.test(value)\n // }\n __isQuote: function (buf, pos) {\n const { quote } = this.options;\n if (quote === null) return false;\n const l = quote.length;\n for (let i = 0; i < l; i++) {\n if (quote[i] !== buf[pos + i]) {\n return false;\n }\n }\n return true;\n },\n __isRecordDelimiter: function (chr, buf, pos) {\n const { record_delimiter } = this.options;\n const recordDelimiterLength = record_delimiter.length;\n loop1: for (let i = 0; i < recordDelimiterLength; i++) {\n const rd = record_delimiter[i];\n const rdLength = rd.length;\n if (rd[0] !== chr) {\n continue;\n }\n for (let j = 1; j < rdLength; j++) {\n if (rd[j] !== buf[pos + j]) {\n continue loop1;\n }\n }\n return rd.length;\n }\n return 0;\n },\n __autoDiscoverRecordDelimiter: function (buf, pos) {\n const { encoding } = this.options;\n // Note, we don't need to cache this information in state,\n // It is only called on the first line until we find out a suitable\n // record delimiter.\n const rds = [\n // Important, the windows line ending must be before mac os 9\n Buffer.from(\"\\r\\n\", encoding),\n Buffer.from(\"\\n\", encoding),\n Buffer.from(\"\\r\", encoding),\n ];\n loop: for (let i = 0; i < rds.length; i++) {\n const l = rds[i].length;\n for (let j = 0; j < l; j++) {\n if (rds[i][j] !== buf[pos + j]) {\n continue loop;\n }\n }\n this.options.record_delimiter.push(rds[i]);\n this.state.recordDelimiterMaxLength = rds[i].length;\n return rds[i].length;\n }\n return 0;\n },\n __error: function (msg) {\n const { encoding, raw, skip_records_with_error } = this.options;\n const err = typeof msg === \"string\" ? new Error(msg) : msg;\n if (skip_records_with_error) {\n this.state.recordHasError = true;\n if (this.options.on_skip !== undefined) {\n try {\n this.options.on_skip(\n err,\n raw ? this.state.rawBuffer.toString(encoding) : undefined,\n );\n } catch (err) {\n return err;\n }\n }\n // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined);\n return undefined;\n } else {\n return err;\n }\n },\n __infoDataSet: function () {\n return {\n ...this.info,\n columns: this.options.columns,\n };\n },\n __infoRecord: function () {\n const { columns, raw, encoding } = this.options;\n return {\n ...this.__infoDataSet(),\n bytes_records: this.info.bytes,\n error: this.state.error,\n header: columns === true,\n index: this.state.record.length,\n raw: raw ? this.state.rawBuffer.toString(encoding) : undefined,\n };\n },\n __infoField: function () {\n const { columns } = this.options;\n const isColumns = Array.isArray(columns);\n // Bytes records are only incremented when all records'fields are parsed\n const bytes_records = this.info.bytes_records;\n return {\n ...this.__infoRecord(),\n bytes_records: bytes_records,\n column:\n isColumns === true\n ? columns.length > this.state.record.length\n ? columns[this.state.record.length].name\n : null\n : this.state.record.length,\n quoting: this.state.wasQuoting,\n };\n },\n };\n};\n\nconst parse = function (data, opts = {}) {\n if (typeof data === \"string\") {\n data = Buffer.from(data);\n }\n const records = opts && opts.objname ? Object.create(null) : [];\n const parser = transform$1(opts);\n const push = (record) => {\n if (parser.options.objname === undefined) records.push(record);\n else {\n records[record[0]] = record[1];\n }\n };\n const close = () => {};\n const error = parser.parse(data, true, push, close);\n if (error !== undefined) throw error;\n return records;\n};\n\n// Lodash implementation of `get`\n\nconst charCodeOfDot = \".\".charCodeAt(0);\nconst reEscapeChar = /\\\\(\\\\)?/g;\nconst rePropName = RegExp(\n // Match anything that isn't a dot or bracket.\n \"[^.[\\\\]]+\" +\n \"|\" +\n // Or match property names within brackets.\n \"\\\\[(?:\" +\n // Match a non-string expression.\n \"([^\\\"'][^[]*)\" +\n \"|\" +\n // Or match strings (supports escaping characters).\n \"([\\\"'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2\" +\n \")\\\\]\" +\n \"|\" +\n // Or match \"\" as the space between consecutive dots or empty brackets.\n \"(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))\",\n \"g\",\n);\nconst reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\nconst reIsPlainProp = /^\\w*$/;\n\nconst getTag = function (value) {\n // if (!value) value === undefined ? \"[object Undefined]\" : \"[object Null]\";\n return Object.prototype.toString.call(value);\n};\n\nconst isSymbol = function (value) {\n const type = typeof value;\n return (\n type === \"symbol\" ||\n (type === \"object\" && value && getTag(value) === \"[object Symbol]\")\n );\n};\n\nconst isKey = function (value, object) {\n if (Array.isArray(value)) {\n return false;\n }\n const type = typeof value;\n if (\n type === \"number\" ||\n type === \"symbol\" ||\n type === \"boolean\" ||\n !value ||\n isSymbol(value)\n ) {\n return true;\n }\n return (\n reIsPlainProp.test(value) ||\n !reIsDeepProp.test(value) ||\n (object != null && value in Object(object))\n );\n};\n\nconst stringToPath = function (string) {\n const result = [];\n if (string.charCodeAt(0) === charCodeOfDot) {\n result.push(\"\");\n }\n string.replace(rePropName, function (match, expression, quote, subString) {\n let key = match;\n if (quote) {\n key = subString.replace(reEscapeChar, \"$1\");\n } else if (expression) {\n key = expression.trim();\n }\n result.push(key);\n });\n return result;\n};\n\nconst castPath = function (value, object) {\n if (Array.isArray(value)) {\n return value;\n } else {\n return isKey(value, object) ? [value] : stringToPath(value);\n }\n};\n\nconst toKey = function (value) {\n if (typeof value === \"string\" || isSymbol(value)) return value;\n const result = `${value}`;\n return result == \"0\" && 1 / value == -Infinity ? \"-0\" : result;\n};\n\nconst get = function (object, path) {\n path = castPath(path, object);\n let index = 0;\n const length = path.length;\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return index && index === length ? object : undefined;\n};\n\nconst is_object = function (obj) {\n return typeof obj === \"object\" && obj !== null && !Array.isArray(obj);\n};\n\nconst normalize_columns = function (columns) {\n if (columns === undefined || columns === null) {\n return [undefined, undefined];\n }\n if (typeof columns !== \"object\") {\n return [Error('Invalid option \"columns\": expect an array or an object')];\n }\n if (!Array.isArray(columns)) {\n const newcolumns = [];\n for (const k in columns) {\n newcolumns.push({\n key: k,\n header: columns[k],\n });\n }\n columns = newcolumns;\n } else {\n const newcolumns = [];\n for (const column of columns) {\n if (typeof column === \"string\") {\n newcolumns.push({\n key: column,\n header: column,\n });\n } else if (\n typeof column === \"object\" &&\n column !== null &&\n !Array.isArray(column)\n ) {\n if (!column.key) {\n return [\n Error('Invalid column definition: property \"key\" is required'),\n ];\n }\n if (column.header === undefined) {\n column.header = column.key;\n }\n newcolumns.push(column);\n } else {\n return [\n Error(\"Invalid column definition: expect a string or an object\"),\n ];\n }\n }\n columns = newcolumns;\n }\n return [undefined, columns];\n};\n\nclass CsvError extends Error {\n constructor(code, message, ...contexts) {\n if (Array.isArray(message)) message = message.join(\" \");\n super(message);\n if (Error.captureStackTrace !== undefined) {\n Error.captureStackTrace(this, CsvError);\n }\n this.code = code;\n for (const context of contexts) {\n for (const key in context) {\n const value = context[key];\n this[key] = isBuffer$1(value)\n ? value.toString()\n : value == null\n ? value\n : JSON.parse(JSON.stringify(value));\n }\n }\n }\n}\n\nconst underscore = function (str) {\n return str.replace(/([A-Z])/g, function (_, match) {\n return \"_\" + match.toLowerCase();\n });\n};\n\nconst normalize_options = function (opts) {\n const options = {};\n // Merge with user options\n for (const opt in opts) {\n options[underscore(opt)] = opts[opt];\n }\n // Normalize option `bom`\n if (\n options.bom === undefined ||\n options.bom === null ||\n options.bom === false\n ) {\n options.bom = false;\n } else if (options.bom !== true) {\n return [\n new CsvError(\"CSV_OPTION_BOOLEAN_INVALID_TYPE\", [\n \"option `bom` is optional and must be a boolean value,\",\n `got ${JSON.stringify(options.bom)}`,\n ]),\n ];\n }\n // Normalize option `delimiter`\n if (options.delimiter === undefined || options.delimiter === null) {\n options.delimiter = \",\";\n } else if (isBuffer$1(options.delimiter)) {\n options.delimiter = options.delimiter.toString();\n } else if (typeof options.delimiter !== \"string\") {\n return [\n new CsvError(\"CSV_OPTION_DELIMITER_INVALID_TYPE\", [\n \"option `delimiter` must be a buffer or a string,\",\n `got ${JSON.stringify(options.delimiter)}`,\n ]),\n ];\n }\n // Normalize option `quote`\n if (options.quote === undefined || options.quote === null) {\n options.quote = '\"';\n } else if (options.quote === true) {\n options.quote = '\"';\n } else if (options.quote === false) {\n options.quote = \"\";\n } else if (isBuffer$1(options.quote)) {\n options.quote = options.quote.toString();\n } else if (typeof options.quote !== \"string\") {\n return [\n new CsvError(\"CSV_OPTION_QUOTE_INVALID_TYPE\", [\n \"option `quote` must be a boolean, a buffer or a string,\",\n `got ${JSON.stringify(options.quote)}`,\n ]),\n ];\n }\n // Normalize option `quoted`\n if (options.quoted === undefined || options.quoted === null) {\n options.quoted = false;\n }\n // Normalize option `escape_formulas`\n if (\n options.escape_formulas === undefined ||\n options.escape_formulas === null\n ) {\n options.escape_formulas = false;\n } else if (typeof options.escape_formulas !== \"boolean\") {\n return [\n new CsvError(\"CSV_OPTION_ESCAPE_FORMULAS_INVALID_TYPE\", [\n \"option `escape_formulas` must be a boolean,\",\n `got ${JSON.stringify(options.escape_formulas)}`,\n ]),\n ];\n }\n // Normalize option `quoted_empty`\n if (options.quoted_empty === undefined || options.quoted_empty === null) {\n options.quoted_empty = undefined;\n }\n // Normalize option `quoted_match`\n if (\n options.quoted_match === undefined ||\n options.quoted_match === null ||\n options.quoted_match === false\n ) {\n options.quoted_match = null;\n } else if (!Array.isArray(options.quoted_match)) {\n options.quoted_match = [options.quoted_match];\n }\n if (options.quoted_match) {\n for (const quoted_match of options.quoted_match) {\n const isString = typeof quoted_match === \"string\";\n const isRegExp = quoted_match instanceof RegExp;\n if (!isString && !isRegExp) {\n return [\n new CsvError(\"CSV_OPTION_QUOTED_MATCH\", [\n \"option `quoted_match` must be a string or a regex,\",\n `got ${JSON.stringify(options.quoted_match)}`,\n ]),\n ];\n }\n }\n }\n // Normalize option `quoted_string`\n if (options.quoted_string === undefined || options.quoted_string === null) {\n options.quoted_string = false;\n }\n // Normalize option `eof`\n if (options.eof === undefined || options.eof === null) {\n options.eof = true;\n }\n // Normalize option `escape`\n if (options.escape === undefined || options.escape === null) {\n options.escape = '\"';\n } else if (isBuffer$1(options.escape)) {\n options.escape = options.escape.toString();\n } else if (typeof options.escape !== \"string\") {\n return [\n Error(\n `Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`,\n ),\n ];\n }\n if (options.escape.length > 1) {\n return [\n Error(\n `Invalid Option: escape must be one character, got ${options.escape.length} characters`,\n ),\n ];\n }\n // Normalize option `header`\n if (\n options.header === undefined ||\n options.header === null ||\n options.header === false\n ) {\n options.header = false;\n } else if (options.header !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_HEADER\",\n [\n \"option `header` is expected to be a boolean,\",\n `got ${JSON.stringify(options.header)}`,\n ],\n options,\n );\n }\n // Normalize option `headers_as_comment`\n if (\n options.header_as_comment === undefined ||\n options.header_as_comment === null ||\n options.header_as_comment === false\n ) {\n options.header_as_comment = false;\n } else if (options.header_as_comment === true) {\n options.header_as_comment = \"#\";\n } else if (isBuffer$1(options.header_as_comment)) {\n options.header_as_comment = options.header_as_comment.toString();\n } else if (typeof options.header_as_comment !== \"string\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_HEADER_AS_COMMENT\",\n [\n \"option `header_as_comment` must be a boolean, a string or a buffer,\",\n `got ${JSON.stringify(options.header_as_comment)}`,\n ],\n options,\n );\n }\n // if (options.header_as_comment && !options.comment?.length) {\n // throw new CsvError(\n // \"CSV_INVALID_OPTION_COMMENT\",\n // [\n // \"option `comment` must be a non empty string or buffer when using `header_as_comment`,\",\n // `got ${JSON.stringify(options.comment)}`,\n // ],\n // options,\n // );\n // }\n // Header is always enabled with `header_as_comment`\n // if (options.header_as_comment === true) {\n // options.header = true;\n // }\n // Normalize option `columns`\n const [errColumns, columns] = normalize_columns(options.columns);\n if (errColumns !== undefined) return [errColumns];\n options.columns = columns;\n // Normalize option `quoted`\n if (options.quoted === undefined || options.quoted === null) {\n options.quoted = false;\n }\n // Normalize option `cast`\n if (options.cast === undefined || options.cast === null) {\n options.cast = {};\n }\n // Normalize option cast.bigint\n if (options.cast.bigint === undefined || options.cast.bigint === null) {\n // Cast boolean to string by default\n options.cast.bigint = (value) => \"\" + value;\n }\n // Normalize option cast.boolean\n if (options.cast.boolean === undefined || options.cast.boolean === null) {\n // Cast boolean to string by default\n options.cast.boolean = (value) => (value ? \"1\" : \"\");\n }\n // Normalize option cast.date\n if (options.cast.date === undefined || options.cast.date === null) {\n // Cast date to timestamp string by default\n options.cast.date = (value) => \"\" + value.getTime();\n }\n // Normalize option cast.number\n if (options.cast.number === undefined || options.cast.number === null) {\n // Cast number to string using native casting by default\n options.cast.number = (value) => \"\" + value;\n }\n // Normalize option cast.object\n if (options.cast.object === undefined || options.cast.object === null) {\n // Stringify object as JSON by default\n options.cast.object = (value) => JSON.stringify(value);\n }\n // Normalize option cast.string\n if (options.cast.string === undefined || options.cast.string === null) {\n // Leave string untouched\n options.cast.string = function (value) {\n return value;\n };\n }\n // Normalize option `on_record`\n if (\n options.on_record !== undefined &&\n typeof options.on_record !== \"function\"\n ) {\n return [Error(`Invalid Option: \"on_record\" must be a function.`)];\n }\n // Normalize option `record_delimiter`\n if (\n options.record_delimiter === undefined ||\n options.record_delimiter === null\n ) {\n options.record_delimiter = \"\\n\";\n } else if (isBuffer$1(options.record_delimiter)) {\n options.record_delimiter = options.record_delimiter.toString();\n } else if (typeof options.record_delimiter !== \"string\") {\n return [\n Error(\n `Invalid Option: record_delimiter must be a buffer or a string, got ${JSON.stringify(options.record_delimiter)}`,\n ),\n ];\n }\n switch (options.record_delimiter) {\n case \"unix\":\n options.record_delimiter = \"\\n\";\n break;\n case \"mac\":\n options.record_delimiter = \"\\r\";\n break;\n case \"windows\":\n options.record_delimiter = \"\\r\\n\";\n break;\n case \"ascii\":\n options.record_delimiter = \"\\u001e\";\n break;\n case \"unicode\":\n options.record_delimiter = \"\\u2028\";\n break;\n }\n return [undefined, options];\n};\n\nconst bom_utf8 = Buffer.from([239, 187, 191]);\n// True when appending `separator` after `value` would let `parse` find\n// `separator` starting inside `value`. Besides the field containing the whole\n// separator, this also covers boundary fusion: a field whose tail is a\n// non-empty prefix of a multi-character separator merges with the appended\n// separator (eg value \"a:\" + delimiter \"::\" => \"a:::\", matched at offset 1).\n// Such fields must be quoted to round-trip, like RFC 4180 fields containing the\n// delimiter, generalized to multi-character delimiters and record delimiters.\nconst emits_separator = function (value, separator) {\n return (\n separator.length !== 0 &&\n (value.indexOf(separator) !== -1 ||\n (separator.length > 1 &&\n (value + separator).indexOf(separator) < value.length))\n );\n};\n\nconst stringifier = function (options, state, info) {\n return {\n options: options,\n state: state,\n info: info,\n __transform: function (chunk, push) {\n // Chunk validation\n if (!Array.isArray(chunk) && typeof chunk !== \"object\") {\n return Error(\n `Invalid Record: expect an array or an object, got ${JSON.stringify(chunk)}`,\n );\n }\n // Detect columns from the first record\n if (this.info.records === 0) {\n if (Array.isArray(chunk)) {\n if (\n this.options.header === true &&\n this.options.columns === undefined\n ) {\n return Error(\n \"Undiscoverable Columns: header option requires column option or object records\",\n );\n }\n } else if (this.options.columns === undefined) {\n const [err, columns] = normalize_columns(Object.keys(chunk));\n if (err) return;\n this.options.columns = columns;\n }\n }\n // Emit the header\n if (this.info.records === 0) {\n this.bom(push);\n const err = this.headers(push);\n if (err) return err;\n }\n // Emit and stringify the record if an object or an array\n try {\n // this.emit('record', chunk, this.info.records);\n if (this.options.on_record) {\n this.options.on_record(chunk, this.info.records);\n }\n } catch (err) {\n return err;\n }\n // Convert the record into a string\n let err, chunk_string;\n if (this.options.eof) {\n [err, chunk_string] = this.stringify(chunk);\n if (err) return err;\n if (chunk_string === undefined) {\n return;\n } else {\n chunk_string = chunk_string + this.options.record_delimiter;\n }\n } else {\n [err, chunk_string] = this.stringify(chunk);\n if (err) return err;\n if (chunk_string === undefined) {\n return;\n } else {\n if (this.options.header || this.info.records) {\n chunk_string = this.options.record_delimiter + chunk_string;\n }\n }\n }\n // Emit the csv\n this.info.records++;\n push(chunk_string);\n },\n stringify: function (chunk, chunkIsHeader = false) {\n if (typeof chunk !== \"object\") {\n return [undefined, chunk];\n }\n const { columns } = this.options;\n const record = [];\n // Record is an array\n if (Array.isArray(chunk)) {\n // We are getting an array but the user has specified output columns. In\n // this case, we respect the columns indexes\n if (columns) {\n chunk.splice(columns.length);\n }\n // Cast record elements\n for (let i = 0; i < chunk.length; i++) {\n const field = chunk[i];\n const [err, value] = this.__cast(field, {\n index: i,\n column: i,\n records: this.info.records,\n header: chunkIsHeader,\n });\n if (err) return [err];\n record[i] = [value, field];\n }\n // Record is a literal object\n // `columns` is always defined: it is either provided or discovered.\n } else {\n for (let i = 0; i < columns.length; i++) {\n const field = get(chunk, columns[i].key);\n const [err, value] = this.__cast(field, {\n index: i,\n column: columns[i].key,\n records: this.info.records,\n header: chunkIsHeader,\n });\n if (err) return [err];\n record[i] = [value, field];\n }\n }\n let csvrecord = \"\";\n for (let i = 0; i < record.length; i++) {\n let options, err;\n\n let [value, field] = record[i];\n if (typeof value === \"string\") {\n options = this.options;\n } else if (is_object(value)) {\n // Value is considerered as a mix of a value and options\n options = value;\n value = options.value;\n delete options.value;\n if (\n typeof value !== \"string\" &&\n value !== undefined &&\n value !== null\n ) {\n if (err)\n return [\n Error(\n `Invalid Casting Value: returned value must return a string, null or undefined, got ${JSON.stringify(value)}`,\n ),\n ];\n }\n // Merge global options with the ones returned by cast\n options = { ...this.options, ...options };\n [err, options] = normalize_options(options);\n if (err !== undefined) {\n return [err];\n }\n } else if (value === undefined || value === null) {\n options = this.options;\n } else {\n return [\n Error(\n `Invalid Casting Value: returned value must return a string, an object, null or undefined, got ${JSON.stringify(value)}`,\n ),\n ];\n }\n const {\n delimiter,\n escape,\n quote,\n quoted,\n quoted_empty,\n quoted_string,\n quoted_match,\n record_delimiter,\n escape_formulas,\n } = options;\n if (\"\" === value && \"\" === field) {\n let quotedMatch =\n quoted_match &&\n quoted_match.filter((quoted_match) => {\n if (typeof quoted_match === \"string\") {\n return value.indexOf(quoted_match) !== -1;\n } else {\n return quoted_match.test(value);\n }\n });\n quotedMatch = quotedMatch && quotedMatch.length > 0;\n const shouldQuote =\n quotedMatch ||\n true === quoted_empty ||\n (true === quoted_string && false !== quoted_empty);\n if (shouldQuote === true) {\n value = quote + value + quote;\n }\n csvrecord += value;\n } else if (value) {\n if (typeof value !== \"string\") {\n return [\n Error(\n `Formatter must return a string, null or undefined, got ${JSON.stringify(value)}`,\n ),\n ];\n }\n const containsdelimiter = emits_separator(value, delimiter);\n const containsQuote = quote !== \"\" && value.indexOf(quote) >= 0;\n const containsEscape = value.indexOf(escape) >= 0 && escape !== quote;\n const containsRecordDelimiter = emits_separator(\n value,\n record_delimiter,\n );\n const quotedString = quoted_string && typeof field === \"string\";\n let quotedMatch =\n quoted_match &&\n quoted_match.filter((quoted_match) => {\n if (typeof quoted_match === \"string\") {\n return value.indexOf(quoted_match) !== -1;\n } else {\n return quoted_match.test(value);\n }\n });\n quotedMatch = quotedMatch && quotedMatch.length > 0;\n // See https://github.com/adaltas/node-csv/pull/387\n // More about CSV injection or formula injection, when websites embed\n // untrusted input inside CSV files:\n // https://owasp.org/www-community/attacks/CSV_Injection\n // http://georgemauer.net/2017/10/07/csv-injection.html\n // Apple Numbers unicode normalization is empirical from testing\n if (escape_formulas) {\n switch (value[0]) {\n case \"=\":\n case \"+\":\n case \"-\":\n case \"@\":\n case \"\\t\":\n case \"\\r\":\n case \"\\uFF1D\": // Unicode '='\n case \"\\uFF0B\": // Unicode '+'\n case \"\\uFF0D\": // Unicode '-'\n case \"\\uFF20\": // Unicode '@'\n value = `'${value}`;\n break;\n }\n }\n const shouldQuote =\n containsQuote === true ||\n containsdelimiter ||\n containsRecordDelimiter ||\n quoted ||\n quotedString ||\n quotedMatch;\n if (shouldQuote === true && containsEscape === true) {\n value = value.replaceAll(escape, () => escape + escape);\n }\n if (containsQuote === true) {\n value = value.replaceAll(quote, () => escape + quote);\n }\n if (shouldQuote === true) {\n value = quote + value + quote;\n }\n csvrecord += value;\n } else if (\n quoted_empty === true ||\n (field === \"\" && quoted_string === true && quoted_empty !== false)\n ) {\n csvrecord += quote + quote;\n }\n if (i !== record.length - 1) {\n csvrecord += delimiter;\n }\n }\n return [undefined, csvrecord];\n },\n bom: function (push) {\n if (this.options.bom !== true) {\n return;\n }\n push(bom_utf8);\n },\n headers: function (push) {\n if (this.options.header === false) {\n return;\n }\n if (this.options.columns === undefined) {\n return;\n }\n let err;\n let headers = this.options.columns.map((column) => column.header);\n if (this.options.eof) {\n [err, headers] = this.stringify(headers, true);\n headers += this.options.record_delimiter;\n } else {\n [err, headers] = this.stringify(headers);\n }\n if (err) return err;\n if (this.options.header_as_comment) {\n headers = this.options.header_as_comment + \" \" + headers;\n }\n push(headers);\n },\n __cast: function (value, context) {\n const type = typeof value;\n try {\n if (type === \"string\") {\n // Fine for 99% of the cases\n return [undefined, this.options.cast.string(value, context)];\n } else if (type === \"bigint\") {\n return [undefined, this.options.cast.bigint(value, context)];\n } else if (type === \"number\") {\n return [undefined, this.options.cast.number(value, context)];\n } else if (type === \"boolean\") {\n return [undefined, this.options.cast.boolean(value, context)];\n } else if (value instanceof Date) {\n return [undefined, this.options.cast.date(value, context)];\n } else if (type === \"object\" && value !== null) {\n return [undefined, this.options.cast.object(value, context)];\n } else if (value === null && this.options.cast.null !== undefined) {\n return [undefined, this.options.cast.null(value, context)];\n } else if (\n value === undefined &&\n this.options.cast.undefined !== undefined\n ) {\n return [undefined, this.options.cast.undefined(value, context)];\n } else {\n return [undefined, value];\n }\n } catch (err) {\n return [err];\n }\n },\n };\n};\n\nconst stringify = function (records, opts = {}) {\n const data = [];\n const [err, options] = normalize_options(opts);\n if (err !== undefined) throw err;\n const state = {\n stop: false,\n };\n // Information\n const info = {\n records: 0,\n };\n const api = stringifier(options, state, info);\n for (const record of records) {\n const err = api.__transform(record, function (record) {\n data.push(record);\n });\n if (err !== undefined) throw err;\n }\n if (data.length === 0) {\n api.bom((d) => {\n data.push(d);\n });\n const err = api.headers((headers) => {\n data.push(headers);\n });\n if (err !== undefined) throw err;\n }\n return data.join(\"\");\n};\n\n/*\nStream Transform\n\nPlease look at the [project documentation](https://csv.js.org/transform/) for\nadditional information.\n*/\n\n\nconst Transformer = function (options = {}, handler) {\n this.options = options;\n if (options.consume === undefined || options.consume === null) {\n this.options.consume = false;\n }\n this.options.objectMode = true;\n if (options.parallel === undefined || options.parallel === null) {\n this.options.parallel = 100;\n }\n if (options.params === undefined || options.params === null) {\n options.params = null;\n }\n this.handler = handler;\n Stream.Transform.call(this, this.options);\n this.state = {\n running: 0,\n started: 0,\n finished: 0,\n paused: false,\n };\n return this;\n};\n\nutil.inherits(Transformer, Stream.Transform);\n\nTransformer.prototype._transform = function (chunk, _, cb) {\n this.state.started++;\n this.state.running++;\n // Accept additional chunks to be processed in parallel\n if (!this.state.paused && this.state.running < this.options.parallel) {\n cb();\n cb = null; // Cancel further callback execution\n }\n try {\n let l = this.handler.length;\n if (this.options.params !== null) {\n l--;\n }\n if (l === 1) {\n // sync\n const result = this.handler.call(this, chunk, this.options.params);\n if (result && result.then) {\n result.then((result) => {\n this.__done(null, [result], cb);\n });\n result.catch((err) => {\n this.__done(err);\n });\n } else {\n this.__done(null, [result], cb);\n }\n } else if (l === 2) {\n // async\n const callback = (err, ...chunks) => this.__done(err, chunks, cb);\n this.handler.call(this, chunk, callback, this.options.params);\n } else {\n throw Error(\"Invalid handler arguments\");\n }\n return false;\n } catch (err) {\n this.__done(err);\n }\n};\nTransformer.prototype._flush = function (cb) {\n if (this.state.running === 0) {\n cb();\n } else {\n this._ending = function () {\n cb();\n };\n }\n};\nTransformer.prototype.__done = function (err, chunks, cb) {\n this.state.running--;\n if (err) {\n return this.destroy(err);\n // return this.emit('error', err);\n }\n this.state.finished++;\n for (let chunk of chunks) {\n if (typeof chunk === \"number\") {\n chunk = `${chunk}`;\n }\n // We dont push empty string\n // See https://nodejs.org/api/stream.html#stream_readable_push\n if (chunk !== undefined && chunk !== null && chunk !== \"\") {\n this.state.paused = !this.push(chunk);\n }\n }\n // Chunk has been processed\n if (cb) {\n cb();\n }\n if (this._ending && this.state.running === 0) {\n this._ending();\n }\n};\n\n/*\nStream Transform - sync module\n\nPlease look at the [project documentation](https://csv.js.org/transform/) for\nadditional information.\n*/\n\n\nconst transform = function () {\n // Import arguments normalization\n let handler, records;\n let options = {};\n for (const i in arguments) {\n const argument = arguments[i];\n let type = typeof argument;\n if (argument === null) {\n type = \"null\";\n } else if (type === \"object\" && Array.isArray(argument)) {\n type = \"array\";\n }\n if (type === \"array\") {\n records = argument;\n } else if (type === \"object\") {\n options = { ...argument };\n } else if (type === \"function\") {\n handler = argument;\n } else if (type !== \"null\") {\n throw new Error(\n `Invalid Arguments: got ${JSON.stringify(argument)} at position ${i}`,\n );\n }\n }\n // Validate arguments\n let expected_handler_length = 1;\n if (options.params) {\n expected_handler_length++;\n }\n if (handler.length > expected_handler_length) {\n throw Error(\"Invalid Handler: only synchronous handlers are supported\");\n }\n // Start transformation\n const chunks = [];\n const transformer = new Transformer(options, handler);\n transformer.push = function (chunk) {\n chunks.push(chunk);\n };\n for (const record of records) {\n transformer._transform(record, null, function () {});\n }\n return chunks;\n};\n\nexport { generate, parse, stringify, transform };\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","names":[],"sources":["../../../../node_modules/.pnpm/fflate@0.8.3/node_modules/fflate/esm/browser.js","../../../../node_modules/.pnpm/csv@6.6.3/node_modules/csv/dist/esm/sync.js"],"sourcesContent":["// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n , // determined by compression function\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data[0]) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush(ev.data[1]);\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n // can fail for cross-realm Uint8Array, but ok - only a small performance penalty\n w.postMessage([d, t = f], d.buffer instanceof ArrayBuffer ? [d.buffer] : []);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function (sync) { w.postMessage([0, sync]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read 8 bytes\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n if (final) {\n // cleanup unneeded buffers/state to reduce memory usage\n this.s = this.o = {};\n this.b = et;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible. A separate DEFLATE stream may be concatenated\n * with the current output after a sync flush.\n */\n Deflate.prototype.flush = function (sync) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n // could technically skip writing the type-0 block for (this.s.r & 7) == 0,\n // but the deterministic trailer (00 00 FF FF) is useful in some situations\n if (sync) {\n var c = new u8(6);\n c[0] = this.s.r >> 3;\n // write empty, non-final type-0 block\n var ep = wfblk(c, this.s.r, et);\n this.s.r = 0;\n this.ondata(c.subarray(0, ep >> 3), false);\n }\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Gzip.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, 0);\n // process concatenated GZIP\n if (this.s.f && !this.s.l) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n else if (final) {\n Inflate.prototype.c.call(this, final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n * @param sync Whether to flush to a byte boundary. A sync flush takes 4-5\n * extra bytes, but guarantees all pushed data is immediately\n * decompressible.\n */\n Zlib.prototype.flush = function (sync) {\n Deflate.prototype.flush.call(this, sync);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (ArrayBuffer.isView(val))\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), efl = b2(d, b + 30), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl;\n var _a = z64hs(d, es, efl, z, b4(d, b + 20), b4(d, b + 24), b4(d, b + 42)), sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + efl + b2(d, b + 32), off];\n};\n// read zip64 header sizes\nvar z64hs = function (d, b, l, z, sc, su, off) {\n var nsc = sc == 4294967295, nsu = su == 4294967295, noff = off == 4294967295, e = b + l;\n var nf = nsc + nsu + noff;\n if (z && nf) {\n for (; b + 4 < e; b += 4 + b2(d, b + 2)) {\n if (b2(d, b) == 1) {\n return [\n nsc ? b8(d, b + 4 + 8 * nsu) : sc,\n nsu ? b8(d, b + 4) : su,\n noff ? b8(d, b + 4 + 8 * (nsu + nsc)) : off,\n 1\n ];\n }\n }\n // z == 2 for unknown whether or not zip64\n if (z < 2)\n err(13);\n }\n return [sc, su, off, 0];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n // we shouldn't really do this cast, but properly handling ArrayBufferLike\n // makes the API unergonomic with Buffer\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (chunk, final) {\n // same as ZipPassThrough: cast to retain Buffer ergonomics\n this.ondata(null, chunk, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (chunk, final) {\n try {\n this.i.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (chunk, final) {\n if (this.i.terminate)\n chunk = slc(chunk, 0);\n this.i.push(chunk, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var lsc = b4(buf, i + 18), lsu = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n var _a = z64hs(buf, i, es, 2, lsc, lsu, 0), sc_1 = _a[0], su_1 = _a[1], z64 = _a[3];\n if (dd)\n sc_1 = -1 - z64;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = b4(data, e - 20) == 0x7064B50;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n","var global$1 = (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n }\n\n revLookup['-'.charCodeAt(0)] = 62;\n revLookup['_'.charCodeAt(0)] = 63;\n}\n\nfunction toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr;\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders);\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len;\n\n var L = 0;\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n arr[L++] = (tmp >> 16) & 0xFF;\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n arr[L++] = tmp & 0xFF;\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp;\n var output = [];\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n output.push(tripletToBase64(tmp));\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n var output = '';\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n output += lookup[tmp >> 2];\n output += lookup[(tmp << 4) & 0x3F];\n output += '==';\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n output += lookup[tmp >> 10];\n output += lookup[(tmp >> 4) & 0x3F];\n output += lookup[(tmp << 2) & 0x3F];\n output += '=';\n }\n\n parts.push(output);\n\n return parts.join('')\n}\n\nfunction read$1 (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? (nBytes - 1) : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n\n i += d;\n\n e = s & ((1 << (-nBits)) - 1);\n s >>= (-nBits);\n nBits += eLen;\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1);\n e >>= (-nBits);\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nfunction write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n var i = isLE ? 0 : (nBytes - 1);\n var d = isLE ? 1 : -1;\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m;\n eLen += mLen;\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n}\n\nvar toString = {}.toString;\n\nvar isArray$1 = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\nvar INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined\n ? global$1.TYPED_ARRAY_SUPPORT\n : true;\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nkMaxLength();\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length);\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length);\n }\n that.length = length;\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype;\n return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) ;\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size);\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n assertSize(size);\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0;\n that = createBuffer(that, length);\n\n var actual = that.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual);\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n that = createBuffer(that, length);\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array);\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset);\n } else {\n array = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array;\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array);\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0;\n that = createBuffer(that, len);\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len);\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray$1(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\nBuffer.isBuffer = isBuffer$1;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n};\n\nBuffer.concat = function concat (list, length) {\n if (!isArray$1(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i;\n if (length === undefined) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n return buffer\n};\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false;\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0;\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length;\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length;\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length;\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n return this\n};\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0;\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n var str = '';\n var max = INSPECT_MAX_BYTES;\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\n return '<Buffer ' + str + '>'\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0;\n }\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n if (thisStart === undefined) {\n thisStart = 0;\n }\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n byteOffset = +byteOffset; // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1);\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i;\n if (dir) {\n var foundIndex = -1;\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n if (length > remaining) {\n length = remaining;\n }\n }\n\n // must be an even number of digits\n var strLen = string.length;\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed;\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0;\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0;\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8';\n\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n};\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return fromByteArray(buf)\n } else {\n return fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n\n var i = start;\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n break\n case 2:\n secondByte = buf[i + 1];\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = '';\n var i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n );\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length;\n\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n\n var out = '';\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n\n var newBuf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | (this[offset + 1] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | (this[offset] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read$1(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read$1(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read$1(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read$1(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8;\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24);\n this[offset + 2] = (value >>> 16);\n this[offset + 1] = (value >>> 8);\n this[offset] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n this[offset + 2] = (value >>> 16);\n this[offset + 3] = (value >>> 24);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648);\n if (value < 0) value = 0xffffffff + value + 1;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n );\n }\n\n return len\n};\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n if (code < 256) {\n val = code;\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n\n if (!val) val = 0;\n\n var i;\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint;\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null;\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo;\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i];\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nfunction isBuffer$1(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount$1.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount$1;\nfunction listenerCount$1(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\n// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global$1.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global$1.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nvar env = {};\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global$1.performance || {};\nperformance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() };\n\nvar process = {\n env: env};\n\nvar inherits;\nif (typeof Object.create === 'function'){\n inherits = function inherits(ctor, superCtor) {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n inherits = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n };\n}\nvar inherits$1 = inherits;\n\nvar formatRegExp = /%[sdj%]/g;\nfunction format(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n}\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nfunction deprecate(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global$1.process)) {\n return function() {\n return deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\nvar debugs = {};\nvar debugEnviron;\nfunction debuglog(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = 0;\n debugs[set] = function() {\n var msg = format.apply(null, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n}\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n _extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var length = output.reduce(function(prev, cur) {\n if (cur.indexOf('\\n') >= 0) ;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nfunction isNull(arg) {\n return arg === null;\n}\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\n\nfunction isSymbol$1(arg) {\n return typeof arg === 'symbol';\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\n\nfunction isBuffer(maybeBuf) {\n return isBuffer$1(maybeBuf);\n}\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nfunction log() {\n console.log('%s - %s', timestamp(), format.apply(null, arguments));\n}\n\nfunction _extend(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n}\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar util = {\n inherits: inherits$1,\n _extend: _extend,\n log: log,\n isBuffer: isBuffer,\n isPrimitive: isPrimitive,\n isFunction: isFunction,\n isError: isError,\n isDate: isDate,\n isObject: isObject,\n isRegExp: isRegExp,\n isUndefined: isUndefined,\n isSymbol: isSymbol$1,\n isString: isString,\n isNumber: isNumber,\n isNullOrUndefined: isNullOrUndefined,\n isNull: isNull,\n isBoolean: isBoolean,\n isArray: isArray,\n inspect: inspect,\n deprecate: deprecate,\n format: format,\n debuglog: debuglog\n};\n\nfunction BufferList() {\n this.head = null;\n this.tail = null;\n this.length = 0;\n}\n\nBufferList.prototype.push = function (v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n};\n\nBufferList.prototype.unshift = function (v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n};\n\nBufferList.prototype.shift = function () {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n};\n\nBufferList.prototype.clear = function () {\n this.head = this.tail = null;\n this.length = 0;\n};\n\nBufferList.prototype.join = function (s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n};\n\nBufferList.prototype.concat = function (n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n p.data.copy(ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n};\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar isBufferEncoding = Buffer.isEncoding\n || function(encoding) {\n switch (encoding && encoding.toLowerCase()) {\n case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n default: return false;\n }\n };\n\n\nfunction assertEncoding(encoding) {\n if (encoding && !isBufferEncoding(encoding)) {\n throw new Error('Unknown encoding: ' + encoding);\n }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nfunction StringDecoder(encoding) {\n this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n assertEncoding(encoding);\n switch (this.encoding) {\n case 'utf8':\n // CESU-8 represents each of Surrogate Pair by 3-bytes\n this.surrogateSize = 3;\n break;\n case 'ucs2':\n case 'utf16le':\n // UTF-16 represents each of Surrogate Pair by 2-bytes\n this.surrogateSize = 2;\n this.detectIncompleteChar = utf16DetectIncompleteChar;\n break;\n case 'base64':\n // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n this.surrogateSize = 3;\n this.detectIncompleteChar = base64DetectIncompleteChar;\n break;\n default:\n this.write = passThroughWrite;\n return;\n }\n\n // Enough space to store all bytes of a single character. UTF-8 needs 4\n // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n this.charBuffer = new Buffer(6);\n // Number of bytes received for the current incomplete multi-byte character.\n this.charReceived = 0;\n // Number of bytes expected for the current incomplete multi-byte character.\n this.charLength = 0;\n}\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n var charStr = '';\n // if our last write ended with an incomplete multibyte character\n while (this.charLength) {\n // determine how many remaining bytes this buffer has to offer for this char\n var available = (buffer.length >= this.charLength - this.charReceived) ?\n this.charLength - this.charReceived :\n buffer.length;\n\n // add the new bytes to the char buffer\n buffer.copy(this.charBuffer, this.charReceived, 0, available);\n this.charReceived += available;\n\n if (this.charReceived < this.charLength) {\n // still not enough chars in this buffer? wait for more ...\n return '';\n }\n\n // remove bytes belonging to the current character from the buffer\n buffer = buffer.slice(available, buffer.length);\n\n // get the character that was split\n charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n var charCode = charStr.charCodeAt(charStr.length - 1);\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n this.charLength += this.surrogateSize;\n charStr = '';\n continue;\n }\n this.charReceived = this.charLength = 0;\n\n // if there are no more bytes in this buffer, just emit our char\n if (buffer.length === 0) {\n return charStr;\n }\n break;\n }\n\n // determine and set charLength / charReceived\n this.detectIncompleteChar(buffer);\n\n var end = buffer.length;\n if (this.charLength) {\n // buffer the incomplete character bytes we got\n buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n end -= this.charReceived;\n }\n\n charStr += buffer.toString(this.encoding, 0, end);\n\n var end = charStr.length - 1;\n var charCode = charStr.charCodeAt(end);\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n var size = this.surrogateSize;\n this.charLength += size;\n this.charReceived += size;\n this.charBuffer.copy(this.charBuffer, size, 0, size);\n buffer.copy(this.charBuffer, 0, 0, size);\n return charStr.substring(0, end);\n }\n\n // or just emit the charStr\n return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n // determine how many bytes we have to check at the end of this buffer\n var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n // Figure out if one of the last i bytes of our buffer announces an\n // incomplete char.\n for (; i > 0; i--) {\n var c = buffer[buffer.length - i];\n\n // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n // 110XXXXX\n if (i == 1 && c >> 5 == 0x06) {\n this.charLength = 2;\n break;\n }\n\n // 1110XXXX\n if (i <= 2 && c >> 4 == 0x0E) {\n this.charLength = 3;\n break;\n }\n\n // 11110XXX\n if (i <= 3 && c >> 3 == 0x1E) {\n this.charLength = 4;\n break;\n }\n }\n this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n var res = '';\n if (buffer && buffer.length)\n res = this.write(buffer);\n\n if (this.charReceived) {\n var cr = this.charReceived;\n var buf = this.charBuffer;\n var enc = this.encoding;\n res += buf.slice(0, cr).toString(enc);\n }\n\n return res;\n};\n\nfunction passThroughWrite(buffer) {\n return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 2;\n this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 3;\n this.charLength = this.charReceived ? 3 : 0;\n}\n\nReadable.ReadableState = ReadableState;\n\nvar debug = debuglog('stream');\ninherits$1(Readable, EventEmitter);\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') {\n return emitter.prependListener(event, fn);\n } else {\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event])\n emitter.on(event, fn);\n else if (Array.isArray(emitter._events[event]))\n emitter._events[event].unshift(fn);\n else\n emitter._events[event] = [fn, emitter._events[event]];\n }\n}\nfunction listenerCount (emitter, type) {\n return emitter.listeners(type).length;\n}\nfunction ReadableState(options, stream) {\n\n options = options || {};\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // when piping, we only care about 'readable' events that happen\n // after read()ing all the bytes and not getting any pushback.\n this.ranOut = false;\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options && typeof options.read === 'function') this._read = options.read;\n\n EventEmitter.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n\n if (!state.objectMode && typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n }\n\n return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n var state = this._readableState;\n return readableAddChunk(this, state, chunk, '', true);\n};\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n var er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (state.ended && !addToFront) {\n var e = new Error('stream.push() after EOF');\n stream.emit('error', e);\n } else if (state.endEmitted && addToFront) {\n var _e = new Error('stream.unshift() after end event');\n stream.emit('error', _e);\n } else {\n var skipAdd;\n if (state.decoder && !addToFront && !encoding) {\n chunk = state.decoder.write(chunk);\n skipAdd = !state.objectMode && chunk.length === 0;\n }\n\n if (!addToFront) state.reading = false;\n\n // Don't add to the buffer if we've decoded to an empty string chunk and\n // we're not in object mode\n if (!skipAdd) {\n // if we want the data now, just emit it.\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n }\n\n maybeReadMore(stream, state);\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n\n return needMoreData(state);\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n var er = null;\n if (!isBuffer$1(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false);\n\n var endFn = doEnd ? onend : cleanup;\n if (state.endEmitted) nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable) {\n debug('onunpipe');\n if (readable === src) {\n cleanup();\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', cleanup);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (listenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && src.listeners('data').length) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var _i = 0; _i < len; _i++) {\n dests[_i].emit('unpipe', this);\n }return this;\n }\n\n // try to find the right one.\n var i = indexOf(state.pipes, dest);\n if (i === -1) return this;\n\n state.pipes.splice(i, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = EventEmitter.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var state = this._readableState;\n var paused = false;\n\n var self = this;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) self.push(chunk);\n }\n\n self.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = self.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n forEach(events, function (ev) {\n stream.on(ev, self.emit.bind(self, ev));\n });\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n self._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction forEach(xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\nWritable.WritableState = WritableState;\ninherits$1(Writable, EventEmitter);\n\nfunction nop() {}\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\nfunction WritableState(options, stream) {\n Object.defineProperty(this, 'buffer', {\n get: deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')\n });\n options = options || {};\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function writableStateGetBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\nfunction Writable(options) {\n\n // Writable ctor is applied to Duplexes, though they're not\n // instanceof Writable, they're instanceof Readable.\n if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options);\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n }\n\n EventEmitter.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n nextTick(cb, er);\n}\n\n// If we get something that is not a buffer, string, null, or undefined,\n// and we're not in objectMode, then that's an error.\n// Otherwise stream chunks are all considered to be of length=1, and the\n// watermarks determine how many objects to keep in the buffer, rather than\n// how many bytes or characters.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n // Always throw error if a null is written\n // if we are not in object mode then throw\n // if it is not a buffer, string, or undefined.\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, cb) {\n chunk = decodeChunk(state, chunk, encoding);\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) nextTick(cb, er);else cb(er);\n\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n nextTick(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n while (entry) {\n buffer[count] = entry;\n entry = entry.next;\n count += 1;\n }\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequestCount = 0;\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished) {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n if (state.pendingcb === 0) {\n prefinish(stream, state);\n state.finished = true;\n stream.emit('finish');\n } else {\n prefinish(stream, state);\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function (err) {\n var entry = _this.entry;\n _this.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = _this;\n } else {\n state.corkedRequestsFree = _this;\n }\n };\n}\n\ninherits$1(Duplex, Readable);\n\nvar keys = Object.keys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\ninherits$1(Transform, Duplex);\n\nfunction TransformState(stream) {\n this.afterTransform = function (er, data) {\n return afterTransform(stream, er, data);\n };\n\n this.needTransform = false;\n this.transforming = false;\n this.writecb = null;\n this.writechunk = null;\n this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n var ts = stream._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data !== null && data !== undefined) stream.push(data);\n\n cb(er);\n\n var rs = stream._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n stream._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = new TransformState(this);\n\n // when the writable side finishes, then flush out anything remaining.\n var stream = this;\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n this.once('prefinish', function () {\n if (typeof this._flush === 'function') this._flush(function (er) {\n done(stream, er);\n });else done(stream);\n });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('Not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nfunction done(stream, er) {\n if (er) return stream.emit('error', er);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n var ws = stream._writableState;\n var ts = stream._transformState;\n\n if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}\n\ninherits$1(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};\n\ninherits$1(Stream, EventEmitter);\nStream.Readable = Readable;\nStream.Writable = Writable;\nStream.Duplex = Duplex;\nStream.Transform = Transform;\nStream.PassThrough = PassThrough;\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EventEmitter.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EventEmitter.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n\nconst init_state$1 = (options) => {\n // State\n return {\n start_time: options.duration ? Date.now() : null,\n fixed_size_buffer: \"\",\n count_written: 0,\n count_created: 0,\n };\n};\n\n// Generate a random number between 0 and 1 with 2 decimals. The function is idempotent if it detect the \"seed\" option.\nconst random = function (options = {}) {\n if (options.seed) {\n return (options.seed = ((options.seed * Math.PI * 100) % 100) / 100);\n } else {\n return Math.random();\n }\n};\n\nconst types = {\n // Generate an ASCII value.\n ascii: function ({ options }) {\n const column = [];\n const nb_chars = Math.ceil(random(options) * options.maxWordLength);\n for (let i = 0; i < nb_chars; i++) {\n const char = Math.floor(random(options) * 32);\n column.push(String.fromCharCode(char + (char < 16 ? 65 : 97 - 16)));\n }\n return column.join(\"\");\n },\n // Generate an integer value.\n int: function ({ options }) {\n return Math.floor(random(options) * Math.pow(2, 52));\n },\n // Generate an boolean value.\n bool: function ({ options }) {\n return Math.floor(random(options) * 2);\n },\n};\n\nconst camelize = function (str) {\n return str.replace(/_([a-z])/gi, function (_, match) {\n return match.toUpperCase();\n });\n};\n\nconst normalize_options$2 = (opts) => {\n // Convert Stream Readable options if underscored\n if (opts.object_mode) {\n opts.objectMode = opts.object_mode;\n }\n if (opts.high_water_mark) {\n opts.highWaterMark = opts.high_water_mark;\n }\n // See https://nodejs.org/api/stream.html#stream_new_stream_readable_options\n // Node.js 20 introduced `stream.getDefaultHighWaterMark(opts.objectMode)`\n // opts.highWaterMark = opts.highWaterMark ?? (opts.objectMode ? 16 : 16384);\n // opts.highWaterMark = opts.highWaterMark ?? stream.getDefaultHighWaterMark(opts.objectMode);\n // Clone and camelize options\n const options = {};\n for (const k in opts) {\n options[camelize(k)] = opts[k];\n }\n // Normalize options\n const dft = {\n columns: 8,\n delimiter: \",\",\n duration: null,\n encoding: null,\n end: null,\n eof: false,\n fixedSize: false,\n length: -1,\n maxWordLength: 16,\n rowDelimiter: \"\\n\",\n seed: false,\n sleep: 0,\n };\n for (const k in dft) {\n if (options[k] === undefined) {\n options[k] = dft[k];\n }\n }\n // Default values\n if (options.eof === true) {\n options.eof = options.rowDelimiter;\n }\n if (typeof options.columns === \"number\") {\n options.columns = new Array(options.columns);\n }\n const accepted_header_types = Object.keys(types).filter(\n (t) => ![\"super_\", \"camelize\"].includes(t),\n );\n for (let i = 0; i < options.columns.length; i++) {\n const v = options.columns[i] || \"ascii\";\n if (typeof v === \"string\") {\n if (!accepted_header_types.includes(v)) {\n throw Error(\n `Invalid column type: got \"${v}\", default values are ${JSON.stringify(accepted_header_types)}`,\n );\n }\n options.columns[i] = types[v];\n }\n }\n return options;\n};\n\nconst read = (options, state, size, push, close) => {\n // Already started\n const data = [];\n let recordsLength = 0;\n // Get remaining buffer when fixedSize is enable\n if (options.fixedSize) {\n recordsLength = state.fixed_size_buffer.length;\n if (recordsLength !== 0) {\n data.push(state.fixed_size_buffer);\n }\n }\n // eslint-disable-next-line\n while(true){\n // Exit\n if (\n state.count_created === options.length ||\n (options.end && Date.now() > options.end) ||\n (options.duration && Date.now() > state.start_time + options.duration)\n ) {\n // Flush\n if (data.length) {\n if (options.objectMode) {\n for (const record of data) {\n push(record);\n }\n } else {\n push(data.join(\"\") + (options.eof ? options.eof : \"\"));\n }\n state.end = true;\n } else {\n close();\n }\n return;\n }\n // Create the record\n let record = [];\n let recordLength;\n for (const fn of options.columns) {\n const result = fn({ options: options, state: state });\n const type = typeof result;\n if (result !== null && type !== \"string\" && type !== \"number\") {\n close(\n Error(\n [\n \"INVALID_VALUE:\",\n \"values returned by column function must be\",\n \"a string, a number or null,\",\n `got ${JSON.stringify(result)}`,\n ].join(\" \"),\n ),\n );\n return;\n }\n record.push(result);\n }\n // Obtain record length\n if (options.objectMode) {\n recordLength = 0;\n // recordLength is currently equal to the number of columns\n // This is wrong and shall equal to 1 record only\n for (const column of record) {\n recordLength += column.length;\n }\n } else {\n // Stringify the record\n record =\n (state.count_created === 0 ? \"\" : options.rowDelimiter) +\n record.join(options.delimiter);\n recordLength = record.length;\n }\n state.count_created++;\n if (recordsLength + recordLength > size) {\n if (options.objectMode) {\n data.push(record);\n for (const record of data) {\n push(record);\n }\n } else {\n if (options.fixedSize) {\n state.fixed_size_buffer = record.substr(size - recordsLength);\n data.push(record.substr(0, size - recordsLength));\n } else {\n data.push(record);\n }\n push(data.join(\"\"));\n }\n return;\n }\n recordsLength += recordLength;\n data.push(record);\n }\n};\n\nconst Generator = function (options = {}) {\n this.options = normalize_options$2(options);\n // Call parent constructor\n Stream.Readable.call(this, this.options);\n this.state = init_state$1(this.options);\n return this;\n};\nutil.inherits(Generator, Stream.Readable);\n\n// Stop the generation.\nGenerator.prototype.end = function () {\n this.push(null);\n};\n// Put new data into the read queue.\nGenerator.prototype._read = function (size) {\n setImmediate(() => {\n this.__read(size);\n });\n};\nGenerator.prototype.__read = function (size) {\n read(\n this.options,\n this.state,\n size,\n (chunk) => {\n this.__push(chunk);\n },\n (err) => {\n if (err) {\n this.destroy(err);\n } else {\n this.push(null);\n }\n },\n );\n};\n// Put new data into the read queue.\nGenerator.prototype.__push = function (record) {\n const push = () => {\n this.state.count_written++;\n this.push(record);\n if (this.state.end === true) {\n return this.push(null);\n }\n };\n if (this.options.sleep > 0) setTimeout(push, this.options.sleep);\n else push();\n};\n\n/*\nCSV Generate - sync module\n\nPlease look at the [project documentation](https://csv.js.org/generate/) for\nadditional information.\n*/\n\n\nconst generate = function (options) {\n if (typeof options === \"string\" && /\\d+/.test(options)) {\n options = parseInt(options);\n }\n if (Number.isInteger(options)) {\n options = { length: options };\n } else if (typeof options !== \"object\" || options === null) {\n throw Error(\"Invalid Argument: options must be an object or an integer\");\n }\n if (!Number.isInteger(options.length)) {\n throw Error(\"Invalid Argument: length is not defined\");\n }\n const chunks = [];\n let work = true;\n const generator = new Generator(options);\n generator.push = function (chunk) {\n if (chunk === null) {\n return (work = false);\n }\n chunks.push(chunk);\n };\n while (work) {\n generator.__read(options.highWaterMark);\n }\n if (!options.objectMode) {\n return chunks.join(\"\");\n } else {\n return chunks;\n }\n};\n\nlet CsvError$1 = class CsvError extends Error {\n constructor(code, message, options, ...contexts) {\n if (Array.isArray(message)) message = message.join(\" \").trim();\n super(message);\n if (Error.captureStackTrace !== undefined) {\n Error.captureStackTrace(this, CsvError);\n }\n this.code = code;\n for (const context of contexts) {\n for (const key in context) {\n const value = context[key];\n this[key] = isBuffer$1(value)\n ? value.toString(options.encoding)\n : value == null\n ? value\n : JSON.parse(JSON.stringify(value));\n }\n }\n }\n};\n\nconst is_object$1 = function (obj) {\n return typeof obj === \"object\" && obj !== null && !Array.isArray(obj);\n};\n\nconst normalize_columns_array = function (columns) {\n const normalizedColumns = [];\n for (let i = 0, l = columns.length; i < l; i++) {\n const column = columns[i];\n if (column === undefined || column === null || column === false) {\n normalizedColumns[i] = { disabled: true };\n } else if (typeof column === \"string\" || typeof column === \"number\") {\n normalizedColumns[i] = { name: `${column}` };\n } else if (is_object$1(column)) {\n if (typeof column.name !== \"string\") {\n throw new CsvError$1(\"CSV_OPTION_COLUMNS_MISSING_NAME\", [\n \"Option columns missing name:\",\n `property \"name\" is required at position ${i}`,\n \"when column is an object literal\",\n ]);\n }\n normalizedColumns[i] = column;\n } else {\n throw new CsvError$1(\"CSV_INVALID_COLUMN_DEFINITION\", [\n \"Invalid column definition:\",\n \"expect a string or a literal object,\",\n `got ${JSON.stringify(column)} at position ${i}`,\n ]);\n }\n }\n return normalizedColumns;\n};\n\nclass ResizeableBuffer {\n constructor(size = 100) {\n this.size = size;\n this.length = 0;\n this.buf = Buffer.allocUnsafe(size);\n }\n prepend(val) {\n if (isBuffer$1(val)) {\n const length = this.length + val.length;\n if (length >= this.size) {\n this.resize();\n if (length >= this.size) {\n throw Error(\"INVALID_BUFFER_STATE\");\n }\n }\n const buf = this.buf;\n this.buf = Buffer.allocUnsafe(this.size);\n val.copy(this.buf, 0);\n buf.copy(this.buf, val.length);\n this.length += val.length;\n } else {\n const length = this.length++;\n if (length === this.size) {\n this.resize();\n }\n const buf = this.clone();\n this.buf[0] = val;\n buf.copy(this.buf, 1, 0, length);\n }\n }\n append(val) {\n const length = this.length++;\n if (length === this.size) {\n this.resize();\n }\n this.buf[length] = val;\n }\n clone() {\n return Buffer.from(this.buf.slice(0, this.length));\n }\n resize() {\n const length = this.length;\n this.size = this.size * 2;\n const buf = Buffer.allocUnsafe(this.size);\n this.buf.copy(buf, 0, 0, length);\n this.buf = buf;\n }\n toString(encoding) {\n if (encoding) {\n return this.buf.toString(encoding, 0, this.length);\n } else {\n return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length));\n }\n }\n toJSON() {\n return this.toString(\"utf8\");\n }\n reset() {\n this.length = 0;\n }\n}\n\nconst init_state = function (options) {\n // ECMAScript WhiteSpace + LineTerminator codepoints, encoded under\n // `options.encoding`. Aligns trimming with `String.prototype.trim()`.\n // https://tc39.es/ecma262/#sec-white-space\n // https://tc39.es/ecma262/#sec-line-terminators\n //\n // Codepoints unrepresentable in the target encoding are dropped: Node's\n // Buffer substitutes them with `?` (0x3F), and including those would cause\n // literal `?` bytes in the input to be trimmed under `latin1`/`ascii`.\n const timchars = [\n // Basic Latin\n 0x0020, // [Space](https://www.fileformat.info/info/unicode/char/0020/index.htm)\n 0x0009, // [CHARACTER TABULATION (HT)](https://www.fileformat.info/info/unicode/char/0009/index.htm)\n 0x000a, // [LINE FEED (LF)](https://www.fileformat.info/info/unicode/char/000a/index.htm)\n 0x000d, // [CARRIAGE RETURN (CR)](https://www.fileformat.info/info/unicode/char/000d/index.htm)\n 0x000c, // [FORM FEED (FF)](https://www.fileformat.info/info/unicode/char/000c/index.htm)\n 0x000b, // [LINE TABULATION (VT)](https://www.fileformat.info/info/unicode/char/000b/index.htm)\n // Latin-1 Supplement\n 0x00a0, // [NO-BREAK SPACE (NBSP)](https://www.fileformat.info/info/unicode/char/00a0/index.htm)\n // Ogham\n 0x1680, // [OGHAM SPACE MARK](https://www.fileformat.info/info/unicode/char/1680/index.htm)\n // General Punctuation\n 0x2000, // [EN QUAD](https://www.fileformat.info/info/unicode/char/2000/index.htm)\n 0x2001, // [EM QUAD](https://www.fileformat.info/info/unicode/char/2001/index.htm)\n 0x2002, // [EN SPACE](https://www.fileformat.info/info/unicode/char/2002/index.htm)\n 0x2003, // [EM SPACE](https://www.fileformat.info/info/unicode/char/2003/index.htm)\n 0x2004, // [THREE-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2004/index.htm)\n 0x2005, // [FOUR-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2005/index.htm)\n 0x2006, // [SIX-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2006/index.htm)\n 0x2007, // [FIGURE SPACE](https://www.fileformat.info/info/unicode/char/2007/index.htm)\n 0x2008, // [PUNCTUATION SPACE](https://www.fileformat.info/info/unicode/char/2008/index.htm)\n 0x2009, // [THIN SPACE](https://www.fileformat.info/info/unicode/char/2009/index.htm)\n 0x200a, // [HAIR SPACE](https://www.fileformat.info/info/unicode/char/200a/index.htm)\n 0x2028, // [LINE SEPARATOR](https://www.fileformat.info/info/unicode/char/2028/index.htm)\n 0x2029, // [PARAGRAPH SEPARATOR](https://www.fileformat.info/info/unicode/char/2029/index.htm)\n 0x202f, // [NARROW NO-BREAK SPACE (NNBSP)](https://www.fileformat.info/info/unicode/char/202f/index.htm)\n 0x205f, // [MEDIUM MATHEMATICAL SPACE (MMSP)](https://www.fileformat.info/info/unicode/char/205f/index.htm)\n 0x3000, // [IDEOGRAPHIC SPACE](https://www.fileformat.info/info/unicode/char/3000/index.htm)\n 0xfeff, // [ZERO WIDTH NO-BREAK SPACE (BOM)](https://www.fileformat.info/info/unicode/char/feff/index.htm)\n ].reduce((acc, codepoint) => {\n const encoded = Buffer.from(\n String.fromCharCode(codepoint),\n options.encoding,\n );\n if (codepoint !== 0x3f && encoded.length === 1 && encoded[0] === 0x3f) {\n return acc;\n }\n acc.push(encoded);\n return acc;\n }, []);\n // First-byte lookup table for `__isCharTrimable`. Non-whitespace bytes\n // (the common case) bail out in O(1) without scanning every timchar.\n const timcharFirstBytes = new Uint8Array(256);\n for (const t of timchars) timcharFirstBytes[t[0]] = 1;\n return {\n bomSkipped: false,\n bufBytesStart: 0,\n castField: options.cast_function,\n commenting: false,\n delimiterBufPrevious: undefined,\n delimiterDiscovered: false,\n // Current error encountered by a record\n error: undefined,\n enabled: options.from_line === 1,\n escaping: false,\n escapeIsQuote:\n isBuffer$1(options.escape) &&\n isBuffer$1(options.quote) &&\n Buffer.compare(options.escape, options.quote) === 0,\n // columns can be `false`, `true`, `Array`\n expectedRecordLength: Array.isArray(options.columns)\n ? options.columns.length\n : undefined,\n field: new ResizeableBuffer(20),\n firstLineToHeaders: options.cast_first_line_to_header,\n needMoreDataSize: Math.max(\n // Skip if the remaining buffer smaller than comment\n options.comment !== null ? options.comment.length : 0,\n // Skip if the remaining buffer can be delimiter\n ...(options.delimiter\n ? options.delimiter.map((delimiter) => delimiter.length)\n : []),\n // Auto discovery of delimiter is limited to 1 character\n options.delimiter_auto ? 1 : 0,\n // Skip if the remaining buffer can be escape sequence\n options.quote !== null ? options.quote.length : 0,\n // Skip if the remaining buffer can be a multi-byte trim character\n ...timchars.map((t) => t.length),\n ),\n previousBuf: undefined,\n quoting: false,\n stop: false,\n rawBuffer: new ResizeableBuffer(100),\n record: [],\n recordHasError: false,\n record_length: 0,\n recordDelimiterMaxLength:\n options.record_delimiter.length === 0\n ? 0\n : Math.max(...options.record_delimiter.map((v) => v.length)),\n trimChars: [\n Buffer.from(\" \", options.encoding)[0],\n Buffer.from(\"\\t\", options.encoding)[0],\n ],\n wasQuoting: false,\n wasRowDelimiter: false,\n timchars: timchars,\n timcharFirstBytes: timcharFirstBytes,\n };\n};\n\nconst underscore$1 = function (str) {\n return str.replace(/([A-Z])/g, function (_, match) {\n return \"_\" + match.toLowerCase();\n });\n};\n\nconst normalize_options$1 = function (opts) {\n const options = {};\n // Merge with user options\n for (const opt in opts) {\n options[underscore$1(opt)] = opts[opt];\n }\n // Normalize option `encoding`\n // Note: defined first because other options depends on it\n // to convert chars/strings into buffers.\n if (options.encoding === undefined || options.encoding === true) {\n options.encoding = \"utf8\";\n } else if (options.encoding === null || options.encoding === false) {\n options.encoding = null;\n } else if (\n typeof options.encoding !== \"string\" &&\n options.encoding !== null\n ) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_ENCODING\",\n [\n \"Invalid option encoding:\",\n \"encoding must be a string or null to return a buffer,\",\n `got ${JSON.stringify(options.encoding)}`,\n ],\n options,\n );\n }\n // Normalize option `bom`\n if (\n options.bom === undefined ||\n options.bom === null ||\n options.bom === false\n ) {\n options.bom = false;\n } else if (options.bom !== true) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_BOM\",\n [\n \"Invalid option bom:\",\n \"bom must be true,\",\n `got ${JSON.stringify(options.bom)}`,\n ],\n options,\n );\n }\n // Normalize option `cast`\n options.cast_function = null;\n if (\n options.cast === undefined ||\n options.cast === null ||\n options.cast === false ||\n options.cast === \"\"\n ) {\n options.cast = undefined;\n } else if (typeof options.cast === \"function\") {\n options.cast_function = options.cast;\n options.cast = true;\n } else if (options.cast !== true) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_CAST\",\n [\n \"Invalid option cast:\",\n \"cast must be true or a function,\",\n `got ${JSON.stringify(options.cast)}`,\n ],\n options,\n );\n }\n // Normalize option `cast_date`\n if (\n options.cast_date === undefined ||\n options.cast_date === null ||\n options.cast_date === false ||\n options.cast_date === \"\"\n ) {\n options.cast_date = false;\n } else if (options.cast_date === true) {\n options.cast_date = function (value) {\n const date = Date.parse(value);\n return !isNaN(date) ? new Date(date) : value;\n };\n } else if (typeof options.cast_date !== \"function\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_CAST_DATE\",\n [\n \"Invalid option cast_date:\",\n \"cast_date must be true or a function,\",\n `got ${JSON.stringify(options.cast_date)}`,\n ],\n options,\n );\n }\n // Normalize option `columns`\n options.cast_first_line_to_header = undefined;\n if (options.columns === true) {\n // Fields in the first line are converted as-is to columns\n options.cast_first_line_to_header = undefined;\n } else if (typeof options.columns === \"function\") {\n options.cast_first_line_to_header = options.columns;\n options.columns = true;\n } else if (Array.isArray(options.columns)) {\n options.columns = normalize_columns_array(options.columns);\n } else if (\n options.columns === undefined ||\n options.columns === null ||\n options.columns === false\n ) {\n options.columns = false;\n } else {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_COLUMNS\",\n [\n \"Invalid option columns:\",\n \"expect an array, a function or true,\",\n `got ${JSON.stringify(options.columns)}`,\n ],\n options,\n );\n }\n // Normalize option `group_columns_by_name`\n if (\n options.group_columns_by_name === undefined ||\n options.group_columns_by_name === null ||\n options.group_columns_by_name === false\n ) {\n options.group_columns_by_name = false;\n } else if (options.group_columns_by_name !== true) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME\",\n [\n \"Invalid option group_columns_by_name:\",\n \"expect an boolean,\",\n `got ${JSON.stringify(options.group_columns_by_name)}`,\n ],\n options,\n );\n } else if (options.columns === false) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME\",\n [\n \"Invalid option group_columns_by_name:\",\n \"the `columns` mode must be activated.\",\n ],\n options,\n );\n }\n // Normalize option `comment`\n if (\n options.comment === undefined ||\n options.comment === null ||\n options.comment === false ||\n options.comment === \"\"\n ) {\n options.comment = null;\n } else {\n if (typeof options.comment === \"string\") {\n options.comment = Buffer.from(options.comment, options.encoding);\n }\n if (!isBuffer$1(options.comment)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_COMMENT\",\n [\n \"Invalid option comment:\",\n \"comment must be a buffer or a string,\",\n `got ${JSON.stringify(options.comment)}`,\n ],\n options,\n );\n }\n }\n // Normalize option `comment_no_infix`\n if (\n options.comment_no_infix === undefined ||\n options.comment_no_infix === null ||\n options.comment_no_infix === false\n ) {\n options.comment_no_infix = false;\n } else if (options.comment_no_infix !== true) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_COMMENT\",\n [\n \"Invalid option comment_no_infix:\",\n \"value must be a boolean,\",\n `got ${JSON.stringify(options.comment_no_infix)}`,\n ],\n options,\n );\n }\n // Normalize option `delimiter_auto`\n if (\n options.delimiter_auto === undefined ||\n options.delimiter_auto === null ||\n options.delimiter_auto === false\n ) {\n options.delimiter_auto = false;\n } else if (options.delimiter_auto === true) {\n options.delimiter_auto = {};\n } else if (!is_object$1(options.delimiter_auto)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"delimiter_auto must be a boolean or a configuration object,\",\n `got ${JSON.stringify(options.delimiter_auto)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto) {\n if (options.delimiter_auto.preferred === undefined)\n options.delimiter_auto.preferred = {\n [\",\".charCodeAt(0)]: 1.8,\n [\"\\t\".charCodeAt(0)]: 1.8,\n [\";\".charCodeAt(0)]: 1.6,\n [\" \".charCodeAt(0)]: 1.6,\n [\":\".charCodeAt(0)]: 1.5,\n [\".\".charCodeAt(0)]: 1.4,\n [\"/\".charCodeAt(0)]: 1.4,\n };\n else if (!is_object$1(options.delimiter_auto.preferred)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"preferred must be an object,\",\n `got ${JSON.stringify(options.delimiter_auto.preferred)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto.score === undefined)\n options.delimiter_auto.score = (info, options) => {\n return (\n (info.total - info.std) * (options.preferred[info.char_code] || 1)\n );\n };\n else if (typeof options.delimiter_auto.score !== \"function\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"score must be a function,\",\n `got ${JSON.stringify(options.delimiter_auto.score)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto.size === undefined)\n options.delimiter_auto.size = 2048;\n else if (typeof options.delimiter_auto.size !== \"number\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"size must be a number,\",\n `got ${JSON.stringify(options.delimiter_auto.size)}`,\n ],\n options,\n );\n }\n }\n // Normalize option `delimiter`\n const delimiter_json = JSON.stringify(options.delimiter);\n if (options.delimiter_auto !== false) {\n options.delimiter = [];\n }\n if (!Array.isArray(options.delimiter)) {\n if (\n options.delimiter === undefined ||\n options.delimiter === null ||\n options.delimiter === false\n ) {\n options.delimiter = Buffer.from(\",\", options.encoding);\n }\n options.delimiter = [options.delimiter];\n }\n options.delimiter = options.delimiter.map(function (delimiter) {\n if (typeof delimiter === \"string\") {\n delimiter = Buffer.from(delimiter, options.encoding);\n }\n if (!isBuffer$1(delimiter) || delimiter.length === 0) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_DELIMITER\",\n [\n \"Invalid option delimiter:\",\n \"delimiter must be a non empty string or buffer or array of string|buffer,\",\n `got ${delimiter_json}`,\n ],\n options,\n );\n }\n return delimiter;\n });\n // Normalize option `escape`\n if (options.escape === undefined || options.escape === true) {\n options.escape = Buffer.from('\"', options.encoding);\n } else if (typeof options.escape === \"string\") {\n options.escape = Buffer.from(options.escape, options.encoding);\n } else if (options.escape === null || options.escape === false) {\n options.escape = null;\n }\n if (options.escape !== null) {\n if (!isBuffer$1(options.escape)) {\n throw new Error(\n `Invalid Option: escape must be a buffer, a string or a boolean, got ${JSON.stringify(options.escape)}`,\n );\n }\n }\n // Normalize option `from`\n if (options.from === undefined || options.from === null) {\n options.from = 1;\n } else {\n if (typeof options.from === \"string\" && /\\d+/.test(options.from)) {\n options.from = parseInt(options.from);\n }\n if (Number.isInteger(options.from)) {\n if (options.from < 0) {\n throw new Error(\n `Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`,\n );\n }\n }\n // Normalize option `from_line`\n if (options.from_line === undefined || options.from_line === null) {\n options.from_line = 1;\n } else {\n if (\n typeof options.from_line === \"string\" &&\n /\\d+/.test(options.from_line)\n ) {\n options.from_line = parseInt(options.from_line);\n }\n if (Number.isInteger(options.from_line)) {\n if (options.from_line <= 0) {\n throw new Error(\n `Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`,\n );\n }\n }\n // Normalize options `ignore_last_delimiters`\n if (\n options.ignore_last_delimiters === undefined ||\n options.ignore_last_delimiters === null\n ) {\n options.ignore_last_delimiters = false;\n } else if (typeof options.ignore_last_delimiters === \"number\") {\n options.ignore_last_delimiters = Math.floor(options.ignore_last_delimiters);\n if (options.ignore_last_delimiters === 0) {\n options.ignore_last_delimiters = false;\n }\n } else if (typeof options.ignore_last_delimiters !== \"boolean\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS\",\n [\n \"Invalid option `ignore_last_delimiters`:\",\n \"the value must be a boolean value or an integer,\",\n `got ${JSON.stringify(options.ignore_last_delimiters)}`,\n ],\n options,\n );\n }\n if (options.ignore_last_delimiters === true && options.columns === false) {\n throw new CsvError$1(\n \"CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS\",\n [\n \"The option `ignore_last_delimiters`\",\n \"requires the activation of the `columns` option\",\n ],\n options,\n );\n }\n // Normalize option `info`\n if (\n options.info === undefined ||\n options.info === null ||\n options.info === false\n ) {\n options.info = false;\n } else if (options.info !== true) {\n throw new Error(\n `Invalid Option: info must be true, got ${JSON.stringify(options.info)}`,\n );\n }\n // Normalize option `max_record_size`\n if (\n options.max_record_size === undefined ||\n options.max_record_size === null ||\n options.max_record_size === false\n ) {\n options.max_record_size = 0;\n } else if (\n Number.isInteger(options.max_record_size) &&\n options.max_record_size >= 0\n ) ; else if (\n typeof options.max_record_size === \"string\" &&\n /\\d+/.test(options.max_record_size)\n ) {\n options.max_record_size = parseInt(options.max_record_size);\n } else {\n throw new Error(\n `Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`,\n );\n }\n // Normalize option `objname`\n if (\n options.objname === undefined ||\n options.objname === null ||\n options.objname === false\n ) {\n options.objname = undefined;\n } else if (isBuffer$1(options.objname)) {\n if (options.objname.length === 0) {\n throw new Error(`Invalid Option: objname must be a non empty buffer`);\n }\n if (options.encoding === null) ; else {\n options.objname = options.objname.toString(options.encoding);\n }\n } else if (typeof options.objname === \"string\") {\n if (options.objname.length === 0) {\n throw new Error(`Invalid Option: objname must be a non empty string`);\n }\n // Great, nothing to do\n } else if (typeof options.objname === \"number\") ; else {\n throw new Error(\n `Invalid Option: objname must be a string or a buffer, got ${options.objname}`,\n );\n }\n if (options.objname !== undefined) {\n if (typeof options.objname === \"number\") {\n if (options.columns !== false) {\n throw Error(\n \"Invalid Option: objname index cannot be combined with columns or be defined as a field\",\n );\n }\n } else {\n // A string or a buffer\n if (options.columns === false) {\n throw Error(\n \"Invalid Option: objname field must be combined with columns or be defined as an index\",\n );\n }\n }\n }\n // Normalize option `on_record`\n if (options.on_record === undefined || options.on_record === null) {\n options.on_record = undefined;\n } else if (typeof options.on_record !== \"function\") {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_ON_RECORD\",\n [\n \"Invalid option `on_record`:\",\n \"expect a function,\",\n `got ${JSON.stringify(options.on_record)}`,\n ],\n options,\n );\n }\n // Normalize option `on_skip`\n // options.on_skip ??= (err, chunk) => {\n // this.emit('skip', err, chunk);\n // };\n if (\n options.on_skip !== undefined &&\n options.on_skip !== null &&\n typeof options.on_skip !== \"function\"\n ) {\n throw new Error(\n `Invalid Option: on_skip must be a function, got ${JSON.stringify(options.on_skip)}`,\n );\n }\n // Normalize option `quote`\n if (\n options.quote === null ||\n options.quote === false ||\n options.quote === \"\"\n ) {\n options.quote = null;\n } else {\n if (options.quote === undefined || options.quote === true) {\n options.quote = Buffer.from('\"', options.encoding);\n } else if (typeof options.quote === \"string\") {\n options.quote = Buffer.from(options.quote, options.encoding);\n }\n if (!isBuffer$1(options.quote)) {\n throw new Error(\n `Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`,\n );\n }\n }\n // Normalize option `raw`\n if (\n options.raw === undefined ||\n options.raw === null ||\n options.raw === false\n ) {\n options.raw = false;\n } else if (options.raw !== true) {\n throw new Error(\n `Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`,\n );\n }\n // Normalize option `record_delimiter`\n if (options.record_delimiter === undefined) {\n options.record_delimiter = [];\n } else if (\n typeof options.record_delimiter === \"string\" ||\n isBuffer$1(options.record_delimiter)\n ) {\n if (options.record_delimiter.length === 0) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a non empty string or buffer,\",\n `got ${JSON.stringify(options.record_delimiter)}`,\n ],\n options,\n );\n }\n options.record_delimiter = [options.record_delimiter];\n } else if (!Array.isArray(options.record_delimiter)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a string, a buffer or array of string|buffer,\",\n `got ${JSON.stringify(options.record_delimiter)}`,\n ],\n options,\n );\n }\n options.record_delimiter = options.record_delimiter.map(function (rd, i) {\n if (typeof rd !== \"string\" && !isBuffer$1(rd)) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a string, a buffer or array of string|buffer\",\n `at index ${i},`,\n `got ${JSON.stringify(rd)}`,\n ],\n options,\n );\n } else if (rd.length === 0) {\n throw new CsvError$1(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a non empty string or buffer\",\n `at index ${i},`,\n `got ${JSON.stringify(rd)}`,\n ],\n options,\n );\n }\n if (typeof rd === \"string\") {\n rd = Buffer.from(rd, options.encoding);\n }\n return rd;\n });\n // Normalize option `relax_column_count`\n if (typeof options.relax_column_count === \"boolean\") ; else if (\n options.relax_column_count === undefined ||\n options.relax_column_count === null\n ) {\n options.relax_column_count = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`,\n );\n }\n if (typeof options.relax_column_count_less === \"boolean\") ; else if (\n options.relax_column_count_less === undefined ||\n options.relax_column_count_less === null\n ) {\n options.relax_column_count_less = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`,\n );\n }\n if (typeof options.relax_column_count_more === \"boolean\") ; else if (\n options.relax_column_count_more === undefined ||\n options.relax_column_count_more === null\n ) {\n options.relax_column_count_more = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`,\n );\n }\n // Normalize option `relax_quotes`\n if (typeof options.relax_quotes === \"boolean\") ; else if (\n options.relax_quotes === undefined ||\n options.relax_quotes === null\n ) {\n options.relax_quotes = false;\n } else {\n throw new Error(\n `Invalid Option: relax_quotes must be a boolean, got ${JSON.stringify(options.relax_quotes)}`,\n );\n }\n // Normalize option `skip_empty_lines`\n if (typeof options.skip_empty_lines === \"boolean\") ; else if (\n options.skip_empty_lines === undefined ||\n options.skip_empty_lines === null\n ) {\n options.skip_empty_lines = false;\n } else {\n throw new Error(\n `Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`,\n );\n }\n // Normalize option `skip_records_with_empty_values`\n if (typeof options.skip_records_with_empty_values === \"boolean\") ; else if (\n options.skip_records_with_empty_values === undefined ||\n options.skip_records_with_empty_values === null\n ) {\n options.skip_records_with_empty_values = false;\n } else {\n throw new Error(\n `Invalid Option: skip_records_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_records_with_empty_values)}`,\n );\n }\n // Normalize option `skip_records_with_error`\n if (typeof options.skip_records_with_error === \"boolean\") ; else if (\n options.skip_records_with_error === undefined ||\n options.skip_records_with_error === null\n ) {\n options.skip_records_with_error = false;\n } else {\n throw new Error(\n `Invalid Option: skip_records_with_error must be a boolean, got ${JSON.stringify(options.skip_records_with_error)}`,\n );\n }\n // Normalize option `rtrim`\n if (\n options.rtrim === undefined ||\n options.rtrim === null ||\n options.rtrim === false\n ) {\n options.rtrim = false;\n } else if (options.rtrim !== true) {\n throw new Error(\n `Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`,\n );\n }\n // Normalize option `ltrim`\n if (\n options.ltrim === undefined ||\n options.ltrim === null ||\n options.ltrim === false\n ) {\n options.ltrim = false;\n } else if (options.ltrim !== true) {\n throw new Error(\n `Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`,\n );\n }\n // Normalize option `trim`\n if (\n options.trim === undefined ||\n options.trim === null ||\n options.trim === false\n ) {\n options.trim = false;\n } else if (options.trim !== true) {\n throw new Error(\n `Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`,\n );\n }\n // Normalize options `trim`, `ltrim` and `rtrim`\n if (options.trim === true && opts.ltrim !== false) {\n options.ltrim = true;\n } else if (options.ltrim !== true) {\n options.ltrim = false;\n }\n if (options.trim === true && opts.rtrim !== false) {\n options.rtrim = true;\n } else if (options.rtrim !== true) {\n options.rtrim = false;\n }\n // Normalize option `to`\n if (options.to === undefined || options.to === null) {\n options.to = -1;\n } else if (options.to !== -1) {\n if (typeof options.to === \"string\" && /\\d+/.test(options.to)) {\n options.to = parseInt(options.to);\n }\n if (Number.isInteger(options.to)) {\n if (options.to <= 0) {\n throw new Error(\n `Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`,\n );\n }\n }\n // Normalize option `to_line`\n if (options.to_line === undefined || options.to_line === null) {\n options.to_line = -1;\n } else if (options.to_line !== -1) {\n if (typeof options.to_line === \"string\" && /\\d+/.test(options.to_line)) {\n options.to_line = parseInt(options.to_line);\n }\n if (Number.isInteger(options.to_line)) {\n if (options.to_line <= 0) {\n throw new Error(\n `Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`,\n );\n }\n }\n return options;\n};\n\n// Discussed in [issue #400](https://github.com/adaltas/node-csv/issues/400)\n// See https://github.com/python/cpython/blob/ea1b1c579f600cc85d145c60862b2e6b98701b24/Lib/csv.py#L349\nconst delimiter_discover = function (records, options) {\n // Normalize the configuration\n if (!options) {\n ({ delimiter_auto: options } = normalize_options$1({ delimiter_auto: true }));\n }\n // Convert String to Buffer\n if (typeof records === \"string\") {\n records = Buffer.from(records);\n }\n // Convert Buffer to an array of records\n if (isBuffer$1(records)) {\n records = ((data) => {\n const records = [];\n const parser = transform$1({ delimiter: [] });\n const push = (record) => records.push(record);\n const close = () => {};\n const error = parser.parse(data, true, push, close);\n if (error !== undefined) throw error;\n return records;\n })(records);\n }\n // Info array initialization, 127 entries, one per char code\n const info = Array(127)\n .fill()\n .map(() => ({ lines: [] }));\n // Traverse each records, count occurences per char code\n records.map(([record], line) => {\n for (let i = 0, l = record.length; i < l; i++) {\n // Count the character frequency\n const code = record.charCodeAt(i);\n if (info[code].lines[line] === undefined) info[code].lines[line] = 0;\n info[code].lines[line]++;\n }\n });\n // Traverse each char code, compute the score\n info.map((info, i) => {\n info.char_code = i;\n info.std = std(info.lines);\n info.total = info.lines.reduce((acc, val) => acc + val, 0);\n info.preferred = !!options.preferred[i];\n info.score = options.score(info, options);\n });\n // Extract the dominant character\n const result = info.reduce(\n (acc, info) => (acc.score > info.score ? acc : info),\n {},\n );\n return String.fromCharCode(result.char_code);\n};\n\nconst std = function (array) {\n const n = array.length;\n if (n === 0) return 0;\n const mean = array.reduce((a, b) => a + b) / n;\n return Math.sqrt(\n array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n,\n );\n};\n\nconst isRecordEmpty = function (record) {\n return record.every(\n (field) =>\n field == null || (field.toString && field.toString().trim() === \"\"),\n );\n};\n\nconst cr = 13; // `\\r`, carriage return, 0x0D in hexadécimal, 13 in decimal\nconst nl = 10; // `\\n`, newline, 0x0A in hexadecimal, 10 in decimal\n\nconst boms = {\n // Note, the following are equals:\n // Buffer.from(\"\\ufeff\")\n // Buffer.from([239, 187, 191])\n // Buffer.from('EFBBBF', 'hex')\n utf8: Buffer.from([239, 187, 191]),\n // Note, the following are equals:\n // Buffer.from \"\\ufeff\", 'utf16le\n // Buffer.from([255, 254])\n utf16le: Buffer.from([255, 254]),\n};\n\nconst transform$1 = function (original_options = {}) {\n const info = {\n bytes: 0,\n bytes_records: 0,\n comment_lines: 0,\n empty_lines: 0,\n invalid_field_length: 0,\n lines: 1,\n records: 0,\n };\n const options = normalize_options$1(original_options);\n return {\n info: info,\n original_options: original_options,\n options: options,\n state: init_state(options),\n __needMoreData: function (i, bufLen, end) {\n if (end) return false;\n const { encoding, escape, quote } = this.options;\n const { quoting, needMoreDataSize, recordDelimiterMaxLength } =\n this.state;\n const numOfCharLeft = bufLen - i - 1;\n const requiredLength = Math.max(\n needMoreDataSize,\n // Skip if the remaining buffer smaller than record delimiter\n // If \"record_delimiter\" is yet to be discovered:\n // 1. It is equals to `[]` and \"recordDelimiterMaxLength\" equals `0`\n // 2. We set the length to windows line ending in the current encoding\n // Note, that encoding is known from user or bom discovery at that point\n // recordDelimiterMaxLength,\n recordDelimiterMaxLength === 0\n ? Buffer.from(\"\\r\\n\", encoding).length\n : recordDelimiterMaxLength,\n // Skip if remaining buffer can be an escaped quote\n quoting ? (escape === null ? 0 : escape.length) + quote.length : 0,\n // Skip if remaining buffer can be record delimiter following the closing quote\n quoting ? quote.length + recordDelimiterMaxLength : 0,\n );\n return numOfCharLeft < requiredLength;\n },\n // Central parser implementation\n parse: function (nextBuf, end, push, close) {\n const {\n bom,\n comment_no_infix,\n delimiter_auto,\n encoding,\n from_line,\n ltrim,\n max_record_size,\n raw,\n relax_quotes,\n rtrim,\n skip_empty_lines,\n to,\n to_line,\n } = this.options;\n let { comment, escape, quote, record_delimiter } = this.options;\n const {\n bomSkipped,\n delimiterDiscovered,\n delimiterBufPrevious,\n rawBuffer,\n escapeIsQuote,\n } = this.state;\n // Automatic delimiter discovery\n if (!delimiterDiscovered && delimiter_auto) {\n let delimiterBuf;\n if (delimiterBufPrevious === undefined) {\n delimiterBuf = nextBuf;\n } else if (\n delimiterBufPrevious !== undefined &&\n nextBuf === undefined\n ) {\n delimiterBuf = delimiterBufPrevious;\n } else {\n delimiterBuf = Buffer.concat([delimiterBufPrevious, nextBuf]);\n }\n // Ensure that nextBuf is not concatenated a second time during buffer reconciliation\n nextBuf = undefined;\n // this.delimiterBufPrevious = delimiterBuf;\n if (end || delimiterBuf.length > delimiter_auto.size) {\n this.options.delimiter = [\n Buffer.from(\n delimiter_discover(delimiterBuf, this.options.delimiter_auto),\n ),\n ];\n this.state.previousBuf = delimiterBuf;\n this.state.delimiterBufPrevious = undefined;\n this.state.delimiterDiscovered = true;\n } else {\n this.state.delimiterBufPrevious = delimiterBuf;\n return;\n }\n }\n // Previous buffers reconciliation\n const { previousBuf } = this.state;\n let buf;\n if (previousBuf === undefined) {\n if (nextBuf === undefined) {\n // Handle empty string\n close();\n return;\n } else {\n buf = nextBuf;\n }\n } else if (previousBuf !== undefined && nextBuf === undefined) {\n buf = previousBuf;\n } else {\n buf = Buffer.concat([previousBuf, nextBuf]);\n }\n // Handle UTF BOM\n if (bomSkipped === false) {\n if (bom === false) {\n this.state.bomSkipped = true;\n } else if (buf.length < 3) {\n // No enough data\n if (end === false) {\n // Wait for more data\n this.state.previousBuf = buf;\n return;\n }\n } else {\n for (const encoding in boms) {\n if (boms[encoding].compare(buf, 0, boms[encoding].length) === 0) {\n // Skip BOM\n const bomLength = boms[encoding].length;\n this.state.bufBytesStart += bomLength;\n buf = buf.slice(bomLength);\n // Renormalize original options with the new encoding\n const options = normalize_options$1({\n ...this.original_options,\n encoding: encoding,\n });\n // Properties are merged with the existing options instance\n for (const key in options) {\n this.options[key] = options[key];\n }\n // Options will re-evaluate the Buffer with the new encoding\n ({ comment, escape, quote } = this.options);\n break;\n }\n }\n this.state.bomSkipped = true;\n }\n }\n const bufLen = buf.length;\n let pos;\n for (pos = 0; pos < bufLen; pos++) {\n // Ensure we get enough space to look ahead\n // There should be a way to move this out of the loop\n if (this.__needMoreData(pos, bufLen, end)) {\n break;\n }\n if (this.state.wasRowDelimiter === true) {\n this.info.lines++;\n this.state.wasRowDelimiter = false;\n }\n if (to_line !== -1 && this.info.lines > to_line) {\n this.state.stop = true;\n close();\n return;\n }\n // Auto discovery of record_delimiter, unix, mac and windows supported\n if (this.state.quoting === false && record_delimiter.length === 0) {\n const record_delimiterCount = this.__autoDiscoverRecordDelimiter(\n buf,\n pos,\n );\n if (record_delimiterCount) {\n record_delimiter = this.options.record_delimiter;\n }\n }\n const chr = buf[pos];\n if (raw === true) {\n rawBuffer.append(chr);\n }\n if (\n (chr === cr || chr === nl) &&\n this.state.wasRowDelimiter === false\n ) {\n this.state.wasRowDelimiter = true;\n }\n // Previous char was a valid escape char\n // treat the current char as a regular char\n if (this.state.escaping === true) {\n this.state.escaping = false;\n } else {\n // Escape is only active inside quoted fields\n // We are quoting, the char is an escape chr and there is a chr to escape\n // if(escape !== null && this.state.quoting === true && chr === escape && pos + 1 < bufLen){\n if (\n escape !== null &&\n this.state.quoting === true &&\n this.__isEscape(buf, pos, chr) &&\n pos + escape.length < bufLen\n ) {\n if (escapeIsQuote) {\n if (this.__isQuote(buf, pos + escape.length)) {\n this.state.escaping = true;\n pos += escape.length - 1;\n continue;\n }\n } else {\n this.state.escaping = true;\n pos += escape.length - 1;\n continue;\n }\n }\n // Not currently escaping and chr is a quote\n // TODO: need to compare bytes instead of single char\n if (this.state.commenting === false && this.__isQuote(buf, pos)) {\n if (this.state.quoting === true) {\n const nextChr = buf[pos + quote.length];\n const isNextChrTrimable =\n rtrim && this.__isCharTrimable(buf, pos + quote.length);\n const isNextChrComment =\n comment !== null &&\n this.__compareBytes(comment, buf, pos + quote.length, nextChr);\n const isNextChrDelimiter = this.__isDelimiter(\n buf,\n pos + quote.length,\n nextChr,\n );\n const isNextChrRecordDelimiter =\n record_delimiter.length === 0\n ? this.__autoDiscoverRecordDelimiter(buf, pos + quote.length)\n : this.__isRecordDelimiter(nextChr, buf, pos + quote.length);\n // Escape a quote\n // Treat next char as a regular character\n if (\n escape !== null &&\n this.__isEscape(buf, pos, chr) &&\n this.__isQuote(buf, pos + escape.length)\n ) {\n pos += escape.length - 1;\n } else if (\n !nextChr ||\n isNextChrDelimiter ||\n isNextChrRecordDelimiter ||\n isNextChrComment ||\n isNextChrTrimable\n ) {\n this.state.quoting = false;\n this.state.wasQuoting = true;\n pos += quote.length - 1;\n continue;\n } else if (relax_quotes === false) {\n const err = this.__error(\n new CsvError$1(\n \"CSV_INVALID_CLOSING_QUOTE\",\n [\n \"Invalid Closing Quote:\",\n `got \"${String.fromCharCode(nextChr)}\"`,\n `at line ${this.info.lines}`,\n \"instead of delimiter, record delimiter, trimable character\",\n \"(if activated) or comment\",\n ],\n this.options,\n this.__infoField(),\n ),\n );\n if (err !== undefined) return err;\n } else {\n this.state.quoting = false;\n this.state.wasQuoting = true;\n this.state.field.prepend(quote);\n pos += quote.length - 1;\n }\n } else {\n if (this.state.field.length !== 0) {\n // In relax_quotes mode, treat opening quote preceded by chrs as regular\n if (relax_quotes === false) {\n const info = this.__infoField();\n const bom = Object.keys(boms)\n .map((b) =>\n boms[b].equals(this.state.field.toString()) ? b : false,\n )\n .filter(Boolean)[0];\n const err = this.__error(\n new CsvError$1(\n \"INVALID_OPENING_QUOTE\",\n [\n \"Invalid Opening Quote:\",\n `a quote is found on field ${JSON.stringify(info.column)} at line ${info.lines}, value is ${JSON.stringify(this.state.field.toString(encoding))}`,\n bom ? `(${bom} bom)` : undefined,\n ],\n this.options,\n info,\n {\n field: this.state.field,\n },\n ),\n );\n if (err !== undefined) return err;\n }\n } else {\n this.state.quoting = true;\n pos += quote.length - 1;\n continue;\n }\n }\n }\n if (this.state.quoting === false) {\n const recordDelimiterLength = this.__isRecordDelimiter(\n chr,\n buf,\n pos,\n );\n if (recordDelimiterLength !== 0) {\n // Do not emit comments which take a full line\n const skipCommentLine =\n this.state.commenting &&\n this.state.wasQuoting === false &&\n this.state.record.length === 0 &&\n this.state.field.length === 0;\n if (skipCommentLine) {\n this.info.comment_lines++;\n // Skip full comment line\n } else {\n // Activate records emission if above from_line\n if (\n this.state.enabled === false &&\n this.info.lines +\n (this.state.wasRowDelimiter === true ? 1 : 0) >=\n from_line\n ) {\n this.state.enabled = true;\n this.__resetField();\n this.__resetRecord();\n pos += recordDelimiterLength - 1;\n continue;\n }\n // Skip if line is empty and skip_empty_lines activated\n if (\n skip_empty_lines === true &&\n this.state.wasQuoting === false &&\n this.state.record.length === 0 &&\n this.state.field.length === 0\n ) {\n this.info.empty_lines++;\n pos += recordDelimiterLength - 1;\n continue;\n }\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n this.info.bytes =\n this.state.bufBytesStart + pos + recordDelimiterLength;\n const errRecord = this.__onRecord(push);\n if (errRecord !== undefined) return errRecord;\n if (to !== -1 && this.info.records >= to) {\n this.state.stop = true;\n close();\n return;\n }\n }\n this.state.commenting = false;\n pos += recordDelimiterLength - 1;\n continue;\n }\n if (this.state.commenting) {\n continue;\n }\n if (\n comment !== null &&\n (comment_no_infix === false ||\n (this.state.record.length === 0 &&\n this.state.field.length === 0))\n ) {\n const commentCount = this.__compareBytes(comment, buf, pos, chr);\n if (commentCount !== 0) {\n this.state.commenting = true;\n continue;\n }\n }\n const delimiterLength = this.__isDelimiter(buf, pos, chr);\n if (delimiterLength !== 0) {\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n pos += delimiterLength - 1;\n continue;\n }\n }\n }\n if (this.state.commenting === false) {\n if (\n max_record_size !== 0 &&\n this.state.record_length + this.state.field.length > max_record_size\n ) {\n return this.__error(\n new CsvError$1(\n \"CSV_MAX_RECORD_SIZE\",\n [\n \"Max Record Size:\",\n \"record exceed the maximum number of tolerated bytes\",\n `of ${max_record_size}`,\n `at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n }\n }\n const lappend =\n ltrim === false ||\n this.state.quoting === true ||\n this.state.field.length !== 0 ||\n !this.__isCharTrimable(buf, pos);\n // rtrim in non quoting is handle in __onField\n const rappend = rtrim === false || this.state.wasQuoting === false;\n if (lappend === true && rappend === true) {\n this.state.field.append(chr);\n } else if (rtrim === true && !this.__isCharTrimable(buf, pos)) {\n return this.__error(\n new CsvError$1(\n \"CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE\",\n [\n \"Invalid Closing Quote:\",\n \"found non trimable byte after quote\",\n `at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n } else {\n if (lappend === false) {\n pos += this.__isCharTrimable(buf, pos) - 1;\n }\n continue;\n }\n }\n if (end === true) {\n // Ensure we are not ending in a quoting state\n if (this.state.quoting === true) {\n const err = this.__error(\n new CsvError$1(\n \"CSV_QUOTE_NOT_CLOSED\",\n [\n \"Quote Not Closed:\",\n `the parsing is finished with an opening quote at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n if (err !== undefined) return err;\n } else {\n // Skip last line if it has no characters\n if (\n this.state.wasQuoting === true ||\n this.state.record.length !== 0 ||\n this.state.field.length !== 0\n ) {\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n const errRecord = this.__onRecord(push);\n if (errRecord !== undefined) return errRecord;\n } else if (this.state.wasRowDelimiter === true) {\n this.info.empty_lines++;\n } else if (this.state.commenting === true) {\n this.info.comment_lines++;\n }\n }\n } else {\n this.state.bufBytesStart += pos;\n this.state.previousBuf = buf.slice(pos);\n }\n if (this.state.wasRowDelimiter === true) {\n this.info.lines++;\n this.state.wasRowDelimiter = false;\n }\n },\n __onRecord: function (push) {\n const {\n columns,\n group_columns_by_name,\n encoding,\n info,\n from,\n relax_column_count,\n relax_column_count_less,\n relax_column_count_more,\n raw,\n skip_records_with_empty_values,\n } = this.options;\n const { enabled, record } = this.state;\n if (enabled === false) {\n return this.__resetRecord();\n }\n // Convert the first line into column names\n const recordLength = record.length;\n if (columns === true) {\n if (skip_records_with_empty_values === true && isRecordEmpty(record)) {\n this.__resetRecord();\n return;\n }\n return this.__firstLineToColumns(record);\n }\n if (columns === false && this.info.records === 0) {\n this.state.expectedRecordLength = recordLength;\n }\n if (recordLength !== this.state.expectedRecordLength) {\n const err =\n columns === false\n ? new CsvError$1(\n \"CSV_RECORD_INCONSISTENT_FIELDS_LENGTH\",\n [\n \"Invalid Record Length:\",\n `expect ${this.state.expectedRecordLength},`,\n `got ${recordLength} on line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n {\n record: record,\n },\n )\n : new CsvError$1(\n \"CSV_RECORD_INCONSISTENT_COLUMNS\",\n [\n \"Invalid Record Length:\",\n `columns length is ${columns.length},`, // rename columns\n `got ${recordLength} on line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n {\n record: record,\n },\n );\n if (\n relax_column_count === true ||\n (relax_column_count_less === true &&\n recordLength < this.state.expectedRecordLength) ||\n (relax_column_count_more === true &&\n recordLength > this.state.expectedRecordLength)\n ) {\n this.info.invalid_field_length++;\n this.state.error = err;\n // Error is undefined with skip_records_with_error\n } else {\n const finalErr = this.__error(err);\n if (finalErr) return finalErr;\n }\n }\n if (skip_records_with_empty_values === true && isRecordEmpty(record)) {\n this.__resetRecord();\n return;\n }\n if (this.state.recordHasError === true) {\n this.__resetRecord();\n this.state.recordHasError = false;\n return;\n }\n this.info.records++;\n if (from === 1 || this.info.records >= from) {\n const { objname } = this.options;\n // With columns, records are object\n if (columns !== false) {\n const obj = {};\n // Transform record array to an object\n for (let i = 0, l = record.length; i < l; i++) {\n if (columns[i] === undefined || columns[i].disabled) continue;\n // Turn duplicate columns into an array\n if (\n group_columns_by_name === true &&\n Object.hasOwn(obj, columns[i].name)\n ) {\n if (Array.isArray(obj[columns[i].name])) {\n obj[columns[i].name] = obj[columns[i].name].concat(record[i]);\n } else {\n obj[columns[i].name] = [obj[columns[i].name], record[i]];\n }\n } else {\n Object.defineProperty(obj, columns[i].name, {\n value: record[i],\n enumerable: true,\n writable: true,\n configurable: true,\n });\n }\n }\n // Without objname (default)\n if (raw === true || info === true) {\n const extRecord = Object.assign(\n { record: obj },\n raw === true\n ? { raw: this.state.rawBuffer.toString(encoding) }\n : {},\n info === true ? { info: this.__infoRecord() } : {},\n );\n const err = this.__push(\n objname === undefined ? extRecord : [obj[objname], extRecord],\n push,\n );\n if (err) {\n return err;\n }\n } else {\n const err = this.__push(\n objname === undefined ? obj : [obj[objname], obj],\n push,\n );\n if (err) {\n return err;\n }\n }\n // Without columns, records are array\n } else {\n if (raw === true || info === true) {\n const extRecord = Object.assign(\n { record: record },\n raw === true\n ? { raw: this.state.rawBuffer.toString(encoding) }\n : {},\n info === true ? { info: this.__infoRecord() } : {},\n );\n const err = this.__push(\n objname === undefined ? extRecord : [record[objname], extRecord],\n push,\n );\n if (err) {\n return err;\n }\n } else {\n const err = this.__push(\n objname === undefined ? record : [record[objname], record],\n push,\n );\n if (err) {\n return err;\n }\n }\n }\n }\n this.__resetRecord();\n },\n __firstLineToColumns: function (record) {\n const { firstLineToHeaders } = this.state;\n try {\n const headers =\n firstLineToHeaders === undefined\n ? record\n : firstLineToHeaders.call(null, record);\n if (!Array.isArray(headers)) {\n return this.__error(\n new CsvError$1(\n \"CSV_INVALID_COLUMN_MAPPING\",\n [\n \"Invalid Column Mapping:\",\n \"expect an array from column function,\",\n `got ${JSON.stringify(headers)}`,\n ],\n this.options,\n this.__infoField(),\n {\n headers: headers,\n },\n ),\n );\n }\n const normalizedHeaders = normalize_columns_array(headers);\n this.state.expectedRecordLength = normalizedHeaders.length;\n this.options.columns = normalizedHeaders;\n this.__resetRecord();\n return;\n } catch (err) {\n return err;\n }\n },\n __resetRecord: function () {\n if (this.options.raw === true) {\n this.state.rawBuffer.reset();\n }\n this.state.error = undefined;\n this.state.record = [];\n this.state.record_length = 0;\n },\n __onField: function () {\n const { cast, encoding, rtrim, max_record_size } = this.options;\n const { enabled, wasQuoting } = this.state;\n // Short circuit for the from_line options\n if (enabled === false) {\n return this.__resetField();\n }\n let field = this.state.field.toString(encoding);\n if (rtrim === true && wasQuoting === false) {\n field = field.trimRight();\n }\n if (cast === true) {\n const [err, f] = this.__cast(field);\n if (err !== undefined) return err;\n field = f;\n }\n this.state.record.push(field);\n // Increment record length if record size must not exceed a limit\n if (max_record_size !== 0 && typeof field === \"string\") {\n this.state.record_length += field.length;\n }\n this.__resetField();\n },\n __resetField: function () {\n this.state.field.reset();\n this.state.wasQuoting = false;\n },\n __push: function (record, push) {\n const { on_record } = this.options;\n if (on_record !== undefined) {\n const info = this.__infoRecord();\n try {\n record = on_record.call(null, record, info);\n } catch (err) {\n return err;\n }\n if (record === undefined || record === null) {\n return;\n }\n }\n this.info.bytes_records += this.info.bytes;\n push(record);\n },\n // Return a tuple with the error and the casted value\n __cast: function (field) {\n const { columns, relax_column_count } = this.options;\n const isColumns = Array.isArray(columns);\n // Dont loose time calling cast\n // because the final record is an object\n // and this field can't be associated to a key present in columns\n if (\n isColumns === true &&\n relax_column_count &&\n this.options.columns.length <= this.state.record.length\n ) {\n return [undefined, undefined];\n }\n if (this.state.castField !== null) {\n try {\n const info = this.__infoField();\n return [undefined, this.state.castField.call(null, field, info)];\n } catch (err) {\n return [err];\n }\n }\n if (this.__isFloat(field)) {\n return [undefined, parseFloat(field)];\n } else if (this.options.cast_date !== false) {\n const info = this.__infoField();\n return [undefined, this.options.cast_date.call(null, field, info)];\n }\n return [undefined, field];\n },\n __compareBytes: function (sourceBuf, targetBuf, targetPos, firstByte) {\n if (sourceBuf[0] !== firstByte) return 0;\n const sourceLength = sourceBuf.length;\n for (let i = 1; i < sourceLength; i++) {\n if (sourceBuf[i] !== targetBuf[targetPos + i]) return 0;\n }\n return sourceLength;\n },\n // Helper to test if a character is trimable\n __isCharTrimable: function (buf, pos) {\n const { timchars, timcharFirstBytes } = this.state;\n // Fast bail-out: non-whitespace bytes (the common case) are rejected\n // without scanning the full timchar list.\n const first = buf[pos];\n if (first === undefined || timcharFirstBytes[first] === 0) return 0;\n loop1: for (let i = 0; i < timchars.length; i++) {\n const timchar = timchars[i];\n for (let j = 0; j < timchar.length; j++) {\n if (timchar[j] !== buf[pos + j]) continue loop1;\n }\n return timchar.length;\n }\n return 0;\n },\n __isDelimiter: function (buf, pos, chr) {\n const { delimiter, ignore_last_delimiters } = this.options;\n if (\n ignore_last_delimiters === true &&\n this.state.record.length === this.options.columns.length - 1\n ) {\n return 0;\n } else if (\n ignore_last_delimiters !== false &&\n typeof ignore_last_delimiters === \"number\" &&\n this.state.record.length === ignore_last_delimiters - 1\n ) {\n return 0;\n }\n loop1: for (let i = 0; i < delimiter.length; i++) {\n const del = delimiter[i];\n if (del[0] === chr) {\n for (let j = 1; j < del.length; j++) {\n if (del[j] !== buf[pos + j]) continue loop1;\n }\n return del.length;\n }\n }\n return 0;\n },\n __isEscape: function (buf, pos, chr) {\n const { escape } = this.options;\n if (escape === null) return false;\n const l = escape.length;\n if (escape[0] === chr) {\n for (let i = 0; i < l; i++) {\n if (escape[i] !== buf[pos + i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n },\n __isFloat: function (value) {\n return value - parseFloat(value) + 1 >= 0; // Borrowed from jquery\n },\n // Keep it in case we implement the `cast_int` option\n // __isInt(value){\n // // return Number.isInteger(parseInt(value))\n // // return !isNaN( parseInt( obj ) );\n // return /^(\\-|\\+)?[1-9][0-9]*$/.test(value)\n // }\n __isQuote: function (buf, pos) {\n const { quote } = this.options;\n if (quote === null) return false;\n const l = quote.length;\n for (let i = 0; i < l; i++) {\n if (quote[i] !== buf[pos + i]) {\n return false;\n }\n }\n return true;\n },\n __isRecordDelimiter: function (chr, buf, pos) {\n const { record_delimiter } = this.options;\n const recordDelimiterLength = record_delimiter.length;\n loop1: for (let i = 0; i < recordDelimiterLength; i++) {\n const rd = record_delimiter[i];\n const rdLength = rd.length;\n if (rd[0] !== chr) {\n continue;\n }\n for (let j = 1; j < rdLength; j++) {\n if (rd[j] !== buf[pos + j]) {\n continue loop1;\n }\n }\n return rd.length;\n }\n return 0;\n },\n __autoDiscoverRecordDelimiter: function (buf, pos) {\n const { encoding } = this.options;\n // Note, we don't need to cache this information in state,\n // It is only called on the first line until we find out a suitable\n // record delimiter.\n const rds = [\n // Important, the windows line ending must be before mac os 9\n Buffer.from(\"\\r\\n\", encoding),\n Buffer.from(\"\\n\", encoding),\n Buffer.from(\"\\r\", encoding),\n ];\n loop: for (let i = 0; i < rds.length; i++) {\n const l = rds[i].length;\n for (let j = 0; j < l; j++) {\n if (rds[i][j] !== buf[pos + j]) {\n continue loop;\n }\n }\n this.options.record_delimiter.push(rds[i]);\n this.state.recordDelimiterMaxLength = rds[i].length;\n return rds[i].length;\n }\n return 0;\n },\n __error: function (msg) {\n const { encoding, raw, skip_records_with_error } = this.options;\n const err = typeof msg === \"string\" ? new Error(msg) : msg;\n if (skip_records_with_error) {\n this.state.recordHasError = true;\n if (this.options.on_skip !== undefined) {\n try {\n this.options.on_skip(\n err,\n raw ? this.state.rawBuffer.toString(encoding) : undefined,\n );\n } catch (err) {\n return err;\n }\n }\n // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined);\n return undefined;\n } else {\n return err;\n }\n },\n __infoDataSet: function () {\n return {\n ...this.info,\n columns: this.options.columns,\n };\n },\n __infoRecord: function () {\n const { columns, raw, encoding } = this.options;\n return {\n ...this.__infoDataSet(),\n bytes_records: this.info.bytes,\n error: this.state.error,\n header: columns === true,\n index: this.state.record.length,\n raw: raw ? this.state.rawBuffer.toString(encoding) : undefined,\n };\n },\n __infoField: function () {\n const { columns } = this.options;\n const isColumns = Array.isArray(columns);\n // Bytes records are only incremented when all records'fields are parsed\n const bytes_records = this.info.bytes_records;\n return {\n ...this.__infoRecord(),\n bytes_records: bytes_records,\n column:\n isColumns === true\n ? columns.length > this.state.record.length\n ? columns[this.state.record.length].name\n : null\n : this.state.record.length,\n quoting: this.state.wasQuoting,\n };\n },\n };\n};\n\nconst parse = function (data, opts = {}) {\n if (typeof data === \"string\") {\n data = Buffer.from(data);\n }\n const records = opts && opts.objname ? Object.create(null) : [];\n const parser = transform$1(opts);\n const push = (record) => {\n if (parser.options.objname === undefined) records.push(record);\n else {\n records[record[0]] = record[1];\n }\n };\n const close = () => {};\n const error = parser.parse(data, true, push, close);\n if (error !== undefined) throw error;\n return records;\n};\n\n// Lodash implementation of `get`\n\nconst charCodeOfDot = \".\".charCodeAt(0);\nconst reEscapeChar = /\\\\(\\\\)?/g;\nconst rePropName = RegExp(\n // Match anything that isn't a dot or bracket.\n \"[^.[\\\\]]+\" +\n \"|\" +\n // Or match property names within brackets.\n \"\\\\[(?:\" +\n // Match a non-string expression.\n \"([^\\\"'][^[]*)\" +\n \"|\" +\n // Or match strings (supports escaping characters).\n \"([\\\"'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2\" +\n \")\\\\]\" +\n \"|\" +\n // Or match \"\" as the space between consecutive dots or empty brackets.\n \"(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))\",\n \"g\",\n);\nconst reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\nconst reIsPlainProp = /^\\w*$/;\n\nconst getTag = function (value) {\n // if (!value) value === undefined ? \"[object Undefined]\" : \"[object Null]\";\n return Object.prototype.toString.call(value);\n};\n\nconst isSymbol = function (value) {\n const type = typeof value;\n return (\n type === \"symbol\" ||\n (type === \"object\" && value && getTag(value) === \"[object Symbol]\")\n );\n};\n\nconst isKey = function (value, object) {\n if (Array.isArray(value)) {\n return false;\n }\n const type = typeof value;\n if (\n type === \"number\" ||\n type === \"symbol\" ||\n type === \"boolean\" ||\n !value ||\n isSymbol(value)\n ) {\n return true;\n }\n return (\n reIsPlainProp.test(value) ||\n !reIsDeepProp.test(value) ||\n (object != null && value in Object(object))\n );\n};\n\nconst stringToPath = function (string) {\n const result = [];\n if (string.charCodeAt(0) === charCodeOfDot) {\n result.push(\"\");\n }\n string.replace(rePropName, function (match, expression, quote, subString) {\n let key = match;\n if (quote) {\n key = subString.replace(reEscapeChar, \"$1\");\n } else if (expression) {\n key = expression.trim();\n }\n result.push(key);\n });\n return result;\n};\n\nconst castPath = function (value, object) {\n if (Array.isArray(value)) {\n return value;\n } else {\n return isKey(value, object) ? [value] : stringToPath(value);\n }\n};\n\nconst toKey = function (value) {\n if (typeof value === \"string\" || isSymbol(value)) return value;\n const result = `${value}`;\n return result == \"0\" && 1 / value == -Infinity ? \"-0\" : result;\n};\n\nconst get = function (object, path) {\n path = castPath(path, object);\n let index = 0;\n const length = path.length;\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return index && index === length ? object : undefined;\n};\n\nconst is_object = function (obj) {\n return typeof obj === \"object\" && obj !== null && !Array.isArray(obj);\n};\n\nconst normalize_columns = function (columns) {\n if (columns === undefined || columns === null) {\n return [undefined, undefined];\n }\n if (typeof columns !== \"object\") {\n return [Error('Invalid option \"columns\": expect an array or an object')];\n }\n if (!Array.isArray(columns)) {\n const newcolumns = [];\n for (const k in columns) {\n newcolumns.push({\n key: k,\n header: columns[k],\n });\n }\n columns = newcolumns;\n } else {\n const newcolumns = [];\n for (const column of columns) {\n if (typeof column === \"string\") {\n newcolumns.push({\n key: column,\n header: column,\n });\n } else if (\n typeof column === \"object\" &&\n column !== null &&\n !Array.isArray(column)\n ) {\n if (!column.key) {\n return [\n Error('Invalid column definition: property \"key\" is required'),\n ];\n }\n if (column.header === undefined) {\n column.header = column.key;\n }\n newcolumns.push(column);\n } else {\n return [\n Error(\"Invalid column definition: expect a string or an object\"),\n ];\n }\n }\n columns = newcolumns;\n }\n return [undefined, columns];\n};\n\nclass CsvError extends Error {\n constructor(code, message, ...contexts) {\n if (Array.isArray(message)) message = message.join(\" \");\n super(message);\n if (Error.captureStackTrace !== undefined) {\n Error.captureStackTrace(this, CsvError);\n }\n this.code = code;\n for (const context of contexts) {\n for (const key in context) {\n const value = context[key];\n this[key] = isBuffer$1(value)\n ? value.toString()\n : value == null\n ? value\n : JSON.parse(JSON.stringify(value));\n }\n }\n }\n}\n\nconst underscore = function (str) {\n return str.replace(/([A-Z])/g, function (_, match) {\n return \"_\" + match.toLowerCase();\n });\n};\n\nconst normalize_options = function (opts) {\n const options = {};\n // Merge with user options\n for (const opt in opts) {\n options[underscore(opt)] = opts[opt];\n }\n // Normalize option `bom`\n if (\n options.bom === undefined ||\n options.bom === null ||\n options.bom === false\n ) {\n options.bom = false;\n } else if (options.bom !== true) {\n return [\n new CsvError(\"CSV_OPTION_BOOLEAN_INVALID_TYPE\", [\n \"option `bom` is optional and must be a boolean value,\",\n `got ${JSON.stringify(options.bom)}`,\n ]),\n ];\n }\n // Normalize option `delimiter`\n if (options.delimiter === undefined || options.delimiter === null) {\n options.delimiter = \",\";\n } else if (isBuffer$1(options.delimiter)) {\n options.delimiter = options.delimiter.toString();\n } else if (typeof options.delimiter !== \"string\") {\n return [\n new CsvError(\"CSV_OPTION_DELIMITER_INVALID_TYPE\", [\n \"option `delimiter` must be a buffer or a string,\",\n `got ${JSON.stringify(options.delimiter)}`,\n ]),\n ];\n }\n // Normalize option `quote`\n if (options.quote === undefined || options.quote === null) {\n options.quote = '\"';\n } else if (options.quote === true) {\n options.quote = '\"';\n } else if (options.quote === false) {\n options.quote = \"\";\n } else if (isBuffer$1(options.quote)) {\n options.quote = options.quote.toString();\n } else if (typeof options.quote !== \"string\") {\n return [\n new CsvError(\"CSV_OPTION_QUOTE_INVALID_TYPE\", [\n \"option `quote` must be a boolean, a buffer or a string,\",\n `got ${JSON.stringify(options.quote)}`,\n ]),\n ];\n }\n // Normalize option `quoted`\n if (options.quoted === undefined || options.quoted === null) {\n options.quoted = false;\n }\n // Normalize option `escape_formulas`\n if (\n options.escape_formulas === undefined ||\n options.escape_formulas === null\n ) {\n options.escape_formulas = false;\n } else if (typeof options.escape_formulas !== \"boolean\") {\n return [\n new CsvError(\"CSV_OPTION_ESCAPE_FORMULAS_INVALID_TYPE\", [\n \"option `escape_formulas` must be a boolean,\",\n `got ${JSON.stringify(options.escape_formulas)}`,\n ]),\n ];\n }\n // Normalize option `quoted_empty`\n if (options.quoted_empty === undefined || options.quoted_empty === null) {\n options.quoted_empty = undefined;\n }\n // Normalize option `quoted_match`\n if (\n options.quoted_match === undefined ||\n options.quoted_match === null ||\n options.quoted_match === false\n ) {\n options.quoted_match = null;\n } else if (!Array.isArray(options.quoted_match)) {\n options.quoted_match = [options.quoted_match];\n }\n if (options.quoted_match) {\n for (const quoted_match of options.quoted_match) {\n const isString = typeof quoted_match === \"string\";\n const isRegExp = quoted_match instanceof RegExp;\n if (!isString && !isRegExp) {\n return [\n new CsvError(\"CSV_OPTION_QUOTED_MATCH\", [\n \"option `quoted_match` must be a string or a regex,\",\n `got ${JSON.stringify(options.quoted_match)}`,\n ]),\n ];\n }\n }\n }\n // Normalize option `quoted_string`\n if (options.quoted_string === undefined || options.quoted_string === null) {\n options.quoted_string = false;\n }\n // Normalize option `eof`\n if (options.eof === undefined || options.eof === null) {\n options.eof = true;\n }\n // Normalize option `escape`\n if (options.escape === undefined || options.escape === null) {\n options.escape = '\"';\n } else if (isBuffer$1(options.escape)) {\n options.escape = options.escape.toString();\n } else if (typeof options.escape !== \"string\") {\n return [\n Error(\n `Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`,\n ),\n ];\n }\n if (options.escape.length > 1) {\n return [\n Error(\n `Invalid Option: escape must be one character, got ${options.escape.length} characters`,\n ),\n ];\n }\n // Normalize option `header`\n if (\n options.header === undefined ||\n options.header === null ||\n options.header === false\n ) {\n options.header = false;\n } else if (options.header !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_HEADER\",\n [\n \"option `header` is expected to be a boolean,\",\n `got ${JSON.stringify(options.header)}`,\n ],\n options,\n );\n }\n // Normalize option `headers_as_comment`\n if (\n options.header_as_comment === undefined ||\n options.header_as_comment === null ||\n options.header_as_comment === false\n ) {\n options.header_as_comment = false;\n } else if (options.header_as_comment === true) {\n options.header_as_comment = \"#\";\n } else if (isBuffer$1(options.header_as_comment)) {\n options.header_as_comment = options.header_as_comment.toString();\n } else if (typeof options.header_as_comment !== \"string\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_HEADER_AS_COMMENT\",\n [\n \"option `header_as_comment` must be a boolean, a string or a buffer,\",\n `got ${JSON.stringify(options.header_as_comment)}`,\n ],\n options,\n );\n }\n // if (options.header_as_comment && !options.comment?.length) {\n // throw new CsvError(\n // \"CSV_INVALID_OPTION_COMMENT\",\n // [\n // \"option `comment` must be a non empty string or buffer when using `header_as_comment`,\",\n // `got ${JSON.stringify(options.comment)}`,\n // ],\n // options,\n // );\n // }\n // Header is always enabled with `header_as_comment`\n // if (options.header_as_comment === true) {\n // options.header = true;\n // }\n // Normalize option `columns`\n const [errColumns, columns] = normalize_columns(options.columns);\n if (errColumns !== undefined) return [errColumns];\n options.columns = columns;\n // Normalize option `quoted`\n if (options.quoted === undefined || options.quoted === null) {\n options.quoted = false;\n }\n // Normalize option `cast`\n if (options.cast === undefined || options.cast === null) {\n options.cast = {};\n }\n // Normalize option cast.bigint\n if (options.cast.bigint === undefined || options.cast.bigint === null) {\n // Cast boolean to string by default\n options.cast.bigint = (value) => \"\" + value;\n }\n // Normalize option cast.boolean\n if (options.cast.boolean === undefined || options.cast.boolean === null) {\n // Cast boolean to string by default\n options.cast.boolean = (value) => (value ? \"1\" : \"\");\n }\n // Normalize option cast.date\n if (options.cast.date === undefined || options.cast.date === null) {\n // Cast date to timestamp string by default\n options.cast.date = (value) => \"\" + value.getTime();\n }\n // Normalize option cast.number\n if (options.cast.number === undefined || options.cast.number === null) {\n // Cast number to string using native casting by default\n options.cast.number = (value) => \"\" + value;\n }\n // Normalize option cast.object\n if (options.cast.object === undefined || options.cast.object === null) {\n // Stringify object as JSON by default\n options.cast.object = (value) => JSON.stringify(value);\n }\n // Normalize option cast.string\n if (options.cast.string === undefined || options.cast.string === null) {\n // Leave string untouched\n options.cast.string = function (value) {\n return value;\n };\n }\n // Normalize option `on_record`\n if (\n options.on_record !== undefined &&\n typeof options.on_record !== \"function\"\n ) {\n return [Error(`Invalid Option: \"on_record\" must be a function.`)];\n }\n // Normalize option `record_delimiter`\n if (\n options.record_delimiter === undefined ||\n options.record_delimiter === null\n ) {\n options.record_delimiter = \"\\n\";\n } else if (isBuffer$1(options.record_delimiter)) {\n options.record_delimiter = options.record_delimiter.toString();\n } else if (typeof options.record_delimiter !== \"string\") {\n return [\n Error(\n `Invalid Option: record_delimiter must be a buffer or a string, got ${JSON.stringify(options.record_delimiter)}`,\n ),\n ];\n }\n switch (options.record_delimiter) {\n case \"unix\":\n options.record_delimiter = \"\\n\";\n break;\n case \"mac\":\n options.record_delimiter = \"\\r\";\n break;\n case \"windows\":\n options.record_delimiter = \"\\r\\n\";\n break;\n case \"ascii\":\n options.record_delimiter = \"\\u001e\";\n break;\n case \"unicode\":\n options.record_delimiter = \"\\u2028\";\n break;\n }\n return [undefined, options];\n};\n\nconst bom_utf8 = Buffer.from([239, 187, 191]);\n// True when appending `separator` after `value` would let `parse` find\n// `separator` starting inside `value`. Besides the field containing the whole\n// separator, this also covers boundary fusion: a field whose tail is a\n// non-empty prefix of a multi-character separator merges with the appended\n// separator (eg value \"a:\" + delimiter \"::\" => \"a:::\", matched at offset 1).\n// Such fields must be quoted to round-trip, like RFC 4180 fields containing the\n// delimiter, generalized to multi-character delimiters and record delimiters.\nconst emits_separator = function (value, separator) {\n return (\n separator.length !== 0 &&\n (value.indexOf(separator) !== -1 ||\n (separator.length > 1 &&\n (value + separator).indexOf(separator) < value.length))\n );\n};\n// True when `value` matches one of the `quoted_match` patterns. The regexps\n// come from the user and the same objects are reused for every field, so the\n// test must not depend on their state: `RegExp.prototype.test` advances\n// `lastIndex` on a global or sticky regexp, which would make a match in one\n// field move where the next field starts matching. `String.prototype.search`\n// searches from the start and restores `lastIndex`, and is equivalent to\n// `test` for the stateless regexps.\nconst matches_quoted_match = function (value, quoted_match) {\n if (!quoted_match) return false;\n return quoted_match.some((pattern) =>\n typeof pattern === \"string\"\n ? value.indexOf(pattern) !== -1\n : value.search(pattern) !== -1,\n );\n};\n\nconst stringifier = function (options, state, info) {\n return {\n options: options,\n state: state,\n info: info,\n __transform: function (chunk, push) {\n // Chunk validation\n if (!Array.isArray(chunk) && typeof chunk !== \"object\") {\n return Error(\n `Invalid Record: expect an array or an object, got ${JSON.stringify(chunk)}`,\n );\n }\n // Detect columns from the first record\n if (this.info.records === 0) {\n if (Array.isArray(chunk)) {\n if (\n this.options.header === true &&\n this.options.columns === undefined\n ) {\n return Error(\n \"Undiscoverable Columns: header option requires column option or object records\",\n );\n }\n } else if (this.options.columns === undefined) {\n const [err, columns] = normalize_columns(Object.keys(chunk));\n if (err) return;\n this.options.columns = columns;\n }\n }\n // Emit the header\n if (this.info.records === 0) {\n this.bom(push);\n const err = this.headers(push);\n if (err) return err;\n }\n // Emit and stringify the record if an object or an array\n try {\n // this.emit('record', chunk, this.info.records);\n if (this.options.on_record) {\n this.options.on_record(chunk, this.info.records);\n }\n } catch (err) {\n return err;\n }\n // Convert the record into a string\n let err, chunk_string;\n if (this.options.eof) {\n [err, chunk_string] = this.stringify(chunk);\n if (err) return err;\n if (chunk_string === undefined) {\n return;\n } else {\n chunk_string = chunk_string + this.options.record_delimiter;\n }\n } else {\n [err, chunk_string] = this.stringify(chunk);\n if (err) return err;\n if (chunk_string === undefined) {\n return;\n } else {\n if (this.options.header || this.info.records) {\n chunk_string = this.options.record_delimiter + chunk_string;\n }\n }\n }\n // Emit the csv\n this.info.records++;\n push(chunk_string);\n },\n stringify: function (chunk, chunkIsHeader = false) {\n if (typeof chunk !== \"object\") {\n return [undefined, chunk];\n }\n const { columns } = this.options;\n const record = [];\n // Record is an array\n if (Array.isArray(chunk)) {\n // We are getting an array but the user has specified output columns. In\n // this case, we respect the columns indexes\n if (columns) {\n chunk.splice(columns.length);\n }\n // Cast record elements\n for (let i = 0; i < chunk.length; i++) {\n const field = chunk[i];\n const [err, value] = this.__cast(field, {\n index: i,\n column: i,\n records: this.info.records,\n header: chunkIsHeader,\n });\n if (err) return [err];\n record[i] = [value, field];\n }\n // Record is a literal object\n // `columns` is always defined: it is either provided or discovered.\n } else {\n for (let i = 0; i < columns.length; i++) {\n const field = get(chunk, columns[i].key);\n const [err, value] = this.__cast(field, {\n index: i,\n column: columns[i].key,\n records: this.info.records,\n header: chunkIsHeader,\n });\n if (err) return [err];\n record[i] = [value, field];\n }\n }\n let csvrecord = \"\";\n for (let i = 0; i < record.length; i++) {\n let options, err;\n\n let [value, field] = record[i];\n if (typeof value === \"string\") {\n options = this.options;\n } else if (is_object(value)) {\n // Value is considerered as a mix of a value and options\n options = value;\n value = options.value;\n delete options.value;\n if (\n typeof value !== \"string\" &&\n value !== undefined &&\n value !== null\n ) {\n if (err)\n return [\n Error(\n `Invalid Casting Value: returned value must return a string, null or undefined, got ${JSON.stringify(value)}`,\n ),\n ];\n }\n // Merge global options with the ones returned by cast\n options = { ...this.options, ...options };\n [err, options] = normalize_options(options);\n if (err !== undefined) {\n return [err];\n }\n } else if (value === undefined || value === null) {\n options = this.options;\n } else {\n return [\n Error(\n `Invalid Casting Value: returned value must return a string, an object, null or undefined, got ${JSON.stringify(value)}`,\n ),\n ];\n }\n const {\n delimiter,\n escape,\n quote,\n quoted,\n quoted_empty,\n quoted_string,\n quoted_match,\n record_delimiter,\n escape_formulas,\n } = options;\n if (\"\" === value && \"\" === field) {\n const quotedMatch = matches_quoted_match(value, quoted_match);\n const shouldQuote =\n quotedMatch ||\n true === quoted_empty ||\n (true === quoted_string && false !== quoted_empty);\n if (shouldQuote === true) {\n value = quote + value + quote;\n }\n csvrecord += value;\n } else if (value) {\n if (typeof value !== \"string\") {\n return [\n Error(\n `Formatter must return a string, null or undefined, got ${JSON.stringify(value)}`,\n ),\n ];\n }\n const containsdelimiter = emits_separator(value, delimiter);\n const containsQuote = quote !== \"\" && value.indexOf(quote) >= 0;\n const containsEscape = value.indexOf(escape) >= 0 && escape !== quote;\n const containsRecordDelimiter = emits_separator(\n value,\n record_delimiter,\n );\n const quotedString = quoted_string && typeof field === \"string\";\n const quotedMatch = matches_quoted_match(value, quoted_match);\n // See https://github.com/adaltas/node-csv/pull/387\n // More about CSV injection or formula injection, when websites embed\n // untrusted input inside CSV files:\n // https://owasp.org/www-community/attacks/CSV_Injection\n // http://georgemauer.net/2017/10/07/csv-injection.html\n // Apple Numbers unicode normalization is empirical from testing\n if (escape_formulas) {\n switch (value[0]) {\n case \"=\":\n case \"+\":\n case \"-\":\n case \"@\":\n case \"\\t\":\n case \"\\r\":\n case \"\\uFF1D\": // Unicode '='\n case \"\\uFF0B\": // Unicode '+'\n case \"\\uFF0D\": // Unicode '-'\n case \"\\uFF20\": // Unicode '@'\n value = `'${value}`;\n break;\n }\n }\n const shouldQuote =\n containsQuote === true ||\n containsdelimiter ||\n containsRecordDelimiter ||\n quoted ||\n quotedString ||\n quotedMatch;\n if (shouldQuote === true && containsEscape === true) {\n value = value.replaceAll(escape, () => escape + escape);\n }\n if (containsQuote === true) {\n value = value.replaceAll(quote, () => escape + quote);\n }\n if (shouldQuote === true) {\n value = quote + value + quote;\n }\n csvrecord += value;\n } else if (\n quoted_empty === true ||\n (field === \"\" && quoted_string === true && quoted_empty !== false)\n ) {\n csvrecord += quote + quote;\n }\n if (i !== record.length - 1) {\n csvrecord += delimiter;\n }\n }\n return [undefined, csvrecord];\n },\n bom: function (push) {\n if (this.options.bom !== true) {\n return;\n }\n push(bom_utf8);\n },\n headers: function (push) {\n if (this.options.header === false) {\n return;\n }\n if (this.options.columns === undefined) {\n return;\n }\n let err;\n let headers = this.options.columns.map((column) => column.header);\n if (this.options.eof) {\n [err, headers] = this.stringify(headers, true);\n headers += this.options.record_delimiter;\n } else {\n [err, headers] = this.stringify(headers);\n }\n if (err) return err;\n if (this.options.header_as_comment) {\n headers = this.options.header_as_comment + \" \" + headers;\n }\n push(headers);\n },\n __cast: function (value, context) {\n const type = typeof value;\n try {\n if (type === \"string\") {\n // Fine for 99% of the cases\n return [undefined, this.options.cast.string(value, context)];\n } else if (type === \"bigint\") {\n return [undefined, this.options.cast.bigint(value, context)];\n } else if (type === \"number\") {\n return [undefined, this.options.cast.number(value, context)];\n } else if (type === \"boolean\") {\n return [undefined, this.options.cast.boolean(value, context)];\n } else if (value instanceof Date) {\n return [undefined, this.options.cast.date(value, context)];\n } else if (type === \"object\" && value !== null) {\n return [undefined, this.options.cast.object(value, context)];\n } else if (value === null && this.options.cast.null !== undefined) {\n return [undefined, this.options.cast.null(value, context)];\n } else if (\n value === undefined &&\n this.options.cast.undefined !== undefined\n ) {\n return [undefined, this.options.cast.undefined(value, context)];\n } else {\n return [undefined, value];\n }\n } catch (err) {\n return [err];\n }\n },\n };\n};\n\nconst stringify = function (records, opts = {}) {\n const data = [];\n const [err, options] = normalize_options(opts);\n if (err !== undefined) throw err;\n const state = {\n stop: false,\n };\n // Information\n const info = {\n records: 0,\n };\n const api = stringifier(options, state, info);\n for (const record of records) {\n const err = api.__transform(record, function (record) {\n data.push(record);\n });\n if (err !== undefined) throw err;\n }\n if (data.length === 0) {\n api.bom((d) => {\n data.push(d);\n });\n const err = api.headers((headers) => {\n data.push(headers);\n });\n if (err !== undefined) throw err;\n }\n return data.join(\"\");\n};\n\n/*\nStream Transform\n\nPlease look at the [project documentation](https://csv.js.org/transform/) for\nadditional information.\n*/\n\n\nconst Transformer = function (options = {}, handler) {\n this.options = options;\n if (options.consume === undefined || options.consume === null) {\n this.options.consume = false;\n }\n this.options.objectMode = true;\n if (options.parallel === undefined || options.parallel === null) {\n this.options.parallel = 100;\n }\n if (options.params === undefined || options.params === null) {\n options.params = null;\n }\n this.handler = handler;\n Stream.Transform.call(this, this.options);\n this.state = {\n running: 0,\n started: 0,\n finished: 0,\n paused: false,\n };\n return this;\n};\n\nutil.inherits(Transformer, Stream.Transform);\n\nTransformer.prototype._transform = function (chunk, _, cb) {\n this.state.started++;\n this.state.running++;\n // Accept additional chunks to be processed in parallel\n if (!this.state.paused && this.state.running < this.options.parallel) {\n cb();\n cb = null; // Cancel further callback execution\n }\n try {\n let l = this.handler.length;\n if (this.options.params !== null) {\n l--;\n }\n if (l === 1) {\n // sync\n const result = this.handler.call(this, chunk, this.options.params);\n if (result && result.then) {\n result.then((result) => {\n this.__done(null, [result], cb);\n });\n result.catch((err) => {\n this.__done(err);\n });\n } else {\n this.__done(null, [result], cb);\n }\n } else if (l === 2) {\n // async\n const callback = (err, ...chunks) => this.__done(err, chunks, cb);\n this.handler.call(this, chunk, callback, this.options.params);\n } else {\n throw Error(\"Invalid handler arguments\");\n }\n return false;\n } catch (err) {\n this.__done(err);\n }\n};\nTransformer.prototype._flush = function (cb) {\n if (this.state.running === 0) {\n cb();\n } else {\n this._ending = function () {\n cb();\n };\n }\n};\nTransformer.prototype.__done = function (err, chunks, cb) {\n this.state.running--;\n if (err) {\n return this.destroy(err);\n // return this.emit('error', err);\n }\n this.state.finished++;\n for (let chunk of chunks) {\n if (typeof chunk === \"number\") {\n chunk = `${chunk}`;\n }\n // We dont push empty string\n // See https://nodejs.org/api/stream.html#stream_readable_push\n if (chunk !== undefined && chunk !== null && chunk !== \"\") {\n this.state.paused = !this.push(chunk);\n }\n }\n // Chunk has been processed\n if (cb) {\n cb();\n }\n if (this._ending && this.state.running === 0) {\n this._ending();\n }\n};\n\n/*\nStream Transform - sync module\n\nPlease look at the [project documentation](https://csv.js.org/transform/) for\nadditional information.\n*/\n\n\nconst transform = function () {\n // Import arguments normalization\n let handler, records;\n let options = {};\n for (const i in arguments) {\n const argument = arguments[i];\n let type = typeof argument;\n if (argument === null) {\n type = \"null\";\n } else if (type === \"object\" && Array.isArray(argument)) {\n type = \"array\";\n }\n if (type === \"array\") {\n records = argument;\n } else if (type === \"object\") {\n options = { ...argument };\n } else if (type === \"function\") {\n handler = argument;\n } else if (type !== \"null\") {\n throw new Error(\n `Invalid Arguments: got ${JSON.stringify(argument)} at position ${i}`,\n );\n }\n }\n // Validate arguments\n let expected_handler_length = 1;\n if (options.params) {\n expected_handler_length++;\n }\n if (handler.length > expected_handler_length) {\n throw Error(\"Invalid Handler: only synchronous handlers are supported\");\n }\n // Start transformation\n const chunks = [];\n const transformer = new Transformer(options, handler);\n transformer.push = function (chunk) {\n chunks.push(chunk);\n };\n for (const record of records) {\n transformer._transform(record, null, function () {});\n }\n return chunks;\n};\n\nexport { generate, parse, stringify, transform };\n"],"x_google_ignoreList":[0,1],"mappings":"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"}