{"version":3,"file":"index.modern.mjs","sources":["../src/types/Pagination.ts","../src/config/AppConfig.ts","../src/services/waxJS.ts","../src/hook/useWaxAuthen.tsx","../src/components/Login/index.tsx","../src/controller/apiConfig.ts","../src/types/Sale.ts","../src/controller/atomic/auctionController.ts","../src/controller/atomic/collectionController.ts","../src/controller/atomic/saleController.ts","../src/controller/index.ts","../src/controller/saleController.ts","../src/controller/auctionController.ts","../src/controller/collectionController.ts","../src/controller/schemaController.ts","../src/controller/templateController.ts","../src/controller/assetController.ts","../src/controller/accountController.ts","../src/controller/currencyController.ts","../src/controller/offerController.ts","../src/helpers/NormalizeHelper.ts","../src/helpers/CurrencyHelper.ts","../src/hook/useCurrency.ts","../src/icon/wax-currency.tsx","../src/constant/constants.ts","../node_modules/eosjs/node_modules/pako/lib/zlib/trees.js","../node_modules/eosjs/node_modules/pako/lib/zlib/adler32.js","../node_modules/eosjs/node_modules/pako/lib/zlib/crc32.js","../node_modules/eosjs/node_modules/pako/lib/zlib/messages.js","../node_modules/eosjs/node_modules/pako/lib/zlib/constants.js","../node_modules/eosjs/node_modules/pako/lib/zlib/deflate.js","../node_modules/eosjs/node_modules/pako/lib/utils/common.js","../node_modules/eosjs/node_modules/pako/lib/utils/strings.js","../node_modules/eosjs/node_modules/pako/lib/zlib/zstream.js","../node_modules/eosjs/node_modules/pako/lib/deflate.js","../node_modules/eosjs/node_modules/pako/lib/zlib/inffast.js","../node_modules/eosjs/node_modules/pako/lib/zlib/inftrees.js","../node_modules/eosjs/node_modules/pako/lib/zlib/inflate.js","../node_modules/eosjs/node_modules/pako/lib/zlib/gzheader.js","../node_modules/eosjs/node_modules/pako/lib/inflate.js","../node_modules/eosjs/node_modules/pako/index.js","../node_modules/minimalistic-assert/index.js","../node_modules/inherits/inherits_browser.js","../node_modules/hash.js/lib/hash/utils.js","../node_modules/hash.js/lib/hash/common.js","../node_modules/hash.js/lib/hash/sha/common.js","../node_modules/hash.js/lib/hash/sha/1.js","../node_modules/hash.js/lib/hash/sha/256.js","../node_modules/hash.js/lib/hash/sha/224.js","../node_modules/hash.js/lib/hash/sha/512.js","../node_modules/hash.js/lib/hash/sha/384.js","../node_modules/hash.js/lib/hash/sha.js","../node_modules/hash.js/lib/hash/ripemd.js","../node_modules/hash.js/lib/hash/hmac.js","../node_modules/hash.js/lib/hash.js","../node_modules/eosjs/dist/ripemd.js","../node_modules/eosjs/dist/eosjs-numeric.js","../node_modules/eosjs/dist/eosjs-serialize.js","../node_modules/eosjs/dist/eosjs-api.js","../node_modules/eosjs/dist/eosjs-api-interfaces.js","../node_modules/eosjs/dist/eosjs-rpcerror.js","../node_modules/eosjs/dist/eosjs-jsonrpc.js","../node_modules/eosjs/dist/eosjs-rpc-interfaces.js","../src/services/apisSetup.ts","../node_modules/eosjs/dist/index.js","../src/hook/useMedian.ts","../src/services/RpcService.ts","../src/hook/useNavigator.ts","../src/hook/useTransactionProgress.tsx","../src/components/AwaitProgressTimeline/useAwaitProgressTimeline.tsx","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/safe-buffer/index.js","../node_modules/randombytes/browser.js","../node_modules/hash-base/index.js","../node_modules/md5.js/index.js","../node_modules/ripemd160/index.js","../node_modules/sha.js/hash.js","../node_modules/sha.js/sha.js","../node_modules/sha.js/sha1.js","../node_modules/sha.js/sha256.js","../node_modules/sha.js/sha224.js","../node_modules/sha.js/sha512.js","../node_modules/sha.js/sha384.js","../node_modules/sha.js/index.js","../node_modules/string_decoder/node_modules/safe-buffer/index.js","../node_modules/string_decoder/lib/string_decoder.js","../node_modules/cipher-base/index.js","../node_modules/create-hash/browser.js","../node_modules/create-hmac/legacy.js","../node_modules/create-hash/md5.js","../node_modules/create-hmac/browser.js","../node_modules/browserify-sign/algos.js","../node_modules/pbkdf2/lib/precondition.js","../node_modules/pbkdf2/lib/default-encoding.js","../node_modules/pbkdf2/lib/to-buffer.js","../node_modules/pbkdf2/lib/sync-browser.js","../node_modules/pbkdf2/lib/async.js","../node_modules/pbkdf2/browser.js","../node_modules/des.js/lib/des/utils.js","../node_modules/des.js/lib/des/cipher.js","../node_modules/des.js/lib/des/des.js","../node_modules/des.js/lib/des/cbc.js","../node_modules/des.js/lib/des/ede.js","../node_modules/des.js/lib/des.js","../node_modules/browserify-des/index.js","../node_modules/browserify-aes/modes/ecb.js","../node_modules/buffer-xor/index.js","../node_modules/browserify-aes/modes/cfb.js","../node_modules/browserify-aes/modes/cfb8.js","../node_modules/browserify-aes/modes/cfb1.js","../node_modules/browserify-aes/modes/ofb.js","../node_modules/browserify-aes/incr32.js","../node_modules/browserify-aes/modes/ctr.js","../node_modules/browserify-aes/modes/index.js","../node_modules/browserify-aes/modes/cbc.js","../node_modules/browserify-aes/aes.js","../node_modules/browserify-aes/ghash.js","../node_modules/browserify-aes/authCipher.js","../node_modules/browserify-aes/streamCipher.js","../node_modules/evp_bytestokey/index.js","../node_modules/browserify-aes/encrypter.js","../node_modules/browserify-aes/decrypter.js","../node_modules/brorand/index.js","../node_modules/browserify-aes/browser.js","../node_modules/browserify-des/modes.js","../node_modules/browserify-cipher/browser.js","../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","../node_modules/miller-rabin/lib/mr.js","../node_modules/diffie-hellman/lib/generatePrime.js","../node_modules/diffie-hellman/lib/dh.js","../node_modules/events/events.js","../node_modules/diffie-hellman/browser.js","../node_modules/process-nextick-args/index.js","../node_modules/readable-stream/node_modules/isarray/index.js","../node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/readable-stream/node_modules/safe-buffer/index.js","../node_modules/core-util-is/lib/util.js","../node_modules/readable-stream/lib/internal/streams/BufferList.js","../node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/util-deprecate/browser.js","../node_modules/readable-stream/lib/_stream_writable.js","../node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/readable-stream/lib/_stream_readable.js","../node_modules/readable-stream/lib/_stream_transform.js","../node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/readable-stream/readable-browser.js","../node_modules/bn.js/lib/bn.js","../node_modules/browserify-rsa/index.js","../node_modules/elliptic/node_modules/bn.js/lib/bn.js","../node_modules/minimalistic-crypto-utils/lib/utils.js","../node_modules/elliptic/lib/elliptic/utils.js","../node_modules/elliptic/lib/elliptic/curve/base.js","../node_modules/elliptic/lib/elliptic/curve/short.js","../node_modules/elliptic/lib/elliptic/curve/mont.js","../node_modules/elliptic/lib/elliptic/curve/edwards.js","../node_modules/elliptic/lib/elliptic/curve/index.js","../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","../node_modules/elliptic/lib/elliptic/curves.js","../node_modules/hmac-drbg/lib/hmac-drbg.js","../node_modules/elliptic/lib/elliptic/ec/key.js","../node_modules/elliptic/lib/elliptic/ec/signature.js","../node_modules/elliptic/lib/elliptic/ec/index.js","../node_modules/elliptic/lib/elliptic/eddsa/key.js","../node_modules/elliptic/lib/elliptic/eddsa/signature.js","../node_modules/elliptic/lib/elliptic/eddsa/index.js","../node_modules/elliptic/lib/elliptic.js","../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","../node_modules/asn1.js/lib/asn1/api.js","../node_modules/asn1.js/lib/asn1/base/reporter.js","../node_modules/asn1.js/lib/asn1/base/buffer.js","../node_modules/asn1.js/lib/asn1/base/node.js","../node_modules/asn1.js/lib/asn1/base/index.js","../node_modules/asn1.js/lib/asn1/constants/der.js","../node_modules/asn1.js/lib/asn1/constants/index.js","../node_modules/asn1.js/lib/asn1/decoders/der.js","../node_modules/asn1.js/lib/asn1/decoders/pem.js","../node_modules/asn1.js/lib/asn1/decoders/index.js","../node_modules/asn1.js/lib/asn1/encoders/der.js","../node_modules/asn1.js/lib/asn1/encoders/pem.js","../node_modules/asn1.js/lib/asn1/encoders/index.js","../node_modules/asn1.js/lib/asn1.js","../node_modules/parse-asn1/certificate.js","../node_modules/parse-asn1/asn1.js","../node_modules/parse-asn1/fixProc.js","../node_modules/parse-asn1/index.js","../node_modules/browserify-sign/browser/sign.js","../node_modules/browserify-sign/browser/verify.js","../node_modules/browserify-sign/browser/index.js","../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","../node_modules/create-ecdh/browser.js","../node_modules/public-encrypt/mgf.js","../node_modules/public-encrypt/xor.js","../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","../node_modules/public-encrypt/withPublic.js","../node_modules/public-encrypt/publicEncrypt.js","../node_modules/public-encrypt/privateDecrypt.js","../node_modules/public-encrypt/browser.js","../node_modules/randomfill/browser.js","../node_modules/crypto-browserify/index.js","../src/helpers/NumberHelper.ts","../src/helpers/HashHelper.ts","../src/hook/useUal.ts","../src/utils/helpers.ts","../src/components/BaseComponent/HighlightContainer/index.tsx","../src/components/ModalWithAcceptPolicy/Footer/index.tsx","../src/components/AssetCard/components/HoverToPlayAudio/styled.tsx","../src/components/HoveToPlay/useHoverToPlay.tsx","../src/icon/audio.tsx","../src/icon/whitelist-and-verify.tsx","../src/icon/whitelist-or-verify.tsx","../src/icon/check.tsx","../src/icon/three-dot.tsx","../src/components/AssetCard/components/HoverToPlayAudio/index.tsx","../src/components/AssetCard/components/HoverToPlayVideo.tsx","../src/icon/loading-base64.ts","../src/components/AssetCard/components/AssetCard/AssetCardPreview.tsx","../src/components/BaseComponent/AssetsPreview/index.tsx","../src/components/AssetAction/SalePreview/index.tsx","../src/components/AssetAction/BuyTheSale/component/SaleSummary/index.tsx","../src/components/AssetAction/BuyTheSale/index.tsx","../src/types/Collection.ts","../src/components/AssetCard/components/CollectionWithStatus/index.tsx","../src/components/AwaitProgressTimeline/index.tsx","../src/components/AssetCard/components/ProcessingBuyModal.tsx","../src/components/marketplace/context/useAssetDetail.tsx","../src/components/AssetActions/RapidSale/RapidSaleBuyable.tsx","../src/helpers/TimeoutHelper.ts","../src/components/AssetCard/components/CancellingSaleModal.tsx","../src/components/AssetCard/components/CancelSaleModal.tsx","../src/components/AssetActions/RapidSale/RapidSaleCancellable.tsx","../src/components/AssetListing/index.tsx","../node_modules/@kurkle/color/dist/color.esm.js","../node_modules/chart.js/dist/chunks/helpers.dataset.js","../node_modules/chart.js/dist/chart.js","../src/components/TemplateHistoricalPriceChart/component/HistoricalSalePriceChart.tsx","../src/components/TemplateHistoricalPriceChart/component/StatisticPriceItem.tsx","../src/components/TemplateHistoricalPriceChart/index.tsx","../src/components/TemplateHistoricalPriceChart/usePriceHistory.ts","../src/components/AssetSalePriceHistory/index.tsx","../src/icon/connect-wallet.tsx","../src/components/LoginMenu/component/RequestLogin/index.tsx","../src/hook/useAccount.ts","../src/icon/down-outlined.tsx","../src/components/LoginMenu/component/UserInfo/index.tsx","../src/components/LoginMenu/index.tsx","../src/components/Navigator/index.tsx","../src/types/Auction.ts","../src/constant/SaleStateConst.ts","../src/components/AssetActions/AssetCard/BlackListAsset.tsx","../src/components/AssetActions/AssetCard/DeListedAsset.tsx","../src/components/AssetActions/AssetCard/NotOnSale.tsx","../src/components/AssetCard/components/AssetCard/AssetCardPreviewWithDefaultContent.tsx","../src/components/AssetAction/SellAsset/TypeOfSale/index.tsx","../src/types/Currency.ts","../src/components/AssetAction/SellAsset/SellForm/RapidSaleForm.tsx","../src/components/AssetAction/SellAsset/SellForm/P2OSaleForm.tsx","../src/components/AssetAction/SellAsset/SellForm/AuctionSaleForm.tsx","../src/components/AssetAction/SellAsset/Fee/index.tsx","../src/components/AssetAction/SellAsset/index.tsx","../src/components/AssetCard/components/AssetCardSellable/components/SellProgressingModal.tsx","../src/components/AssetCard/components/AssetCardSellable/useSellableAsset.tsx","../src/components/AssetActions/AssetCard/SellableAsset.tsx","../src/components/AssetAction/BidTheAuction/index.tsx","../src/components/AssetActions/Auction/AuctionBiddable.tsx","../src/components/AssetActions/Auction/AuctionCancellable.tsx","../src/components/AssetCard/components/ProcessingModal.tsx","../src/components/AssetCard/instances/Auction/claimable/component/ConfirmClaimModal.tsx","../src/components/AssetActions/Auction/AuctionClaimable.tsx","../src/components/AssetActions/Auction/AuctionNotCancellable.tsx","../src/components/AssetActions/Auction/OnAuction.tsx","../src/components/AssetActions/Auction/RequireLoginAuction.tsx","../src/components/AssetActions/P2O/P2OBuyable.tsx","../src/components/AssetActions/P2O/P2OCancellable.tsx","../src/components/AssetCard/components/ConfirmModal.tsx","../src/components/AssetActions/P2O/P2OClaimable.tsx","../src/components/AssetActions/P2O/P2OPendingTransfer.tsx","../src/components/AssetActions/P2O/P2OProgressing.tsx","../src/components/AssetActions/P2O/P2OSold.tsx","../src/components/AssetCard/instances/P2O/transferable/component/ConfirmTransferModal.tsx","../src/components/AssetActions/P2O/P2OTransferable.tsx","../src/components/AssetActions/P2O/RequireLoginP2O.tsx","../src/components/AssetActions/SaleCard/DeListedSale.tsx","../src/components/AssetActions/SaleCard/RequireLoginSale.tsx","../src/components/AssetActions/index.tsx","../src/components/AssetActions/Auction/AuctionBuyNow.tsx","../src/components/AssetCard/components/SaleCard/components/BaseLabel.tsx","../src/components/AssetCard/components/SaleCard/components/AuctionSaleLabel.tsx","../src/components/Offer/MakeableOffer/component/MakeOfferModal/OfferForm.tsx","../src/components/Offer/MakeableOffer/component/MakeOfferModal/OfferModalBody.tsx","../src/components/Offer/MakeableOffer/component/MakeOfferModal/index.tsx","../src/components/Offer/MakeableOffer/component/OfferProgressModal/index.tsx","../src/components/Offer/MakeableOffer/index.tsx","../src/components/Offer/MakeableOffer/component/MakeOfferModal/useOffer.tsx","../src/components/AssetDetail/AsserPrice/index.tsx","../src/components/AssetCard/components/SaleCard/styled.tsx","../src/components/AssetDetail/AssetPreviewMedia/index.tsx","../src/components/AssetDetail/BaseInfo/AvatarWithName/index.tsx","../src/components/AssetDetail/BaseInfo/TitleWithValue/index.tsx","../src/components/AssetDetail/BaseInfo/index.tsx","../src/components/AssetDetail/CollasibleSection/index.tsx","../src/components/AssetDetail/fakeAsset.tsx","../src/components/AssetCard/components/BaseAssetCard/styled.ts","../src/components/AssetCard/components/BaseAssetCard/index.tsx","../src/components/AssetCard/components/SaleCard/components/NotOnSaleLabel.tsx","../src/components/AssetCard/components/AssetCard/index.tsx","../src/components/AssetCard/components/AssetCard/BlackListAssetCard.tsx","../src/components/AssetCard/components/AssetCard/DeListedAssetCard.tsx","../src/components/AssetCard/components/AssetCard/NotOnSaleCard.tsx","../src/components/AssetCard/components/AssetCardSellable/index.tsx","../src/components/AssetCard/components/SaleCard/components/P2OLabel.tsx","../src/components/AssetCard/components/SaleCard/components/RapidSaleLabel.tsx","../src/components/PriceWithSymbol/index.tsx","../src/components/AssetCard/components/SaleCard/index.tsx","../src/components/AssetCard/components/SaleCard/DeListedSaleCard.tsx","../src/components/AssetCard/components/SaleCard/RequireLoginSaleCard.tsx","../src/components/AssetCard/instances/Auction/AuctionCard.tsx","../src/components/AssetCard/instances/Auction/AuctionCancellableCard.tsx","../src/components/AssetCard/instances/Auction/AuctionNotCancellableCard.tsx","../src/components/AssetCard/instances/Auction/biddable/AuctionBiddableCard.tsx","../src/components/AssetCard/instances/Auction/claimable/AuctionClaimableCard.tsx","../src/components/AssetCard/instances/Auction/OnAuctionCard.tsx","../src/components/AssetCard/instances/Auction/RequireLoginAuctionCard.tsx","../src/components/AssetCard/instances/RapidSale/RapidSaleBuyableCard.tsx","../src/components/AssetCard/instances/P2O/P2OBuyableCard.tsx","../src/components/AssetCard/instances/P2O/P2OCancellableCard.tsx","../src/components/AssetCard/instances/P2O/P2OClaimableCard.tsx","../src/components/AssetCard/instances/P2O/P2OCard.tsx","../src/components/AssetCard/instances/P2O/P2OPendingTransferCard.tsx","../src/components/AssetCard/instances/P2O/P2OProgressingCard.tsx","../src/components/AssetCard/instances/P2O/P2OSoldCard.tsx","../src/components/AssetCard/instances/P2O/RequireLoginP2OCard.tsx","../src/components/AssetCard/instances/P2O/transferable/P2OTransferableCard.tsx","../src/components/AssetCard/instances/RapidSale/RapidSaleCancellableCard.tsx","../src/components/AssetCard/index.tsx","../src/components/AssetCard/AssetList.tsx","../src/components/AssetCard/AssetCardSkeleton.tsx","../src/components/marketplace/component/Loading.tsx","../src/components/AssetDetail/MoreAssetsFromSchema/index.tsx","../src/components/AssetDetail/NameAndCollection/index.tsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../node_modules/date-fns/esm/toDate/index.js","../node_modules/date-fns/esm/_lib/defaultOptions/index.js","../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../node_modules/date-fns/esm/compareAsc/index.js","../node_modules/date-fns/esm/_lib/roundingMethods/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../node_modules/date-fns/esm/locale/en-US/index.js","../node_modules/date-fns/esm/_lib/assign/index.js","../node_modules/date-fns/esm/formatDistance/index.js","../node_modules/date-fns/esm/_lib/cloneObject/index.js","../node_modules/date-fns/esm/differenceInSeconds/index.js","../node_modules/date-fns/esm/differenceInMilliseconds/index.js","../node_modules/date-fns/esm/differenceInMonths/index.js","../node_modules/date-fns/esm/differenceInCalendarMonths/index.js","../node_modules/date-fns/esm/isLastDayOfMonth/index.js","../node_modules/date-fns/esm/endOfDay/index.js","../node_modules/date-fns/esm/endOfMonth/index.js","../src/utils/StringUtils.ts","../src/components/Offer/WrapperActionableOffer/component/confirming/ConfirmAcceptModal.tsx","../src/components/Offer/WrapperActionableOffer/component/confirming/ConfirmingCancelOrDeclineModal.tsx","../src/components/Offer/WrapperActionableOffer/component/confirming/index.tsx","../src/components/Offer/WrapperActionableOffer/component/ProcessingModal.tsx","../src/components/Offer/WrapperActionableOffer/useActionableOffer.ts","../src/components/Offer/WrapperActionableOffer/index.tsx","../src/components/AssetDetail/Offers/component/OfferItem/index.tsx","../src/components/AssetDetail/Offers/index.tsx","../src/components/AssetDetail/Properties/index.tsx","../src/components/AssetDetail/StatisticPrice/index.tsx","../src/components/AssetDetail/index.tsx","../src/components/Filters/FilterByType/index.tsx","../src/components/Filters/FilterByBundle/index.tsx","../src/components/Filters/FilterByCurrency/index.tsx","../src/components/Filters/FilterBySchema/components/SchemaItem.tsx","../src/components/Filters/FilterBySchema/index.tsx","../src/components/Filters/FilterByCollection/components/CollectionItem.tsx","../src/components/Filters/FilterByCollection/index.tsx","../src/components/Filters/index.tsx","../src/components/marketplace/useMarketPlaceFilter.tsx","../src/components/marketplace/component/NoData.tsx","../src/components/Filters/Sort/index.tsx","../src/components/Filters/SortAsset/index.tsx","../src/components/marketplace/component/SearchAndSort.tsx","../src/components/marketplace/component/ListAssets/index.tsx","../src/icon/account-avatar-default.tsx","../src/icon/copy.tsx","../src/components/UserInventory/components/UserInfo/index.tsx","../src/components/UserInventory/index.tsx","../src/components/UserInventory/useUserInventory.tsx","../src/components/UserOffers/components/OfferItem/index.tsx","../src/components/UserOffers/components/Offers/index.tsx","../src/components/UserOffers/components/OffersMade/index.tsx","../src/components/UserOffers/components/OffersReceived/index.tsx","../src/components/UserOffers/index.tsx","../src/components/marketplace/index.tsx","../src/components/MarketplaceWebComponent/index.tsx","../src/index.tsx"],"sourcesContent":["export const PAGE_SIZE = 12;\n\nexport interface Pagination {\n  current_page: number;\n  limit: number;\n  total_page: number;\n  total_items: number;\n}\n\nexport interface PaginationWithData<T> {\n  pagination: Pagination;\n  items: T[];\n}\n\nexport const defaultPagination: Pagination = {\n  current_page: 1,\n  limit: PAGE_SIZE,\n  total_items: 0,\n  total_page: 0,\n};\n","const stagingConfig = {\n  service: {\n    media: \"https://stg2-media.thh.io\",\n    ipfs: \"https://gateway.pinata.cloud/ipfs\",\n    marketplace: \"https://stg2-marketplace-ui.thh.io\",\n    marketplaceApi: \"https://stg2-marketplace-api.thh.io\",\n  },\n  chain: {\n    chainUrl: \"https://stg2-chain.thh.io\",\n    defaultTxOptions: {\n      blocksBehind: 3,\n      expireSeconds: 120,\n      broadcast: true,\n      allowRetry: true,\n    },\n  },\n  wallet: {\n    wax: {\n      autoSigningUrl: \"https://stg2-api-idm.thh.io/v1/accounts/auto-accept/\",\n      signingUrl: \"https://stg2-new-wallet.widney.io\",\n    },\n  },\n  common: {\n    isEnableDualSignature: false,\n    isDisableDualSale: true,\n  },\n};\n\nconst productionConfig = {\n  service: {\n    media: \"https://mediacache.wax.io\",\n    ipfs: \"https://gateway.pinata.cloud/ipfs\",\n    marketplace: \"https://virl.com\",\n    // marketplaceApi: \"https://wax.api.aa.atomichub.io\",\n    marketplaceApi: \"https://atomic.waxnet.io\",\n  },\n  chain: {\n    chainUrl: \"https://wax.greymass.com\",\n    defaultTxOptions: {\n      blocksBehind: 3,\n      expireSeconds: 120,\n      broadcast: true,\n      allowRetry: true,\n    },\n  },\n  wallet: {\n    wax: {\n      autoSigningUrl: undefined,\n      signingUrl: \"https://www.mycloudwallet.com\",\n    },\n  },\n  common: {\n    isEnableDualSignature: false,\n    isDisableDualSale: false,\n  },\n};\n\nconst appConfig =\n  process.env.REACT_APP_NODE_ENV === \"development\"\n    ? stagingConfig\n    : productionConfig;\n\nexport { appConfig };\n","import * as waxjs from \"@waxio/waxjs/dist\";\nimport { appConfig } from \"../config/AppConfig\";\n\ninterface WaxJsConfig {\n  userAccount: string;\n  pubKeys: string[];\n}\n\nconst { autoSigningUrl, signingUrl } = appConfig.wallet.wax;\nconst { chainUrl } = appConfig.chain;\n\nexport const wax = (config?: WaxJsConfig) => {\n\n  return new waxjs.WaxJS({\n    rpcEndpoint: chainUrl,\n    waxSigningURL: signingUrl || undefined,\n    waxAutoSigningURL: autoSigningUrl || undefined,\n    ...config,\n  });\n};\n\nexport const waxJs = wax();\n","import React, { useEffect } from \"react\";\nimport { useState } from \"react\";\nimport { waxJs } from \"../services/waxJS\";\n\nexport default function UseWaxAuthen() {\n  const [authen, setAuthen] = useState<Account>({\n    publicKeys: [],\n    isAuthen: false,\n    isOpenPopupLogin: false,\n  });\n\n  useEffect(() => {\n    autoLogin();\n  }, []);\n\n  async function login() {\n    try {\n      let userAccount = await waxJs.login();\n      let publicKeys = waxJs.pubKeys;\n      setAuthen({\n        userAccount,\n        isAuthen: true,\n        publicKeys,\n        isOpenPopupLogin: false,\n      });\n    } catch (e) {}\n  }\n\n  async function logout() {\n    await waxJs.logout();\n    setAuthen((prev) => ({\n      ...prev,\n      isAuthen: false,\n      userAccount: null\n    }));\n  }\n\n  async function autoLogin() {\n    let isAutoLoginAvailable = await waxJs.isAutoLoginAvailable();\n    if (isAutoLoginAvailable) {\n      let userAccount = waxJs.userAccount;\n      let publicKeys = waxJs.pubKeys;\n      setAuthen({\n        userAccount,\n        isAuthen: true,\n        publicKeys,\n        isOpenPopupLogin: false,\n      });\n    } else {\n    }\n  }\n\n  const openLoginPopup = () =>\n    setAuthen((prev) => ({ ...prev, isOpenPopupLogin: true }));\n\n  const closeLoginPopup = () =>\n    setAuthen((prev) => ({ ...prev, isOpenPopupLogin: false }));\n\n  return { authen, login, logout, closeLoginPopup, openLoginPopup };\n}\n\ninterface Account {\n  userAccount?: string;\n  isAuthen: boolean;\n  publicKeys?: string[];\n  isOpenPopupLogin: boolean;\n}\n\nexport const WaxAuthenContext = React.createContext<\n  ReturnType<typeof UseWaxAuthen>\n>({} as any);\n","import { Modal } from \"antd\";\nimport React, { useContext } from \"react\";\nimport { WaxAuthenContext } from \"../../hook/useWaxAuthen\";\n\ninterface Props {\n  isOpen: boolean;\n  onClose?: () => void;\n}\nexport default function Login({ isOpen, onClose }: Props) {\n  const { login } = useContext(WaxAuthenContext);\n  return (\n    <Modal\n      className=\"modal-without-footer\"\n      width={540}\n      title=\"\"\n      open={isOpen}\n      onCancel={onClose}\n      footer={<div style={{ padding: 0 }} />}\n    >\n      <div style={{ textAlign: \"center\", padding: 24 }}>\n        <h3 style={{ fontSize: 18, fontWeight: 700 }}>\n          CONNECT TO YOUR WALLET\n        </h3>\n        <p className=\"font-sm\" style={{ fontWeight: 400, paddingBottom: 24 }}>\n          Select your WAX wallets\n        </p>\n        <button\n          className=\"btn btn-primary-active\"\n          style={{ width: \"100%\" }}\n          onClick={(e) => login()}\n        >\n          CLOUD WALLET\n        </button>\n\n        <p className=\"font-sm\" style={{ paddingTop: 16 }}>\n          Don’t have a WAX Cloud Wallet account?{\" \"}\n          <a className=\"font-sm color-secondary\" href=\"https://wallet.wax.io/\">\n            Create a WAX Cloud Wallet Account.\n          </a>\n        </p>\n        <p className=\"font-sm\">\n          By connecting a wallet provider, I acknowledge that I have read an\n          accept the{\" \"}\n          <a className=\"font-sm color-secondary\" href=\"https://on.wax.io/tos/\">\n            Terms of Service\n          </a>{\" \"}\n          and{\" \"}\n          <a\n            className=\"font-sm color-secondary\"\n            href=\"https://on.wax.io/privacy/\"\n          >\n            Privacy Policy\n          </a>\n          .\n        </p>\n      </div>\n    </Modal>\n  );\n}\n","import axios, { AxiosInstance } from \"axios\";\nimport { appConfig } from \"../config/AppConfig\";\n\nexport const axiosClient: AxiosInstance = axios.create({\n    baseURL: appConfig.service.marketplaceApi,\n  });\n  ","import { BaseAsset } from \"./Asset\";\nimport { CollectionStatus } from \"./Collection\";\nimport { WithLabel } from \"./WithLabel\";\n\nexport type SaleType = \"rapid-sale\" | \"p2o\" | \"auction\";\n\nexport var saleTypes: WithLabel<SaleType>[] = [\n  {\n    label: \"Rapid Sale\",\n    value: \"rapid-sale\",\n  },\n  {\n    label: \"Auction\",\n    value: \"auction\",\n  },\n];\n\nexport enum ItemType {\n  SINGLE = 1,\n  BUNDLE = 2,\n}\n\nexport enum SaleState {\n  WAITING = 0,\n  LISTED = 1,\n  CANCELED = 2,\n  SOLD = 3,\n  DEFERRED_SALE_END = 4, // seller send nft to buyer\n  ADMIN_REMOVED = 5, // sale removed by admin\n}\n\nexport interface BaseSale<S = any> {\n  id: string;\n  asset_ids: string;\n  assets: BaseAsset[];\n  seller: string;\n  collection_name: string;\n  collection_status: CollectionStatus;\n  market_contract: string;\n  price: number;\n  price_symbol: string;\n  token_precision: number;\n  type: ItemType;\n  saleType: SaleType;\n  state: S;\n}\n\nexport interface Sale extends BaseSale<SaleState> {\n  first_asset_name: string;\n  min_asset_mint_id: number;\n  max_asset_mint_id: number;\n  buyer: string;\n  deferred_listing: boolean;\n  listing_fee: number;\n  start_at: number;\n  offer_id: string;\n  end_at: number;\n  settlement_symbol: string;\n  sale_id: string;\n  assets_contract: string;\n  created_at: number;\n  claimed_by: string;\n  is_auto_retrieve: boolean;\n  collection_status: number;\n}\n","import { AxiosInstance } from \"axios\";\nimport { appConfig } from \"../../config/AppConfig\";\nimport { axiosClient } from \"../apiConfig\";\ninterface AuctionRequestParams {\n  page?: number | string;\n  limit?: number | string;\n  collection_name?: string;\n  order?: \"asc\" | \"desc\";\n  seller_blacklist?: string;\n  sort?: string;\n  state?: number;\n  symbol?: string;\n  max_price?: number | string;\n  min_price?: number | string;\n  min_asset?: string;\n  max_assets?: string;\n  participant?: string;\n  search?: string;\n  collection_blacklist?: string;\n}\n\ninterface AuctionResponse {\n  success: boolean;\n  data: any[];\n  query_time: number;\n}\n\nexport class AtomicAuctionController {\n  private _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async getAuctions(params: AuctionRequestParams): Promise<AuctionResponse> {\n    return this._client\n      .get(`${appConfig.service.marketplaceApi}/atomicmarket/v1/auctions`, {\n        params,\n      })\n      .then((resp) => resp.data);\n  }\n}\n\nexport const atomicAuctionController = new AtomicAuctionController(axiosClient);\n","import { AxiosInstance } from \"axios\";\nimport { appConfig } from \"../../config/AppConfig\";\nimport { axiosClient } from \"../apiConfig\";\n\ninterface CollectionStatsRequestParams {\n  after?: string;\n  collection_blacklist?: string;\n  limit?: number;\n  order?: \"asc\" | \"desc\";\n  page?: number;\n  search?: string;\n  sort?: string;\n  symbol?: string;\n}\n\ninterface CollectionStats {\n  contract: string;\n  collection_name: string;\n  volume: string;\n  sales: string;\n  name: string;\n  img: string;\n  author: string;\n  allow_notify: boolean;\n  authorized_accounts: string[];\n  notify_accounts: string[];\n  market_fee: number;\n  data: {\n    img: string;\n    url: string;\n    name: string;\n    images?: string;\n    socials?: string;\n    description: string;\n    creator_info?: string;\n  };\n  created_at_time: string;\n  created_at_block: string;\n}\n\ninterface CollectionStatsResponse {\n  success: boolean;\n  data: {\n    symbol: {\n      token_symbol: string;\n      token_contract: string;\n      token_precision: number;\n    };\n    results: CollectionStats[];\n  };\n  query_time: number;\n}\n\nexport class AtomicCollectionController {\n  private _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async getMarketCollections(\n    params: CollectionStatsRequestParams\n  ): Promise<CollectionStatsResponse> {\n    const url = `${\n      appConfig.service.marketplaceApi\n    }/atomicmarket/v1/stats/collections?page=${params?.page ?? 1}&limit=${\n      params?.limit ?? 10\n    }`;\n    const body = {\n      ...params,\n      page: undefined,\n      limit: undefined,\n    };\n    return this._client.post(url, body).then((resp) => resp.data);\n  }\n}\n\nexport const atomicCollectionController = new AtomicCollectionController(\n  axiosClient\n);\n","import { AxiosInstance } from \"axios\";\nimport { appConfig } from \"../../config/AppConfig\";\nimport { axiosClient } from \"../apiConfig\";\ninterface SaleRequestParams {\n  collection_name?: string;\n  schema_name?: string;\n  limit?: number;\n  order?: \"asc\" | \"desc\";\n  page?: number;\n  seller_blacklist?: string;\n  collection_blacklist?: string;\n  collection_whitelist?: string;\n  sort?: string;\n  state?: number;\n  symbol?: string;\n  max_price?: number | string;\n  min_price?: number | string;\n  min_assets?: string;\n  max_assets?: string;\n  search?: string;\n  seller?: string;\n  sale_id?: string;\n  template_id?: string;\n}\n\ninterface SaleResponse {\n  success: boolean;\n  data: any[];\n  query_time: number;\n}\n\nexport class AtomicSaleController {\n  private _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async getSales(params: SaleRequestParams): Promise<SaleResponse> {\n    return this._client\n      .post(\n        `${appConfig.service.marketplaceApi}/atomicmarket/v2/sales?page=${\n          params?.page ?? 1\n        }&limit=${params?.limit ?? 10}`,\n        {\n          ...params,\n          state: String(params.state || 1),\n          page: undefined,\n          limit: undefined,\n        }\n      )\n      .then((resp) => resp.data);\n  }\n}\n\nexport const atomicSaleController = new AtomicSaleController(axiosClient);\n","import { AccountController } from \"./accountController\";\nimport { axiosClient } from \"./apiConfig\";\nimport { AssetController } from \"./assetController\";\nimport { AuctionController } from \"./auctionController\";\nimport { CollectionController } from \"./collectionController\";\nimport { CurrencyController } from \"./currencyController\";\nimport { OfferController } from \"./offerController\";\nimport { SaleController } from \"./saleController\";\nimport { SchemaController } from \"./schemaController\";\nimport { TemplateController } from \"./templateController\";\n\nexport const saleController = new SaleController(axiosClient);\nexport const auctionController = new AuctionController(axiosClient);\nexport const collectionController = new CollectionController(axiosClient);\nexport const schemaController = new SchemaController(axiosClient);\nexport const templateController = new TemplateController(axiosClient);\nexport const assetController = new AssetController(axiosClient);\nexport const accountController = new AccountController(axiosClient);\nexport const currencyController = new CurrencyController(axiosClient);\nexport const offerController = new OfferController(axiosClient);\n","import { AxiosInstance } from \"axios\";\nimport { PaginationWithData } from \"../types/Pagination\";\nimport { ItemType, Sale } from \"../types/Sale\";\nimport { axiosClient } from \"./apiConfig\";\nimport { atomicSaleController } from \"./atomic/saleController\";\n\nexport interface ListSaleProps {\n  collection_name?: string;\n  scope_collections?: string[];\n  category_id?: string;\n  collection_verified?: boolean;\n  collection_whitelisted?: boolean;\n  schema_name?: string;\n  template_id?: string;\n  search?: string;\n  participant?: string;\n  sort_by?: string;\n  sort_type?: string;\n  page?: number;\n  limit?: number;\n  max_price?: number;\n  min_price?: number;\n  seller?: string;\n  buyer?: string;\n  deferred_listing?: boolean;\n  type?: ItemType;\n  price_symbol?: string;\n  settlement_token?: \"WAX\" | \"BRWL\";\n  isOwnerLoggedIn?: boolean;\n  isMarketplace?: boolean;\n  exclude_virl_sale_ids?: string | string[];\n  virl_sale_ids?: string | string[];\n  state?: string;\n\n  seller_blacklist?: string;\n  collection_blacklist?: string;\n  collection_whitelist?: string;\n  sale_id?: string;\n}\n\nexport class SaleController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async list(props: ListSaleProps): Promise<PaginationWithData<Sale>> {\n    const {\n      limit,\n      page,\n      collection_name,\n      sort_by,\n      sort_type,\n      type,\n      min_price,\n      max_price,\n      search,\n      state,\n      seller,\n      seller_blacklist,\n      collection_blacklist,\n      schema_name,\n      sale_id,\n    } = props;\n    // if (props.price_symbol) {\n    //   props.price_symbol = props.price_symbol.toUpperCase();\n    // }\n    // return axiosClient\n    //   .get(\"v1/public-api/sales\", {\n    //     params: {\n    //       ...props,\n    //       scope_collections: props.scope_collections?.join(\",\"),\n    //     },\n    //   })\n    //   .then((resp) => resp.data);\n\n    const result = await atomicSaleController.getSales({\n      limit,\n      page,\n      collection_name: props.collection_name,\n      sort: sort_by,\n      order: sort_type as \"asc\" | \"desc\",\n      max_assets: type === ItemType.SINGLE ? \"1\" : undefined,\n      min_assets: type == ItemType.BUNDLE ? \"2\" : undefined,\n      min_price: min_price && String(min_price),\n      max_price: max_price && String(max_price),\n      symbol: \"WAX\",\n      search,\n      state: state ? Number(state.split(\",\")?.[0]) : undefined,\n      seller,\n      seller_blacklist,\n      collection_blacklist,\n      collection_whitelist: props.scope_collections?.join(\",\"),\n      schema_name,\n      sale_id,\n    });\n\n    console.log(result);\n\n    return {\n      pagination: {\n        current_page: page,\n        limit,\n        total_page: result.data.length < limit ? 1 : 99999,\n        total_items: result.data.length < limit ? 1 : 99999,\n      },\n      items: result.data.map((sale) => ({\n        ...sale,\n        price_symbol: sale.listing_symbol,\n        price: sale.listing_price,\n        token_precision: sale.listing_symbol == \"USD\" ? 2 : 8,\n        settlement_symbol: `${sale.price.token_precision},${sale.price.token_symbol}`,\n        assets: sale.assets.map((asset) => ({\n          ...asset,\n          image: asset.data.img,\n          video: asset.data.video,\n          audio: asset.data.audio,\n        })),\n      })),\n    };\n  }\n\n  async listByAssetIds(assetIds: string) {\n    return axiosClient\n      .get(`v1/public-api/market-sales/${assetIds}`)\n      .then((resp) => resp.data);\n  }\n\n  async get(contract: string, id: string) {\n    return axiosClient\n      .get(`v1/public-api/sales/${contract}/${id}`)\n      .then((resp) => resp.data);\n  }\n}\n","import { AxiosInstance } from \"axios\";\nimport { Auction } from \"../types/Auction\";\nimport { PaginationWithData } from \"../types/Pagination\";\nimport { axiosClient } from \"./apiConfig\";\nimport { ListSaleProps } from \"./saleController\";\nimport { ItemType } from \"../types/Sale\";\nimport { atomicAuctionController } from \"./atomic/auctionController\";\n\nexport interface ListAuctionProps extends ListSaleProps {}\n\nexport class AuctionController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async list(props: ListAuctionProps): Promise<PaginationWithData<any>> {\n    // delete props.price_symbol;\n    // return axiosClient\n    //   .get(\"v2/public-api/auctions\", {\n    //     params: {\n    //       ...props,\n\n    //       scope_collections: props.scope_collections?.join(\",\"),\n    //     },\n    //   })\n    //   .then((resp) => {\n    //     return resp.data;\n    //   });\n\n    const result = await atomicAuctionController.getAuctions({\n      limit: props.limit,\n      page: props.page,\n      collection_name:\n        props.collection_name || props.scope_collections?.join(\",\"),\n      sort: props.sort_by,\n      order: props.sort_type as \"asc\" | \"desc\",\n      max_assets:\n        (props.type as unknown as ItemType) === ItemType.SINGLE\n          ? \"1\"\n          : undefined,\n      min_asset:\n        (props.type as unknown as ItemType) == ItemType.BUNDLE\n          ? \"2\"\n          : undefined,\n      min_price: props.min_price,\n      max_price: props.max_price,\n      search: props.search,\n      seller_blacklist: props.seller_blacklist,\n      collection_blacklist: props.collection_blacklist,\n      state: 1,\n    });\n\n    const data = {\n      pagination: {\n        current_page: props.page as number,\n        limit: props.limit as number,\n        total_page: result.data.length < (props.limit as number) ? 1 : 99999,\n        total_items: result.data.length < (props.limit as number) ? 1 : 99999,\n      },\n      items: result.data.map((auction) => ({\n        ...auction,\n        bid_count: auction.bids.length,\n        listing_symbol: auction.price.token_symbol,\n        listing_price: auction.price.amount,\n        price: auction.price.amount,\n        token_precision: auction.price.token_precision,\n        end_time: Number(auction.end_time),\n        settlement_symbol: `${auction.price.token_precision},${auction.price.token_symbol}`,\n        token_symbol: auction.price.token_symbol,\n        assets: auction.assets.map((asset) => ({\n          ...asset,\n          image: asset.data.img,\n          video: asset.data.video,\n          audio: asset.data.audio,\n        })),\n      })),\n    };\n\n    console.log({ data });\n\n    return data;\n  }\n\n  async get(contract: string, id: string): Promise<Auction> {\n    return axiosClient\n      .get(`v2/public-api//auctions/${contract}/${id}`)\n      .then((resp) => resp.data);\n  }\n}\n","import { AxiosInstance } from \"axios\";\nimport { Collection } from \"../types/Collection\";\nimport { atomicCollectionController } from \"./atomic/collectionController\";\n\nexport interface CollectionListProps {\n  match?: string;\n  type?: number;\n  collection_verified?: boolean;\n  collection_whitelisted?: boolean;\n  page?: number;\n  limit?: number;\n}\n\nexport class CollectionController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async list(params: CollectionListProps): Promise<Collection[]> {\n    const resp = await atomicCollectionController.getMarketCollections({\n      ...params,\n      page: params.page,\n      limit: params.limit,\n      symbol: \"WAX\",\n      search: params.match,\n    });\n    return resp.data.results.map((item: any) => ({\n      ...item,\n      contract: item.collection_name,\n      name: item.collection_name,\n      image: item.image || item.img,\n      volume: item.volume,\n    }));\n  }\n\n  async inventoryList(\n    account: string,\n    params: CollectionListProps\n  ): Promise<Collection[]> {\n    return this._client\n      .get(`v1/public-api/inventory_collections/${account}`, { params })\n      .then((resp) => {\n        return resp.data;\n      });\n  }\n\n  async get(contract: string, collectionName: string): Promise<Collection> {\n    return this._client\n      .get(`v1/public-api/collections/${contract}/${collectionName}`)\n      .then((resp) => {\n        return resp.data;\n      });\n  }\n}\n","import { AxiosInstance } from \"axios\";\nimport { Schema } from \"../types/Schema\";\n\nexport interface SchemaListProps {\n  collection_name: string;\n}\n\nexport class SchemaController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async list(params: SchemaListProps): Promise<Schema[]> {\n    return [];\n    return this._client\n      .get(\"v1/public-api/schemas\", { params })\n      .then((resp) => {\n        return resp.data;\n      });\n  }\n}\n","import { AxiosInstance } from \"axios\";\nimport { PriceHistoryHistoricalItem } from \"../types/PriceHistoryHistoricalItem\";\nimport { PriceHistoryStatistic } from \"../types/PriceHistoryStatistic\";\n\nexport interface FilterPriceHistoryProps {\n  collectionName: string;\n  templateId: number;\n  from?: Date;\n  to?: Date;\n}\n\nexport class TemplateController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  getPriceHistory(\n    params: FilterPriceHistoryProps\n  ): Promise<PriceHistoryHistoricalItem[]> {\n    return this._client\n      .get(\"/v1/public-api/templates/price-history\", { params })\n      .then((resp) => resp.data);\n  }\n\n  getStatisticPriceHistory(\n    params: FilterPriceHistoryProps\n  ): Promise<PriceHistoryStatistic> {\n    params.from = undefined;\n    params.to = undefined;\n    return this._client\n      .get(\"v1/public-api/templates/statistic-price-history\", { params })\n      .then((resp) => resp.data);\n  }\n}\n","import { AxiosInstance } from \"axios\";\nimport _ from \"lodash\";\nimport { Asset } from \"../types/Asset\";\nimport { PaginationWithData } from \"../types/Pagination\";\nimport { Sale } from \"../types/Sale\";\nimport { axiosClient } from \"./apiConfig\";\n\nexport interface ListAssetProps {\n  collection_name?: string;\n  scope_collections?: string[];\n  schema_name?: string;\n  template_id?: string;\n  search?: string;\n  sort_by?: string;\n  sort_type?: string;\n  page?: number;\n  limit?: number;\n  owner?: string;\n  collection_whitelisted?: boolean;\n  collection_verified?: boolean;\n}\n\nexport class AssetController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async list(props: ListAssetProps): Promise<PaginationWithData<Asset>> {\n    props = _.pick(\n      props,\n      \"collection_name\",\n      'page',\n      \"limit\",\n      \"owner\",\n      \"schema_name\",\n      \"scope_collections\",\n      \"search\",\n      \"sort_by\",\n      \"sort_type\",\n      \"template_id\",\n      \"collection_verified\",\n      \"collection_whitelisted\"\n    );\n    return axiosClient\n      .get(\"v2/public-api/assets\", {\n        params: {\n          ...props,\n          scope_collections: props.scope_collections?.join(\",\"),\n        },\n      })\n      .then((resp) => ({\n        items: resp.data.assets,\n        pagination: resp.data.pagination,\n      }));\n  }\n  \n}\n","import { AxiosInstance } from \"axios\";\nimport _ from \"lodash\";\nimport { Account } from \"../types/Account\";\nimport { axiosClient } from \"./apiConfig\";\n\nexport class AccountController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async get(userAccount: string): Promise<Account> {\n    return Promise.resolve({\n      accountName: userAccount,\n      assets: 1,\n      templates: [],\n      collections: [],\n      avatarReferralAssetId: \"\",\n      deletedAt: null,\n      avatarUrl: \"\",\n      createdAt: new Date().toISOString(),\n      updatedAt: new Date().toISOString(),\n    });\n    // return axiosClient\n    //   .get(`v1/public-api/account/${userAccount}`, {})\n    //   .then((resp) => resp.data);\n  }\n}\n","import { AxiosInstance } from \"axios\";\nimport { ConvertedRateTarget } from \"../types/Rate\";\n\nexport class CurrencyController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async getRate(\n    target: ConvertedRateTarget\n  ): Promise<Record<ConvertedRateTarget, number>> {\n    return {\n      waxpusd: 0,\n      usdwaxp: 0,\n    };\n    return this._client\n      .get(`v1/public-api/conversionRate?target=${target}`)\n      .then((resp) => resp.data);\n  }\n}\n","import { AxiosInstance } from \"axios\";\nimport { Offer } from \"../types/Offer\";\nimport { PaginationWithData } from \"../types/Pagination\";\n\nexport interface ListOfferParams {\n  asset_ids?: string;\n  seller?: string;\n  buyer?: string;\n  sort_by: string;\n  sort_type: \"asc\" | \"desc\";\n  page?: number;\n  limit?: number;\n}\n\nexport class OfferController {\n  _client: AxiosInstance;\n\n  constructor(client: AxiosInstance) {\n    this._client = client;\n  }\n\n  async list(params: ListOfferParams): Promise<PaginationWithData<Offer>> {\n    return this._client\n      .get(\"v1/public-api/buyoffers\", { params })\n      .then((resp) => {\n        return resp.data;\n      });\n  }\n}\n","import { Asset } from \"../types/Asset\";\nimport { Auction } from \"../types/Auction\";\nimport { Sale } from \"../types/Sale\";\n\nexport const normalizeAsset = (a: Asset) => ({\n  ...a,\n  id: a.asset_id,\n  image:\n    a.properties?.previewImage ||\n    a.properties?.image ||\n    a.properties?.img ||\n    a.image ||\n    a.img,\n  video: a.video || a.properties?.video,\n  audio: a.audio || a.properties?.audio,\n  sales: a.sales?.map((s) => ({\n    id: s.sale_id,\n    ...s,\n    collection_status: a.collection_status,\n    seller: a.owner,\n    assets: s.assets.map((a1) => ({\n      ...a1,\n      image:\n        a1.properties?.previewImage ||\n        a1.properties?.image ||\n        a1.properties?.img ||\n        a1.image ||\n        a1.img,\n      video: a1.video || a1.properties?.video,\n      audio: a1.audio || a1.properties?.audio,\n      collection_status: a.collection_status,\n    })),\n  })),\n  auctions: a.auctions?.map((auction) => ({\n    ...auction,\n    seller: a.owner,\n    assets: [a],\n    price_symbol: auction.token_symbol,\n  })),\n});\n\nexport const normalizeSale = (s: Sale) =>\n  ({\n    ...s,\n    id: s.sale_id,\n    saleType: s.deferred_listing ? \"p2o\" : \"rapid-sale\",\n    assets: s.assets.map((a) => ({\n      ...a,\n      image: a.previewImage || a.image || a.img,\n      collection_name: s.collection_name,\n      collection_status: s.collection_status,\n    })),\n  } as Sale);\n\nexport const normalizeAuction = (auction: Auction) =>\n  ({\n    ...auction,\n    id: auction.auction_id,\n    saleType: \"auction\",\n    price_symbol: auction.token_symbol,\n    assets: auction?.assets?.map((a) => ({\n      ...a,\n      image: a.previewImage || a.image || a.img,\n      collection_name: auction.collection_name,\n      collection_status: auction.collection_status,\n    })),\n  } as Auction);\n","export const priceWithCurrencyToString = (\n  currency: string,\n  price: number,\n  tokenPrecision: number\n) => {\n  var formattedPrice = formatPrice(currency, price, tokenPrecision);\n  switch (currency.toLocaleLowerCase()) {\n    case \"usd\":\n      return `$${formattedPrice}`;\n\n    case \"wax\":\n      return `${formattedPrice} WAXP`;\n    default:\n      break;\n  }\n};\n\n\nexport const formatPrice = (\n  currency: string,\n  price: number,\n  tokenPrecision: number\n) => {\n  price = price / Math.pow(10, tokenPrecision);\n  switch (currency.toLocaleLowerCase()) {\n    case \"usd\":\n      return `${price.toFixed(2)}`;\n\n    case \"wax\":\n      return `${price.toFixed(2)}`;\n    default:\n      break;\n  }\n};\n","import React, { useEffect, useState } from \"react\";\nimport { currencyController } from \"../controller\";\nimport { ConvertedRateTarget } from \"../types/Rate\";\n\nexport default function UseCurrency() {\n  const [state, setState] = useState<State>({});\n  useEffect(() => {\n    fetchRates();\n  }, []);\n\n  const fetchRates = async () => {\n    const rates = await Promise.all([\n      currencyController.getRate(\"usdwaxp\"),\n      currencyController.getRate(\"waxpusd\"),\n    ]);\n    setState({\n      rates: rates.reduce(\n        (rates, rate) => ({ ...rates, ...rate }),\n        {} as Record<ConvertedRateTarget, number>\n      ),\n    });\n  };\n\n  const getRate = (target: ConvertedRateTarget) => state.rates[target];\n\n  return { ...state, getRate };\n}\n\ninterface State {\n  rates?: Record<ConvertedRateTarget, number>;\n}\n\nexport const CurrencyContext = React.createContext<\n  ReturnType<typeof UseCurrency>\n>({} as any);\n","import React from \"react\";\n\ninterface Props {\n  height?: number;\n  width?: number;\n}\nexport default function WaxCurrencyIcon({ height = 40, width = 40 }: Props) {\n  return (\n    <svg\n      width={width}\n      height={height}\n      viewBox={`0 0 ${height} ${width}`}\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n    >\n      <circle\n        cx={width / 2}\n        cy={height / 2}\n        r={height / 2}\n        fill=\"url(#pattern0)\"\n      />\n      <defs>\n        <pattern\n          id=\"pattern0\"\n          patternContentUnits=\"objectBoundingBox\"\n          width=\"1\"\n          height=\"1\"\n        >\n          <use xlinkHref=\"#image0_7424_20861\" transform=\"scale(0.00390625)\" />\n        </pattern>\n        <image\n          id=\"image0_7424_20861\"\n          width=\"256\"\n          height=\"256\"\n          xlinkHref=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAOhmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMTEtMTVUMTE6MzM6NDArMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTA5LTI0VDIxOjIzOjI5KzAyOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTA5LTI0VDIxOjIzOjI5KzAyOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg4ODJiZmFmLTMyZGUtNGZjOC04MTA1LTQ1OGJjNTU4NDM4MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjAxMjM3NTZkLTc0NmItOTI0MC1iMjI4LWQ0NzljZmFjY2MyNyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmQ1N2VkNTRmLTU3NWUtNDA4OC1iMTNmLTk5MGY2Mzk1NGE5MCIgdGlmZjpPcmllbnRhdGlvbj0iMSIgdGlmZjpYUmVzb2x1dGlvbj0iNzIwMDAwLzEwMDAwIiB0aWZmOllSZXNvbHV0aW9uPSI3MjAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjE3NjYiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSI1MTkiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6ZWQ5MDFjZDItMDY5Ny1mNjRlLWE5NTktYzEyMzYwNTg4NDZiPC9yZGY6bGk+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZDU3ZWQ1NGYtNTc1ZS00MDg4LWIxM2YtOTkwZjYzOTU0YTkwIiBzdEV2dDp3aGVuPSIyMDE4LTExLTE1VDExOjMzOjQwKzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2UwY2Y3NmUtZjJjNC00MmRmLTk2NDAtMzc1ZTNlYmJlZDlkIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTIyVDIwOjA0OjI3KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MzQ1ZGQ0ZTAtNGY1Ni00MmJjLTg4OWEtNDlkMWU1MzkxNjBmIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTIyVDIwOjExOjMxKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGltYWdlL3BuZyB0byBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBpbWFnZS9wbmcgdG8gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2UzYjFiNmMtZDczZi00YzExLTg3Y2YtMmNjZTFkNjY5NGU4IiBzdEV2dDp3aGVuPSIyMDIwLTA5LTIyVDIwOjExOjMxKzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Zjc1NDFlOTItNTcxZS00YzY4LTgzMWMtZmE2YzZmNjUwNDJiIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTI0VDIxOjIyOjI0KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MzcxZGE0N2YtMDlkYi00ZjI5LTg5ZjItMmNjNmZiYmRiNGQwIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTI0VDIxOjIyOjI0KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODg4MmJmYWYtMzJkZS00ZmM4LTgxMDUtNDU4YmM1NTg0MzgxIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTI0VDIxOjIzOjI5KzAyOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Zjc1NDFlOTItNTcxZS00YzY4LTgzMWMtZmE2YzZmNjUwNDJiIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90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\"\n        />\n      </defs>\n    </svg>\n  );\n}\n","export const DSL_PERMISSION = \"dsl\";\nexport const DELAY_VERIFY_TRANSACTION_IN_MS = 1000;\nexport const NO_TEMPLATE = \"no template\";\nexport const AUTO_RETRIVE_COLLECTION = [\"bcbrawlers\"];\nexport const AUTO_RETRIVE_SCHEMA = [\"series1\", \"brawler\"];\nexport const waxCurrency = \"wax\";\nexport const usdCurrency = \"usd\";\n\nexport const CONVERT_WAXP_USD_PARAMS = {\n  QUOTE_PRECISION: 4,\n  TO_SYMBOL_PRECISION: 2,\n  FROM_QUANTITY_SYMBOL_PRECISION: 8,\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED          = 1;\n//const Z_HUFFMAN_ONLY      = 2;\n//const Z_RLE               = 3;\nconst Z_FIXED               = 4;\n//const Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY              = 0;\nconst Z_TEXT                = 1;\n//const Z_ASCII             = 1; // = Z_TEXT\nconst Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES    = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH    = 3;\nconst MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES       = 30;\n/* number of distance codes */\n\nconst BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nconst MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK   = 256;\n/* end of block literal code */\n\nconst REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits =   /* extra bits for each length code */\n  new Uint8Array([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]);\n\nconst extra_dbits =   /* extra bits for each distance code */\n  new Uint8Array([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]);\n\nconst extra_blbits =  /* extra bits for each bit length code */\n  new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n  new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n  let res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nconst gen_bitlen = (s, desc) =>\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  const tree            = desc.dyn_tree;\n  const max_code        = desc.max_code;\n  const stree           = desc.stat_desc.static_tree;\n  const has_stree       = desc.stat_desc.has_stree;\n  const extra           = desc.stat_desc.extra_bits;\n  const base            = desc.stat_desc.extra_base;\n  const max_length      = desc.stat_desc.max_length;\n  let h;              /* heap index */\n  let n, m;           /* iterate over the tree elements */\n  let bits;           /* bit length */\n  let xbits;          /* extra bits */\n  let f;              /* frequency */\n  let overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) =>\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  const next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  let code = 0;              /* running code value */\n  let bits;                  /* bit index */\n  let n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    let len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n};\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nconst tr_static_init = () => {\n\n  let n;        /* iterates over tree elements */\n  let bits;     /* bit counter */\n  let length;   /* length value */\n  let code;     /* code value */\n  let dist;     /* distance index */\n  const bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n  let n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nconst copy_block = (s, buf, len, header) =>\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  s.pending_buf.set(s.window.subarray(buf, buf + len), s.pending);\n  s.pending += len;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n  const _n2 = n * 2;\n  const _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) =>\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  const v = s.heap[k];\n  let j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) =>\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  let dist;           /* distance of matched string */\n  let lc;             /* match length or unmatched char (if dist == 0) */\n  let lx = 0;         /* running index in l_buf */\n  let code;           /* the code to send */\n  let extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) =>\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  const tree     = desc.dyn_tree;\n  const stree    = desc.stat_desc.static_tree;\n  const has_stree = desc.stat_desc.has_stree;\n  const elems    = desc.stat_desc.elems;\n  let n, m;          /* iterate over heap elements */\n  let max_code = -1; /* largest code with non zero frequency */\n  let node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) =>\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  let n;                     /* iterates over all tree elements */\n  let prevlen = -1;          /* last emitted length */\n  let curlen;                /* length of current code */\n\n  let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  let count = 0;             /* repeat count of the current code */\n  let max_count = 7;         /* max repeat count */\n  let min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) =>\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  let n;                     /* iterates over all tree elements */\n  let prevlen = -1;          /* last emitted length */\n  let curlen;                /* length of current code */\n\n  let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  let count = 0;             /* repeat count of the current code */\n  let max_count = 7;         /* max repeat count */\n  let min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n  let max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) =>\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  let rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  let black_mask = 0xf3ffc07f;\n  let n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init = (s) =>\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align = (s) => {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nconst _tr_flush_block = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  let opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  let max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally = (s, dist, lc) =>\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //let out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n};\n\nmodule.exports._tr_init  = _tr_init;\nmodule.exports._tr_stored_block = _tr_stored_block;\nmodule.exports._tr_flush_block  = _tr_flush_block;\nmodule.exports._tr_tally = _tr_tally;\nmodule.exports._tr_align = _tr_align;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n  let s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n};\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n  let c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n  const t = crcTable;\n  const end = pos + len;\n\n  crc ^= -1;\n\n  for (let i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n};\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  Z_MEM_ERROR:       -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = require('./trees');\nconst adler32 = require('./adler32');\nconst crc32   = require('./crc32');\nconst msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH, Z_PARTIAL_FLUSH, Z_FULL_FLUSH, Z_FINISH, Z_BLOCK,\n  Z_OK, Z_STREAM_END, Z_STREAM_ERROR, Z_DATA_ERROR, Z_BUF_ERROR,\n  Z_DEFAULT_COMPRESSION,\n  Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY,\n  Z_UNKNOWN,\n  Z_DEFLATED\n} = require('./constants');\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS      = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES       = 30;\n/* number of distance codes */\nconst BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42;\nconst EXTRA_STATE = 69;\nconst NAME_STATE = 73;\nconst COMMENT_STATE = 91;\nconst HCRC_STATE = 103;\nconst BUSY_STATE = 113;\nconst FINISH_STATE = 666;\n\nconst BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE     = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n  strm.msg = msg[errorCode];\n  return errorCode;\n};\n\nconst rank = (f) => {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n  let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n  const s = strm.state;\n\n  //_tr_flush_bits(s);\n  let len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n};\n\n\nconst flush_block_only = (s, last) => {\n  _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n  s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n  //  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n  let len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n  let chain_length = s.max_chain_length;      /* max hash chain length */\n  let scan = s.strstart; /* current string */\n  let match;                       /* matched string */\n  let len;                           /* length of current match */\n  let best_len = s.prev_length;              /* best match length so far */\n  let nice_match = s.nice_match;             /* stop if match long enough */\n  const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  const _win = s.window; // shortcut\n\n  const wmask = s.w_mask;\n  const prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  const strend = s.strstart + MAX_MATCH;\n  let scan_end1  = _win[scan + best_len - 1];\n  let scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nconst fill_window = (s) => {\n\n  const _w_size = s.w_size;\n  let p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      s.window.set(s.window.subarray(_w_size, _w_size + _w_size), 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    const curr = s.strstart + s.lookahead;\n//    let init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nconst deflate_stored = (s, flush) => {\n\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  let max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    const max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n};\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n  let hash_head;        /* head of the hash chain */\n  let bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n  let hash_head;          /* head of hash chain */\n  let bflush;              /* set if current block must be flushed */\n\n  let max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n  let bflush;            /* set if current block must be flushed */\n  let prev;              /* byte at distance one to match */\n  let scan, strend;      /* scan goes up to strend for length of run */\n\n  const _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n  let bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = _tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nconst configuration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new Uint16Array(HEAP_SIZE * 2);\n  this.dyn_dtree  = new Uint16Array((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new Uint16Array((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new Uint16Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new Uint16Array(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nconst deflateResetKeep = (strm) => {\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  const s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  _tr_init(s);\n  return Z_OK;\n};\n\n\nconst deflateReset = (strm) => {\n\n  const ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  let wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  const s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new Uint8Array(s.w_size * 2);\n  s.head = new Uint16Array(s.hash_size);\n  s.prev = new Uint16Array(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n};\n\n\nconst deflate = (strm, flush) => {\n\n  let beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  const s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  const old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      let header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      let level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    let bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        _tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        _tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n};\n\n\nconst deflateEnd = (strm) => {\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  const status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n  let dictLength = dictionary.length;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  const s = strm.state;\n  const wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    let tmpDict = new Uint8Array(s.w_size);\n    tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  const avail = strm.avail_in;\n  const next = strm.next_in;\n  const input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    let str = s.strstart;\n    let n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n};\n\n\nmodule.exports.deflateInit = deflateInit;\nmodule.exports.deflateInit2 = deflateInit2;\nmodule.exports.deflateReset = deflateReset;\nmodule.exports.deflateResetKeep = deflateResetKeep;\nmodule.exports.deflateSetHeader = deflateSetHeader;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateEnd = deflateEnd;\nmodule.exports.deflateSetDictionary = deflateSetDictionary;\nmodule.exports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n\nconst _has = (obj, key) => {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nmodule.exports.assign = function (obj /*from1, from2, from3, ...*/) {\n  const sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    const source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (const p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// Join array of chunks to single array.\nmodule.exports.flattenChunks = (chunks) => {\n  // calculate data length\n  let len = 0;\n\n  for (let i = 0, l = chunks.length; i < l; i++) {\n    len += chunks[i].length;\n  }\n\n  // join chunks\n  const result = new Uint8Array(len);\n\n  for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n    let chunk = chunks[i];\n    result.set(chunk, pos);\n    pos += chunk.length;\n  }\n\n  return result;\n};\n","// String encode/decode helpers\n'use strict';\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nmodule.exports.string2buf = (str) => {\n  let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new Uint8Array(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if (buf.subarray && STR_APPLY_UIA_OK) {\n      return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n    }\n  }\n\n  let result = '';\n  for (let i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n};\n\n\n// convert array to string\nmodule.exports.buf2string = (buf, max) => {\n  let i, out;\n  const len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  const utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    let c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    let c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nmodule.exports.utf8border = (buf, max) => {\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  let pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n\nconst zlib_deflate = require('./zlib/deflate');\nconst utils        = require('./utils/common');\nconst strings      = require('./utils/strings');\nconst msg          = require('./zlib/messages');\nconst ZStream      = require('./zlib/zstream');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH,\n  Z_OK, Z_STREAM_END,\n  Z_DEFAULT_COMPRESSION,\n  Z_DEFAULT_STRATEGY,\n  Z_DEFLATED\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n *   , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY\n  }, options || {});\n\n  let opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  let status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    let dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, flush_mode) {\n  const strm = this.strm;\n  const chunkSize = this.options.chunkSize;\n  let status, _flush_mode;\n\n  if (this.ended) { return false; }\n\n  if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n  else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  for (;;) {\n    if (strm.avail_out === 0) {\n      strm.output = new Uint8Array(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    // Make sure avail_out > 6 to avoid repeating markers\n    if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n      this.onData(strm.output.subarray(0, strm.next_out));\n      strm.avail_out = 0;\n      continue;\n    }\n\n    status = zlib_deflate.deflate(strm, _flush_mode);\n\n    // Ended => flush and finish\n    if (status === Z_STREAM_END) {\n      if (strm.next_out > 0) {\n        this.onData(strm.output.subarray(0, strm.next_out));\n      }\n      status = zlib_deflate.deflateEnd(this.strm);\n      this.onEnd(status);\n      this.ended = true;\n      return status === Z_OK;\n    }\n\n    // Flush if out buffer full\n    if (strm.avail_out === 0) {\n      this.onData(strm.output);\n      continue;\n    }\n\n    // Flush if requested and has data\n    if (_flush_mode > 0 && strm.next_out > 0) {\n      this.onData(strm.output.subarray(0, strm.next_out));\n      strm.avail_out = 0;\n      continue;\n    }\n\n    if (strm.avail_in === 0) break;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    this.result = utils.flattenChunks(this.chunks);\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  const deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nmodule.exports.Deflate = Deflate;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateRaw = deflateRaw;\nmodule.exports.gzip = gzip;\nmodule.exports.constants = require('./zlib/constants');\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD = 30;       /* got a data error -- remain here until reset */\nconst TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  let _in;                    /* local strm.input */\n  let last;                   /* have enough input while in < last */\n  let _out;                   /* local strm.output */\n  let beg;                    /* inflate()'s initial strm.output */\n  let end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  let dmax;                   /* maximum distance from zlib header */\n//#endif\n  let wsize;                  /* window size or zero if not using window */\n  let whave;                  /* valid bytes in the window */\n  let wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  let s_window;               /* allocated sliding window, if wsize != 0 */\n  let hold;                   /* local strm.hold */\n  let bits;                   /* local strm.bits */\n  let lcode;                  /* local strm.lencode */\n  let dcode;                  /* local strm.distcode */\n  let lmask;                  /* mask for first level of length codes */\n  let dmask;                  /* mask for first level of distance codes */\n  let here;                   /* retrieved table entry */\n  let op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  let len;                    /* match length, unused bytes */\n  let dist;                   /* match distance */\n  let from;                   /* where to copy match from */\n  let from_source;\n\n\n  let input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  const state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n  const bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  let len = 0;               /* a code's length in bits */\n  let sym = 0;               /* index of code symbols */\n  let min = 0, max = 0;          /* minimum and maximum code lengths */\n  let root = 0;              /* number of index bits for root table */\n  let curr = 0;              /* number of index bits for current table */\n  let drop = 0;              /* code bits to drop for sub-table */\n  let left = 0;                   /* number of prefix codes available */\n  let used = 0;              /* code entries in table used */\n  let huff = 0;              /* Huffman code */\n  let incr;              /* for incrementing code, index */\n  let fill;              /* index for replicating entries */\n  let low;               /* low bits for current root entry */\n  let mask;              /* mask for low root bits */\n  let next;             /* next available space in table */\n  let base = null;     /* base value table to use */\n  let base_index = 0;\n//  let shoextra;    /* extra bits table to use */\n  let end;                    /* use base and extra for symbol > end */\n  const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  let extra = null;\n  let extra_index = 0;\n\n  let here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n\n\nmodule.exports = inflate_table;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32       = require('./adler32');\nconst crc32         = require('./crc32');\nconst inflate_fast  = require('./inffast');\nconst inflate_table = require('./inftrees');\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_FINISH, Z_BLOCK, Z_TREES,\n  Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR, Z_BUF_ERROR,\n  Z_DEFLATED\n} = require('./constants');\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst    HEAD = 1;       /* i: waiting for magic header */\nconst    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nconst    TIME = 3;       /* i: waiting for modification time (gzip) */\nconst    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nconst    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nconst    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nconst    NAME = 7;       /* i: waiting for end of file name (gzip) */\nconst    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nconst    HCRC = 9;       /* i: waiting for header crc (gzip) */\nconst    DICTID = 10;    /* i: waiting for dictionary check value */\nconst    DICT = 11;      /* waiting for inflateSetDictionary() call */\nconst        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nconst        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nconst        STORED = 14;    /* i: waiting for stored size (length and complement) */\nconst        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nconst        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nconst        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nconst        LENLENS = 18;   /* i: waiting for code length code lengths */\nconst        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nconst            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nconst            LEN = 21;       /* i: waiting for length/lit/eob code */\nconst            LENEXT = 22;    /* i: waiting for length extra bits */\nconst            DIST = 23;      /* i: waiting for distance code */\nconst            DISTEXT = 24;   /* i: waiting for distance extra bits */\nconst            MATCH = 25;     /* o: waiting for output space to copy string */\nconst            LIT = 26;       /* o: waiting for output space to write literal */\nconst    CHECK = 27;     /* i: waiting for 32-bit check value */\nconst    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nconst    DONE = 29;      /* finished check, done -- remain here until reset */\nconst    BAD = 30;       /* got a data error -- remain here until reset */\nconst    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nconst    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n  this.work = new Uint16Array(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new Int32Array(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\n\nconst inflateResetKeep = (strm) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  const state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n  state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n};\n\n\nconst inflateReset = (strm) => {\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  const state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n  let wrap;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  const state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  const state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  const ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n  return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    lenfix = new Int32Array(512);\n    distfix = new Int32Array(32);\n\n    /* literal/length table */\n    let sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n  let dist;\n  const state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new Uint8Array(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    state.window.set(src.subarray(end - state.wsize, end), 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      state.window.set(src.subarray(end - copy, end), 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n};\n\n\nconst inflate = (strm, flush) => {\n\n  let state;\n  let input, output;          // input/output buffers\n  let next;                   /* next input INDEX */\n  let put;                    /* next output INDEX */\n  let have, left;             /* available input and output */\n  let hold;                   /* bit buffer */\n  let bits;                   /* bits in bit buffer */\n  let _in, _out;              /* save starting available input and output */\n  let copy;                   /* number of stored or match bytes to copy */\n  let from;                   /* where to copy match bytes from */\n  let from_source;\n  let here = 0;               /* current decoding table entry */\n  let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //let last;                   /* parent table entry */\n  let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  let len;                    /* length to copy for repeats, bits to drop */\n  let ret;                    /* return code */\n  const hbuf = new Uint8Array(4);    /* buffer for gzip header crc calculation */\n  let opts;\n\n  let n; // temporary variable for NEED_BITS\n\n  const order = /* permutation of code lengths */\n    new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n\n        // !!! pako patch. Force use `options.windowBits` if passed.\n        // Required to always use max window size by default.\n        state.dmax = 1 << state.wbits;\n        //state.dmax = 1 << len;\n\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Uint8Array(state.head.extra_len);\n              }\n              state.head.extra.set(\n                input.subarray(\n                  next,\n                  // extra field is limited to 65536 bytes\n                  // - no need for additional size check\n                  next + copy\n                ),\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          output.set(input.subarray(next, next + copy), put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  let state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  const state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n  const dictLength = dictionary.length;\n\n  let state;\n  let dictid;\n  let ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n};\n\n\nmodule.exports.inflateReset = inflateReset;\nmodule.exports.inflateReset2 = inflateReset2;\nmodule.exports.inflateResetKeep = inflateResetKeep;\nmodule.exports.inflateInit = inflateInit;\nmodule.exports.inflateInit2 = inflateInit2;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateEnd = inflateEnd;\nmodule.exports.inflateGetHeader = inflateGetHeader;\nmodule.exports.inflateSetDictionary = inflateSetDictionary;\nmodule.exports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n\nconst zlib_inflate = require('./zlib/inflate');\nconst utils        = require('./utils/common');\nconst strings      = require('./utils/strings');\nconst msg          = require('./zlib/messages');\nconst ZStream      = require('./zlib/zstream');\nconst GZheader     = require('./zlib/gzheader');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n  Z_NO_FLUSH, Z_FINISH,\n  Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  this.options = utils.assign({\n    chunkSize: 1024 * 64,\n    windowBits: 15,\n    to: ''\n  }, options || {});\n\n  const opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  let status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n *   flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n *   `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, flush_mode) {\n  const strm = this.strm;\n  const chunkSize = this.options.chunkSize;\n  const dictionary = this.options.dictionary;\n  let status, _flush_mode, last_avail_out;\n\n  if (this.ended) return false;\n\n  if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n  else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n  // Convert data if needed\n  if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  for (;;) {\n    if (strm.avail_out === 0) {\n      strm.output = new Uint8Array(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, _flush_mode);\n\n    if (status === Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(strm, dictionary);\n\n      if (status === Z_OK) {\n        status = zlib_inflate.inflate(strm, _flush_mode);\n      } else if (status === Z_DATA_ERROR) {\n        // Replace code with more verbose\n        status = Z_NEED_DICT;\n      }\n    }\n\n    // Skip snyc markers if more data follows and not raw mode\n    while (strm.avail_in > 0 &&\n           status === Z_STREAM_END &&\n           strm.state.wrap > 0 &&\n           data[strm.next_in] !== 0)\n    {\n      zlib_inflate.inflateReset(strm);\n      status = zlib_inflate.inflate(strm, _flush_mode);\n    }\n\n    switch (status) {\n      case Z_STREAM_ERROR:\n      case Z_DATA_ERROR:\n      case Z_NEED_DICT:\n      case Z_MEM_ERROR:\n        this.onEnd(status);\n        this.ended = true;\n        return false;\n    }\n\n    // Remember real `avail_out` value, because we may patch out buffer content\n    // to align utf8 strings boundaries.\n    last_avail_out = strm.avail_out;\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n        if (this.options.to === 'string') {\n\n          let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          let tail = strm.next_out - next_out_utf8;\n          let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail & realign counters\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n        }\n      }\n    }\n\n    // Must repeat iteration if out buffer is full\n    if (status === Z_OK && last_avail_out === 0) continue;\n\n    // Finalize if end of stream reached.\n    if (status === Z_STREAM_END) {\n      status = zlib_inflate.inflateEnd(this.strm);\n      this.onEnd(status);\n      this.ended = true;\n      return true;\n    }\n\n    if (strm.avail_in === 0) break;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n *   each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  const inflator = new Inflate(options);\n\n  inflator.push(input);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) throw inflator.msg || msg[inflator.err];\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = inflate;\nmodule.exports.constants = require('./zlib/constants');\n","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nconst { Deflate, deflate, deflateRaw, gzip } = require('./lib/deflate');\n\nconst { Inflate, inflate, inflateRaw, ungzip } = require('./lib/inflate');\n\nconst constants = require('./lib/zlib/constants');\n\nmodule.exports.Deflate = Deflate;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateRaw = deflateRaw;\nmodule.exports.gzip = gzip;\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = ungzip;\nmodule.exports.constants = constants;\n","module.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\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  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (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  }\n}\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = (c >> 6) | 192;\n          res[p++] = (c & 63) | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = (c >> 18) | 240;\n          res[p++] = ((c >> 12) & 63) | 128;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        } else {\n          res[p++] = (c >> 12) | 224;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","// https://gist.githubusercontent.com/wlzla000/bac83df6d3c51916c4dd0bc947e46947/raw/7ee3462b095ab22580ddaf191f44a590da6fe33b/RIPEMD-160.js\n\n/*\n\tRIPEMD-160.js\n\n\t\tdeveloped\n\t\t\tby K. (https://github.com/wlzla000)\n\t\t\ton December 27-29, 2017,\n\n\t\tlicensed under\n\n\n\t\tthe MIT license\n\n\t\tCopyright (c) 2017 K.\n\n\t\t Permission is hereby granted, free of charge, to any person\n\t\tobtaining a copy of this software and associated documentation\n\t\tfiles (the \"Software\"), to deal in the Software without\n\t\trestriction, including without limitation the rights to use,\n\t\tcopy, modify, merge, publish, distribute, sublicense, and/or\n\t\tsell copies of the Software, and to permit persons to whom the\n\t\tSoftware is furnished to do so, subject to the following\n\t\tconditions:\n\n\t\t The above copyright notice and this permission notice shall be\n\t\tincluded in all copies or substantial portions of the Software.\n\n\t\t THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n\t\tEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n\t\tOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n\t\tNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n\t\tHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n\t\tWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n\t\tFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n\t\tOTHER DEALINGS IN THE SOFTWARE.\n*/\n/* eslint-disable */\n\n\"use strict\";\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RIPEMD160 = function () {\n    function RIPEMD160() {\n        // https://webcache.googleusercontent.com/search?q=cache:CnLOgolTHYEJ:https://www.cosic.esat.kuleuven.be/publications/article-317.pdf\n        // http://shodhganga.inflibnet.ac.in/bitstream/10603/22978/13/13_appendix.pdf\n\n        _classCallCheck(this, RIPEMD160);\n    }\n\n    _createClass(RIPEMD160, null, [{\n        key: \"get_n_pad_bytes\",\n        value: function get_n_pad_bytes(message_size /* in bytes, 1 byte is 8 bits. */) {\n            //  Obtain the number of bytes needed to pad the message.\n            // It does not contain the size of the message size information.\n            /*\n           https://webcache.googleusercontent.com/search?q=cache:CnLOgolTHYEJ:https://www.cosic.esat.kuleuven.be/publications/article-317.pdf\n             The Cryptographic Hash Function RIPEMD-160\n             written by\n             Bart Preneel,\n             Hans Dobbertin,\n             Antoon Bosselaers\n           in\n             1997.\n             --------------------------------------------------\n             §5     Description of RIPEMD-160\n             ......\n              In order to guarantee that the total input size is a\n           multiple of 512 bits, the input is padded in the same\n           way as for all the members of the MD4-family: one\n           appends a single 1 followed by a string of 0s (the\n           number of 0s lies between 0 and 511); the last 64 bits\n           of the extended input contain the binary representation\n           of the input size in bits, least significant byte first.\n         */\n            /*\n           https://tools.ietf.org/rfc/rfc1186.txt\n             RFC 1186: MD4 Message Digest Algorithm.\n             written by\n             Ronald Linn Rivest\n           in\n             October 1990.\n             --------------------------------------------------\n             §3     MD4 Algorithm Description\n             ......\n             Step 1. Append padding bits\n              The message is \"padded\" (extended) so that its length\n           (in bits) is congruent to 448, modulo 512. That is, the\n           message is extended so that it is just 64 bits shy of\n           being a multiple of 512 bits long. Padding is always\n           performed, even if the length of the message is already\n           congruent to 448, modulo 512 (in which case 512 bits of\n           padding are added).\n              Padding is performed as follows: a single \"1\" bit is\n           appended to the message, and then enough zero bits are\n           appended so that the length in bits of the padded\n           message becomes congruent to 448, modulo 512.\n             Step 2. Append length\n              A 64-bit representation of b (the length of the message\n           before the padding bits were added) is appended to the\n           result of the previous step. In the unlikely event that\n           b is greater than 2^64, then only the low-order 64 bits\n           of b are used. (These bits are appended as two 32-bit\n           words and appended low-order word first in accordance\n           with the previous conventions.)\n              At this point the resulting message (after padding with\n           bits and with b) has a length that is an exact multiple\n           of 512 bits. Equivalently, this message has a length\n           that is an exact multiple of 16 (32-bit) words. Let\n           M[0 ... N-1] denote the words of the resulting message,\n           where N is a multiple of 16.\n         */\n            // https://crypto.stackexchange.com/a/32407/54568\n            /*\n           Example case  # 1\n             [0 bit: message.]\n             [1 bit: 1.]\n             [447 bits: 0.]\n             [64 bits: message size information.]\n             Example case  # 2\n             [512-bits: message]\n             [1 bit: 1.]\n             [447 bits: 0.]\n             [64 bits: message size information.]\n             Example case  # 3\n             [(512 - 64 = 448) bits: message.]\n             [1 bit: 1.]\n             [511 bits: 0.]\n             [64 bits: message size information.]\n             Example case  # 4\n             [(512 - 65 = 447) bits: message.]\n             [1 bit: 1.]\n             [0 bit: 0.]\n             [64 bits: message size information.]\n         */\n            // The number of padding zero bits:\n            //      511 - [{(message size in bits) + 64} (mod 512)]\n            return 64 - (message_size + 8 & 63 /* 63 */);\n        }\n    }, {\n        key: \"pad\",\n        value: function pad(message /* An ArrayBuffer. */) {\n            var message_size = message.byteLength;\n            var n_pad = RIPEMD160.get_n_pad_bytes(message_size);\n\n            //  `Number.MAX_SAFE_INTEGER` is ((2 ** 53) - 1) and\n            // bitwise operation in Javascript is done on 32-bits operands.\n            var divmod = function divmod(dividend, divisor) {\n                return [Math.floor(dividend / divisor), dividend % divisor];\n            };\n            /*\n         To shift\n           00000000 000????? ???????? ???????? ???????? ???????? ???????? ????????\n                                            t o\n          00000000 ???????? ???????? ???????? ???????? ???????? ???????? ?????000\n         --------------------------------------------------------------------------------\n         Method #1\n            00000000 000????? ???????? ????????  ???????? ???????? ???????? ????????\n          [00000000 000AAAAA AAAAAAAA AAAAAAAA] (<A> captured)\n          [00000000 AAAAAAAA AAAAAAAA AAAAA000] (<A> shifted)\n                                (<B> captured) [BBBBBBBB BBBBBBBB BBBBBBBB BBBBBBBB]\n                            (<B> shifted) [BBB][BBBBBBBB BBBBBBBB BBBBBBBB BBBBB000]\n          [00000000 AAAAAAAA AAAAAAAA AAAAABBB] (<A> & <B_2> merged)\n          [00000000 AAAAAAAA AAAAAAAA AAAAABBB][BBBBBBBB BBBBBBBB BBBBBBBB BBBBB000]\n           00000000 ???????? ???????? ????????  ???????? ???????? ???????? ?????000\n           const uint32_max_plus_1 = 0x100000000; // (2 ** 32)\n         const [\n           msg_byte_size_most, // Value range [0, (2 ** 21) - 1].\n           msg_byte_size_least // Value range [0, (2 ** 32) - 1].\n         ] = divmod(message_size, uint32_max_plus_1);\n         const [\n           carry, // Value range [0, 7].\n           msg_bit_size_least // Value range [0, (2 ** 32) - 8].\n         ] = divmod(message_byte_size_least * 8, uint32_max_plus_1);\n         const message_bit_size_most = message_byte_size_most * 8\n           + carry; // Value range [0, (2 ** 24) - 1].\n         --------------------------------------------------------------------------------\n         Method #2\n           00000000 000????? ???????? ????????  ???????? ???????? ???????? ????????\n             [00000 000AAAAA AAAAAAAA AAAAAAAA  AAA] (<A> captured)\n                                (<B> captured) [000BBBBB BBBBBBBB BBBBBBBB BBBBBBBB]\n                                 (<B> shifted) [BBBBBBBB BBBBBBBB BBBBBBBB BBBBB000]\n          [00000000 AAAAAAAA AAAAAAAA AAAAAAAA][BBBBBBBB BBBBBBBB BBBBBBBB BBBBB000]\n           00000000 ???????? ???????? ????????  ???????? ???????? ???????? ?????000\n           */\n\n            var _divmod$map = divmod(message_size, 536870912 /* (2 ** 29) */).map(function (x, index) {\n                  return index ? x * 8 : x;\n              }),\n              _divmod$map2 = _slicedToArray(_divmod$map, 2),\n              msg_bit_size_most = _divmod$map2[0],\n              msg_bit_size_least = _divmod$map2[1];\n\n            // `ArrayBuffer.transfer()` is not supported.\n\n\n            var padded = new Uint8Array(message_size + n_pad + 8);\n            padded.set(new Uint8Array(message), 0);\n            var data_view = new DataView(padded.buffer);\n            data_view.setUint8(message_size, 128);\n            data_view.setUint32(message_size + n_pad, msg_bit_size_least, true // Little-endian\n            );\n            data_view.setUint32(message_size + n_pad + 4, msg_bit_size_most, true // Little-endian\n            );\n\n            return padded.buffer;\n        }\n    }, {\n        key: \"f\",\n        value: function f(j, x, y, z) {\n            if (0 <= j && j <= 15) {\n                // Exclusive-OR\n                return x ^ y ^ z;\n            }\n            if (16 <= j && j <= 31) {\n                // Multiplexing (muxing)\n                return x & y | ~x & z;\n            }\n            if (32 <= j && j <= 47) {\n                return (x | ~y) ^ z;\n            }\n            if (48 <= j && j <= 63) {\n                // Multiplexing (muxing)\n                return x & z | y & ~z;\n            }\n            if (64 <= j && j <= 79) {\n                return x ^ (y | ~z);\n            }\n        }\n    }, {\n        key: \"K\",\n        value: function K(j) {\n            if (0 <= j && j <= 15) {\n                return 0x00000000;\n            }\n            if (16 <= j && j <= 31) {\n                // Math.floor((2 ** 30) * Math.SQRT2)\n                return 0x5A827999;\n            }\n            if (32 <= j && j <= 47) {\n                // Math.floor((2 ** 30) * Math.sqrt(3))\n                return 0x6ED9EBA1;\n            }\n            if (48 <= j && j <= 63) {\n                // Math.floor((2 ** 30) * Math.sqrt(5))\n                return 0x8F1BBCDC;\n            }\n            if (64 <= j && j <= 79) {\n                // Math.floor((2 ** 30) * Math.sqrt(7))\n                return 0xA953FD4E;\n            }\n        }\n    }, {\n        key: \"KP\",\n        value: function KP(j) // K'\n        {\n            if (0 <= j && j <= 15) {\n                // Math.floor((2 ** 30) * Math.cbrt(2))\n                return 0x50A28BE6;\n            }\n            if (16 <= j && j <= 31) {\n                // Math.floor((2 ** 30) * Math.cbrt(3))\n                return 0x5C4DD124;\n            }\n            if (32 <= j && j <= 47) {\n                // Math.floor((2 ** 30) * Math.cbrt(5))\n                return 0x6D703EF3;\n            }\n            if (48 <= j && j <= 63) {\n                // Math.floor((2 ** 30) * Math.cbrt(7))\n                return 0x7A6D76E9;\n            }\n            if (64 <= j && j <= 79) {\n                return 0x00000000;\n            }\n        }\n    }, {\n        key: \"add_modulo32\",\n        value: function add_modulo32() /* ...... */{\n            // 1.  Modulo addition (addition modulo) is associative.\n            //    https://proofwiki.org/wiki/Modulo_Addition_is_Associative\n            // 2.  Bitwise operation in Javascript\n            //    is done on 32-bits operands\n            //    and results in a 32-bits value.\n            return Array.from(arguments).reduce(function (a, b) {\n                return a + b;\n            }, 0) | 0;\n        }\n    }, {\n        key: \"rol32\",\n        value: function rol32(value, count) {\n            // Cyclic left shift (rotate) on 32-bits value.\n            return value << count | value >>> 32 - count;\n        }\n    }, {\n        key: \"hash\",\n        value: function hash(message /* An ArrayBuffer. */) {\n            //////////       Padding       //////////\n\n            // The padded message.\n            var padded = RIPEMD160.pad(message);\n\n            //////////     Compression     //////////\n\n            // Message word selectors.\n            var r = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13];\n            var rP = [// r'\n                5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11];\n\n            // Amounts for 'rotate left' operation.\n            var s = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6];\n            var sP = [// s'\n                8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11];\n\n            // The size, in bytes, of a word.\n            var word_size = 4;\n\n            // The size, in bytes, of a 16-words block.\n            var block_size = 64;\n\n            // The number of the 16-words blocks.\n            var t = padded.byteLength / block_size;\n\n            //  The message after padding consists of t 16-word blocks that\n            // are denoted with X_i[j], with 0≤i≤(t − 1) and 0≤j≤15.\n            var X = new Array(t).fill(undefined).map(function (_, i) {\n                return function (j) {\n                    return new DataView(padded, i * block_size, block_size).getUint32(j * word_size, true // Little-endian\n                    );\n                };\n            });\n\n            //  The result of RIPEMD-160 is contained in five 32-bit words,\n            // which form the internal state of the algorithm. The final\n            // content of these five 32-bit words is converted to a 160-bit\n            // string, again using the little-endian convention.\n            var h = [0x67452301, // h_0\n                0xEFCDAB89, // h_1\n                0x98BADCFE, // h_2\n                0x10325476, // h_3\n                0xC3D2E1F0 // h_4\n            ];\n\n            for (var i = 0; i < t; ++i) {\n                var A = h[0],\n                  B = h[1],\n                  C = h[2],\n                  D = h[3],\n                  E = h[4];\n                var AP = A,\n                  BP = B,\n                  CP = C,\n                  DP = D,\n                  EP = E;\n                for (var j = 0; j < 80; ++j) {\n                    // Left rounds\n                    var _T = RIPEMD160.add_modulo32(RIPEMD160.rol32(RIPEMD160.add_modulo32(A, RIPEMD160.f(j, B, C, D), X[i](r[j]), RIPEMD160.K(j)), s[j]), E);\n                    A = E;\n                    E = D;\n                    D = RIPEMD160.rol32(C, 10);\n                    C = B;\n                    B = _T;\n\n                    // Right rounds\n                    _T = RIPEMD160.add_modulo32(RIPEMD160.rol32(RIPEMD160.add_modulo32(AP, RIPEMD160.f(79 - j, BP, CP, DP), X[i](rP[j]), RIPEMD160.KP(j)), sP[j]), EP);\n                    AP = EP;\n                    EP = DP;\n                    DP = RIPEMD160.rol32(CP, 10);\n                    CP = BP;\n                    BP = _T;\n                }\n                var T = RIPEMD160.add_modulo32(h[1], C, DP);\n                h[1] = RIPEMD160.add_modulo32(h[2], D, EP);\n                h[2] = RIPEMD160.add_modulo32(h[3], E, AP);\n                h[3] = RIPEMD160.add_modulo32(h[4], A, BP);\n                h[4] = RIPEMD160.add_modulo32(h[0], B, CP);\n                h[0] = T;\n            }\n\n            //  The final output string then consists of the concatenatation\n            // of h_0, h_1, h_2, h_3, and h_4 after converting each h_i to a\n            // 4-byte string using the little-endian convention.\n            var result = new ArrayBuffer(20);\n            var data_view = new DataView(result);\n            h.forEach(function (h_i, i) {\n                return data_view.setUint32(i * 4, h_i, true);\n            });\n            return result;\n        }\n    }]);\n\n    return RIPEMD160;\n}();\n\nmodule.exports = {\n    RIPEMD160: RIPEMD160\n};\n","\"use strict\";\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.signatureToString = exports.stringToSignature = exports.privateKeyToString = exports.privateKeyToLegacyString = exports.stringToPrivateKey = exports.convertLegacyPublicKeys = exports.convertLegacyPublicKey = exports.publicKeyToString = exports.publicKeyToLegacyString = exports.stringToPublicKey = exports.signatureDataSize = exports.privateKeyDataSize = exports.publicKeyDataSize = exports.KeyType = exports.base64ToBinary = exports.binaryToBase58 = exports.base58ToBinary = exports.signedBinaryToDecimal = exports.binaryToDecimal = exports.signedDecimalToBinary = exports.decimalToBinary = exports.negate = exports.isNegative = void 0;\n/**\n * @module Numeric\n */\nvar hash_js_1 = require(\"hash.js\");\n// copyright defined in eosjs/LICENSE.txt\nvar ripemd160 = require('./ripemd').RIPEMD160.hash;\nvar base58Chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nvar base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar create_base58_map = function () {\n    var base58M = Array(256).fill(-1);\n    for (var i = 0; i < base58Chars.length; ++i) {\n        base58M[base58Chars.charCodeAt(i)] = i;\n    }\n    return base58M;\n};\nvar base58Map = create_base58_map();\nvar create_base64_map = function () {\n    var base64M = Array(256).fill(-1);\n    for (var i = 0; i < base64Chars.length; ++i) {\n        base64M[base64Chars.charCodeAt(i)] = i;\n    }\n    base64M['='.charCodeAt(0)] = 0;\n    return base64M;\n};\nvar base64Map = create_base64_map();\n/** Is `bignum` a negative number? */\nvar isNegative = function (bignum) {\n    return (bignum[bignum.length - 1] & 0x80) !== 0;\n};\nexports.isNegative = isNegative;\n/** Negate `bignum` */\nvar negate = function (bignum) {\n    var carry = 1;\n    for (var i = 0; i < bignum.length; ++i) {\n        var x = (~bignum[i] & 0xff) + carry;\n        bignum[i] = x;\n        carry = x >> 8;\n    }\n};\nexports.negate = negate;\n/**\n * Convert an unsigned decimal number in `s` to a bignum\n *\n * @param size bignum size (bytes)\n */\nvar decimalToBinary = function (size, s) {\n    var result = new Uint8Array(size);\n    for (var i = 0; i < s.length; ++i) {\n        var srcDigit = s.charCodeAt(i);\n        if (srcDigit < '0'.charCodeAt(0) || srcDigit > '9'.charCodeAt(0)) {\n            throw new Error('invalid number');\n        }\n        var carry = srcDigit - '0'.charCodeAt(0);\n        for (var j = 0; j < size; ++j) {\n            var x = result[j] * 10 + carry;\n            result[j] = x;\n            carry = x >> 8;\n        }\n        if (carry) {\n            throw new Error('number is out of range');\n        }\n    }\n    return result;\n};\nexports.decimalToBinary = decimalToBinary;\n/**\n * Convert a signed decimal number in `s` to a bignum\n *\n * @param size bignum size (bytes)\n */\nvar signedDecimalToBinary = function (size, s) {\n    var negative = s[0] === '-';\n    if (negative) {\n        s = s.substr(1);\n    }\n    var result = exports.decimalToBinary(size, s);\n    if (negative) {\n        exports.negate(result);\n        if (!exports.isNegative(result)) {\n            throw new Error('number is out of range');\n        }\n    }\n    else if (exports.isNegative(result)) {\n        throw new Error('number is out of range');\n    }\n    return result;\n};\nexports.signedDecimalToBinary = signedDecimalToBinary;\n/**\n * Convert `bignum` to an unsigned decimal number\n *\n * @param minDigits 0-pad result to this many digits\n */\nvar binaryToDecimal = function (bignum, minDigits) {\n    if (minDigits === void 0) { minDigits = 1; }\n    var result = Array(minDigits).fill('0'.charCodeAt(0));\n    for (var i = bignum.length - 1; i >= 0; --i) {\n        var carry = bignum[i];\n        for (var j = 0; j < result.length; ++j) {\n            var x = ((result[j] - '0'.charCodeAt(0)) << 8) + carry;\n            result[j] = '0'.charCodeAt(0) + x % 10;\n            carry = (x / 10) | 0;\n        }\n        while (carry) {\n            result.push('0'.charCodeAt(0) + carry % 10);\n            carry = (carry / 10) | 0;\n        }\n    }\n    result.reverse();\n    return String.fromCharCode.apply(String, __spreadArray([], __read(result)));\n};\nexports.binaryToDecimal = binaryToDecimal;\n/**\n * Convert `bignum` to a signed decimal number\n *\n * @param minDigits 0-pad result to this many digits\n */\nvar signedBinaryToDecimal = function (bignum, minDigits) {\n    if (minDigits === void 0) { minDigits = 1; }\n    if (exports.isNegative(bignum)) {\n        var x = bignum.slice();\n        exports.negate(x);\n        return '-' + exports.binaryToDecimal(x, minDigits);\n    }\n    return exports.binaryToDecimal(bignum, minDigits);\n};\nexports.signedBinaryToDecimal = signedBinaryToDecimal;\nvar base58ToBinaryVarSize = function (s) {\n    var e_1, _a;\n    var result = [];\n    for (var i = 0; i < s.length; ++i) {\n        var carry = base58Map[s.charCodeAt(i)];\n        if (carry < 0) {\n            throw new Error('invalid base-58 value');\n        }\n        for (var j = 0; j < result.length; ++j) {\n            var x = result[j] * 58 + carry;\n            result[j] = x & 0xff;\n            carry = x >> 8;\n        }\n        if (carry) {\n            result.push(carry);\n        }\n    }\n    try {\n        for (var s_1 = __values(s), s_1_1 = s_1.next(); !s_1_1.done; s_1_1 = s_1.next()) {\n            var ch = s_1_1.value;\n            if (ch === '1') {\n                result.push(0);\n            }\n            else {\n                break;\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (s_1_1 && !s_1_1.done && (_a = s_1.return)) _a.call(s_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    result.reverse();\n    return new Uint8Array(result);\n};\n/**\n * Convert an unsigned base-58 number in `s` to a bignum\n *\n * @param size bignum size (bytes)\n */\nvar base58ToBinary = function (size, s) {\n    if (!size) {\n        return base58ToBinaryVarSize(s);\n    }\n    var result = new Uint8Array(size);\n    for (var i = 0; i < s.length; ++i) {\n        var carry = base58Map[s.charCodeAt(i)];\n        if (carry < 0) {\n            throw new Error('invalid base-58 value');\n        }\n        for (var j = 0; j < size; ++j) {\n            var x = result[j] * 58 + carry;\n            result[j] = x;\n            carry = x >> 8;\n        }\n        if (carry) {\n            throw new Error('base-58 value is out of range');\n        }\n    }\n    result.reverse();\n    return result;\n};\nexports.base58ToBinary = base58ToBinary;\n/**\n * Convert `bignum` to a base-58 number\n *\n * @param minDigits 0-pad result to this many digits\n */\nvar binaryToBase58 = function (bignum, minDigits) {\n    var e_2, _a, e_3, _b;\n    if (minDigits === void 0) { minDigits = 1; }\n    var result = [];\n    try {\n        for (var bignum_1 = __values(bignum), bignum_1_1 = bignum_1.next(); !bignum_1_1.done; bignum_1_1 = bignum_1.next()) {\n            var byte = bignum_1_1.value;\n            var carry = byte;\n            for (var j = 0; j < result.length; ++j) {\n                var x = (base58Map[result[j]] << 8) + carry;\n                result[j] = base58Chars.charCodeAt(x % 58);\n                carry = (x / 58) | 0;\n            }\n            while (carry) {\n                result.push(base58Chars.charCodeAt(carry % 58));\n                carry = (carry / 58) | 0;\n            }\n        }\n    }\n    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n    finally {\n        try {\n            if (bignum_1_1 && !bignum_1_1.done && (_a = bignum_1.return)) _a.call(bignum_1);\n        }\n        finally { if (e_2) throw e_2.error; }\n    }\n    try {\n        for (var bignum_2 = __values(bignum), bignum_2_1 = bignum_2.next(); !bignum_2_1.done; bignum_2_1 = bignum_2.next()) {\n            var byte = bignum_2_1.value;\n            if (byte) {\n                break;\n            }\n            else {\n                result.push('1'.charCodeAt(0));\n            }\n        }\n    }\n    catch (e_3_1) { e_3 = { error: e_3_1 }; }\n    finally {\n        try {\n            if (bignum_2_1 && !bignum_2_1.done && (_b = bignum_2.return)) _b.call(bignum_2);\n        }\n        finally { if (e_3) throw e_3.error; }\n    }\n    result.reverse();\n    return String.fromCharCode.apply(String, __spreadArray([], __read(result)));\n};\nexports.binaryToBase58 = binaryToBase58;\n/** Convert an unsigned base-64 number in `s` to a bignum */\nvar base64ToBinary = function (s) {\n    var len = s.length;\n    if ((len & 3) === 1 && s[len - 1] === '=') {\n        len -= 1;\n    } // fc appends an extra '='\n    if ((len & 3) !== 0) {\n        throw new Error('base-64 value is not padded correctly');\n    }\n    var groups = len >> 2;\n    var bytes = groups * 3;\n    if (len > 0 && s[len - 1] === '=') {\n        if (s[len - 2] === '=') {\n            bytes -= 2;\n        }\n        else {\n            bytes -= 1;\n        }\n    }\n    var result = new Uint8Array(bytes);\n    for (var group = 0; group < groups; ++group) {\n        var digit0 = base64Map[s.charCodeAt(group * 4 + 0)];\n        var digit1 = base64Map[s.charCodeAt(group * 4 + 1)];\n        var digit2 = base64Map[s.charCodeAt(group * 4 + 2)];\n        var digit3 = base64Map[s.charCodeAt(group * 4 + 3)];\n        result[group * 3 + 0] = (digit0 << 2) | (digit1 >> 4);\n        if (group * 3 + 1 < bytes) {\n            result[group * 3 + 1] = ((digit1 & 15) << 4) | (digit2 >> 2);\n        }\n        if (group * 3 + 2 < bytes) {\n            result[group * 3 + 2] = ((digit2 & 3) << 6) | digit3;\n        }\n    }\n    return result;\n};\nexports.base64ToBinary = base64ToBinary;\n/** Key types this library supports */\nvar KeyType;\n(function (KeyType) {\n    KeyType[KeyType[\"k1\"] = 0] = \"k1\";\n    KeyType[KeyType[\"r1\"] = 1] = \"r1\";\n    KeyType[KeyType[\"wa\"] = 2] = \"wa\";\n})(KeyType = exports.KeyType || (exports.KeyType = {}));\n/** Public key data size, excluding type field */\nexports.publicKeyDataSize = 33;\n/** Private key data size, excluding type field */\nexports.privateKeyDataSize = 32;\n/** Signature data size, excluding type field */\nexports.signatureDataSize = 65;\nvar digestSuffixRipemd160 = function (data, suffix) {\n    var d = new Uint8Array(data.length + suffix.length);\n    for (var i = 0; i < data.length; ++i) {\n        d[i] = data[i];\n    }\n    for (var i = 0; i < suffix.length; ++i) {\n        d[data.length + i] = suffix.charCodeAt(i);\n    }\n    return ripemd160(d);\n};\nvar stringToKey = function (s, type, size, suffix) {\n    var whole = exports.base58ToBinary(size ? size + 4 : 0, s);\n    var result = { type: type, data: new Uint8Array(whole.buffer, 0, whole.length - 4) };\n    var digest = new Uint8Array(digestSuffixRipemd160(result.data, suffix));\n    if (digest[0] !== whole[whole.length - 4] || digest[1] !== whole[whole.length - 3]\n        || digest[2] !== whole[whole.length - 2] || digest[3] !== whole[whole.length - 1]) {\n        throw new Error('checksum doesn\\'t match');\n    }\n    return result;\n};\nvar keyToString = function (key, suffix, prefix) {\n    var digest = new Uint8Array(digestSuffixRipemd160(key.data, suffix));\n    var whole = new Uint8Array(key.data.length + 4);\n    for (var i = 0; i < key.data.length; ++i) {\n        whole[i] = key.data[i];\n    }\n    for (var i = 0; i < 4; ++i) {\n        whole[i + key.data.length] = digest[i];\n    }\n    return prefix + exports.binaryToBase58(whole);\n};\n/** Convert key in `s` to binary form */\nvar stringToPublicKey = function (s) {\n    if (typeof s !== 'string') {\n        throw new Error('expected string containing public key');\n    }\n    if (s.substr(0, 3) === 'EOS') {\n        var whole = exports.base58ToBinary(exports.publicKeyDataSize + 4, s.substr(3));\n        var key = { type: KeyType.k1, data: new Uint8Array(exports.publicKeyDataSize) };\n        for (var i = 0; i < exports.publicKeyDataSize; ++i) {\n            key.data[i] = whole[i];\n        }\n        var digest = new Uint8Array(ripemd160(key.data));\n        if (digest[0] !== whole[exports.publicKeyDataSize] || digest[1] !== whole[34]\n            || digest[2] !== whole[35] || digest[3] !== whole[36]) {\n            throw new Error('checksum doesn\\'t match');\n        }\n        return key;\n    }\n    else if (s.substr(0, 7) === 'PUB_K1_') {\n        return stringToKey(s.substr(7), KeyType.k1, exports.publicKeyDataSize, 'K1');\n    }\n    else if (s.substr(0, 7) === 'PUB_R1_') {\n        return stringToKey(s.substr(7), KeyType.r1, exports.publicKeyDataSize, 'R1');\n    }\n    else if (s.substr(0, 7) === 'PUB_WA_') {\n        return stringToKey(s.substr(7), KeyType.wa, 0, 'WA');\n    }\n    else {\n        throw new Error('unrecognized public key format');\n    }\n};\nexports.stringToPublicKey = stringToPublicKey;\n/** Convert public `key` to legacy string (base-58) form */\nvar publicKeyToLegacyString = function (key) {\n    if (key.type === KeyType.k1 && key.data.length === exports.publicKeyDataSize) {\n        return keyToString(key, '', 'EOS');\n    }\n    else if (key.type === KeyType.r1 || key.type === KeyType.wa) {\n        throw new Error('Key format not supported in legacy conversion');\n    }\n    else {\n        throw new Error('unrecognized public key format');\n    }\n};\nexports.publicKeyToLegacyString = publicKeyToLegacyString;\n/** Convert `key` to string (base-58) form */\nvar publicKeyToString = function (key) {\n    if (key.type === KeyType.k1 && key.data.length === exports.publicKeyDataSize) {\n        return keyToString(key, 'K1', 'PUB_K1_');\n    }\n    else if (key.type === KeyType.r1 && key.data.length === exports.publicKeyDataSize) {\n        return keyToString(key, 'R1', 'PUB_R1_');\n    }\n    else if (key.type === KeyType.wa) {\n        return keyToString(key, 'WA', 'PUB_WA_');\n    }\n    else {\n        throw new Error('unrecognized public key format');\n    }\n};\nexports.publicKeyToString = publicKeyToString;\n/** If a key is in the legacy format (`EOS` prefix), then convert it to the new format (`PUB_K1_`).\n * Leaves other formats untouched\n */\nvar convertLegacyPublicKey = function (s) {\n    if (s.substr(0, 3) === 'EOS') {\n        return exports.publicKeyToString(exports.stringToPublicKey(s));\n    }\n    return s;\n};\nexports.convertLegacyPublicKey = convertLegacyPublicKey;\n/** If a key is in the legacy format (`EOS` prefix), then convert it to the new format (`PUB_K1_`).\n * Leaves other formats untouched\n */\nvar convertLegacyPublicKeys = function (keys) {\n    return keys.map(exports.convertLegacyPublicKey);\n};\nexports.convertLegacyPublicKeys = convertLegacyPublicKeys;\n/** Convert key in `s` to binary form */\nvar stringToPrivateKey = function (s) {\n    if (typeof s !== 'string') {\n        throw new Error('expected string containing private key');\n    }\n    if (s.substr(0, 7) === 'PVT_R1_') {\n        return stringToKey(s.substr(7), KeyType.r1, exports.privateKeyDataSize, 'R1');\n    }\n    else if (s.substr(0, 7) === 'PVT_K1_') {\n        return stringToKey(s.substr(7), KeyType.k1, exports.privateKeyDataSize, 'K1');\n    }\n    else {\n        // todo: Verify checksum: sha256(sha256(key.data)).\n        //       Not critical since a bad key will fail to produce a\n        //       valid signature anyway.\n        var whole = exports.base58ToBinary(exports.privateKeyDataSize + 5, s);\n        var key = { type: KeyType.k1, data: new Uint8Array(exports.privateKeyDataSize) };\n        if (whole[0] !== 0x80) {\n            throw new Error('unrecognized private key type');\n        }\n        for (var i = 0; i < exports.privateKeyDataSize; ++i) {\n            key.data[i] = whole[i + 1];\n        }\n        return key;\n    }\n};\nexports.stringToPrivateKey = stringToPrivateKey;\n/** Convert private `key` to legacy string (base-58) form */\nvar privateKeyToLegacyString = function (key) {\n    if (key.type === KeyType.k1 && key.data.length === exports.privateKeyDataSize) {\n        var whole_1 = [];\n        whole_1.push(128);\n        key.data.forEach(function (byte) { return whole_1.push(byte); });\n        var digest = new Uint8Array(hash_js_1.sha256().update(hash_js_1.sha256().update(whole_1).digest()).digest());\n        var result = new Uint8Array(exports.privateKeyDataSize + 5);\n        for (var i = 0; i < whole_1.length; i++) {\n            result[i] = whole_1[i];\n        }\n        for (var i = 0; i < 4; i++) {\n            result[i + whole_1.length] = digest[i];\n        }\n        return exports.binaryToBase58(result);\n    }\n    else if (key.type === KeyType.r1 || key.type === KeyType.wa) {\n        throw new Error('Key format not supported in legacy conversion');\n    }\n    else {\n        throw new Error('unrecognized public key format');\n    }\n};\nexports.privateKeyToLegacyString = privateKeyToLegacyString;\n/** Convert `key` to string (base-58) form */\nvar privateKeyToString = function (key) {\n    if (key.type === KeyType.r1) {\n        return keyToString(key, 'R1', 'PVT_R1_');\n    }\n    else if (key.type === KeyType.k1) {\n        return keyToString(key, 'K1', 'PVT_K1_');\n    }\n    else {\n        throw new Error('unrecognized private key format');\n    }\n};\nexports.privateKeyToString = privateKeyToString;\n/** Convert key in `s` to binary form */\nvar stringToSignature = function (s) {\n    if (typeof s !== 'string') {\n        throw new Error('expected string containing signature');\n    }\n    if (s.substr(0, 7) === 'SIG_K1_') {\n        return stringToKey(s.substr(7), KeyType.k1, exports.signatureDataSize, 'K1');\n    }\n    else if (s.substr(0, 7) === 'SIG_R1_') {\n        return stringToKey(s.substr(7), KeyType.r1, exports.signatureDataSize, 'R1');\n    }\n    else if (s.substr(0, 7) === 'SIG_WA_') {\n        return stringToKey(s.substr(7), KeyType.wa, 0, 'WA');\n    }\n    else {\n        throw new Error('unrecognized signature format');\n    }\n};\nexports.stringToSignature = stringToSignature;\n/** Convert `signature` to string (base-58) form */\nvar signatureToString = function (signature) {\n    if (signature.type === KeyType.k1) {\n        return keyToString(signature, 'K1', 'SIG_K1_');\n    }\n    else if (signature.type === KeyType.r1) {\n        return keyToString(signature, 'R1', 'SIG_R1_');\n    }\n    else if (signature.type === KeyType.wa) {\n        return keyToString(signature, 'WA', 'SIG_WA_');\n    }\n    else {\n        throw new Error('unrecognized signature format');\n    }\n};\nexports.signatureToString = signatureToString;\n//# sourceMappingURL=eosjs-numeric.js.map","\"use strict\";\n/**\n * @module Serialize\n */\n// copyright defined in eosjs/LICENSE.txt\n/* eslint-disable max-classes-per-file */\n/* eslint-disable jsdoc/check-indentation */\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.serializeQuery = exports.deserializeAnyArray = exports.serializeAnyArray = exports.deserializeAnyObject = exports.serializeAnyObject = exports.deserializeAnyvarShort = exports.deserializeAnyvar = exports.serializeAnyvar = exports.deserializeAction = exports.deserializeActionData = exports.serializeAction = exports.serializeActionData = exports.transactionHeader = exports.getTypesFromAbi = exports.getType = exports.createTransactionTypes = exports.createTransactionExtensionTypes = exports.createAbiTypes = exports.createInitialTypes = exports.hexToUint8Array = exports.arrayToHex = exports.symbolToString = exports.stringToSymbol = exports.blockTimestampToDate = exports.dateToBlockTimestamp = exports.timePointSecToDate = exports.dateToTimePointSec = exports.timePointToDate = exports.dateToTimePoint = exports.supportedAbiVersion = exports.SerialBuffer = exports.SerializerState = void 0;\nvar numeric = require(\"./eosjs-numeric\");\n/** State for serialize() and deserialize() */\nvar SerializerState = /** @class */ (function () {\n    function SerializerState(options) {\n        if (options === void 0) { options = {}; }\n        /** Have any binary extensions been skipped? */\n        this.skippedBinaryExtension = false;\n        this.options = options;\n    }\n    return SerializerState;\n}());\nexports.SerializerState = SerializerState;\n/** Serialize and deserialize data */\nvar SerialBuffer = /** @class */ (function () {\n    /**\n     * @param __namedParameters\n     * `array`: `null` if serializing, or binary data to deserialize\n     * `textEncoder`: `TextEncoder` instance to use. Pass in `null` if running in a browser\n     * `textDecoder`: `TextDecider` instance to use. Pass in `null` if running in a browser\n     */\n    function SerialBuffer(_a) {\n        var _b = _a === void 0 ? {} : _a, textEncoder = _b.textEncoder, textDecoder = _b.textDecoder, array = _b.array;\n        /** Current position while reading (deserializing) */\n        this.readPos = 0;\n        this.array = array || new Uint8Array(1024);\n        this.length = array ? array.length : 0;\n        this.textEncoder = textEncoder || new TextEncoder();\n        this.textDecoder = textDecoder || new TextDecoder('utf-8', { fatal: true });\n    }\n    /** Resize `array` if needed to have at least `size` bytes free */\n    SerialBuffer.prototype.reserve = function (size) {\n        if (this.length + size <= this.array.length) {\n            return;\n        }\n        var l = this.array.length;\n        while (this.length + size > l) {\n            l = Math.ceil(l * 1.5);\n        }\n        var newArray = new Uint8Array(l);\n        newArray.set(this.array);\n        this.array = newArray;\n    };\n    /** Is there data available to read? */\n    SerialBuffer.prototype.haveReadData = function () {\n        return this.readPos < this.length;\n    };\n    /** Restart reading from the beginning */\n    SerialBuffer.prototype.restartRead = function () {\n        this.readPos = 0;\n    };\n    /** Return data with excess storage trimmed away */\n    SerialBuffer.prototype.asUint8Array = function () {\n        return new Uint8Array(this.array.buffer, this.array.byteOffset, this.length);\n    };\n    /** Append bytes */\n    SerialBuffer.prototype.pushArray = function (v) {\n        this.reserve(v.length);\n        this.array.set(v, this.length);\n        this.length += v.length;\n    };\n    /** Append bytes */\n    SerialBuffer.prototype.push = function () {\n        var v = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            v[_i] = arguments[_i];\n        }\n        this.pushArray(v);\n    };\n    /** Get a single byte */\n    SerialBuffer.prototype.get = function () {\n        if (this.readPos < this.length) {\n            return this.array[this.readPos++];\n        }\n        throw new Error('Read past end of buffer');\n    };\n    /** Append bytes in `v`. Throws if `len` doesn't match `v.length` */\n    SerialBuffer.prototype.pushUint8ArrayChecked = function (v, len) {\n        if (v.length !== len) {\n            throw new Error('Binary data has incorrect size');\n        }\n        this.pushArray(v);\n    };\n    /** Get `len` bytes */\n    SerialBuffer.prototype.getUint8Array = function (len) {\n        if (this.readPos + len > this.length) {\n            throw new Error('Read past end of buffer');\n        }\n        var result = new Uint8Array(this.array.buffer, this.array.byteOffset + this.readPos, len);\n        this.readPos += len;\n        return result;\n    };\n    /** Skip `len` bytes */\n    SerialBuffer.prototype.skip = function (len) {\n        if (this.readPos + len > this.length) {\n            throw new Error('Read past end of buffer');\n        }\n        this.readPos += len;\n    };\n    /** Append a `uint16` */\n    SerialBuffer.prototype.pushUint16 = function (v) {\n        this.push((v >> 0) & 0xff, (v >> 8) & 0xff);\n    };\n    /** Get a `uint16` */\n    SerialBuffer.prototype.getUint16 = function () {\n        var v = 0;\n        v |= this.get() << 0;\n        v |= this.get() << 8;\n        return v;\n    };\n    /** Append a `uint32` */\n    SerialBuffer.prototype.pushUint32 = function (v) {\n        this.push((v >> 0) & 0xff, (v >> 8) & 0xff, (v >> 16) & 0xff, (v >> 24) & 0xff);\n    };\n    /** Get a `uint32` */\n    SerialBuffer.prototype.getUint32 = function () {\n        var v = 0;\n        v |= this.get() << 0;\n        v |= this.get() << 8;\n        v |= this.get() << 16;\n        v |= this.get() << 24;\n        return v >>> 0;\n    };\n    /** Append a `uint64`. *Caution*: `number` only has 53 bits of precision */\n    SerialBuffer.prototype.pushNumberAsUint64 = function (v) {\n        this.pushUint32(v >>> 0);\n        this.pushUint32(Math.floor(v / 4294967296) >>> 0);\n    };\n    /**\n     * Get a `uint64` as a `number`. *Caution*: `number` only has 53 bits of precision; some values will change.\n     * `numeric.binaryToDecimal(serialBuffer.getUint8Array(8))` recommended instead\n     */\n    SerialBuffer.prototype.getUint64AsNumber = function () {\n        var low = this.getUint32();\n        var high = this.getUint32();\n        return (high >>> 0) * 4294967296 + (low >>> 0);\n    };\n    /** Append a `varuint32` */\n    SerialBuffer.prototype.pushVaruint32 = function (v) {\n        while (true) {\n            if (v >>> 7) {\n                this.push(0x80 | (v & 0x7f));\n                v = v >>> 7;\n            }\n            else {\n                this.push(v);\n                break;\n            }\n        }\n    };\n    /** Get a `varuint32` */\n    SerialBuffer.prototype.getVaruint32 = function () {\n        var v = 0;\n        var bit = 0;\n        while (true) {\n            var b = this.get();\n            v |= (b & 0x7f) << bit;\n            bit += 7;\n            if (!(b & 0x80)) {\n                break;\n            }\n        }\n        return v >>> 0;\n    };\n    /** Append a `varint32` */\n    SerialBuffer.prototype.pushVarint32 = function (v) {\n        this.pushVaruint32((v << 1) ^ (v >> 31));\n    };\n    /** Get a `varint32` */\n    SerialBuffer.prototype.getVarint32 = function () {\n        var v = this.getVaruint32();\n        if (v & 1) {\n            return ((~v) >> 1) | 2147483648;\n        }\n        else {\n            return v >>> 1;\n        }\n    };\n    /** Append a `float32` */\n    SerialBuffer.prototype.pushFloat32 = function (v) {\n        this.pushArray(new Uint8Array((new Float32Array([v])).buffer));\n    };\n    /** Get a `float32` */\n    SerialBuffer.prototype.getFloat32 = function () {\n        return new Float32Array(this.getUint8Array(4).slice().buffer)[0];\n    };\n    /** Append a `float64` */\n    SerialBuffer.prototype.pushFloat64 = function (v) {\n        this.pushArray(new Uint8Array((new Float64Array([v])).buffer));\n    };\n    /** Get a `float64` */\n    SerialBuffer.prototype.getFloat64 = function () {\n        return new Float64Array(this.getUint8Array(8).slice().buffer)[0];\n    };\n    /** Append a `name` */\n    SerialBuffer.prototype.pushName = function (s) {\n        if (typeof s !== 'string') {\n            throw new Error('Expected string containing name');\n        }\n        var regex = new RegExp(/^[.1-5a-z]{0,12}[.1-5a-j]?$/);\n        if (!regex.test(s)) {\n            throw new Error('Name should be less than 13 characters, or less than 14 if last character is between 1-5 or a-j, and only contain the following symbols .12345abcdefghijklmnopqrstuvwxyz'); // eslint-disable-line\n        }\n        var charToSymbol = function (c) {\n            if (c >= 'a'.charCodeAt(0) && c <= 'z'.charCodeAt(0)) {\n                return (c - 'a'.charCodeAt(0)) + 6;\n            }\n            if (c >= '1'.charCodeAt(0) && c <= '5'.charCodeAt(0)) {\n                return (c - '1'.charCodeAt(0)) + 1;\n            }\n            return 0;\n        };\n        var a = new Uint8Array(8);\n        var bit = 63;\n        for (var i = 0; i < s.length; ++i) {\n            var c = charToSymbol(s.charCodeAt(i));\n            if (bit < 5) {\n                c = c << 1;\n            }\n            for (var j = 4; j >= 0; --j) {\n                if (bit >= 0) {\n                    a[Math.floor(bit / 8)] |= ((c >> j) & 1) << (bit % 8);\n                    --bit;\n                }\n            }\n        }\n        this.pushArray(a);\n    };\n    /** Get a `name` */\n    SerialBuffer.prototype.getName = function () {\n        var a = this.getUint8Array(8);\n        var result = '';\n        for (var bit = 63; bit >= 0;) {\n            var c = 0;\n            for (var i = 0; i < 5; ++i) {\n                if (bit >= 0) {\n                    c = (c << 1) | ((a[Math.floor(bit / 8)] >> (bit % 8)) & 1);\n                    --bit;\n                }\n            }\n            if (c >= 6) {\n                result += String.fromCharCode(c + 'a'.charCodeAt(0) - 6);\n            }\n            else if (c >= 1) {\n                result += String.fromCharCode(c + '1'.charCodeAt(0) - 1);\n            }\n            else {\n                result += '.';\n            }\n        }\n        while (result.endsWith('.')) {\n            result = result.substr(0, result.length - 1);\n        }\n        return result;\n    };\n    /** Append length-prefixed binary data */\n    SerialBuffer.prototype.pushBytes = function (v) {\n        this.pushVaruint32(v.length);\n        this.pushArray(v);\n    };\n    /** Get length-prefixed binary data */\n    SerialBuffer.prototype.getBytes = function () {\n        return this.getUint8Array(this.getVaruint32());\n    };\n    /** Append a string */\n    SerialBuffer.prototype.pushString = function (v) {\n        this.pushBytes(this.textEncoder.encode(v));\n    };\n    /** Get a string */\n    SerialBuffer.prototype.getString = function () {\n        return this.textDecoder.decode(this.getBytes());\n    };\n    /** Append a `symbol_code`. Unlike `symbol`, `symbol_code` doesn't include a precision. */\n    SerialBuffer.prototype.pushSymbolCode = function (name) {\n        if (typeof name !== 'string') {\n            throw new Error('Expected string containing symbol_code');\n        }\n        var a = [];\n        a.push.apply(a, __spreadArray([], __read(this.textEncoder.encode(name))));\n        while (a.length < 8) {\n            a.push(0);\n        }\n        this.pushArray(a.slice(0, 8));\n    };\n    /** Get a `symbol_code`. Unlike `symbol`, `symbol_code` doesn't include a precision. */\n    SerialBuffer.prototype.getSymbolCode = function () {\n        var a = this.getUint8Array(8);\n        var len;\n        for (len = 0; len < a.length; ++len) {\n            if (!a[len]) {\n                break;\n            }\n        }\n        var name = this.textDecoder.decode(new Uint8Array(a.buffer, a.byteOffset, len));\n        return name;\n    };\n    /** Append a `symbol` */\n    SerialBuffer.prototype.pushSymbol = function (_a) {\n        var name = _a.name, precision = _a.precision;\n        if (!/^[A-Z]{1,7}$/.test(name)) {\n            throw new Error('Expected symbol to be A-Z and between one and seven characters');\n        }\n        var a = [precision & 0xff];\n        a.push.apply(a, __spreadArray([], __read(this.textEncoder.encode(name))));\n        while (a.length < 8) {\n            a.push(0);\n        }\n        this.pushArray(a.slice(0, 8));\n    };\n    /** Get a `symbol` */\n    SerialBuffer.prototype.getSymbol = function () {\n        var precision = this.get();\n        var a = this.getUint8Array(7);\n        var len;\n        for (len = 0; len < a.length; ++len) {\n            if (!a[len]) {\n                break;\n            }\n        }\n        var name = this.textDecoder.decode(new Uint8Array(a.buffer, a.byteOffset, len));\n        return { name: name, precision: precision };\n    };\n    /** Append an asset */\n    SerialBuffer.prototype.pushAsset = function (s) {\n        if (typeof s !== 'string') {\n            throw new Error('Expected string containing asset');\n        }\n        s = s.trim();\n        var pos = 0;\n        var amount = '';\n        var precision = 0;\n        if (s[pos] === '-') {\n            amount += '-';\n            ++pos;\n        }\n        var foundDigit = false;\n        while (pos < s.length && s.charCodeAt(pos) >= '0'.charCodeAt(0) && s.charCodeAt(pos) <= '9'.charCodeAt(0)) {\n            foundDigit = true;\n            amount += s[pos];\n            ++pos;\n        }\n        if (!foundDigit) {\n            throw new Error('Asset must begin with a number');\n        }\n        if (s[pos] === '.') {\n            ++pos;\n            while (pos < s.length && s.charCodeAt(pos) >= '0'.charCodeAt(0) && s.charCodeAt(pos) <= '9'.charCodeAt(0)) {\n                amount += s[pos];\n                ++precision;\n                ++pos;\n            }\n        }\n        var name = s.substr(pos).trim();\n        this.pushArray(numeric.signedDecimalToBinary(8, amount));\n        this.pushSymbol({ name: name, precision: precision });\n    };\n    /** Get an asset */\n    SerialBuffer.prototype.getAsset = function () {\n        var amount = this.getUint8Array(8);\n        var _a = this.getSymbol(), name = _a.name, precision = _a.precision;\n        var s = numeric.signedBinaryToDecimal(amount, precision + 1);\n        if (precision) {\n            s = s.substr(0, s.length - precision) + '.' + s.substr(s.length - precision);\n        }\n        return s + ' ' + name;\n    };\n    /** Append a public key */\n    SerialBuffer.prototype.pushPublicKey = function (s) {\n        var key = numeric.stringToPublicKey(s);\n        this.push(key.type);\n        this.pushArray(key.data);\n    };\n    /** Get a public key */\n    SerialBuffer.prototype.getPublicKey = function () {\n        var type = this.get();\n        var data;\n        if (type === numeric.KeyType.wa) {\n            var begin = this.readPos;\n            this.skip(34);\n            this.skip(this.getVaruint32());\n            data = new Uint8Array(this.array.buffer, this.array.byteOffset + begin, this.readPos - begin);\n        }\n        else {\n            data = this.getUint8Array(numeric.publicKeyDataSize);\n        }\n        return numeric.publicKeyToString({ type: type, data: data });\n    };\n    /** Append a private key */\n    SerialBuffer.prototype.pushPrivateKey = function (s) {\n        var key = numeric.stringToPrivateKey(s);\n        this.push(key.type);\n        this.pushArray(key.data);\n    };\n    /** Get a private key */\n    SerialBuffer.prototype.getPrivateKey = function () {\n        var type = this.get();\n        var data = this.getUint8Array(numeric.privateKeyDataSize);\n        return numeric.privateKeyToString({ type: type, data: data });\n    };\n    /** Append a signature */\n    SerialBuffer.prototype.pushSignature = function (s) {\n        var key = numeric.stringToSignature(s);\n        this.push(key.type);\n        this.pushArray(key.data);\n    };\n    /** Get a signature */\n    SerialBuffer.prototype.getSignature = function () {\n        var type = this.get();\n        var data;\n        if (type === numeric.KeyType.wa) {\n            var begin = this.readPos;\n            this.skip(65);\n            this.skip(this.getVaruint32());\n            this.skip(this.getVaruint32());\n            data = new Uint8Array(this.array.buffer, this.array.byteOffset + begin, this.readPos - begin);\n        }\n        else {\n            data = this.getUint8Array(numeric.signatureDataSize);\n        }\n        return numeric.signatureToString({ type: type, data: data });\n    };\n    return SerialBuffer;\n}()); // SerialBuffer\nexports.SerialBuffer = SerialBuffer;\n/** Is this a supported ABI version? */\nvar supportedAbiVersion = function (version) {\n    return version.startsWith('eosio::abi/1.');\n};\nexports.supportedAbiVersion = supportedAbiVersion;\nvar checkDateParse = function (date) {\n    var result = Date.parse(date);\n    if (Number.isNaN(result)) {\n        throw new Error('Invalid time format');\n    }\n    return result;\n};\n/** Convert date in ISO format to `time_point` (miliseconds since epoch) */\nvar dateToTimePoint = function (date) {\n    return Math.round(checkDateParse(date + 'Z') * 1000);\n};\nexports.dateToTimePoint = dateToTimePoint;\n/** Convert `time_point` (miliseconds since epoch) to date in ISO format */\nvar timePointToDate = function (us) {\n    var s = (new Date(us / 1000)).toISOString();\n    return s.substr(0, s.length - 1);\n};\nexports.timePointToDate = timePointToDate;\n/** Convert date in ISO format to `time_point_sec` (seconds since epoch) */\nvar dateToTimePointSec = function (date) {\n    return Math.round(checkDateParse(date + 'Z') / 1000);\n};\nexports.dateToTimePointSec = dateToTimePointSec;\n/** Convert `time_point_sec` (seconds since epoch) to to date in ISO format */\nvar timePointSecToDate = function (sec) {\n    var s = (new Date(sec * 1000)).toISOString();\n    return s.substr(0, s.length - 1);\n};\nexports.timePointSecToDate = timePointSecToDate;\n/** Convert date in ISO format to `block_timestamp_type` (half-seconds since a different epoch) */\nvar dateToBlockTimestamp = function (date) {\n    return Math.round((checkDateParse(date + 'Z') - 946684800000) / 500);\n};\nexports.dateToBlockTimestamp = dateToBlockTimestamp;\n/** Convert `block_timestamp_type` (half-seconds since a different epoch) to to date in ISO format */\nvar blockTimestampToDate = function (slot) {\n    var s = (new Date(slot * 500 + 946684800000)).toISOString();\n    return s.substr(0, s.length - 1);\n};\nexports.blockTimestampToDate = blockTimestampToDate;\n/** Convert `string` to `Symbol`. format: `precision,NAME`. */\nvar stringToSymbol = function (s) {\n    if (typeof s !== 'string') {\n        throw new Error('Expected string containing symbol');\n    }\n    var m = s.match(/^([0-9]+),([A-Z]+)$/);\n    if (!m) {\n        throw new Error('Invalid symbol');\n    }\n    return { name: m[2], precision: +m[1] };\n};\nexports.stringToSymbol = stringToSymbol;\n/** Convert `Symbol` to `string`. format: `precision,NAME`. */\nvar symbolToString = function (_a) {\n    var name = _a.name, precision = _a.precision;\n    return precision + ',' + name;\n};\nexports.symbolToString = symbolToString;\n/** Convert binary data to hex */\nvar arrayToHex = function (data) {\n    var e_1, _a;\n    var result = '';\n    try {\n        for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n            var x = data_1_1.value;\n            result += ('00' + x.toString(16)).slice(-2);\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return result.toUpperCase();\n};\nexports.arrayToHex = arrayToHex;\n/** Convert hex to binary data */\nvar hexToUint8Array = function (hex) {\n    if (typeof hex !== 'string') {\n        throw new Error('Expected string containing hex digits');\n    }\n    if (hex.length % 2) {\n        throw new Error('Odd number of hex digits');\n    }\n    var l = hex.length / 2;\n    var result = new Uint8Array(l);\n    for (var i = 0; i < l; ++i) {\n        var x = parseInt(hex.substr(i * 2, 2), 16);\n        if (Number.isNaN(x)) {\n            throw new Error('Expected hex string');\n        }\n        result[i] = x;\n    }\n    return result;\n};\nexports.hexToUint8Array = hexToUint8Array;\nfunction serializeUnknown(buffer, data) {\n    throw new Error('Don\\'t know how to serialize ' + this.name);\n}\nfunction deserializeUnknown(buffer) {\n    throw new Error('Don\\'t know how to deserialize ' + this.name);\n}\nfunction serializeStruct(buffer, data, state, allowExtensions) {\n    var e_2, _a;\n    if (state === void 0) { state = new SerializerState(); }\n    if (allowExtensions === void 0) { allowExtensions = true; }\n    if (typeof data !== 'object') {\n        throw new Error('expected object containing data: ' + JSON.stringify(data));\n    }\n    if (this.base) {\n        this.base.serialize(buffer, data, state, allowExtensions);\n    }\n    try {\n        for (var _b = __values(this.fields), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var field = _c.value;\n            if (field.name in data) {\n                if (state.skippedBinaryExtension) {\n                    throw new Error('unexpected ' + this.name + '.' + field.name);\n                }\n                field.type.serialize(buffer, data[field.name], state, allowExtensions && field === this.fields[this.fields.length - 1]);\n            }\n            else {\n                if (allowExtensions && field.type.extensionOf) {\n                    state.skippedBinaryExtension = true;\n                }\n                else {\n                    throw new Error('missing ' + this.name + '.' + field.name + ' (type=' + field.type.name + ')');\n                }\n            }\n        }\n    }\n    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_2) throw e_2.error; }\n    }\n}\nfunction deserializeStruct(buffer, state, allowExtensions) {\n    var e_3, _a;\n    if (state === void 0) { state = new SerializerState(); }\n    if (allowExtensions === void 0) { allowExtensions = true; }\n    var result;\n    if (this.base) {\n        result = this.base.deserialize(buffer, state, allowExtensions);\n    }\n    else {\n        result = {};\n    }\n    try {\n        for (var _b = __values(this.fields), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var field = _c.value;\n            if (allowExtensions && field.type.extensionOf && !buffer.haveReadData()) {\n                state.skippedBinaryExtension = true;\n            }\n            else {\n                result[field.name] = field.type.deserialize(buffer, state, allowExtensions);\n            }\n        }\n    }\n    catch (e_3_1) { e_3 = { error: e_3_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_3) throw e_3.error; }\n    }\n    return result;\n}\nfunction serializeVariant(buffer, data, state, allowExtensions) {\n    if (!Array.isArray(data) || data.length !== 2 || typeof data[0] !== 'string') {\n        throw new Error('expected variant: [\"type\", value]');\n    }\n    var i = this.fields.findIndex(function (field) { return field.name === data[0]; });\n    if (i < 0) {\n        throw new Error(\"type \\\"\" + data[0] + \"\\\" is not valid for variant\");\n    }\n    buffer.pushVaruint32(i);\n    this.fields[i].type.serialize(buffer, data[1], state, allowExtensions);\n}\nfunction deserializeVariant(buffer, state, allowExtensions) {\n    var i = buffer.getVaruint32();\n    if (i >= this.fields.length) {\n        throw new Error(\"type index \" + i + \" is not valid for variant\");\n    }\n    var field = this.fields[i];\n    return [field.name, field.type.deserialize(buffer, state, allowExtensions)];\n}\nfunction serializeArray(buffer, data, state, allowExtensions) {\n    var e_4, _a;\n    buffer.pushVaruint32(data.length);\n    try {\n        for (var data_2 = __values(data), data_2_1 = data_2.next(); !data_2_1.done; data_2_1 = data_2.next()) {\n            var item = data_2_1.value;\n            this.arrayOf.serialize(buffer, item, state, false);\n        }\n    }\n    catch (e_4_1) { e_4 = { error: e_4_1 }; }\n    finally {\n        try {\n            if (data_2_1 && !data_2_1.done && (_a = data_2.return)) _a.call(data_2);\n        }\n        finally { if (e_4) throw e_4.error; }\n    }\n}\nfunction deserializeArray(buffer, state, allowExtensions) {\n    var len = buffer.getVaruint32();\n    var result = [];\n    for (var i = 0; i < len; ++i) {\n        result.push(this.arrayOf.deserialize(buffer, state, false));\n    }\n    return result;\n}\nfunction serializeOptional(buffer, data, state, allowExtensions) {\n    if (data === null || data === undefined) {\n        buffer.push(0);\n    }\n    else {\n        buffer.push(1);\n        this.optionalOf.serialize(buffer, data, state, allowExtensions);\n    }\n}\nfunction deserializeOptional(buffer, state, allowExtensions) {\n    if (buffer.get()) {\n        return this.optionalOf.deserialize(buffer, state, allowExtensions);\n    }\n    else {\n        return null;\n    }\n}\nfunction serializeExtension(buffer, data, state, allowExtensions) {\n    this.extensionOf.serialize(buffer, data, state, allowExtensions);\n}\nfunction deserializeExtension(buffer, state, allowExtensions) {\n    return this.extensionOf.deserialize(buffer, state, allowExtensions);\n}\nfunction serializeObject(buffer, data, state, allowExtensions) {\n    var e_5, _a;\n    var entries = Object.entries(data);\n    buffer.pushVaruint32(entries.length);\n    try {\n        for (var entries_1 = __values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {\n            var _b = __read(entries_1_1.value, 2), key = _b[0], value = _b[1];\n            var keyType = this.fields[0].type;\n            var dataType = this.fields[1].type;\n            keyType.serialize(buffer, key, state, allowExtensions);\n            dataType.serialize(buffer, value, state, allowExtensions);\n        }\n    }\n    catch (e_5_1) { e_5 = { error: e_5_1 }; }\n    finally {\n        try {\n            if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);\n        }\n        finally { if (e_5) throw e_5.error; }\n    }\n}\nfunction deserializeObject(buffer, state, allowExtensions) {\n    var len = buffer.getVaruint32();\n    var result = {};\n    for (var i = 0; i < len; ++i) {\n        var keyType = this.fields[0].type;\n        var dataType = this.fields[1].type;\n        var key = keyType.deserialize(buffer, state, allowExtensions);\n        result[key] = dataType.deserialize(buffer, state, allowExtensions);\n    }\n    return result;\n}\nfunction serializePair(buffer, data, state, allowExtensions) {\n    var _this = this;\n    buffer.pushVaruint32(data.length);\n    data.forEach(function (item) {\n        _this.fields[0].type.serialize(buffer, item[0], state, allowExtensions);\n        _this.fields[1].type.serialize(buffer, item[1], state, allowExtensions);\n    });\n}\nfunction deserializePair(buffer, state, allowExtensions) {\n    var result = [];\n    var len = buffer.getVaruint32();\n    for (var i = 0; i < len; ++i) {\n        result.push(this.fields[0].type.deserialize(buffer, state, allowExtensions));\n        result.push(this.fields[1].type.deserialize(buffer, state, allowExtensions));\n    }\n    return result;\n}\nvar createType = function (attrs) {\n    return __assign({ name: '<missing name>', aliasOfName: '', arrayOf: null, optionalOf: null, extensionOf: null, baseName: '', base: null, fields: [], serialize: serializeUnknown, deserialize: deserializeUnknown }, attrs);\n};\nvar checkRange = function (orig, converted) {\n    if (Number.isNaN(+orig) || Number.isNaN(+converted) || (typeof orig !== 'number' && typeof orig !== 'string')) {\n        throw new Error('Expected number');\n    }\n    if (+orig !== +converted) {\n        throw new Error('Number is out of range');\n    }\n    return +orig;\n};\n/** Create the set of types built-in to the abi format */\nvar createInitialTypes = function () {\n    var result = new Map(Object.entries({\n        bool: createType({\n            name: 'bool',\n            serialize: function (buffer, data) {\n                if (!(typeof data === 'boolean' || typeof data === 'number' && (data === 1 || data === 0))) {\n                    throw new Error('Expected boolean or number equal to 1 or 0');\n                }\n                buffer.push(data ? 1 : 0);\n            },\n            deserialize: function (buffer) { return !!buffer.get(); },\n        }),\n        uint8: createType({\n            name: 'uint8',\n            serialize: function (buffer, data) { buffer.push(checkRange(data, data & 0xff)); },\n            deserialize: function (buffer) { return buffer.get(); },\n        }),\n        int8: createType({\n            name: 'int8',\n            serialize: function (buffer, data) { buffer.push(checkRange(data, data << 24 >> 24)); },\n            deserialize: function (buffer) { return buffer.get() << 24 >> 24; },\n        }),\n        uint16: createType({\n            name: 'uint16',\n            serialize: function (buffer, data) { buffer.pushUint16(checkRange(data, data & 0xffff)); },\n            deserialize: function (buffer) { return buffer.getUint16(); },\n        }),\n        int16: createType({\n            name: 'int16',\n            serialize: function (buffer, data) { buffer.pushUint16(checkRange(data, data << 16 >> 16)); },\n            deserialize: function (buffer) { return buffer.getUint16() << 16 >> 16; },\n        }),\n        uint32: createType({\n            name: 'uint32',\n            serialize: function (buffer, data) { buffer.pushUint32(checkRange(data, data >>> 0)); },\n            deserialize: function (buffer) { return buffer.getUint32(); },\n        }),\n        uint64: createType({\n            name: 'uint64',\n            serialize: function (buffer, data) {\n                buffer.pushArray(numeric.decimalToBinary(8, '' + data));\n            },\n            deserialize: function (buffer) { return numeric.binaryToDecimal(buffer.getUint8Array(8)); },\n        }),\n        int64: createType({\n            name: 'int64',\n            serialize: function (buffer, data) {\n                buffer.pushArray(numeric.signedDecimalToBinary(8, '' + data));\n            },\n            deserialize: function (buffer) { return numeric.signedBinaryToDecimal(buffer.getUint8Array(8)); },\n        }),\n        int32: createType({\n            name: 'int32',\n            serialize: function (buffer, data) { buffer.pushUint32(checkRange(data, data | 0)); },\n            deserialize: function (buffer) { return buffer.getUint32() | 0; },\n        }),\n        varuint32: createType({\n            name: 'varuint32',\n            serialize: function (buffer, data) { buffer.pushVaruint32(checkRange(data, data >>> 0)); },\n            deserialize: function (buffer) { return buffer.getVaruint32(); },\n        }),\n        varint32: createType({\n            name: 'varint32',\n            serialize: function (buffer, data) { buffer.pushVarint32(checkRange(data, data | 0)); },\n            deserialize: function (buffer) { return buffer.getVarint32(); },\n        }),\n        uint128: createType({\n            name: 'uint128',\n            serialize: function (buffer, data) { buffer.pushArray(numeric.decimalToBinary(16, '' + data)); },\n            deserialize: function (buffer) { return numeric.binaryToDecimal(buffer.getUint8Array(16)); },\n        }),\n        int128: createType({\n            name: 'int128',\n            serialize: function (buffer, data) {\n                buffer.pushArray(numeric.signedDecimalToBinary(16, '' + data));\n            },\n            deserialize: function (buffer) { return numeric.signedBinaryToDecimal(buffer.getUint8Array(16)); },\n        }),\n        float32: createType({\n            name: 'float32',\n            serialize: function (buffer, data) { buffer.pushFloat32(data); },\n            deserialize: function (buffer) { return buffer.getFloat32(); },\n        }),\n        float64: createType({\n            name: 'float64',\n            serialize: function (buffer, data) { buffer.pushFloat64(data); },\n            deserialize: function (buffer) { return buffer.getFloat64(); },\n        }),\n        float128: createType({\n            name: 'float128',\n            serialize: function (buffer, data) { buffer.pushUint8ArrayChecked(exports.hexToUint8Array(data), 16); },\n            deserialize: function (buffer) { return exports.arrayToHex(buffer.getUint8Array(16)); },\n        }),\n        bytes: createType({\n            name: 'bytes',\n            serialize: function (buffer, data) {\n                if (data instanceof Uint8Array || Array.isArray(data)) {\n                    buffer.pushBytes(data);\n                }\n                else {\n                    buffer.pushBytes(exports.hexToUint8Array(data));\n                }\n            },\n            deserialize: function (buffer, state) {\n                if (state && state.options.bytesAsUint8Array) {\n                    return buffer.getBytes();\n                }\n                else {\n                    return exports.arrayToHex(buffer.getBytes());\n                }\n            },\n        }),\n        string: createType({\n            name: 'string',\n            serialize: function (buffer, data) { buffer.pushString(data); },\n            deserialize: function (buffer) { return buffer.getString(); },\n        }),\n        name: createType({\n            name: 'name',\n            serialize: function (buffer, data) { buffer.pushName(data); },\n            deserialize: function (buffer) { return buffer.getName(); },\n        }),\n        time_point: createType({\n            name: 'time_point',\n            serialize: function (buffer, data) { buffer.pushNumberAsUint64(exports.dateToTimePoint(data)); },\n            deserialize: function (buffer) { return exports.timePointToDate(buffer.getUint64AsNumber()); },\n        }),\n        time_point_sec: createType({\n            name: 'time_point_sec',\n            serialize: function (buffer, data) { buffer.pushUint32(exports.dateToTimePointSec(data)); },\n            deserialize: function (buffer) { return exports.timePointSecToDate(buffer.getUint32()); },\n        }),\n        block_timestamp_type: createType({\n            name: 'block_timestamp_type',\n            serialize: function (buffer, data) { buffer.pushUint32(exports.dateToBlockTimestamp(data)); },\n            deserialize: function (buffer) { return exports.blockTimestampToDate(buffer.getUint32()); },\n        }),\n        symbol_code: createType({\n            name: 'symbol_code',\n            serialize: function (buffer, data) { buffer.pushSymbolCode(data); },\n            deserialize: function (buffer) { return buffer.getSymbolCode(); },\n        }),\n        symbol: createType({\n            name: 'symbol',\n            serialize: function (buffer, data) { buffer.pushSymbol(exports.stringToSymbol(data)); },\n            deserialize: function (buffer) { return exports.symbolToString(buffer.getSymbol()); },\n        }),\n        asset: createType({\n            name: 'asset',\n            serialize: function (buffer, data) { buffer.pushAsset(data); },\n            deserialize: function (buffer) { return buffer.getAsset(); },\n        }),\n        checksum160: createType({\n            name: 'checksum160',\n            serialize: function (buffer, data) { buffer.pushUint8ArrayChecked(exports.hexToUint8Array(data), 20); },\n            deserialize: function (buffer) { return exports.arrayToHex(buffer.getUint8Array(20)); },\n        }),\n        checksum256: createType({\n            name: 'checksum256',\n            serialize: function (buffer, data) { buffer.pushUint8ArrayChecked(exports.hexToUint8Array(data), 32); },\n            deserialize: function (buffer) { return exports.arrayToHex(buffer.getUint8Array(32)); },\n        }),\n        checksum512: createType({\n            name: 'checksum512',\n            serialize: function (buffer, data) { buffer.pushUint8ArrayChecked(exports.hexToUint8Array(data), 64); },\n            deserialize: function (buffer) { return exports.arrayToHex(buffer.getUint8Array(64)); },\n        }),\n        public_key: createType({\n            name: 'public_key',\n            serialize: function (buffer, data) { buffer.pushPublicKey(data); },\n            deserialize: function (buffer) { return buffer.getPublicKey(); },\n        }),\n        private_key: createType({\n            name: 'private_key',\n            serialize: function (buffer, data) { buffer.pushPrivateKey(data); },\n            deserialize: function (buffer) { return buffer.getPrivateKey(); },\n        }),\n        signature: createType({\n            name: 'signature',\n            serialize: function (buffer, data) { buffer.pushSignature(data); },\n            deserialize: function (buffer) { return buffer.getSignature(); },\n        }),\n    }));\n    result.set('extended_asset', createType({\n        name: 'extended_asset',\n        baseName: '',\n        fields: [\n            { name: 'quantity', typeName: 'asset', type: result.get('asset') },\n            { name: 'contract', typeName: 'name', type: result.get('name') },\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    return result;\n}; // createInitialTypes()\nexports.createInitialTypes = createInitialTypes;\nvar createAbiTypes = function () {\n    var initialTypes = exports.createInitialTypes();\n    initialTypes.set('extensions_entry', createType({\n        name: 'extensions_entry',\n        baseName: '',\n        fields: [\n            { name: 'tag', typeName: 'uint16', type: null },\n            { name: 'value', typeName: 'bytes', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('type_def', createType({\n        name: 'type_def',\n        baseName: '',\n        fields: [\n            { name: 'new_type_name', typeName: 'string', type: null },\n            { name: 'type', typeName: 'string', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('field_def', createType({\n        name: 'field_def',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'string', type: null },\n            { name: 'type', typeName: 'string', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('struct_def', createType({\n        name: 'struct_def',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'string', type: null },\n            { name: 'base', typeName: 'string', type: null },\n            { name: 'fields', typeName: 'field_def[]', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('action_def', createType({\n        name: 'action_def',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'name', type: null },\n            { name: 'type', typeName: 'string', type: null },\n            { name: 'ricardian_contract', typeName: 'string', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('table_def', createType({\n        name: 'table_def',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'name', type: null },\n            { name: 'index_type', typeName: 'string', type: null },\n            { name: 'key_names', typeName: 'string[]', type: null },\n            { name: 'key_types', typeName: 'string[]', type: null },\n            { name: 'type', typeName: 'string', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('clause_pair', createType({\n        name: 'clause_pair',\n        baseName: '',\n        fields: [\n            { name: 'id', typeName: 'string', type: null },\n            { name: 'body', typeName: 'string', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('error_message', createType({\n        name: 'error_message',\n        baseName: '',\n        fields: [\n            { name: 'error_code', typeName: 'uint64', type: null },\n            { name: 'error_msg', typeName: 'string', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('variant_def', createType({\n        name: 'variant_def',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'string', type: null },\n            { name: 'types', typeName: 'string[]', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('action_result', createType({\n        name: 'action_result',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'name', type: null },\n            { name: 'result_type', typeName: 'string', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('primary_key_index_def', createType({\n        name: 'primary_key_index_def',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'name', type: null },\n            { name: 'type', typeName: 'string', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('secondary_index_def', createType({\n        name: 'secondary_index_def',\n        baseName: '',\n        fields: [\n            { name: 'type', typeName: 'string', type: null },\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('secondary_indices', createType({\n        name: 'secondary_indices',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'name', type: null },\n            { name: 'secondary_index_def', typeName: 'secondary_index_def', type: null }\n        ],\n        serialize: serializeObject,\n        deserialize: deserializeObject,\n    }));\n    initialTypes.set('kv_table_entry_def', createType({\n        name: 'kv_table_entry_def',\n        baseName: '',\n        fields: [\n            { name: 'type', typeName: 'string', type: null },\n            { name: 'primary_index', typeName: 'primary_key_index_def', type: null },\n            { name: 'secondary_indices', typeName: 'secondary_indices', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('kv_table', createType({\n        name: 'kv_table',\n        baseName: '',\n        fields: [\n            { name: 'name', typeName: 'name', type: null },\n            { name: 'kv_table_entry_def', typeName: 'kv_table_entry_def', type: null }\n        ],\n        serialize: serializeObject,\n        deserialize: deserializeObject\n    }));\n    initialTypes.set('abi_def', createType({\n        name: 'abi_def',\n        baseName: '',\n        fields: [\n            { name: 'version', typeName: 'string', type: null },\n            { name: 'types', typeName: 'type_def[]', type: null },\n            { name: 'structs', typeName: 'struct_def[]', type: null },\n            { name: 'actions', typeName: 'action_def[]', type: null },\n            { name: 'tables', typeName: 'table_def[]', type: null },\n            { name: 'ricardian_clauses', typeName: 'clause_pair[]', type: null },\n            { name: 'error_messages', typeName: 'error_message[]', type: null },\n            { name: 'abi_extensions', typeName: 'extensions_entry[]', type: null },\n            { name: 'variants', typeName: 'variant_def[]$', type: null },\n            { name: 'action_results', typeName: 'action_result[]$', type: null },\n            { name: 'kv_tables', typeName: 'kv_table$', type: null },\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    return initialTypes;\n};\nexports.createAbiTypes = createAbiTypes;\nvar createTransactionExtensionTypes = function () {\n    var initialTypes = exports.createInitialTypes();\n    initialTypes.set('resource_payer', createType({\n        name: 'resource_payer',\n        baseName: '',\n        fields: [\n            { name: 'payer', typeName: 'name', type: null },\n            { name: 'max_net_bytes', typeName: 'uint64', type: null },\n            { name: 'max_cpu_us', typeName: 'uint64', type: null },\n            { name: 'max_memory_bytes', typeName: 'uint64', type: null },\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    return initialTypes;\n};\nexports.createTransactionExtensionTypes = createTransactionExtensionTypes;\nvar createTransactionTypes = function () {\n    var initialTypes = exports.createInitialTypes();\n    initialTypes.set('permission_level', createType({\n        name: 'permission_level',\n        baseName: '',\n        fields: [\n            { name: 'actor', typeName: 'name', type: null },\n            { name: 'permission', typeName: 'name', type: null },\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('action', createType({\n        name: 'action',\n        baseName: '',\n        fields: [\n            { name: 'account', typeName: 'name', type: null },\n            { name: 'name', typeName: 'name', type: null },\n            { name: 'authorization', typeName: 'permission_level[]', type: null },\n            { name: 'data', typeName: 'bytes', type: null },\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('extension', createType({\n        name: 'extension',\n        baseName: '',\n        fields: [\n            { name: 'type', typeName: 'uint16', type: null },\n            { name: 'data', typeName: 'bytes', type: null },\n        ],\n        serialize: serializePair,\n        deserialize: deserializePair,\n    }));\n    initialTypes.set('transaction_header', createType({\n        name: 'transaction_header',\n        baseName: '',\n        fields: [\n            { name: 'expiration', typeName: 'time_point_sec', type: null },\n            { name: 'ref_block_num', typeName: 'uint16', type: null },\n            { name: 'ref_block_prefix', typeName: 'uint32', type: null },\n            { name: 'max_net_usage_words', typeName: 'varuint32', type: null },\n            { name: 'max_cpu_usage_ms', typeName: 'uint8', type: null },\n            { name: 'delay_sec', typeName: 'varuint32', type: null },\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    initialTypes.set('transaction', createType({\n        name: 'transaction',\n        baseName: 'transaction_header',\n        fields: [\n            { name: 'context_free_actions', typeName: 'action[]', type: null },\n            { name: 'actions', typeName: 'action[]', type: null },\n            { name: 'transaction_extensions', typeName: 'extension', type: null }\n        ],\n        serialize: serializeStruct,\n        deserialize: deserializeStruct,\n    }));\n    return initialTypes;\n};\nexports.createTransactionTypes = createTransactionTypes;\n/** Get type from `types` */\nvar getType = function (types, name) {\n    var type = types.get(name);\n    if (type && type.aliasOfName) {\n        return exports.getType(types, type.aliasOfName);\n    }\n    if (type) {\n        return type;\n    }\n    if (name.endsWith('[]')) {\n        return createType({\n            name: name,\n            arrayOf: exports.getType(types, name.substr(0, name.length - 2)),\n            serialize: serializeArray,\n            deserialize: deserializeArray,\n        });\n    }\n    if (name.endsWith('?')) {\n        return createType({\n            name: name,\n            optionalOf: exports.getType(types, name.substr(0, name.length - 1)),\n            serialize: serializeOptional,\n            deserialize: deserializeOptional,\n        });\n    }\n    if (name.endsWith('$')) {\n        return createType({\n            name: name,\n            extensionOf: exports.getType(types, name.substr(0, name.length - 1)),\n            serialize: serializeExtension,\n            deserialize: deserializeExtension,\n        });\n    }\n    throw new Error('Unknown type: ' + name);\n};\nexports.getType = getType;\n/**\n * Get types from abi\n *\n * @param initialTypes Set of types to build on.\n * In most cases, it's best to fill this from a fresh call to `getTypesFromAbi()`.\n */\nvar getTypesFromAbi = function (initialTypes, abi) {\n    var e_6, _a, e_7, _b, e_8, _c, e_9, _d, e_10, _e;\n    var types = new Map(initialTypes);\n    if (abi && abi.types) {\n        try {\n            for (var _f = __values(abi.types), _g = _f.next(); !_g.done; _g = _f.next()) {\n                var _h = _g.value, new_type_name = _h.new_type_name, type = _h.type;\n                types.set(new_type_name, createType({ name: new_type_name, aliasOfName: type }));\n            }\n        }\n        catch (e_6_1) { e_6 = { error: e_6_1 }; }\n        finally {\n            try {\n                if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n            }\n            finally { if (e_6) throw e_6.error; }\n        }\n    }\n    if (abi && abi.structs) {\n        try {\n            for (var _j = __values(abi.structs), _k = _j.next(); !_k.done; _k = _j.next()) {\n                var _l = _k.value, name_1 = _l.name, base = _l.base, fields = _l.fields;\n                types.set(name_1, createType({\n                    name: name_1,\n                    baseName: base,\n                    fields: fields.map(function (_a) {\n                        var n = _a.name, type = _a.type;\n                        return ({ name: n, typeName: type, type: null });\n                    }),\n                    serialize: serializeStruct,\n                    deserialize: deserializeStruct,\n                }));\n            }\n        }\n        catch (e_7_1) { e_7 = { error: e_7_1 }; }\n        finally {\n            try {\n                if (_k && !_k.done && (_b = _j.return)) _b.call(_j);\n            }\n            finally { if (e_7) throw e_7.error; }\n        }\n    }\n    if (abi && abi.variants) {\n        try {\n            for (var _m = __values(abi.variants), _o = _m.next(); !_o.done; _o = _m.next()) {\n                var _p = _o.value, name_2 = _p.name, t = _p.types;\n                types.set(name_2, createType({\n                    name: name_2,\n                    fields: t.map(function (s) { return ({ name: s, typeName: s, type: null }); }),\n                    serialize: serializeVariant,\n                    deserialize: deserializeVariant,\n                }));\n            }\n        }\n        catch (e_8_1) { e_8 = { error: e_8_1 }; }\n        finally {\n            try {\n                if (_o && !_o.done && (_c = _m.return)) _c.call(_m);\n            }\n            finally { if (e_8) throw e_8.error; }\n        }\n    }\n    try {\n        for (var types_1 = __values(types), types_1_1 = types_1.next(); !types_1_1.done; types_1_1 = types_1.next()) {\n            var _q = __read(types_1_1.value, 2), name_3 = _q[0], type = _q[1];\n            if (type.baseName) {\n                type.base = exports.getType(types, type.baseName);\n            }\n            try {\n                for (var _r = (e_10 = void 0, __values(type.fields)), _s = _r.next(); !_s.done; _s = _r.next()) {\n                    var field = _s.value;\n                    field.type = exports.getType(types, field.typeName);\n                }\n            }\n            catch (e_10_1) { e_10 = { error: e_10_1 }; }\n            finally {\n                try {\n                    if (_s && !_s.done && (_e = _r.return)) _e.call(_r);\n                }\n                finally { if (e_10) throw e_10.error; }\n            }\n        }\n    }\n    catch (e_9_1) { e_9 = { error: e_9_1 }; }\n    finally {\n        try {\n            if (types_1_1 && !types_1_1.done && (_d = types_1.return)) _d.call(types_1);\n        }\n        finally { if (e_9) throw e_9.error; }\n    }\n    return types;\n}; // getTypesFromAbi\nexports.getTypesFromAbi = getTypesFromAbi;\nvar reverseHex = function (h) {\n    return h.substr(6, 2) + h.substr(4, 2) + h.substr(2, 2) + h.substr(0, 2);\n};\n/** TAPoS: Return transaction fields which reference `refBlock` and expire `expireSeconds` after `timestamp` */\nvar transactionHeader = function (refBlock, expireSeconds) {\n    var timestamp = refBlock.header ? refBlock.header.timestamp : refBlock.timestamp;\n    var prefix = parseInt(reverseHex(refBlock.id.substr(16, 8)), 16);\n    return {\n        expiration: exports.timePointSecToDate(exports.dateToTimePointSec(timestamp) + expireSeconds),\n        ref_block_num: refBlock.block_num & 0xffff,\n        ref_block_prefix: prefix,\n    };\n};\nexports.transactionHeader = transactionHeader;\n/** Convert action data to serialized form (hex) */\nvar serializeActionData = function (contract, account, name, data, textEncoder, textDecoder) {\n    var action = contract.actions.get(name);\n    if (!action) {\n        throw new Error(\"Unknown action \" + name + \" in contract \" + account);\n    }\n    var buffer = new SerialBuffer({ textEncoder: textEncoder, textDecoder: textDecoder });\n    action.serialize(buffer, data);\n    return exports.arrayToHex(buffer.asUint8Array());\n};\nexports.serializeActionData = serializeActionData;\n/** Return action in serialized form */\nvar serializeAction = function (contract, account, name, authorization, data, textEncoder, textDecoder) {\n    return {\n        account: account,\n        name: name,\n        authorization: authorization,\n        data: exports.serializeActionData(contract, account, name, data, textEncoder, textDecoder),\n    };\n};\nexports.serializeAction = serializeAction;\n/** Deserialize action data. If `data` is a `string`, then it's assumed to be in hex. */\nvar deserializeActionData = function (contract, account, name, data, textEncoder, textDecoder) {\n    var action = contract.actions.get(name);\n    if (typeof data === 'string') {\n        data = exports.hexToUint8Array(data);\n    }\n    if (!action) {\n        throw new Error(\"Unknown action \" + name + \" in contract \" + account);\n    }\n    var buffer = new SerialBuffer({ textDecoder: textDecoder, textEncoder: textEncoder });\n    buffer.pushArray(data);\n    return action.deserialize(buffer);\n};\nexports.deserializeActionData = deserializeActionData;\n/** Deserialize action. If `data` is a `string`, then it's assumed to be in hex. */\nvar deserializeAction = function (contract, account, name, authorization, data, textEncoder, textDecoder) {\n    return {\n        account: account,\n        name: name,\n        authorization: authorization,\n        data: exports.deserializeActionData(contract, account, name, data, textEncoder, textDecoder),\n    };\n};\nexports.deserializeAction = deserializeAction;\nvar serializeAnyvar = function (buffer, anyvar) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    var def;\n    var value;\n    if (anyvar === null) {\n        _a = __read([anyvarDefs.null_t, anyvar], 2), def = _a[0], value = _a[1];\n    }\n    else if (typeof anyvar === 'string') {\n        _b = __read([anyvarDefs.string, anyvar], 2), def = _b[0], value = _b[1];\n    }\n    else if (typeof anyvar === 'number') {\n        _c = __read([anyvarDefs.int32, anyvar], 2), def = _c[0], value = _c[1];\n    }\n    else if (anyvar instanceof Uint8Array) {\n        _d = __read([anyvarDefs.bytes, anyvar], 2), def = _d[0], value = _d[1];\n    }\n    else if (Array.isArray(anyvar)) {\n        _e = __read([anyvarDefs.any_array, anyvar], 2), def = _e[0], value = _e[1];\n    }\n    else if (Object.keys(anyvar).length === 2 && anyvar.hasOwnProperty('type') && anyvar.hasOwnProperty('value')) {\n        _f = __read([anyvarDefs[anyvar.type], anyvar.value], 2), def = _f[0], value = _f[1];\n    }\n    else {\n        _g = __read([anyvarDefs.any_object, anyvar], 2), def = _g[0], value = _g[1];\n    }\n    buffer.pushVaruint32(def.index);\n    def.type.serialize(buffer, value);\n};\nexports.serializeAnyvar = serializeAnyvar;\nvar deserializeAnyvar = function (buffer, state) {\n    var defIndex = buffer.getVaruint32();\n    if (defIndex >= anyvarDefsByIndex.length) {\n        throw new Error('Tried to deserialize unknown anyvar type');\n    }\n    var def = anyvarDefsByIndex[defIndex];\n    var value = def.type.deserialize(buffer, state);\n    if (state && state.options.useShortForm || def.useShortForm) {\n        return value;\n    }\n    else {\n        return { type: def.type.name, value: value };\n    }\n};\nexports.deserializeAnyvar = deserializeAnyvar;\nvar deserializeAnyvarShort = function (buffer) {\n    return exports.deserializeAnyvar(buffer, new SerializerState({ useShortForm: true }));\n};\nexports.deserializeAnyvarShort = deserializeAnyvarShort;\nvar serializeAnyObject = function (buffer, obj) {\n    var e_11, _a;\n    var entries = Object.entries(obj);\n    buffer.pushVaruint32(entries.length);\n    try {\n        for (var entries_2 = __values(entries), entries_2_1 = entries_2.next(); !entries_2_1.done; entries_2_1 = entries_2.next()) {\n            var _b = __read(entries_2_1.value, 2), key = _b[0], value = _b[1];\n            buffer.pushString(key);\n            exports.serializeAnyvar(buffer, value);\n        }\n    }\n    catch (e_11_1) { e_11 = { error: e_11_1 }; }\n    finally {\n        try {\n            if (entries_2_1 && !entries_2_1.done && (_a = entries_2.return)) _a.call(entries_2);\n        }\n        finally { if (e_11) throw e_11.error; }\n    }\n};\nexports.serializeAnyObject = serializeAnyObject;\nvar deserializeAnyObject = function (buffer, state) {\n    var len = buffer.getVaruint32();\n    var result = {};\n    for (var i = 0; i < len; ++i) {\n        var key = buffer.getString();\n        if (key in result) {\n            var j = 1;\n            while (key + '_' + j in result) {\n                ++j;\n            }\n            key = key + '_' + j;\n        }\n        result[key] = exports.deserializeAnyvar(buffer, state);\n    }\n    return result;\n};\nexports.deserializeAnyObject = deserializeAnyObject;\nvar serializeAnyArray = function (buffer, arr) {\n    var e_12, _a;\n    buffer.pushVaruint32(arr.length);\n    try {\n        for (var arr_1 = __values(arr), arr_1_1 = arr_1.next(); !arr_1_1.done; arr_1_1 = arr_1.next()) {\n            var x = arr_1_1.value;\n            exports.serializeAnyvar(buffer, x);\n        }\n    }\n    catch (e_12_1) { e_12 = { error: e_12_1 }; }\n    finally {\n        try {\n            if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) _a.call(arr_1);\n        }\n        finally { if (e_12) throw e_12.error; }\n    }\n};\nexports.serializeAnyArray = serializeAnyArray;\nvar deserializeAnyArray = function (buffer, state) {\n    var len = buffer.getVaruint32();\n    var result = [];\n    for (var i = 0; i < len; ++i) {\n        result.push(exports.deserializeAnyvar(buffer, state));\n    }\n    return result;\n};\nexports.deserializeAnyArray = deserializeAnyArray;\nvar addAdditionalTypes = function () {\n    var initialTypes = exports.createInitialTypes();\n    initialTypes.set('null_t', createType({\n        name: 'null_t',\n        serialize: function (buffer, anyvar) { },\n        deserialize: function (buffer, state) { }\n    }));\n    initialTypes.set('any_object', createType({\n        name: 'any_object',\n        serialize: exports.serializeAnyObject,\n        deserialize: exports.deserializeAnyObject\n    }));\n    initialTypes.set('any_array', createType({\n        name: 'any_array',\n        serialize: exports.serializeAnyArray,\n        deserialize: exports.deserializeAnyArray\n    }));\n    return initialTypes;\n};\nvar additionalTypes = addAdditionalTypes();\nvar anyvarDefs = {\n    null_t: { index: 0, useShortForm: true, type: additionalTypes.get('null_t') },\n    int64: { index: 1, useShortForm: false, type: additionalTypes.get('int64') },\n    uint64: { index: 2, useShortForm: false, type: additionalTypes.get('uint64') },\n    int32: { index: 3, useShortForm: true, type: additionalTypes.get('int32') },\n    uint32: { index: 4, useShortForm: false, type: additionalTypes.get('uint32') },\n    int16: { index: 5, useShortForm: false, type: additionalTypes.get('int16') },\n    uint16: { index: 6, useShortForm: false, type: additionalTypes.get('uint16') },\n    int8: { index: 7, useShortForm: false, type: additionalTypes.get('int8') },\n    uint8: { index: 8, useShortForm: false, type: additionalTypes.get('uint8') },\n    time_point: { index: 9, useShortForm: false, type: additionalTypes.get('time_point') },\n    checksum256: { index: 10, useShortForm: false, type: additionalTypes.get('checksum256') },\n    float64: { index: 11, useShortForm: false, type: additionalTypes.get('float64') },\n    string: { index: 12, useShortForm: true, type: additionalTypes.get('string') },\n    any_object: { index: 13, useShortForm: true, type: additionalTypes.get('any_object') },\n    any_array: { index: 14, useShortForm: true, type: additionalTypes.get('any_array') },\n    bytes: { index: 15, useShortForm: false, type: additionalTypes.get('bytes') },\n    symbol: { index: 16, useShortForm: false, type: additionalTypes.get('symbol') },\n    symbol_code: { index: 17, useShortForm: false, type: additionalTypes.get('symbol_code') },\n    asset: { index: 18, useShortForm: false, type: additionalTypes.get('asset') },\n};\nvar anyvarDefsByIndex = [\n    anyvarDefs.null_t,\n    anyvarDefs.int64,\n    anyvarDefs.uint64,\n    anyvarDefs.int32,\n    anyvarDefs.uint32,\n    anyvarDefs.int16,\n    anyvarDefs.uint16,\n    anyvarDefs.int8,\n    anyvarDefs.uint8,\n    anyvarDefs.time_point,\n    anyvarDefs.checksum256,\n    anyvarDefs.float64,\n    anyvarDefs.string,\n    anyvarDefs.any_object,\n    anyvarDefs.any_array,\n    anyvarDefs.bytes,\n    anyvarDefs.symbol,\n    anyvarDefs.symbol_code,\n    anyvarDefs.asset,\n];\nvar serializeQuery = function (buffer, query) {\n    var _a, _b, _c, e_13, _d;\n    var method;\n    var arg;\n    var filter;\n    if (typeof query === 'string') {\n        method = query;\n    }\n    else if (Array.isArray(query) && query.length === 2) {\n        _a = __read(query, 2), method = _a[0], filter = _a[1];\n    }\n    else if (Array.isArray(query) && query.length === 3) {\n        _b = __read(query, 3), method = _b[0], arg = _b[1], filter = _b[2];\n    }\n    else {\n        _c = __read([query.method, query.arg, query.filter], 3), method = _c[0], arg = _c[1], filter = _c[2];\n    }\n    buffer.pushString(method);\n    if (arg === undefined) {\n        buffer.push(0);\n    }\n    else {\n        buffer.push(1);\n        exports.serializeAnyvar(buffer, arg);\n    }\n    if (filter === undefined) {\n        buffer.push(0);\n    }\n    else {\n        buffer.pushVaruint32(filter.length);\n        try {\n            for (var filter_1 = __values(filter), filter_1_1 = filter_1.next(); !filter_1_1.done; filter_1_1 = filter_1.next()) {\n                var q = filter_1_1.value;\n                exports.serializeQuery(buffer, q);\n            }\n        }\n        catch (e_13_1) { e_13 = { error: e_13_1 }; }\n        finally {\n            try {\n                if (filter_1_1 && !filter_1_1.done && (_d = filter_1.return)) _d.call(filter_1);\n            }\n            finally { if (e_13) throw e_13.error; }\n        }\n    }\n};\nexports.serializeQuery = serializeQuery;\n//# sourceMappingURL=eosjs-serialize.js.map","\"use strict\";\n/**\n * @module API\n */\n// copyright defined in eosjs/LICENSE.txt\n/* eslint-disable max-classes-per-file */\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ActionBuilder = exports.TransactionBuilder = exports.Api = void 0;\nvar pako_1 = require(\"pako\");\nvar ser = require(\"./eosjs-serialize\");\nvar Api = /** @class */ (function () {\n    /**\n     * @param args\n     * * `rpc`: Issues RPC calls\n     * * `authorityProvider`: Get public keys needed to meet authorities in a transaction\n     * * `abiProvider`: Supplies ABIs in raw form (binary)\n     * * `signatureProvider`: Signs transactions\n     * * `chainId`: Identifies chain\n     * * `textEncoder`: `TextEncoder` instance to use. Pass in `null` if running in a browser\n     * * `textDecoder`: `TextDecoder` instance to use. Pass in `null` if running in a browser\n     */\n    function Api(args) {\n        /** Holds information needed to serialize contract actions */\n        this.contracts = new Map();\n        /** Fetched abis */\n        this.cachedAbis = new Map();\n        this.transactionExtensions = [\n            { id: 1, type: 'resource_payer', keys: ['payer', 'max_net_bytes', 'max_cpu_us', 'max_memory_bytes'] },\n        ];\n        this.rpc = args.rpc;\n        this.authorityProvider = args.authorityProvider || args.rpc;\n        this.abiProvider = args.abiProvider || args.rpc;\n        this.signatureProvider = args.signatureProvider;\n        this.chainId = args.chainId;\n        this.textEncoder = args.textEncoder;\n        this.textDecoder = args.textDecoder;\n        this.abiTypes = ser.getTypesFromAbi(ser.createAbiTypes());\n        this.transactionTypes = ser.getTypesFromAbi(ser.createTransactionTypes());\n    }\n    /** Decodes an abi as Uint8Array into json. */\n    Api.prototype.rawAbiToJson = function (rawAbi) {\n        var buffer = new ser.SerialBuffer({\n            textEncoder: this.textEncoder,\n            textDecoder: this.textDecoder,\n            array: rawAbi,\n        });\n        if (!ser.supportedAbiVersion(buffer.getString())) {\n            throw new Error('Unsupported abi version');\n        }\n        buffer.restartRead();\n        return this.abiTypes.get('abi_def').deserialize(buffer);\n    };\n    /** Encodes a json abi as Uint8Array. */\n    Api.prototype.jsonToRawAbi = function (jsonAbi) {\n        var buffer = new ser.SerialBuffer({\n            textEncoder: this.textEncoder,\n            textDecoder: this.textDecoder,\n        });\n        this.abiTypes.get('abi_def').serialize(buffer, jsonAbi);\n        if (!ser.supportedAbiVersion(buffer.getString())) {\n            throw new Error('Unsupported abi version');\n        }\n        return buffer.asUint8Array();\n    };\n    /** Get abi in both binary and structured forms. Fetch when needed. */\n    Api.prototype.getCachedAbi = function (accountName, reload) {\n        if (reload === void 0) { reload = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            var cachedAbi, rawAbi, abi, e_1;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!reload && this.cachedAbis.get(accountName)) {\n                            return [2 /*return*/, this.cachedAbis.get(accountName)];\n                        }\n                        _a.label = 1;\n                    case 1:\n                        _a.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, this.abiProvider.getRawAbi(accountName)];\n                    case 2:\n                        rawAbi = (_a.sent()).abi;\n                        abi = this.rawAbiToJson(rawAbi);\n                        cachedAbi = { rawAbi: rawAbi, abi: abi };\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_1 = _a.sent();\n                        e_1.message = \"fetching abi for \" + accountName + \": \" + e_1.message;\n                        throw e_1;\n                    case 4:\n                        if (!cachedAbi) {\n                            throw new Error(\"Missing abi for \" + accountName);\n                        }\n                        this.cachedAbis.set(accountName, cachedAbi);\n                        return [2 /*return*/, cachedAbi];\n                }\n            });\n        });\n    };\n    /** Get abi in structured form. Fetch when needed. */\n    Api.prototype.getAbi = function (accountName, reload) {\n        if (reload === void 0) { reload = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.getCachedAbi(accountName, reload)];\n                    case 1: return [2 /*return*/, (_a.sent()).abi];\n                }\n            });\n        });\n    };\n    /** Get abis needed by a transaction */\n    Api.prototype.getTransactionAbis = function (transaction, reload) {\n        if (reload === void 0) { reload = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            var actions, accounts, uniqueAccounts, actionPromises;\n            var _this = this;\n            return __generator(this, function (_a) {\n                actions = (transaction.context_free_actions || []).concat(transaction.actions);\n                accounts = actions.map(function (action) { return action.account; });\n                uniqueAccounts = new Set(accounts);\n                actionPromises = __spreadArray([], __read(uniqueAccounts)).map(function (account) { return __awaiter(_this, void 0, void 0, function () {\n                    var _a;\n                    return __generator(this, function (_b) {\n                        switch (_b.label) {\n                            case 0:\n                                _a = {\n                                    accountName: account\n                                };\n                                return [4 /*yield*/, this.getCachedAbi(account, reload)];\n                            case 1: return [2 /*return*/, (_a.abi = (_b.sent()).rawAbi,\n                                    _a)];\n                        }\n                    });\n                }); });\n                return [2 /*return*/, Promise.all(actionPromises)];\n            });\n        });\n    };\n    /** Get data needed to serialize actions in a contract */\n    Api.prototype.getContract = function (accountName, reload) {\n        if (reload === void 0) { reload = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            var abi, types, actions, _a, _b, _c, name_1, type, result;\n            var e_2, _d;\n            return __generator(this, function (_e) {\n                switch (_e.label) {\n                    case 0:\n                        if (!reload && this.contracts.get(accountName)) {\n                            return [2 /*return*/, this.contracts.get(accountName)];\n                        }\n                        return [4 /*yield*/, this.getAbi(accountName, reload)];\n                    case 1:\n                        abi = _e.sent();\n                        types = ser.getTypesFromAbi(ser.createInitialTypes(), abi);\n                        actions = new Map();\n                        try {\n                            for (_a = __values(abi.actions), _b = _a.next(); !_b.done; _b = _a.next()) {\n                                _c = _b.value, name_1 = _c.name, type = _c.type;\n                                actions.set(name_1, ser.getType(types, type));\n                            }\n                        }\n                        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                        finally {\n                            try {\n                                if (_b && !_b.done && (_d = _a.return)) _d.call(_a);\n                            }\n                            finally { if (e_2) throw e_2.error; }\n                        }\n                        result = { types: types, actions: actions };\n                        this.contracts.set(accountName, result);\n                        return [2 /*return*/, result];\n                }\n            });\n        });\n    };\n    /** Convert `value` to binary form. `type` must be a built-in abi type or in `transaction.abi.json`. */\n    Api.prototype.serialize = function (buffer, type, value) {\n        this.transactionTypes.get(type).serialize(buffer, value);\n    };\n    /** Convert data in `buffer` to structured form. `type` must be a built-in abi type or in `transaction.abi.json`. */\n    Api.prototype.deserialize = function (buffer, type) {\n        return this.transactionTypes.get(type).deserialize(buffer);\n    };\n    /** Convert a transaction to binary */\n    Api.prototype.serializeTransaction = function (transaction) {\n        var buffer = new ser.SerialBuffer({ textEncoder: this.textEncoder, textDecoder: this.textDecoder });\n        this.serialize(buffer, 'transaction', __assign({ max_net_usage_words: 0, max_cpu_usage_ms: 0, delay_sec: 0, context_free_actions: [], actions: [], transaction_extensions: [] }, transaction));\n        return buffer.asUint8Array();\n    };\n    /** Serialize context-free data */\n    Api.prototype.serializeContextFreeData = function (contextFreeData) {\n        var e_3, _a;\n        if (!contextFreeData || !contextFreeData.length) {\n            return null;\n        }\n        var buffer = new ser.SerialBuffer({ textEncoder: this.textEncoder, textDecoder: this.textDecoder });\n        buffer.pushVaruint32(contextFreeData.length);\n        try {\n            for (var contextFreeData_1 = __values(contextFreeData), contextFreeData_1_1 = contextFreeData_1.next(); !contextFreeData_1_1.done; contextFreeData_1_1 = contextFreeData_1.next()) {\n                var data = contextFreeData_1_1.value;\n                buffer.pushBytes(data);\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (contextFreeData_1_1 && !contextFreeData_1_1.done && (_a = contextFreeData_1.return)) _a.call(contextFreeData_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        return buffer.asUint8Array();\n    };\n    /** Convert a transaction from binary. Leaves actions in hex. */\n    Api.prototype.deserializeTransaction = function (transaction) {\n        var buffer = new ser.SerialBuffer({ textEncoder: this.textEncoder, textDecoder: this.textDecoder });\n        buffer.pushArray(transaction);\n        return this.deserialize(buffer, 'transaction');\n    };\n    // Order of adding to transaction_extension is transaction_extension id ascending\n    Api.prototype.serializeTransactionExtensions = function (transaction) {\n        var transaction_extensions = [];\n        if (transaction.resource_payer) {\n            var extensionBuffer = new ser.SerialBuffer({ textEncoder: this.textEncoder, textDecoder: this.textDecoder });\n            var types = ser.getTypesFromAbi(ser.createTransactionExtensionTypes());\n            types.get('resource_payer').serialize(extensionBuffer, transaction.resource_payer);\n            transaction_extensions = __spreadArray(__spreadArray([], __read(transaction_extensions)), [[1, ser.arrayToHex(extensionBuffer.asUint8Array())]]);\n        }\n        return transaction_extensions;\n    };\n    ;\n    // Usage: transaction = {...transaction, ...this.deserializeTransactionExtensions(transaction.transaction_extensions)}\n    Api.prototype.deserializeTransactionExtensions = function (data) {\n        var _this = this;\n        var transaction = {};\n        data.forEach(function (extensionData) {\n            var transactionExtension = _this.transactionExtensions.find(function (extension) { return extension.id === extensionData[0]; });\n            if (transactionExtension === undefined) {\n                throw new Error(\"Transaction Extension could not be determined: \" + extensionData);\n            }\n            var types = ser.getTypesFromAbi(ser.createTransactionExtensionTypes());\n            var extensionBuffer = new ser.SerialBuffer({ textEncoder: _this.textEncoder, textDecoder: _this.textDecoder });\n            extensionBuffer.pushArray(ser.hexToUint8Array(extensionData[1]));\n            var deserializedObj = types.get(transactionExtension.type).deserialize(extensionBuffer);\n            if (extensionData[0] === 1) {\n                deserializedObj.max_net_bytes = Number(deserializedObj.max_net_bytes);\n                deserializedObj.max_cpu_us = Number(deserializedObj.max_cpu_us);\n                deserializedObj.max_memory_bytes = Number(deserializedObj.max_memory_bytes);\n                transaction.resource_payer = deserializedObj;\n            }\n        });\n        return transaction;\n    };\n    ;\n    // Transaction extensions are serialized and moved to `transaction_extensions`, deserialized objects are not needed on the transaction\n    Api.prototype.deleteTransactionExtensionObjects = function (transaction) {\n        delete transaction.resource_payer;\n        return transaction;\n    };\n    /** Convert actions to hex */\n    Api.prototype.serializeActions = function (actions) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, Promise.all(actions.map(function (action) { return __awaiter(_this, void 0, void 0, function () {\n                            var account, name, authorization, data, contract;\n                            return __generator(this, function (_a) {\n                                switch (_a.label) {\n                                    case 0:\n                                        account = action.account, name = action.name, authorization = action.authorization, data = action.data;\n                                        return [4 /*yield*/, this.getContract(account)];\n                                    case 1:\n                                        contract = _a.sent();\n                                        if (typeof data !== 'object') {\n                                            return [2 /*return*/, action];\n                                        }\n                                        return [2 /*return*/, ser.serializeAction(contract, account, name, authorization, data, this.textEncoder, this.textDecoder)];\n                                }\n                            });\n                        }); }))];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Convert actions from hex */\n    Api.prototype.deserializeActions = function (actions) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, Promise.all(actions.map(function (_a) {\n                            var account = _a.account, name = _a.name, authorization = _a.authorization, data = _a.data;\n                            return __awaiter(_this, void 0, void 0, function () {\n                                var contract;\n                                return __generator(this, function (_b) {\n                                    switch (_b.label) {\n                                        case 0: return [4 /*yield*/, this.getContract(account)];\n                                        case 1:\n                                            contract = _b.sent();\n                                            return [2 /*return*/, ser.deserializeAction(contract, account, name, authorization, data, this.textEncoder, this.textDecoder)];\n                                    }\n                                });\n                            });\n                        }))];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Convert a transaction from binary. Also deserializes actions. */\n    Api.prototype.deserializeTransactionWithActions = function (transaction) {\n        return __awaiter(this, void 0, void 0, function () {\n            var deserializedTransaction, deserializedCFActions, deserializedActions;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (typeof transaction === 'string') {\n                            transaction = ser.hexToUint8Array(transaction);\n                        }\n                        deserializedTransaction = this.deserializeTransaction(transaction);\n                        return [4 /*yield*/, this.deserializeActions(deserializedTransaction.context_free_actions)];\n                    case 1:\n                        deserializedCFActions = _a.sent();\n                        return [4 /*yield*/, this.deserializeActions(deserializedTransaction.actions)];\n                    case 2:\n                        deserializedActions = _a.sent();\n                        return [2 /*return*/, __assign(__assign({}, deserializedTransaction), { context_free_actions: deserializedCFActions, actions: deserializedActions })];\n                }\n            });\n        });\n    };\n    /** Deflate a serialized object */\n    Api.prototype.deflateSerializedArray = function (serializedArray) {\n        return pako_1.deflate(serializedArray, { level: 9 });\n    };\n    /** Inflate a compressed serialized object */\n    Api.prototype.inflateSerializedArray = function (compressedSerializedArray) {\n        return pako_1.inflate(compressedSerializedArray);\n    };\n    /**\n     * Create and optionally broadcast a transaction.\n     *\n     * Named Parameters:\n     * `broadcast`: broadcast this transaction?\n     * `sign`: sign this transaction?\n     * `compression`: compress this transaction?\n     * `readOnlyTrx`: read only transaction?\n     * `returnFailureTraces`: return failure traces? (only available for read only transactions currently)\n     *\n     * If both `blocksBehind` and `expireSeconds` are present,\n     * then fetch the block which is `blocksBehind` behind head block,\n     * use it as a reference for TAPoS, and expire the transaction `expireSeconds` after that block's time.\n     *\n     * If both `useLastIrreversible` and `expireSeconds` are present,\n     * then fetch the last irreversible block, use it as a reference for TAPoS,\n     * and expire the transaction `expireSeconds` after that block's time.\n     *\n     * @returns node response if `broadcast`, `{signatures, serializedTransaction}` if `!broadcast`\n     */\n    Api.prototype.transact = function (transaction, _a) {\n        var _b = _a === void 0 ? {} : _a, _c = _b.broadcast, broadcast = _c === void 0 ? true : _c, _d = _b.sign, sign = _d === void 0 ? true : _d, readOnlyTrx = _b.readOnlyTrx, returnFailureTraces = _b.returnFailureTraces, requiredKeys = _b.requiredKeys, compression = _b.compression, blocksBehind = _b.blocksBehind, useLastIrreversible = _b.useLastIrreversible, expireSeconds = _b.expireSeconds;\n        return __awaiter(this, void 0, void 0, function () {\n            var info, abis, _e, serializedTransaction, serializedContextFreeData, pushTransactionArgs, availableKeys;\n            var _f;\n            return __generator(this, function (_g) {\n                switch (_g.label) {\n                    case 0:\n                        if (typeof blocksBehind === 'number' && useLastIrreversible) {\n                            throw new Error('Use either blocksBehind or useLastIrreversible');\n                        }\n                        if (!!this.chainId) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.rpc.get_info()];\n                    case 1:\n                        info = _g.sent();\n                        this.chainId = info.chain_id;\n                        _g.label = 2;\n                    case 2:\n                        if (!((typeof blocksBehind === 'number' || useLastIrreversible) && expireSeconds)) return [3 /*break*/, 4];\n                        return [4 /*yield*/, this.generateTapos(info, transaction, blocksBehind, useLastIrreversible, expireSeconds)];\n                    case 3:\n                        transaction = _g.sent();\n                        _g.label = 4;\n                    case 4:\n                        if (!this.hasRequiredTaposFields(transaction)) {\n                            throw new Error('Required configuration or TAPOS fields are not present');\n                        }\n                        return [4 /*yield*/, this.getTransactionAbis(transaction)];\n                    case 5:\n                        abis = _g.sent();\n                        _e = [__assign({}, transaction)];\n                        _f = {};\n                        return [4 /*yield*/, this.serializeTransactionExtensions(transaction)];\n                    case 6:\n                        _f.transaction_extensions = _g.sent();\n                        return [4 /*yield*/, this.serializeActions(transaction.context_free_actions || [])];\n                    case 7:\n                        _f.context_free_actions = _g.sent();\n                        return [4 /*yield*/, this.serializeActions(transaction.actions)];\n                    case 8:\n                        transaction = __assign.apply(void 0, _e.concat([(_f.actions = _g.sent(), _f)]));\n                        transaction = this.deleteTransactionExtensionObjects(transaction);\n                        serializedTransaction = this.serializeTransaction(transaction);\n                        serializedContextFreeData = this.serializeContextFreeData(transaction.context_free_data);\n                        pushTransactionArgs = {\n                            serializedTransaction: serializedTransaction,\n                            serializedContextFreeData: serializedContextFreeData,\n                            signatures: []\n                        };\n                        if (!sign) return [3 /*break*/, 13];\n                        if (!!requiredKeys) return [3 /*break*/, 11];\n                        return [4 /*yield*/, this.signatureProvider.getAvailableKeys()];\n                    case 9:\n                        availableKeys = _g.sent();\n                        return [4 /*yield*/, this.authorityProvider.getRequiredKeys({ transaction: transaction, availableKeys: availableKeys })];\n                    case 10:\n                        requiredKeys = _g.sent();\n                        _g.label = 11;\n                    case 11: return [4 /*yield*/, this.signatureProvider.sign({\n                            chainId: this.chainId,\n                            requiredKeys: requiredKeys,\n                            serializedTransaction: serializedTransaction,\n                            serializedContextFreeData: serializedContextFreeData,\n                            abis: abis,\n                        })];\n                    case 12:\n                        pushTransactionArgs = _g.sent();\n                        _g.label = 13;\n                    case 13:\n                        if (broadcast) {\n                            if (compression) {\n                                return [2 /*return*/, this.pushCompressedSignedTransaction(pushTransactionArgs, readOnlyTrx, returnFailureTraces)];\n                            }\n                            return [2 /*return*/, this.pushSignedTransaction(pushTransactionArgs, readOnlyTrx, returnFailureTraces)];\n                        }\n                        return [2 /*return*/, pushTransactionArgs];\n                }\n            });\n        });\n    };\n    Api.prototype.query = function (account, short, query, _a) {\n        var sign = _a.sign, requiredKeys = _a.requiredKeys, _b = _a.authorization, authorization = _b === void 0 ? [] : _b;\n        return __awaiter(this, void 0, void 0, function () {\n            var info, refBlock, queryBuffer, transaction, serializedTransaction, signatures, abis, availableKeys, signResponse, response, returnBuffer;\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0: return [4 /*yield*/, this.rpc.get_info()];\n                    case 1:\n                        info = _c.sent();\n                        return [4 /*yield*/, this.tryRefBlockFromGetInfo(info)];\n                    case 2:\n                        refBlock = _c.sent();\n                        queryBuffer = new ser.SerialBuffer({ textEncoder: this.textEncoder, textDecoder: this.textDecoder });\n                        ser.serializeQuery(queryBuffer, query);\n                        transaction = __assign(__assign({}, ser.transactionHeader(refBlock, 60 * 30)), { context_free_actions: [], actions: [{\n                                    account: account,\n                                    name: 'queryit',\n                                    authorization: authorization,\n                                    data: ser.arrayToHex(queryBuffer.asUint8Array()),\n                                }] });\n                        serializedTransaction = this.serializeTransaction(transaction);\n                        signatures = [];\n                        if (!sign) return [3 /*break*/, 8];\n                        return [4 /*yield*/, this.getTransactionAbis(transaction)];\n                    case 3:\n                        abis = _c.sent();\n                        if (!!requiredKeys) return [3 /*break*/, 6];\n                        return [4 /*yield*/, this.signatureProvider.getAvailableKeys()];\n                    case 4:\n                        availableKeys = _c.sent();\n                        return [4 /*yield*/, this.authorityProvider.getRequiredKeys({ transaction: transaction, availableKeys: availableKeys })];\n                    case 5:\n                        requiredKeys = _c.sent();\n                        _c.label = 6;\n                    case 6: return [4 /*yield*/, this.signatureProvider.sign({\n                            chainId: this.chainId,\n                            requiredKeys: requiredKeys,\n                            serializedTransaction: serializedTransaction,\n                            serializedContextFreeData: null,\n                            abis: abis,\n                        })];\n                    case 7:\n                        signResponse = _c.sent();\n                        signatures = signResponse.signatures;\n                        _c.label = 8;\n                    case 8: return [4 /*yield*/, this.rpc.send_transaction({\n                            signatures: signatures,\n                            compression: 0,\n                            serializedTransaction: serializedTransaction\n                        })];\n                    case 9:\n                        response = _c.sent();\n                        returnBuffer = new ser.SerialBuffer({\n                            textEncoder: this.textEncoder,\n                            textDecoder: this.textDecoder,\n                            array: ser.hexToUint8Array(response.processed.action_traces[0][1].return_value)\n                        });\n                        if (short) {\n                            return [2 /*return*/, ser.deserializeAnyvarShort(returnBuffer)];\n                        }\n                        else {\n                            return [2 /*return*/, ser.deserializeAnyvar(returnBuffer)];\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /** Broadcast a signed transaction */\n    Api.prototype.pushSignedTransaction = function (_a, readOnlyTrx, returnFailureTraces) {\n        var signatures = _a.signatures, serializedTransaction = _a.serializedTransaction, serializedContextFreeData = _a.serializedContextFreeData;\n        if (readOnlyTrx === void 0) { readOnlyTrx = false; }\n        if (returnFailureTraces === void 0) { returnFailureTraces = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_b) {\n                if (readOnlyTrx) {\n                    return [2 /*return*/, this.rpc.push_ro_transaction({\n                            signatures: signatures,\n                            serializedTransaction: serializedTransaction,\n                            serializedContextFreeData: serializedContextFreeData,\n                        }, returnFailureTraces)];\n                }\n                return [2 /*return*/, this.rpc.push_transaction({\n                        signatures: signatures,\n                        serializedTransaction: serializedTransaction,\n                        serializedContextFreeData: serializedContextFreeData\n                    })];\n            });\n        });\n    };\n    Api.prototype.pushCompressedSignedTransaction = function (_a, readOnlyTrx, returnFailureTraces) {\n        var signatures = _a.signatures, serializedTransaction = _a.serializedTransaction, serializedContextFreeData = _a.serializedContextFreeData;\n        if (readOnlyTrx === void 0) { readOnlyTrx = false; }\n        if (returnFailureTraces === void 0) { returnFailureTraces = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            var compressedSerializedTransaction, compressedSerializedContextFreeData;\n            return __generator(this, function (_b) {\n                compressedSerializedTransaction = this.deflateSerializedArray(serializedTransaction);\n                compressedSerializedContextFreeData = this.deflateSerializedArray(serializedContextFreeData || new Uint8Array(0));\n                if (readOnlyTrx) {\n                    return [2 /*return*/, this.rpc.push_ro_transaction({\n                            signatures: signatures,\n                            compression: 1,\n                            serializedTransaction: compressedSerializedTransaction,\n                            serializedContextFreeData: compressedSerializedContextFreeData\n                        }, returnFailureTraces)];\n                }\n                return [2 /*return*/, this.rpc.push_transaction({\n                        signatures: signatures,\n                        compression: 1,\n                        serializedTransaction: compressedSerializedTransaction,\n                        serializedContextFreeData: compressedSerializedContextFreeData\n                    })];\n            });\n        });\n    };\n    Api.prototype.generateTapos = function (info, transaction, blocksBehind, useLastIrreversible, expireSeconds) {\n        return __awaiter(this, void 0, void 0, function () {\n            var block, taposBlockNumber, refBlock, _a;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (!!info) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.rpc.get_info()];\n                    case 1:\n                        info = _b.sent();\n                        _b.label = 2;\n                    case 2:\n                        if (!useLastIrreversible) return [3 /*break*/, 4];\n                        return [4 /*yield*/, this.tryRefBlockFromGetInfo(info)];\n                    case 3:\n                        block = _b.sent();\n                        return [2 /*return*/, __assign(__assign({}, ser.transactionHeader(block, expireSeconds)), transaction)];\n                    case 4:\n                        taposBlockNumber = info.head_block_num - blocksBehind;\n                        if (!(taposBlockNumber <= info.last_irreversible_block_num)) return [3 /*break*/, 6];\n                        return [4 /*yield*/, this.tryGetBlockInfo(taposBlockNumber)];\n                    case 5:\n                        _a = _b.sent();\n                        return [3 /*break*/, 8];\n                    case 6: return [4 /*yield*/, this.tryGetBlockHeaderState(taposBlockNumber)];\n                    case 7:\n                        _a = _b.sent();\n                        _b.label = 8;\n                    case 8:\n                        refBlock = _a;\n                        return [2 /*return*/, __assign(__assign({}, ser.transactionHeader(refBlock, expireSeconds)), transaction)];\n                }\n            });\n        });\n    };\n    // eventually break out into TransactionValidator class\n    Api.prototype.hasRequiredTaposFields = function (_a) {\n        var expiration = _a.expiration, ref_block_num = _a.ref_block_num, ref_block_prefix = _a.ref_block_prefix;\n        return !!(expiration && typeof (ref_block_num) === 'number' && typeof (ref_block_prefix) === 'number');\n    };\n    Api.prototype.tryGetBlockHeaderState = function (taposBlockNumber) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_1;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 2, , 4]);\n                        return [4 /*yield*/, this.rpc.get_block_header_state(taposBlockNumber)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                    case 2:\n                        error_1 = _a.sent();\n                        return [4 /*yield*/, this.tryGetBlockInfo(taposBlockNumber)];\n                    case 3: return [2 /*return*/, _a.sent()];\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    Api.prototype.tryGetBlockInfo = function (blockNumber) {\n        return __awaiter(this, void 0, void 0, function () {\n            var error_2;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 2, , 4]);\n                        return [4 /*yield*/, this.rpc.get_block_info(blockNumber)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                    case 2:\n                        error_2 = _a.sent();\n                        return [4 /*yield*/, this.rpc.get_block(blockNumber)];\n                    case 3: return [2 /*return*/, _a.sent()];\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    Api.prototype.tryRefBlockFromGetInfo = function (info) {\n        return __awaiter(this, void 0, void 0, function () {\n            var block;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!(info.hasOwnProperty('last_irreversible_block_id') &&\n                            info.hasOwnProperty('last_irreversible_block_num') &&\n                            info.hasOwnProperty('last_irreversible_block_time'))) return [3 /*break*/, 1];\n                        return [2 /*return*/, {\n                                block_num: info.last_irreversible_block_num,\n                                id: info.last_irreversible_block_id,\n                                timestamp: info.last_irreversible_block_time,\n                            }];\n                    case 1: return [4 /*yield*/, this.tryGetBlockInfo(info.last_irreversible_block_num)];\n                    case 2:\n                        block = _a.sent();\n                        return [2 /*return*/, {\n                                block_num: block.block_num,\n                                id: block.id,\n                                timestamp: block.timestamp,\n                            }];\n                }\n            });\n        });\n    };\n    Api.prototype.with = function (accountName) {\n        return new ActionBuilder(this, accountName);\n    };\n    Api.prototype.buildTransaction = function (cb) {\n        var tx = new TransactionBuilder(this);\n        if (cb) {\n            return cb(tx);\n        }\n        return tx;\n    };\n    return Api;\n}()); // Api\nexports.Api = Api;\nvar TransactionBuilder = /** @class */ (function () {\n    function TransactionBuilder(api) {\n        this.actions = [];\n        this.contextFreeGroups = [];\n        this.api = api;\n    }\n    TransactionBuilder.prototype.with = function (accountName) {\n        var actionBuilder = new ActionBuilder(this.api, accountName);\n        this.actions.push(actionBuilder);\n        return actionBuilder;\n    };\n    TransactionBuilder.prototype.associateContextFree = function (contextFreeGroup) {\n        this.contextFreeGroups.push(contextFreeGroup);\n        return this;\n    };\n    TransactionBuilder.prototype.send = function (config) {\n        return __awaiter(this, void 0, void 0, function () {\n            var contextFreeDataSet, contextFreeActions, actions;\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        contextFreeDataSet = [];\n                        contextFreeActions = [];\n                        actions = this.actions.map(function (actionBuilder) { return actionBuilder.serializedData; });\n                        return [4 /*yield*/, Promise.all(this.contextFreeGroups.map(function (contextFreeCallback) { return __awaiter(_this, void 0, void 0, function () {\n                                var _a, action, contextFreeAction, contextFreeData;\n                                return __generator(this, function (_b) {\n                                    _a = contextFreeCallback({\n                                        cfd: contextFreeDataSet.length,\n                                        cfa: contextFreeActions.length\n                                    }), action = _a.action, contextFreeAction = _a.contextFreeAction, contextFreeData = _a.contextFreeData;\n                                    if (action) {\n                                        actions.push(action);\n                                    }\n                                    if (contextFreeAction) {\n                                        contextFreeActions.push(contextFreeAction);\n                                    }\n                                    if (contextFreeData) {\n                                        contextFreeDataSet.push(contextFreeData);\n                                    }\n                                    return [2 /*return*/];\n                                });\n                            }); }))];\n                    case 1:\n                        _a.sent();\n                        this.contextFreeGroups = [];\n                        this.actions = [];\n                        return [4 /*yield*/, this.api.transact({\n                                context_free_data: contextFreeDataSet,\n                                context_free_actions: contextFreeActions,\n                                actions: actions\n                            }, config)];\n                    case 2: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    return TransactionBuilder;\n}());\nexports.TransactionBuilder = TransactionBuilder;\nvar ActionBuilder = /** @class */ (function () {\n    function ActionBuilder(api, accountName) {\n        this.api = api;\n        this.accountName = accountName;\n    }\n    ActionBuilder.prototype.as = function (actorName) {\n        if (actorName === void 0) { actorName = []; }\n        var authorization = [];\n        if (actorName && typeof actorName === 'string') {\n            authorization = [{ actor: actorName, permission: 'active' }];\n        }\n        else {\n            authorization = actorName;\n        }\n        return new ActionSerializer(this, this.api, this.accountName, authorization);\n    };\n    return ActionBuilder;\n}());\nexports.ActionBuilder = ActionBuilder;\nvar ActionSerializer = /** @class */ (function () {\n    function ActionSerializer(parent, api, accountName, authorization) {\n        var e_4, _a;\n        var _this = this;\n        var jsonAbi = api.cachedAbis.get(accountName);\n        if (!jsonAbi) {\n            throw new Error('ABI must be cached before using ActionBuilder, run api.getAbi()');\n        }\n        var types = ser.getTypesFromAbi(ser.createInitialTypes(), jsonAbi.abi);\n        var actions = new Map();\n        try {\n            for (var _b = __values(jsonAbi.abi.actions), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = _c.value, name_2 = _d.name, type = _d.type;\n                actions.set(name_2, ser.getType(types, type));\n            }\n        }\n        catch (e_4_1) { e_4 = { error: e_4_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_4) throw e_4.error; }\n        }\n        actions.forEach(function (type, name) {\n            var _a;\n            Object.assign(_this, (_a = {},\n                _a[name] = function () {\n                    var args = [];\n                    for (var _i = 0; _i < arguments.length; _i++) {\n                        args[_i] = arguments[_i];\n                    }\n                    var data = {};\n                    args.forEach(function (arg, index) {\n                        var field = type.fields[index];\n                        data[field.name] = arg;\n                    });\n                    var serializedData = ser.serializeAction({ types: types, actions: actions }, accountName, name, authorization, data, api.textEncoder, api.textDecoder);\n                    parent.serializedData = serializedData;\n                    return serializedData;\n                },\n                _a));\n        });\n    }\n    return ActionSerializer;\n}());\n//# sourceMappingURL=eosjs-api.js.map","\"use strict\";\n/**\n * @module Javascript-API\n * copyright defined in eosjs/LICENSE.txt\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n;\n//# sourceMappingURL=eosjs-api-interfaces.js.map","\"use strict\";\n/**\n * @module RPC-Error\n */\n// copyright defined in eosjs/LICENSE.txt\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RpcError = void 0;\n/** Holds detailed error information */\nvar RpcError = /** @class */ (function (_super) {\n    __extends(RpcError, _super);\n    function RpcError(json) {\n        var _this = this;\n        if (json.error && json.error.details && json.error.details.length && json.error.details[0].message) {\n            _this = _super.call(this, json.error.details[0].message) || this;\n            _this.details = json.error.details;\n        }\n        else if (json.processed && json.processed.except && json.processed.except.message) {\n            _this = _super.call(this, json.processed.except.message) || this;\n            _this.details = json.processed.except;\n        }\n        else if (json.result && json.result.except && json.result.except.message) {\n            _this = _super.call(this, json.result.except.message) || this;\n            _this.details = json.result.except;\n        }\n        else {\n            _this = _super.call(this, json.message) || this;\n        }\n        Object.setPrototypeOf(_this, RpcError.prototype);\n        _this.json = json;\n        return _this;\n    }\n    return RpcError;\n}(Error));\nexports.RpcError = RpcError;\n//# sourceMappingURL=eosjs-rpcerror.js.map","\"use strict\";\n/**\n * @module JSON-RPC\n */\n// copyright defined in eosjs/LICENSE.txt\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JsonRpc = void 0;\nvar eosjs_numeric_1 = require(\"./eosjs-numeric\");\nvar eosjs_rpcerror_1 = require(\"./eosjs-rpcerror\");\nvar arrayToHex = function (data) {\n    var e_1, _a;\n    var result = '';\n    try {\n        for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n            var x = data_1_1.value;\n            result += ('00' + x.toString(16)).slice(-2);\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return result;\n};\n/** Make RPC calls */\nvar JsonRpc = /** @class */ (function () {\n    /**\n     * @param args\n     * `fetch`:\n     * browsers: leave `null` or `undefined`\n     * node: provide an implementation\n     */\n    function JsonRpc(endpoint, args) {\n        if (args === void 0) { args = {}; }\n        this.endpoint = endpoint.replace(/\\/$/, '');\n        if (args.fetch) {\n            this.fetchBuiltin = args.fetch;\n        }\n        else {\n            this.fetchBuiltin = global.fetch;\n        }\n    }\n    /** Post `body` to `endpoint + path`. Throws detailed error information in `RpcError` when available. */\n    JsonRpc.prototype.fetch = function (path, body) {\n        return __awaiter(this, void 0, void 0, function () {\n            var response, json, f, e_2;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 3, , 4]);\n                        f = this.fetchBuiltin;\n                        return [4 /*yield*/, f(this.endpoint + path, {\n                                body: JSON.stringify(body),\n                                method: 'POST',\n                            })];\n                    case 1:\n                        response = _a.sent();\n                        return [4 /*yield*/, response.json()];\n                    case 2:\n                        json = _a.sent();\n                        if (json.processed && json.processed.except) {\n                            throw new eosjs_rpcerror_1.RpcError(json);\n                        }\n                        else if (json.result && json.result.except) {\n                            throw new eosjs_rpcerror_1.RpcError(json);\n                        }\n                        return [3 /*break*/, 4];\n                    case 3:\n                        e_2 = _a.sent();\n                        e_2.isFetchError = true;\n                        throw e_2;\n                    case 4:\n                        if (!response.ok) {\n                            throw new eosjs_rpcerror_1.RpcError(json);\n                        }\n                        return [2 /*return*/, json];\n                }\n            });\n        });\n    };\n    JsonRpc.prototype.abi_bin_to_json = function (code, action, binargs) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/abi_bin_to_json', { code: code, action: action, binargs: binargs })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    JsonRpc.prototype.abi_json_to_bin = function (code, action, args) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/abi_json_to_bin', { code: code, action: action, args: args })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_abi` */\n    JsonRpc.prototype.get_abi = function (accountName) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_abi', { account_name: accountName })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_account` */\n    JsonRpc.prototype.get_account = function (accountName) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_account', { account_name: accountName })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_accounts_by_authorizers` */\n    JsonRpc.prototype.get_accounts_by_authorizers = function (accounts, keys) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_accounts_by_authorizers', { accounts: accounts, keys: keys })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `get_activated_protocol_features` */\n    JsonRpc.prototype.get_activated_protocol_features = function (_a) {\n        var _b = _a.limit, limit = _b === void 0 ? 10 : _b, _c = _a.search_by_block_num, search_by_block_num = _c === void 0 ? false : _c, _d = _a.reverse, reverse = _d === void 0 ? false : _d, _e = _a.lower_bound, lower_bound = _e === void 0 ? null : _e, _f = _a.upper_bound, upper_bound = _f === void 0 ? null : _f;\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_g) {\n                switch (_g.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_activated_protocol_features', { lower_bound: lower_bound, upper_bound: upper_bound, limit: limit, search_by_block_num: search_by_block_num, reverse: reverse })];\n                    case 1: return [2 /*return*/, _g.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_block_header_state` */\n    JsonRpc.prototype.get_block_header_state = function (blockNumOrId) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_block_header_state', { block_num_or_id: blockNumOrId })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_block_info` */\n    JsonRpc.prototype.get_block_info = function (blockNum) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_block_info', { block_num: blockNum })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_block` */\n    JsonRpc.prototype.get_block = function (blockNumOrId) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_block', { block_num_or_id: blockNumOrId })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_code` */\n    JsonRpc.prototype.get_code = function (accountName) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_code', {\n                            account_name: accountName,\n                            code_as_wasm: true\n                        })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_code_hash` */\n    JsonRpc.prototype.get_code_hash = function (accountName) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_code_hash', { account_name: accountName })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_currency_balance` */\n    JsonRpc.prototype.get_currency_balance = function (code, account, symbol) {\n        if (symbol === void 0) { symbol = null; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_currency_balance', { code: code, account: account, symbol: symbol })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_currency_stats` */\n    JsonRpc.prototype.get_currency_stats = function (code, symbol) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_currency_stats', { code: code, symbol: symbol })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_info` */\n    JsonRpc.prototype.get_info = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_info', {})];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_producer_schedule` */\n    JsonRpc.prototype.get_producer_schedule = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_producer_schedule', {})];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_producers` */\n    JsonRpc.prototype.get_producers = function (json, lowerBound, limit) {\n        if (json === void 0) { json = true; }\n        if (lowerBound === void 0) { lowerBound = ''; }\n        if (limit === void 0) { limit = 50; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_producers', { json: json, lower_bound: lowerBound, limit: limit })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_raw_code_and_abi` */\n    JsonRpc.prototype.get_raw_code_and_abi = function (accountName) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_raw_code_and_abi', { account_name: accountName })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** calls `/v1/chain/get_raw_code_and_abi` and pulls out unneeded raw wasm code */\n    JsonRpc.prototype.getRawAbi = function (accountName) {\n        return __awaiter(this, void 0, void 0, function () {\n            var rawAbi, abi;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.get_raw_abi(accountName)];\n                    case 1:\n                        rawAbi = _a.sent();\n                        abi = eosjs_numeric_1.base64ToBinary(rawAbi.abi);\n                        return [2 /*return*/, { accountName: rawAbi.account_name, abi: abi }];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_raw_abi` */\n    JsonRpc.prototype.get_raw_abi = function (accountName) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_raw_abi', { account_name: accountName })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_scheduled_transactions` */\n    JsonRpc.prototype.get_scheduled_transactions = function (json, lowerBound, limit) {\n        if (json === void 0) { json = true; }\n        if (lowerBound === void 0) { lowerBound = ''; }\n        if (limit === void 0) { limit = 50; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_scheduled_transactions', { json: json, lower_bound: lowerBound, limit: limit })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_table_rows` */\n    JsonRpc.prototype.get_table_rows = function (_a) {\n        var _b = _a.json, json = _b === void 0 ? true : _b, code = _a.code, scope = _a.scope, table = _a.table, _c = _a.lower_bound, lower_bound = _c === void 0 ? '' : _c, _d = _a.upper_bound, upper_bound = _d === void 0 ? '' : _d, _e = _a.index_position, index_position = _e === void 0 ? 1 : _e, _f = _a.key_type, key_type = _f === void 0 ? '' : _f, _g = _a.limit, limit = _g === void 0 ? 10 : _g, _h = _a.reverse, reverse = _h === void 0 ? false : _h, _j = _a.show_payer, show_payer = _j === void 0 ? false : _j;\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_k) {\n                switch (_k.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_table_rows', {\n                            json: json,\n                            code: code,\n                            scope: scope,\n                            table: table,\n                            lower_bound: lower_bound,\n                            upper_bound: upper_bound,\n                            index_position: index_position,\n                            key_type: key_type,\n                            limit: limit,\n                            reverse: reverse,\n                            show_payer: show_payer,\n                        })];\n                    case 1: return [2 /*return*/, _k.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_kv_table_rows` */\n    JsonRpc.prototype.get_kv_table_rows = function (_a) {\n        var _b = _a.json, json = _b === void 0 ? true : _b, code = _a.code, table = _a.table, index_name = _a.index_name, _c = _a.encode_type, encode_type = _c === void 0 ? 'bytes' : _c, index_value = _a.index_value, lower_bound = _a.lower_bound, upper_bound = _a.upper_bound, _d = _a.limit, limit = _d === void 0 ? 10 : _d, _e = _a.reverse, reverse = _e === void 0 ? false : _e, _f = _a.show_payer, show_payer = _f === void 0 ? false : _f;\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_g) {\n                switch (_g.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_kv_table_rows', {\n                            json: json,\n                            code: code,\n                            table: table,\n                            index_name: index_name,\n                            encode_type: encode_type,\n                            index_value: index_value,\n                            lower_bound: lower_bound,\n                            upper_bound: upper_bound,\n                            limit: limit,\n                            reverse: reverse,\n                            show_payer: show_payer,\n                        })];\n                    case 1: return [2 /*return*/, _g.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/get_table_by_scope` */\n    JsonRpc.prototype.get_table_by_scope = function (_a) {\n        var code = _a.code, table = _a.table, _b = _a.lower_bound, lower_bound = _b === void 0 ? '' : _b, _c = _a.upper_bound, upper_bound = _c === void 0 ? '' : _c, _d = _a.limit, limit = _d === void 0 ? 10 : _d;\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_e) {\n                switch (_e.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/get_table_by_scope', {\n                            code: code,\n                            table: table,\n                            lower_bound: lower_bound,\n                            upper_bound: upper_bound,\n                            limit: limit,\n                        })];\n                    case 1: return [2 /*return*/, _e.sent()];\n                }\n            });\n        });\n    };\n    /** Get subset of `availableKeys` needed to meet authorities in `transaction`. Implements `AuthorityProvider` */\n    JsonRpc.prototype.getRequiredKeys = function (args) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        _a = eosjs_numeric_1.convertLegacyPublicKeys;\n                        return [4 /*yield*/, this.fetch('/v1/chain/get_required_keys', {\n                                transaction: args.transaction,\n                                available_keys: args.availableKeys,\n                            })];\n                    case 1: return [2 /*return*/, _a.apply(void 0, [(_b.sent()).required_keys])];\n                }\n            });\n        });\n    };\n    /** Push a serialized transaction (replaced by send_transaction, but returned format has changed) */\n    JsonRpc.prototype.push_transaction = function (_a) {\n        var signatures = _a.signatures, _b = _a.compression, compression = _b === void 0 ? 0 : _b, serializedTransaction = _a.serializedTransaction, serializedContextFreeData = _a.serializedContextFreeData;\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/push_transaction', {\n                            signatures: signatures,\n                            compression: compression,\n                            packed_context_free_data: arrayToHex(serializedContextFreeData || new Uint8Array(0)),\n                            packed_trx: arrayToHex(serializedTransaction),\n                        })];\n                    case 1: return [2 /*return*/, _c.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/chain/push_ro_transaction */\n    JsonRpc.prototype.push_ro_transaction = function (_a, returnFailureTraces) {\n        var signatures = _a.signatures, _b = _a.compression, compression = _b === void 0 ? 0 : _b, serializedTransaction = _a.serializedTransaction;\n        if (returnFailureTraces === void 0) { returnFailureTraces = false; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/push_ro_transaction', {\n                            transaction: {\n                                signatures: signatures,\n                                compression: compression,\n                                packed_context_free_data: arrayToHex(new Uint8Array(0)),\n                                packed_trx: arrayToHex(serializedTransaction),\n                            },\n                            return_failure_traces: returnFailureTraces,\n                        })];\n                    case 1: return [2 /*return*/, _c.sent()];\n                }\n            });\n        });\n    };\n    JsonRpc.prototype.push_transactions = function (transactions) {\n        return __awaiter(this, void 0, void 0, function () {\n            var packedTrxs;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        packedTrxs = transactions.map(function (_a) {\n                            var signatures = _a.signatures, _b = _a.compression, compression = _b === void 0 ? 0 : _b, serializedTransaction = _a.serializedTransaction, serializedContextFreeData = _a.serializedContextFreeData;\n                            return {\n                                signatures: signatures,\n                                compression: compression,\n                                packed_context_free_data: arrayToHex(serializedContextFreeData || new Uint8Array(0)),\n                                packed_trx: arrayToHex(serializedTransaction),\n                            };\n                        });\n                        return [4 /*yield*/, this.fetch('/v1/chain/push_transactions', packedTrxs)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Send a serialized transaction */\n    JsonRpc.prototype.send_transaction = function (_a) {\n        var signatures = _a.signatures, _b = _a.compression, compression = _b === void 0 ? 0 : _b, serializedTransaction = _a.serializedTransaction, serializedContextFreeData = _a.serializedContextFreeData;\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_c) {\n                switch (_c.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/chain/send_transaction', {\n                            signatures: signatures,\n                            compression: compression,\n                            packed_context_free_data: arrayToHex(serializedContextFreeData || new Uint8Array(0)),\n                            packed_trx: arrayToHex(serializedTransaction),\n                        })];\n                    case 1: return [2 /*return*/, _c.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/db_size/get` */\n    JsonRpc.prototype.db_size_get = function () {\n        return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0: return [4 /*yield*/, this.fetch('/v1/db_size/get', {})];\n                case 1: return [2 /*return*/, _a.sent()];\n            }\n        }); });\n    };\n    /** Raw call to `/v1/trace_api/get_block` */\n    JsonRpc.prototype.trace_get_block = function (block_num) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/trace_api/get_block', { block_num: block_num })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/history/get_actions` */\n    JsonRpc.prototype.history_get_actions = function (accountName, pos, offset) {\n        if (pos === void 0) { pos = null; }\n        if (offset === void 0) { offset = null; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/history/get_actions', { account_name: accountName, pos: pos, offset: offset })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/history/get_transaction` */\n    JsonRpc.prototype.history_get_transaction = function (id, blockNumHint) {\n        if (blockNumHint === void 0) { blockNumHint = null; }\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/history/get_transaction', { id: id, block_num_hint: blockNumHint })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/history/get_key_accounts` */\n    JsonRpc.prototype.history_get_key_accounts = function (publicKey) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/history/get_key_accounts', { public_key: publicKey })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /** Raw call to `/v1/history/get_controlled_accounts` */\n    JsonRpc.prototype.history_get_controlled_accounts = function (controllingAccount) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.fetch('/v1/history/get_controlled_accounts', { controlling_account: controllingAccount })];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    return JsonRpc;\n}()); // JsonRpc\nexports.JsonRpc = JsonRpc;\n//# sourceMappingURL=eosjs-jsonrpc.js.map","\"use strict\";\n/**\n * @module RPC-API-Methods\n * copyright defined in eosjs/LICENSE.txt\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\n;\n//# sourceMappingURL=eosjs-rpc-interfaces.js.map","import { JsonRpc } from \"eosjs\";\nimport axios from \"axios\";\nimport { appConfig } from \"../config/AppConfig\";\n\nexport const jsonRpc = new JsonRpc(appConfig.chain.chainUrl, { fetch });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Serialize = exports.RpcError = exports.RpcInterfaces = exports.Numeric = exports.JsonRpc = exports.ApiInterfaces = exports.Api = void 0;\nvar eosjs_api_1 = require(\"./eosjs-api\");\nObject.defineProperty(exports, \"Api\", { enumerable: true, get: function () { return eosjs_api_1.Api; } });\nvar ApiInterfaces = require(\"./eosjs-api-interfaces\");\nexports.ApiInterfaces = ApiInterfaces;\nvar eosjs_jsonrpc_1 = require(\"./eosjs-jsonrpc\");\nObject.defineProperty(exports, \"JsonRpc\", { enumerable: true, get: function () { return eosjs_jsonrpc_1.JsonRpc; } });\nvar Numeric = require(\"./eosjs-numeric\");\nexports.Numeric = Numeric;\nvar RpcInterfaces = require(\"./eosjs-rpc-interfaces\");\nexports.RpcInterfaces = RpcInterfaces;\nvar eosjs_rpcerror_1 = require(\"./eosjs-rpcerror\");\nObject.defineProperty(exports, \"RpcError\", { enumerable: true, get: function () { return eosjs_rpcerror_1.RpcError; } });\nvar Serialize = require(\"./eosjs-serialize\");\nexports.Serialize = Serialize;\n//# sourceMappingURL=index.js.map","import { useEffect, useState } from \"react\";\nimport { getMedian } from \"../services/RpcService\";\n\nexport default function useMedian() {\n\tconst [median, setMedian] = useState(0);\n\tconst [error, setError] = useState(null);\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst result = await getMedian();\n\t\t\t\tsetMedian(result);\n\t\t\t} catch (error) {\n\t\t\t\tsetError(error);\n\t\t\t}\n\t\t})();\n\t}, []);\n\n\treturn { median, medianError: error };\n}\n\nexport async function getMedianValue(): Promise<number> {\n\tlet median = 0;\n\n\ttry {\n\t\tmedian = await getMedian();\n\n\t\treturn median;\n\t} catch (error) {\n\t\treturn 0;\n\t}\n}\n","import { DSL_PERMISSION } from \"../constant/constants\";\nimport { jsonRpc } from \"./apisSetup\";\n\nexport async function getDrop(dropId) {\n\treturn jsonRpc.get_table_rows({\n\t\tcode: \"atomicdropsx\",\n\t\ttable: \"drops\",\n\t\tscope: \"atomicdropsx\",\n\t\tlimit: 1,\n\t\tlower_bound: dropId,\n\t\tupper_bound: dropId,\n\t});\n}\n\nexport async function getClaims(assetId) {\n\treturn jsonRpc.get_table_rows({\n\t\tcode: \"atomicpoolsx\",\n\t\ttable: \"claims\",\n\t\tscope: \"atomicpoolsx\",\n\t\tlimit: 1,\n\t\tlower_bound: assetId,\n\t\tupper_bound: assetId,\n\t});\n}\n\nexport async function getUnclaimed(recipient) {\n\treturn jsonRpc.get_table_rows({\n\t\tcode: \"atomicpoolsx\",\n\t\ttable: \"claims\",\n\t\tscope: \"atomicpoolsx\",\n\t\tindex_position: 2,\n\t\tlimit: 100,\n\t\tkey_type: \"name\",\n\t\tlower_bound: recipient,\n\t\tupper_bound: recipient,\n\t});\n}\n\nexport async function getSellingFee() {\n\treturn jsonRpc.get_table_rows({\n\t\tjson: true,\n\t\tcode: \"market.virl\",\n\t\tscope: \"market.virl\",\n\t\ttable: \"fees\",\n\t\ttable_key: \"\",\n\t\tlower_bound: \"\",\n\t\tupper_bound: \"\",\n\t\tlimit: 10,\n\t\tkey_type: \"\",\n\t\tindex_position: \"\",\n\t\tencode_type: \"dec\",\n\t\treverse: false,\n\t\tshow_payer: false,\n\t});\n}\n\nexport async function getMedian() {\n\tconst {\n\t\trows: [datapoint],\n\t} = await jsonRpc.get_table_rows({\n\t\tcode: \"delphioracle\",\n\t\ttable: \"datapoints\",\n\t\tscope: \"waxpusd\",\n\t\tindex_position: 3,\n\t\tkey_type: \"i64\",\n\t\treverse: true,\n\t\tlimit: 1,\n\t});\n\treturn datapoint.median;\n}\n\nexport async function getBalance(account: string) {\n\tconst { core_liquid_balance } = await jsonRpc.get_account(account);\n\n\tlet text = \"0.00000000 WAX\";\n\tlet number = \"0.00\";\n\n\tif (!!core_liquid_balance) {\n\t\ttext = String(core_liquid_balance);\n\n\t\tconst onlyNumbers = text.replace(/( WAX)/g, \"\");\n\t\tnumber = Number(onlyNumbers).toFixed(2);\n\t}\n\n\treturn { text, number };\n}\n\nexport async function isDelegateForAutoRetrive(\n\taccount: string,\n): Promise<boolean> {\n\ttry {\n\t\tconst { permissions } = await jsonRpc.get_account(account);\n\t\tconst isFound = !!permissions?.find(\n\t\t\t(permission) => permission?.perm_name === DSL_PERMISSION,\n\t\t);\n\t\treturn isFound;\n\t} catch (error) {\n\t\treturn false;\n\t}\n}\n\nexport async function getInfoTransaction(txId: string) {\n\ttry {\n\t\tconst transaction = await jsonRpc.history_get_transaction(txId);\n\t\treturn transaction;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Error fetching transaction info - More details: ${error?.message} `,\n\t\t);\n\t}\n}\n\nexport async function getNewDropId(txId: string) {\n\ttry {\n\t\tconst transaction = await getInfoTransaction(txId);\n\t\tconst drop_id: string = transaction.traces[1].act.data.drop_id;\n\t\treturn drop_id;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Error fetching drop_id from the transaction - More details: ${error?.message} `,\n\t\t);\n\t}\n}\n\nexport async function getNewPackId(txId: string) {\n\ttry {\n\t\tconst transaction = await getInfoTransaction(txId);\n\t\tconst pack_id: string = transaction.traces[1].act.data.pack_id;\n\t\treturn pack_id;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Error fetching pack_id from the transaction - More details: ${error?.message} `,\n\t\t);\n\t}\n}\n\nexport async function getHealthRestorationDSL(templateId: string) {\n\ttry {\n\t\treturn jsonRpc.get_table_rows({\n\t\t\tjson: true,\n\t\t\tcode: \"bcbrawlers\",\n\t\t\tscope: \"bcbrawlers\",\n\t\t\ttable: \"brawlerconf\",\n\t\t\ttable_key: \"\",\n\t\t\tlower_bound: templateId,\n\t\t\tupper_bound: templateId,\n\t\t\tlimit: 10,\n\t\t\tkey_type: \"\",\n\t\t\tindex_position: 1,\n\t\t\tencode_type: \"dec\",\n\t\t\treverse: false,\n\t\t\tshow_payer: false,\n\t\t});\n\t} catch (error) {\n\t\treturn null;\n\t}\n}\n\n//scope by account\nexport async function getCooldownTimeDSL(account: string, asset_id: string) {\n\ttry {\n\t\treturn jsonRpc.get_table_rows({\n\t\t\tjson: true,\n\t\t\tcode: \"bcbrawlers\",\n\t\t\tscope: account,\n\t\t\ttable: \"brawlers\",\n\t\t\ttable_key: \"\",\n\t\t\tlower_bound: asset_id,\n\t\t\tupper_bound: asset_id,\n\t\t\tlimit: 10,\n\t\t\tkey_type: \"\",\n\t\t\tindex_position: \"\",\n\t\t\tencode_type: \"dec\",\n\t\t\treverse: false,\n\t\t\tshow_payer: false,\n\t\t});\n\t} catch (error) {\n\t\treturn null;\n\t}\n}\n\n// export async function getBrwlWaxpPool() {\n// \treturn jsonRpc.get_table_rows({\n// \t\tjson: true,\n// \t\tcode: \"alcorammswap\",\n// \t\tscope: \"alcorammswap\",\n// \t\ttable: \"pairs\",\n// \t\ttable_key: \"\",\n// \t\tlower_bound: \"\",\n// \t\tupper_bound: \"\",\n// \t\tlimit: 10,\n// \t\tkey_type: \"\",\n// \t\tindex_position: \"\",\n// \t\tencode_type: \"dec\",\n// \t\treverse: false,\n// \t\tshow_payer: false,\n// \t});\n// }\n\nexport async function getAcceptBcbrawlers(account: string) {\n\ttry {\n\t\treturn jsonRpc.get_table_rows({\n\t\t\tcode: \"bcbrawlers\",\n\t\t\ttable: \"tosuser\",\n\t\t\tscope: \"bcbrawlers\",\n\t\t\tlimit: 1,\n\t\t\tlower_bound: account,\n\t\t\tupper_bound: account,\n\t\t});\n\t} catch (error) {\n\t\treturn null;\n\t}\n}\n","import React from \"react\";\nimport { useState } from \"react\";\n\ntype RouteName = \"asset-list\" | \"asset-detail\" | \"inventory\" | \"user-offers\";\n\ninterface Route<T = any> {\n  name: RouteName;\n  props?: T;\n}\n\nexport var routes: Route[] = [\n  { name: \"asset-detail\" },\n  { name: \"asset-list\" },\n  { name: \"inventory\" },\n  { name: \"user-offers\" },\n];\n\nexport default function UseNavigator() {\n  const [state, setState] = useState<State>({\n    currentRoute: { name: \"asset-list\" },\n  });\n\n  const setPartialState = (value: Partial<State>) =>\n    setState((prev) => ({ ...prev, ...value }));\n\n  const goToAssetList = () =>\n    setPartialState({ currentRoute: { name: \"asset-list\" } });\n\n  const goToUserInventory = () =>\n    setPartialState({ currentRoute: { name: \"inventory\" } });\n\n  const goToAssetDetail = (asset: any) =>\n    setPartialState({ currentRoute: { name: \"asset-detail\", props: asset } });\n\n  const goToUserOffers = () =>\n    setPartialState({ currentRoute: { name: \"user-offers\" } });\n\n  return {\n    ...state,\n    setNavigator: setPartialState,\n    goToAssetList,\n    goToAssetDetail,\n    goToUserInventory,\n    goToUserOffers\n  };\n}\n\ninterface State {\n  currentRoute: Route;\n}\n\nexport const NavigatorContext = React.createContext<\n  ReturnType<typeof UseNavigator>\n>({} as any);\n","import { notification } from \"antd\";\nimport React, { useState } from \"react\";\nimport { AwaitProgressItemProps } from \"../components/AwaitProgressTimeline\";\nimport useAwaitProgressTimeline from \"../components/AwaitProgressTimeline/useAwaitProgressTimeline\";\n\nexport const defaultSubmitTransactionSteps: AwaitProgressItemProps[] = [\n\t{\n\t\tid: \"1\",\n\t\tcontent: \"Executing transaction with vIRL Marketplace\",\n\t\thasError: false,\n\t\tprogress: 0,\n\t},\n\t{\n\t\tid: \"2\",\n\t\tcontent: \"Confirming transaction with WAX Cloud Wallet\",\n\t\thasError: false,\n\t\tprogress: 0,\n\t},\n\t{\n\t\tid: \"3\",\n\t\tcontent: \"Transaction confirmation\",\n\t\thasError: false,\n\t\tprogress: 0,\n\t},\n];\n\ninterface Props {\n\tsteps?: AwaitProgressItemProps[];\n}\n\nexport default function UseTransactionProgress({ steps }: Props) {\n\tconst progress = useAwaitProgressTimeline({\n\t\tsteps: steps || defaultSubmitTransactionSteps,\n\t});\n\tconst [state, setState] = useState<State>({\n\t\tisConfirming: false,\n\t\tisProgressing: false,\n\t});\n\n\tconst setPartialState = (partial: Partial<State>) =>\n\t\tsetState((prev) => ({ ...prev, ...partial }));\n\n\tconst onStart = () => {\n\t\tprogress.startStep(1);\n\t\tsetPartialState({ isConfirming: false, isProgressing: true });\n\t};\n\n\tconst onFinish = (message: string, description: string) => {\n\t\tprogress.onFinish();\n\t\tnotification.success({ message, description });\n\t};\n\n\tconst onError = (message: string, description: string) => {\n\t\tnotification.error({ message, description });\n\t\tprogress.onError();\n\t};\n\n\tconst onReset = () => {\n\t\tsetState(prev => ({isConfirming: false, isProgressing: false}))\n\t\tprogress.resetProgress();\n\t}\n\n\treturn {\n\t\t...state,\n\t\tprogress,\n\t\tonStart,\n\t\tonFinish,\n\t\tonError,\n\t\tsetTransactionProgressState: setPartialState,\n\t\tonReset\n\t};\n}\n\nexport const TransactionProgressContext = React.createContext<\n\tReturnType<typeof UseTransactionProgress>\n>({} as any);\n\nexport interface State {\n\tisConfirming: boolean;\n\tisProgressing: boolean;\n}\n","import { useState } from \"react\";\nimport { AwaitProgressItemProps } from \".\";\n\ninterface Props {\n  steps: AwaitProgressItemProps[];\n}\n\nexport default function useAwaitProgressTimeline({ steps }: Props) {\n  const [state, setState] = useState<State>({ steps });\n\n  const startStep = (numStep: number) =>\n    setState((prev) => ({\n      ...prev,\n      steps: prev.steps.map((step, index) =>\n        index + 1 < numStep ? { ...step, progress: 100 } : index + 1 === numStep ? { ...step, progress: 50 } : step,\n      ),\n    }));\n\n  const onError = (numStep?: number) => {\n    numStep = numStep || state.steps.findIndex((s) => s.progress < 100);\n    console.log({numStep});\n    setState((prev) => ({\n      ...prev,\n      steps: prev.steps.map((step, i) => (i === numStep ? { ...step, hasError: true } : step)),\n    }));\n  };\n\n  const onFinish = () =>\n    setState((prev) => ({\n      ...prev,\n      steps: prev.steps.map((s) => ({ ...s, hasError: false, progress: 100 })),\n    }));\n\n  const resetProgress = () =>\n    setState((prev) => ({\n      ...prev,\n      steps: prev.steps.map((n) => ({ ...n, hasError: false, progress: 0 })),\n    }));\n\n  const hasError = state.steps.some((s) => s.hasError === true);\n  const hasFinish = state.steps.every((s) => s.progress === 100);\n\n  return {\n    ...state,\n    resetProgress,\n    startStep,\n    onError,\n    onFinish,\n    hasError,\n    hasFinish,\n  };\n}\n\ninterface State {\n  steps: AwaitProgressItemProps[];\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\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  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    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 =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\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    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (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\nexports.write = function (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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               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 * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\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  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\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(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(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 interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(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(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\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(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(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.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    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let 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 (!Array.isArray(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  let 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  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let 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        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) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let 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 coercion 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// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let 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  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let 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  const length = this.length\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.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(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  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\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  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let 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 < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(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 (Buffer.isBuffer(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 (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  let indexSize = 1\n  let arrLength = arr.length\n  let 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  let i\n  if (dir) {\n    let 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      let found = true\n      for (let 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  const 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  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(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 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  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const 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  let 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      case 'latin1':\n      case 'binary':\n        return asciiWrite(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 base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let 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\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const 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  let res = ''\n  let 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  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; 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  const 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  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\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 =\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  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\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  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\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 =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\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.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\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  let val = this[offset]\n  let mul = 1\n  let 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  let i = byteLength\n  let mul = 1\n  let 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  offset = offset >>> 0\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  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\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  offset = offset >>> 0\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.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(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 =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let 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 =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let 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 =\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  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\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  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\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  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\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  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\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  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let 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    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let 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, -0x80)\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, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\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, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\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, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\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, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\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  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.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  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.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 (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\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('Index out of range')\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  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\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 (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    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\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  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().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 utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let 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  const byteArray = []\n  for (let 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  let c, hi, lo\n  const byteArray = []\n  for (let 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\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (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\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n  throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n  var bytes = Buffer.allocUnsafe(size)\n\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n      for (var generated = 0; generated < size; generated += MAX_BYTES) {\n        // buffer.slice automatically checks if the end is past the end of\n        // the buffer so we don't have to here\n        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n      }\n    } else {\n      crypto.getRandomValues(bytes)\n    }\n  }\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = Buffer.allocUnsafe(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    this.update(chunk, encoding)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this.digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nvar useUint8Array = typeof Uint8Array !== 'undefined'\nvar useArrayBuffer = typeof ArrayBuffer !== 'undefined' &&\n  typeof Uint8Array !== 'undefined' &&\n  ArrayBuffer.isView &&\n  (Buffer.prototype instanceof Uint8Array || Buffer.TYPED_ARRAY_SUPPORT)\n\nfunction toBuffer (data, encoding) {\n  // No need to do anything for exact instance\n  // This is only valid when safe-buffer.Buffer === buffer.Buffer, i.e. when Buffer.from/Buffer.alloc existed\n  if (data instanceof Buffer) return data\n\n  // Convert strings to Buffer\n  if (typeof data === 'string') return Buffer.from(data, encoding)\n\n  /*\n   * Wrap any TypedArray instances and DataViews\n   * Makes sense only on engines with full TypedArray support -- let Buffer detect that\n   */\n  if (useArrayBuffer && ArrayBuffer.isView(data)) {\n    if (data.byteLength === 0) return Buffer.alloc(0) // Bug in Node.js <6.3.1, which treats this as out-of-bounds\n    var res = Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n    // Recheck result size, as offset/length doesn't work on Node.js <5.10\n    // We just go to Uint8Array case if this fails\n    if (res.byteLength === data.byteLength) return res\n  }\n\n  /*\n   * Uint8Array in engines where Buffer.from might not work with ArrayBuffer, just copy over\n   * Doesn't make sense with other TypedArray instances\n   */\n  if (useUint8Array && data instanceof Uint8Array) return Buffer.from(data)\n\n  /*\n   * Old Buffer polyfill on an engine that doesn't have TypedArray support\n   * Also, this is from a different Buffer polyfill implementation then we have, as instanceof check failed\n   * Convert to our current Buffer implementation\n   */\n  if (\n    Buffer.isBuffer(data) &&\n    data.constructor &&\n    typeof data.constructor.isBuffer === 'function' &&\n    data.constructor.isBuffer(data)\n  ) {\n    return Buffer.from(data)\n  }\n\n  throw new TypeError('The \"data\" argument must be of type string or an instance of Buffer, TypedArray, or DataView.')\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n\n  data = toBuffer(data, encoding) // asserts correct input type\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n\n  // reset state\n  this._block.fill(0)\n  this._blockOffset = 0\n  for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n  var M = ARRAY16\n  for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n  var a = this._a\n  var b = this._b\n  var c = this._c\n  var d = this._d\n\n  a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n  d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n  c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n  b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n  a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n  d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n  c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n  b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n  a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n  d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n  c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n  b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n  a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n  d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n  c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n  b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n  a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n  d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n  c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n  b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n  a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n  d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n  c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n  b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n  a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n  d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n  c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n  b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n  a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n  d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n  c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n  b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n  a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n  d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n  c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n  b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n  a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n  d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n  c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n  b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n  a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n  d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n  c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n  b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n  a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n  d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n  c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n  b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n  a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n  d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n  c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n  b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n  a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n  d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n  c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n  b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n  a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n  d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n  c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n  b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n  a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n  d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n  c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n  b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n  this._a = (this._a + a) | 0\n  this._b = (this._b + b) | 0\n  this._c = (this._c + c) | 0\n  this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n  return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16\n  for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n  var al = this._a | 0\n  var bl = this._b | 0\n  var cl = this._c | 0\n  var dl = this._d | 0\n  var el = this._e | 0\n\n  var ar = this._a | 0\n  var br = this._b | 0\n  var cr = this._c | 0\n  var dr = this._d | 0\n  var er = this._e | 0\n\n  // computation\n  for (var i = 0; i < 80; i += 1) {\n    var tl\n    var tr\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n    } else { // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n    }\n\n    al = el\n    el = dl\n    dl = rotl(cl, 10)\n    cl = bl\n    bl = tl\n\n    ar = er\n    er = dr\n    dr = rotl(cr, 10)\n    cr = br\n    br = tr\n  }\n\n  // update state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n","var exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\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\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + 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':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\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.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar Transform = require('stream').Transform;\nvar StringDecoder = require('string_decoder').StringDecoder;\nvar inherits = require('inherits');\n\nfunction CipherBase(hashMode) {\n\tTransform.call(this);\n\tthis.hashMode = typeof hashMode === 'string';\n\tif (this.hashMode) {\n\t\tthis[hashMode] = this._finalOrDigest;\n\t} else {\n\t\tthis['final'] = this._finalOrDigest;\n\t}\n\tif (this._final) {\n\t\tthis.__final = this._final;\n\t\tthis._final = null;\n\t}\n\tthis._decoder = null;\n\tthis._encoding = null;\n}\ninherits(CipherBase, Transform);\n\nvar useUint8Array = typeof Uint8Array !== 'undefined';\nvar useArrayBuffer = typeof ArrayBuffer !== 'undefined'\n\t&& typeof Uint8Array !== 'undefined'\n\t&& ArrayBuffer.isView\n\t&& (Buffer.prototype instanceof Uint8Array || Buffer.TYPED_ARRAY_SUPPORT);\n\nfunction toBuffer(data, encoding) {\n\t/*\n\t * No need to do anything for exact instance\n\t * This is only valid when safe-buffer.Buffer === buffer.Buffer, i.e. when Buffer.from/Buffer.alloc existed\n\t */\n\tif (data instanceof Buffer) {\n\t\treturn data;\n\t}\n\n\t// Convert strings to Buffer\n\tif (typeof data === 'string') {\n\t\treturn Buffer.from(data, encoding);\n\t}\n\n\t/*\n\t * Wrap any TypedArray instances and DataViews\n\t * Makes sense only on engines with full TypedArray support -- let Buffer detect that\n\t */\n\tif (useArrayBuffer && ArrayBuffer.isView(data)) {\n\t\t// Bug in Node.js <6.3.1, which treats this as out-of-bounds\n\t\tif (data.byteLength === 0) {\n\t\t\treturn Buffer.alloc(0);\n\t\t}\n\n\t\tvar res = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n\t\t/*\n\t\t * Recheck result size, as offset/length doesn't work on Node.js <5.10\n\t\t * We just go to Uint8Array case if this fails\n\t\t */\n\t\tif (res.byteLength === data.byteLength) {\n\t\t\treturn res;\n\t\t}\n\t}\n\n\t/*\n\t * Uint8Array in engines where Buffer.from might not work with ArrayBuffer, just copy over\n\t * Doesn't make sense with other TypedArray instances\n\t */\n\tif (useUint8Array && data instanceof Uint8Array) {\n\t\treturn Buffer.from(data);\n\t}\n\n\t/*\n\t * Old Buffer polyfill on an engine that doesn't have TypedArray support\n\t * Also, this is from a different Buffer polyfill implementation then we have, as instanceof check failed\n\t * Convert to our current Buffer implementation\n\t */\n\tif (\n\t\tBuffer.isBuffer(data)\n\t\t\t&& data.constructor\n\t\t\t&& typeof data.constructor.isBuffer === 'function'\n\t\t\t&& data.constructor.isBuffer(data)\n\t) {\n\t\treturn Buffer.from(data);\n\t}\n\n\tthrow new TypeError('The \"data\" argument must be of type string or an instance of Buffer, TypedArray, or DataView.');\n}\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n\tvar bufferData = toBuffer(data, inputEnc); // asserts correct input type\n\tvar outData = this._update(bufferData);\n\tif (this.hashMode) {\n\t\treturn this;\n\t}\n\n\tif (outputEnc) {\n\t\toutData = this._toString(outData, outputEnc);\n\t}\n\n\treturn outData;\n};\n\nCipherBase.prototype.setAutoPadding = function () {};\nCipherBase.prototype.getAuthTag = function () {\n\tthrow new Error('trying to get auth tag in unsupported state');\n};\n\nCipherBase.prototype.setAuthTag = function () {\n\tthrow new Error('trying to set auth tag in unsupported state');\n};\n\nCipherBase.prototype.setAAD = function () {\n\tthrow new Error('trying to set aad in unsupported state');\n};\n\nCipherBase.prototype._transform = function (data, _, next) {\n\tvar err;\n\ttry {\n\t\tif (this.hashMode) {\n\t\t\tthis._update(data);\n\t\t} else {\n\t\t\tthis.push(this._update(data));\n\t\t}\n\t} catch (e) {\n\t\terr = e;\n\t} finally {\n\t\tnext(err);\n\t}\n};\nCipherBase.prototype._flush = function (done) {\n\tvar err;\n\ttry {\n\t\tthis.push(this.__final());\n\t} catch (e) {\n\t\terr = e;\n\t}\n\n\tdone(err);\n};\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n\tvar outData = this.__final() || Buffer.alloc(0);\n\tif (outputEnc) {\n\t\toutData = this._toString(outData, outputEnc, true);\n\t}\n\treturn outData;\n};\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n\tif (!this._decoder) {\n\t\tthis._decoder = new StringDecoder(enc);\n\t\tthis._encoding = enc;\n\t}\n\n\tif (this._encoding !== enc) {\n\t\tthrow new Error('can’t switch encodings');\n\t}\n\n\tvar out = this._decoder.write(value);\n\tif (fin) {\n\t\tout += this._decoder.end();\n\t}\n\n\treturn out;\n};\n\nmodule.exports = CipherBase;\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new MD5()\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n  return new Hash(sha(alg))\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n","'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n  defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n  defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n  if (Buffer.isBuffer(thing)) {\n    return thing\n  } else if (typeof thing === 'string') {\n    return Buffer.from(thing, encoding)\n  } else if (ArrayBuffer.isView(thing)) {\n    return Buffer.from(thing.buffer)\n  } else {\n    throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n  }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n  function rmd160Func (data) {\n    return new RIPEMD160().update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  sha: 'SHA-1',\n  'sha-1': 'SHA-1',\n  sha1: 'SHA-1',\n  sha256: 'SHA-256',\n  'sha-256': 'SHA-256',\n  sha384: 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\nvar nextTick\nfunction getNextTick () {\n  if (nextTick) {\n    return nextTick\n  }\n  if (global.process && global.process.nextTick) {\n    nextTick = global.process.nextTick\n  } else if (global.queueMicrotask) {\n    nextTick = global.queueMicrotask\n  } else if (global.setImmediate) {\n    nextTick = global.setImmediate\n  } else {\n    nextTick = global.setTimeout\n  }\n  return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\n\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    getNextTick()(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    getNextTick()(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n\n  if (!algo || typeof global.Promise !== 'function') {\n    getNextTick()(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n    return\n  }\n\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n    return sync(password, salt, iterations, keylen, digest)\n  }), callback)\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n  this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  if (this.padding === false) {\n    return false;\n  }\n\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  if (this.padding === false) {\n    return buffer;\n  }\n\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key)\n  }\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv)\n  }\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return Buffer.from(this._des.final())\n}\n","exports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n","module.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0)\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = Buffer.allocUnsafe(0)\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n\n  self._prev = Buffer.concat([\n    self._prev.slice(1),\n    Buffer.from([decrypt ? byteParam : out])\n  ])\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\n\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = Buffer.allocUnsafe(buffer.length)\n  buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n","function incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlockRaw(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize)\n  var start = self._cache.length\n  self._cache = Buffer.concat([\n    self._cache,\n    Buffer.allocUnsafe(chunkNum * blockSize)\n  ])\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self)\n    var offset = start + i * blockSize\n    self._cache.writeUInt32BE(out[0], offset + 0)\n    self._cache.writeUInt32BE(out[1], offset + 4)\n    self._cache.writeUInt32BE(out[2], offset + 8)\n    self._cache.writeUInt32BE(out[3], offset + 12)\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n","var modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n  var len = (buf.length / 4) | 0\n  var out = new Array(len)\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n\n  return out\n}\n\nfunction scrubVec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0]\n  var SUB_MIX1 = SUB_MIX[1]\n  var SUB_MIX2 = SUB_MIX[2]\n  var SUB_MIX3 = SUB_MIX[3]\n\n  var s0 = M[0] ^ keySchedule[0]\n  var s1 = M[1] ^ keySchedule[1]\n  var s2 = M[2] ^ keySchedule[2]\n  var s3 = M[3] ^ keySchedule[3]\n  var t0, t1, t2, t3\n  var ksRow = 4\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  t0 = t0 >>> 0\n  t1 = t1 >>> 0\n  t2 = t2 >>> 0\n  t3 = t3 >>> 0\n\n  return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n  // Compute double table\n  var d = new Array(256)\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1\n    } else {\n      d[j] = (j << 1) ^ 0x11b\n    }\n  }\n\n  var SBOX = []\n  var INV_SBOX = []\n  var SUB_MIX = [[], [], [], []]\n  var INV_SUB_MIX = [[], [], [], []]\n\n  // Walk GF(2^8)\n  var x = 0\n  var xi = 0\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    SBOX[x] = sx\n    INV_SBOX[sx] = x\n\n    // Compute multiplication\n    var x2 = d[x]\n    var x4 = d[x2]\n    var x8 = d[x4]\n\n    // Compute sub bytes, mix columns tables\n    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    SUB_MIX[3][x] = t\n\n    // Compute inv sub bytes, inv mix columns tables\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    INV_SUB_MIX[3][sx] = t\n\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  }\n})()\n\nfunction AES (key) {\n  this._key = asUInt32Array(key)\n  this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n  var keyWords = this._key\n  var keySize = keyWords.length\n  var nRounds = keySize + 6\n  var ksRows = (nRounds + 1) * 4\n\n  var keySchedule = []\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k]\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1]\n\n    if (k % keySize === 0) {\n      t = (t << 8) | (t >>> 24)\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n\n      t ^= RCON[(k / keySize) | 0] << 24\n    } else if (keySize > 6 && k % keySize === 4) {\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t\n  }\n\n  var invKeySchedule = []\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt\n    } else {\n      invKeySchedule[ik] =\n        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n    }\n  }\n\n  this._nRounds = nRounds\n  this._keySchedule = keySchedule\n  this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M)\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M)\n\n  // swap\n  var m1 = M[1]\n  M[1] = M[3]\n  M[3] = m1\n\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule)\n  scrubVec(this._invKeySchedule)\n  scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\n\nfunction fromArray (out) {\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0] >>> 0, 0)\n  buf.writeUInt32BE(out[1] >>> 0, 4)\n  buf.writeUInt32BE(out[2] >>> 0, 8)\n  buf.writeUInt32BE(out[3] >>> 0, 12)\n  return buf\n}\n\nfunction GHASH (key) {\n  this.h = key\n  this.state = Buffer.alloc(16, 0)\n  this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsbVi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0]\n      Zi[1] ^= Vi[1]\n      Zi[2] ^= Vi[2]\n      Zi[3] ^= Vi[3]\n    }\n\n    // Store the value of LSB(V_i)\n    lsbVi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]))\n  return this.state\n}\n\nmodule.exports = GHASH\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) out++\n\n  var len = Math.min(a.length, b.length)\n  for (var i = 0; i < len; ++i) {\n    out += (a[i] ^ b[i])\n  }\n\n  return out\n}\n\nfunction calcIv (self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n  }\n  var ghash = new GHASH(ck)\n  var len = iv.length\n  var toPad = len % 16\n  ghash.update(iv)\n  if (toPad) {\n    toPad = 16 - toPad\n    ghash.update(Buffer.alloc(toPad, 0))\n  }\n  ghash.update(Buffer.alloc(8, 0))\n  var ivBits = len * 8\n  var tail = Buffer.alloc(8)\n  tail.writeUIntBE(ivBits, 0, 8)\n  ghash.update(tail)\n  self._finID = ghash.state\n  var out = Buffer.from(self._finID)\n  incr32(out)\n  return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  var h = Buffer.alloc(4, 0)\n\n  this._cipher = new aes.AES(key)\n  var ck = this._cipher.encryptBlock(h)\n  this._ghash = new GHASH(ck)\n  iv = calcIv(this, iv, ck)\n\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  this._mode = mode\n\n  this._authTag = null\n  this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0)\n      this._ghash.update(rump)\n    }\n  }\n\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n  this._authTag = tag\n  this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n  return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n  this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n  this._ghash.update(buf)\n  this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n  }\n\n  var keyLen = keyBits / 8\n  var key = Buffer.alloc(keyLen)\n  var iv = Buffer.alloc(ivLen || 0)\n  var tmp = Buffer.alloc(0)\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5()\n    hash.update(tmp)\n    hash.update(password)\n    if (salt) hash.update(salt)\n    tmp = hash.digest()\n\n    var used = 0\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen\n      used = Math.min(keyLen, tmp.length)\n      tmp.copy(key, keyStart, 0, used)\n      keyLen -= used\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen\n      var length = Math.min(ivLen, tmp.length - used)\n      tmp.copy(iv, ivStart, used, used + length)\n      ivLen -= length\n    }\n  }\n\n  tmp.fill(0)\n  return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n\n  return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = Buffer.allocUnsafe(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n\n  return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv)\n  }\n\n  return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n  var padded = last[15]\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data')\n  }\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) return\n\n  return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true)\n  }\n\n  return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n  return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","exports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  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\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    this.length = num === 0 ? 1 : this.length;\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  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\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    this.length = num === 0 ? 1 : this.length;\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n  var len = n.bitLength();\n  var min_bytes = Math.ceil(len / 8);\n\n  // Generage random bytes until a number less than n is found.\n  // This ensures that 0..n-1 have an equal probability of being selected.\n  do\n    var a = new bn(this.rand.generate(min_bytes));\n  while (a.cmp(n) >= 0);\n\n  return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n  // Generate a random number greater than or equal to start and less than stop.\n  var size = stop.sub(start);\n  return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\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\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\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.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\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 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\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\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], 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  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\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 !== undefined) {\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 === undefined) {\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] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\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 onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\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 - 1; i >= 0; i--) {\n          if (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 (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\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        var key;\n        for (i = 0; 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 = Object.create(null);\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 !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\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\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","module.exports = require('events').EventEmitter;\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\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\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\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}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(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\n  BufferList.prototype.unshift = function unshift(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\n  BufferList.prototype.shift = function shift() {\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\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(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\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        pna.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        pna.nextTick(emitErrorNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, _this, err);\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\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\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\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\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  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\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 (isDuplex) 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 writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\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  // has it been destroyed\n  this.destroyed = 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 getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\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    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.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  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (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    pna.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  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) 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 (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, 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.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\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\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, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\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 = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\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\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\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      asyncWrite(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    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\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    state.bufferedRequestCount = 0;\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      state.bufferedRequestCount--;\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.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is 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) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\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) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\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\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\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\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\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  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\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\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\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') return emitter.prependListener(event, fn);\n\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]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\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 (isDuplex) 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 readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(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 event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read 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  // has it been destroyed\n  this.destroyed = 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  // 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    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\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) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\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  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\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  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\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\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\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 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) pna.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    pna.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('_read() is 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) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\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', unpipe);\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', state.awaitDrain);\n        state.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 (EElistenerCount(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 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\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, unpipeInfo);\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, { hasUnpiped: false });\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\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 = Stream.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        pna.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    pna.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 _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\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) _this.push(chunk);\n    }\n\n    _this.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 = _this.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  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\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    pna.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 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}","// 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\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\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\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  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\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('_transform() is 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\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\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\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\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};","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  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\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [number & 0x3ffffff];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [0];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this._strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // '0' - '9'\n    if (c >= 48 && c <= 57) {\n      return c - 48;\n    // 'A' - 'F'\n    } else if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    } else {\n      assert(false, 'Invalid character in ' + string);\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this._strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var b = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        b = c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        b = c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        b = c;\n      }\n      assert(c >= 0 && b < mul, 'Invalid character');\n      r += b;\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [0];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this._strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  function move (dest, src) {\n    dest.words = src.words;\n    dest.length = src.length;\n    dest.negative = src.negative;\n    dest.red = src.red;\n  }\n\n  BN.prototype._move = function _move (dest) {\n    move(dest, this);\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype._strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  // Check Symbol.for because not everywhere where Symbol defined\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n  if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n    try {\n      BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n    } catch (e) {\n      BN.prototype.inspect = inspect;\n    }\n  } else {\n    BN.prototype.inspect = inspect;\n  }\n\n  function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  }\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modrn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] >>> wbit) & 0x01;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this._strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this._strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out._strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    this.length = num === 0 ? 1 : this.length;\n\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this._strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) <= num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this._strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this._strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q._strip();\n    }\n    a._strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    this._strip();\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this._strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is a BN v4 instance\n        r.strip();\n      } else {\n        // r is a BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar BN = require('bn.js');\nvar randomBytes = require('randombytes');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction getr(priv) {\n\tvar len = priv.modulus.byteLength();\n\tvar r;\n\tdo {\n\t\tr = new BN(randomBytes(len));\n\t} while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2));\n\treturn r;\n}\n\nfunction blind(priv) {\n\tvar r = getr(priv);\n\tvar blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed();\n\treturn { blinder: blinder, unblinder: r.invm(priv.modulus) };\n}\n\nfunction crt(msg, priv) {\n\tvar blinds = blind(priv);\n\tvar len = priv.modulus.byteLength();\n\tvar blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus);\n\tvar c1 = blinded.toRed(BN.mont(priv.prime1));\n\tvar c2 = blinded.toRed(BN.mont(priv.prime2));\n\tvar qinv = priv.coefficient;\n\tvar p = priv.prime1;\n\tvar q = priv.prime2;\n\tvar m1 = c1.redPow(priv.exponent1).fromRed();\n\tvar m2 = c2.redPow(priv.exponent2).fromRed();\n\tvar h = m1.isub(m2).imul(qinv).umod(p).imul(q);\n\treturn m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len);\n}\ncrt.getr = getr;\n\nmodule.exports = crt;\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  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\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    this.length = num === 0 ? 1 : this.length;\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n  var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n  var i;\n  for (i = 0; i < naf.length; i += 1) {\n    naf[i] = 0;\n  }\n\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n\n  for (i = 0; i < naf.length; i++) {\n    var z;\n    var mod = k.andln(ws - 1);\n    if (k.isOdd()) {\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n\n    naf[i] = z;\n    k.iushrn(1);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    [],\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  var m8;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n      this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n    bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  this._bitLength = this.n ? this.n.bitLength() : 0;\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1, this._bitLength);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  var j;\n  var nafW;\n  for (j = 0; j < naf.length; j += doubles.step) {\n    nafW = 0;\n    for (var l = j + doubles.step - 1; l >= j; l--)\n      nafW = (nafW << 1) + naf[l];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (j = 0; j < repr.length; j++) {\n      nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w, this._bitLength);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var l = 0; i >= 0 && naf[i] === 0; i--)\n      l++;\n    if (i >= 0)\n      l++;\n    acc = acc.dblp(l);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n  points,\n  coeffs,\n  len,\n  jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  var i;\n  var j;\n  var p;\n  for (i = 0; i < len; i++) {\n    p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n      naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b], /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3,  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (j = 0; j < len; j++) {\n      var z = tmp[j];\n      p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n      bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null,\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles,\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res,\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16),\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis,\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 },\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n      var npoints = this._endoWnafT1;\n      var ncoeffs = this._endoWnafT2;\n      for (var i = 0; i < points.length; i++) {\n        var split = this._endoSplit(coeffs[i]);\n        var p = points[i];\n        var beta = p._getBeta();\n\n        if (split.k1.negative) {\n          split.k1.ineg();\n          p = p.neg(true);\n        }\n        if (split.k2.negative) {\n          split.k2.ineg();\n          beta = beta.neg(true);\n        }\n\n        npoints[i * 2] = p;\n        npoints[i * 2 + 1] = beta;\n        ncoeffs[i * 2] = split.k1;\n        ncoeffs[i * 2 + 1] = split.k2;\n      }\n      var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n      // Clean-up references to points and coefficients\n      for (var j = 0; j < i * 2; j++) {\n        npoints[j] = null;\n        ncoeffs[j] = null;\n      }\n      return res;\n    };\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul),\n      },\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1),\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1),\n    },\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point)),\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point)),\n    },\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate),\n      },\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  var i;\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  var e;\n  var h;\n  var j;\n  if (this.curve.twisted) {\n    // E = a * C\n    e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      h = this.z.redSqr();\n      // J = F - 2 * H\n      j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    e = c.redAdd(d);\n    // H = (c * Z1)^2\n    h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n    this.y,\n    this.z,\n    this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","module.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n      ],\n    ],\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n      ],\n    ],\n  },\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else\n    this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve,\n      });\n      return curve;\n    },\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n  ],\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n  ],\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n  ],\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n  ],\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n  ],\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9',\n  ],\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658',\n  ],\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3',\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15',\n    },\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre,\n  ],\n});\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc,\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc,\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  if(!pub.validate()) {\n    assert(pub.validate(), 'public point not validated');\n  }\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature, options) {\n  return this.ec.verify(msg, signature, this, undefined, options);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n\n  // Indefinite length or overflow\n  if (octetLen === 0 || octetLen > 4) {\n    return false;\n  }\n\n  if(buf[p.place] === 0x00) {\n    return false;\n  }\n\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n    val >>>= 0;\n  }\n\n  // Leading zeroes\n  if (val <= 0x7f) {\n    return false;\n  }\n\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if (len === false) {\n    return false;\n  }\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  if (rlen === false) {\n    return false;\n  }\n  if ((data[p.place] & 128) !== 0) {\n    return false;\n  }\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (slen === false) {\n    return false;\n  }\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  if ((data[p.place] & 128) !== 0) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0) {\n    if (r[1] & 0x80) {\n      r = r.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n  if (s[0] === 0) {\n    if (s[1] & 0x80) {\n      s = s.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(Object.prototype.hasOwnProperty.call(curves, options),\n      'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray(),\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  for (;;) {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly, bitLength) {\n  var byteLength;\n  if (BN.isBN(msg) || typeof msg === 'number') {\n    msg = new BN(msg, 16);\n    byteLength = msg.byteLength();\n  } else if (typeof msg === 'object') {\n    // BN assumes an array-like input and asserts length\n    byteLength = msg.length;\n    msg = new BN(msg, 16);\n  } else {\n    // BN converts the value to string\n    var str = msg.toString();\n    // HEX encoding\n    byteLength = (str.length + 1) >>> 1;\n    msg = new BN(str, 16);\n  }\n  // Allow overriding\n  if (typeof bitLength !== 'number') {\n    bitLength = byteLength * 8;\n  }\n  var delta = bitLength - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  if (typeof msg !== 'string' && typeof msg !== 'number' && !BN.isBN(msg)) {\n    assert(typeof msg === 'object' && msg && typeof msg.length === 'number',\n      'Expected message to be an array-like, a hex string, or a BN instance');\n    assert((msg.length >>> 0) === msg.length); // non-negative 32-bit integer\n    for (var i = 0; i < msg.length; i++) assert((msg[i] & 255) === msg[i]);\n  }\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(msg, false, options.msgBitLength);\n\n  // Would fail further checks, but let's make the error message clear\n  assert(!msg.isNeg(), 'Can not sign a negative message');\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Recheck nonce to be bijective to msg\n  assert((new BN(nonce)).eq(msg), 'Can not sign message');\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; ; iter++) {\n    var k = options.k ?\n      options.k(iter) :\n      new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc, options) {\n  if (!options)\n    options = {};\n\n  msg = this._truncateToN(msg, false, options.msgBitLength);\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n  var p;\n\n  if (!this.curve._maxwellTrick) {\n    p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size');\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength),\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n    .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {\n    return false;\n  }\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  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\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    this.length = num === 0 ? 1 : this.length;\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n  var named;\n  try {\n    named = require('vm').runInThisContext(\n      '(function ' + this.name + '(entity) {\\n' +\n      '  this._initNamed(entity);\\n' +\n      '})'\n    );\n  } catch (e) {\n    named = function (entity) {\n      this._initNamed(entity);\n    };\n  }\n  inherits(named, base);\n  named.prototype._initNamed = function initnamed(entity) {\n    base.call(this, entity);\n  };\n\n  return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  var state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  var state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  var state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  var state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  var state = this._reporterState;\n\n  var prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  var state = this._reporterState;\n\n  var now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  var err;\n  var state = this._reporterState;\n\n  var inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  var state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  var res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  var res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!(item instanceof EncoderBuffer))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = new Buffer(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n  var state = {};\n  this._baseState = state;\n\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  var state = this._baseState;\n  var cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  var res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  var state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      var clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  var state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  var state = this._baseState;\n\n  // Filter children and args\n  var children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      var res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        var value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    var state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    var state = this._baseState;\n    var args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  var state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  var state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  var state = this._baseState;\n  var args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  var state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  var state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  var state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  var result = state['default'];\n  var present = true;\n\n  var prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    var tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      var save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  var prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      var explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    var start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      if (state.any)\n        var save = input.save();\n      var body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any)\n      result = result;\n    else if (state.choice === null)\n      result = this._decodeGeneric(state.tag, input, options);\n    else\n      result = this._decodeChoice(input, options);\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      var data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n          ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  var state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n        ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  var state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  var state = this._baseState;\n  var result = null;\n  var match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    var save = input.save();\n    var node = state.choice[key];\n    try {\n      var value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  var state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  var result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  var result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default']\n    else\n      return;\n  }\n\n  // Encode children first\n  var content = null;\n  var primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      var prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      var res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      var child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        var state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  var result;\n  if (!state.any && state.choice === null) {\n    var tag = state.implicit !== null ? state.implicit : state.tag;\n    var cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  var state = this._baseState;\n\n  var node = state.choice[data.type];\n  if (!node) {\n    assert(\n        false,\n        data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  var state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var constants = require('../constants');\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  var res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    var value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!(data instanceof base.DecoderBuffer))\n    data = new base.DecoderBuffer(data, options);\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  var state = buffer.save();\n  var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  var decodedTag = derDecodeTag(buffer,\n                                'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  var len = derDecodeLen(buffer,\n                         decodedTag.primitive,\n                         'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  var state = buffer.save();\n  var res = this._skipUntilEnd(\n      buffer,\n      'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  while (true) {\n    var tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    var len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    var res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len)\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n                                                    options) {\n  var result = [];\n  while (!buffer.isEmpty()) {\n    var possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    var res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    var unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    var raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    var str = '';\n    for (var i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    var numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    var printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  var result;\n  var identifiers = [];\n  var ident = 0;\n  while (!buffer.isEmpty()) {\n    var subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  var first = (identifiers[0] / 40) | 0;\n  var second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    var tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  var str = buffer.raw().toString();\n  if (tag === 'gentime') {\n    var year = str.slice(0, 4) | 0;\n    var mon = str.slice(4, 6) | 0;\n    var day = str.slice(6, 8) | 0;\n    var hour = str.slice(8, 10) | 0;\n    var min = str.slice(10, 12) | 0;\n    var sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    var year = str.slice(0, 2) | 0;\n    var mon = str.slice(2, 4) | 0;\n    var day = str.slice(4, 6) | 0;\n    var hour = str.slice(6, 8) | 0;\n    var min = str.slice(8, 10) | 0;\n    var sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  var res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  var raw = buffer.raw();\n  var res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  var tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  var cls = der.tagClass[tag >> 6];\n  var primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    var oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  var tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  var len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  var num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (var i = 0; i < num; i++) {\n    len <<= 8;\n    var j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  var lines = data.toString().split(/[\\r\\n]+/g);\n\n  var label = options.label.toUpperCase();\n\n  var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  var start = -1;\n  var end = -1;\n  for (var i = 0; i < lines.length; i++) {\n    var match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  var base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n  var input = new Buffer(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n                                                              primitive,\n                                                              cls,\n                                                              content) {\n  var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    var header = new Buffer(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  var lenOctets = 1;\n  for (var i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  var header = new Buffer(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    var buf = new Buffer(str.length * 2);\n    for (var i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s\\.]+/g);\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  var size = 0;\n  for (var i = 0; i < id.length; i++) {\n    var ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  var objid = new Buffer(size);\n  var offset = objid.length - 1;\n  for (var i = id.length - 1; i >= 0; i--) {\n    var ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  var str;\n  var date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    var numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = new Buffer(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    var size = num.length;\n    if (num.length === 0)\n      size++;\n\n    var out = new Buffer(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  var size = 1;\n  for (var i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  var out = new Array(size);\n  for (var i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  var state = this._baseState;\n  var i;\n  if (state['default'] === null)\n    return false;\n\n  var data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  var res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  var buf = DEREncoder.prototype.encode.call(this, data);\n\n  var p = buf.toString('base64');\n  var out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (var i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict';\n\nvar asn = require('asn1.js');\n\nvar Time = asn.define('Time', function () {\n\tthis.choice({\n\t\tutcTime: this.utctime(),\n\t\tgeneralTime: this.gentime()\n\t});\n});\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n\tthis.seq().obj(\n\t\tthis.key('type').objid(),\n\t\tthis.key('value').any()\n\t);\n});\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('parameters').optional(),\n\t\tthis.key('curve').objid().optional()\n\t);\n});\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n\tthis.setof(AttributeTypeValue);\n});\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n\tthis.seqof(RelativeDistinguishedName);\n});\n\nvar Name = asn.define('Name', function () {\n\tthis.choice({\n\t\trdnSequence: this.use(RDNSequence)\n\t});\n});\n\nvar Validity = asn.define('Validity', function () {\n\tthis.seq().obj(\n\t\tthis.key('notBefore').use(Time),\n\t\tthis.key('notAfter').use(Time)\n\t);\n});\n\nvar Extension = asn.define('Extension', function () {\n\tthis.seq().obj(\n\t\tthis.key('extnID').objid(),\n\t\tthis.key('critical').bool().def(false),\n\t\tthis.key('extnValue').octstr()\n\t);\n});\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('version').explicit(0)['int']().optional(),\n\t\tthis.key('serialNumber')['int'](),\n\t\tthis.key('signature').use(AlgorithmIdentifier),\n\t\tthis.key('issuer').use(Name),\n\t\tthis.key('validity').use(Validity),\n\t\tthis.key('subject').use(Name),\n\t\tthis.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n\t\tthis.key('issuerUniqueID').implicit(1).bitstr().optional(),\n\t\tthis.key('subjectUniqueID').implicit(2).bitstr().optional(),\n\t\tthis.key('extensions').explicit(3).seqof(Extension).optional()\n\t);\n});\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('tbsCertificate').use(TBSCertificate),\n\t\tthis.key('signatureAlgorithm').use(AlgorithmIdentifier),\n\t\tthis.key('signatureValue').bitstr()\n\t);\n});\n\nmodule.exports = X509Certificate;\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int'](),\n\t\tthis.key('privateExponent')['int'](),\n\t\tthis.key('prime1')['int'](),\n\t\tthis.key('prime2')['int'](),\n\t\tthis.key('exponent1')['int'](),\n\t\tthis.key('exponent2')['int'](),\n\t\tthis.key('coefficient')['int']()\n\t);\n});\nexports.RSAPrivateKey = RSAPrivateKey;\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int']()\n\t);\n});\nexports.RSAPublicKey = RSAPublicKey;\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('none').null_().optional(),\n\t\tthis.key('curve').objid().optional(),\n\t\tthis.key('params').seq().obj(\n\t\t\tthis.key('p')['int'](),\n\t\t\tthis.key('q')['int'](),\n\t\t\tthis.key('g')['int']()\n\t\t).optional()\n\t);\n});\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\nexports.PublicKey = PublicKey;\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').seq().obj(\n\t\t\tthis.key('id').objid(),\n\t\t\tthis.key('decrypt').seq().obj(\n\t\t\t\tthis.key('kde').seq().obj(\n\t\t\t\t\tthis.key('id').objid(),\n\t\t\t\t\tthis.key('kdeparams').seq().obj(\n\t\t\t\t\t\tthis.key('salt').octstr(),\n\t\t\t\t\t\tthis.key('iters')['int']()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tthis.key('cipher').seq().obj(\n\t\t\t\t\tthis.key('algo').objid(),\n\t\t\t\t\tthis.key('iv').octstr()\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('p')['int'](),\n\t\tthis.key('q')['int'](),\n\t\tthis.key('g')['int'](),\n\t\tthis.key('pub_key')['int'](),\n\t\tthis.key('priv_key')['int']()\n\t);\n});\nexports.DSAPrivateKey = DSAPrivateKey;\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n\tthis['int']();\n});\n\nvar ECParameters = asn1.define('ECParameters', function () {\n\tthis.choice({\n\t\tnamedCurve: this.objid()\n\t});\n});\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('privateKey').octstr(),\n\t\tthis.key('parameters').optional().explicit(0).use(ECParameters),\n\t\tthis.key('publicKey').optional().explicit(1).bitstr()\n\t);\n});\nexports.ECPrivateKey = ECPrivateKey;\n\nexports.signature = asn1.define('signature', function () {\n\tthis.seq().obj(\n\t\tthis.key('r')['int'](),\n\t\tthis.key('s')['int']()\n\t);\n});\n","'use strict';\n\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m;\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m;\nvar evp = require('evp_bytestokey');\nvar ciphers = require('browserify-aes');\nvar Buffer = require('safe-buffer').Buffer;\nmodule.exports = function (okey, password) {\n\tvar key = okey.toString();\n\tvar match = key.match(findProc);\n\tvar decrypted;\n\tif (!match) {\n\t\tvar match2 = key.match(fullRegex);\n\t\tdecrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n\t} else {\n\t\tvar suite = 'aes' + match[1];\n\t\tvar iv = Buffer.from(match[2], 'hex');\n\t\tvar cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n\t\tvar cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n\t\tvar out = [];\n\t\tvar cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n\t\tout.push(cipher.update(cipherText));\n\t\tout.push(cipher['final']());\n\t\tdecrypted = Buffer.concat(out);\n\t}\n\tvar tag = key.match(startRegex)[1];\n\treturn {\n\t\ttag: tag,\n\t\tdata: decrypted\n\t};\n};\n","'use strict';\n\nvar asn1 = require('./asn1');\nvar aesid = require('./aesid.json');\nvar fixProc = require('./fixProc');\nvar ciphers = require('browserify-aes');\nvar compat = require('pbkdf2');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction decrypt(data, password) {\n\tvar salt = data.algorithm.decrypt.kde.kdeparams.salt;\n\tvar iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n\tvar algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n\tvar iv = data.algorithm.decrypt.cipher.iv;\n\tvar cipherText = data.subjectPrivateKey;\n\tvar keylen = parseInt(algo.split('-')[1], 10) / 8;\n\tvar key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n\tvar cipher = ciphers.createDecipheriv(algo, key, iv);\n\tvar out = [];\n\tout.push(cipher.update(cipherText));\n\tout.push(cipher['final']());\n\treturn Buffer.concat(out);\n}\n\nfunction parseKeys(buffer) {\n\tvar password;\n\tif (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n\t\tpassword = buffer.passphrase;\n\t\tbuffer = buffer.key;\n\t}\n\tif (typeof buffer === 'string') {\n\t\tbuffer = Buffer.from(buffer);\n\t}\n\n\tvar stripped = fixProc(buffer, password);\n\n\tvar type = stripped.tag;\n\tvar data = stripped.data;\n\tvar subtype, ndata;\n\tswitch (type) {\n\t\tcase 'CERTIFICATE':\n\t\t\tndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n\t\t\t// falls through\n\t\tcase 'PUBLIC KEY':\n\t\t\tif (!ndata) {\n\t\t\t\tndata = asn1.PublicKey.decode(data, 'der');\n\t\t\t}\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\tndata.subjectPrivateKey = ndata.subjectPublicKey;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'ec',\n\t\t\t\t\t\tdata: ndata\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tdata: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'ENCRYPTED PRIVATE KEY':\n\t\t\tdata = asn1.EncryptedPrivateKey.decode(data, 'der');\n\t\t\tdata = decrypt(data, password);\n\t\t\t// falls through\n\t\tcase 'PRIVATE KEY':\n\t\t\tndata = asn1.PrivateKey.decode(data, 'der');\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcurve: ndata.algorithm.curve,\n\t\t\t\t\t\tprivateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tparams: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'RSA PUBLIC KEY':\n\t\t\treturn asn1.RSAPublicKey.decode(data, 'der');\n\t\tcase 'RSA PRIVATE KEY':\n\t\t\treturn asn1.RSAPrivateKey.decode(data, 'der');\n\t\tcase 'DSA PRIVATE KEY':\n\t\t\treturn {\n\t\t\t\ttype: 'dsa',\n\t\t\t\tparams: asn1.DSAPrivateKey.decode(data, 'der')\n\t\t\t};\n\t\tcase 'EC PRIVATE KEY':\n\t\t\tdata = asn1.ECPrivateKey.decode(data, 'der');\n\t\t\treturn {\n\t\t\t\tcurve: data.parameters.value,\n\t\t\t\tprivateKey: data.privateKey\n\t\t\t};\n\t\tdefault: throw new Error('unknown key type ' + type);\n\t}\n}\nparseKeys.signature = asn1.signature;\n\nmodule.exports = parseKeys;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key);\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n    return ecSign(hash, priv);\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n    return dsaSign(hash, priv, hashType);\n  }\n  if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n  if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = priv.modulus.byteLength();\n  var pad = [0, 1];\n  while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n  pad.push(0x00);\n  var i = -1;\n  while (++i < hash.length) { pad.push(hash[i]); }\n\n  var out = crt(pad, priv);\n  return out;\n}\n\nfunction ecSign(hash, priv) {\n  var curveId = curves[priv.curve.join('.')];\n  if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n  var curve = new EC(curveId);\n  var key = curve.keyFromPrivate(priv.privateKey);\n  var out = key.sign(hash);\n\n  return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n  var x = priv.params.priv_key;\n  var p = priv.params.p;\n  var q = priv.params.q;\n  var g = priv.params.g;\n  var r = new BN(0);\n  var k;\n  var H = bits2int(hash, q).mod(q);\n  var s = false;\n  var kv = getKey(x, q, hash, algo);\n  while (s === false) {\n    k = makeKey(q, kv, algo);\n    r = makeR(g, k, p, q);\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n    if (s.cmpn(0) === 0) {\n      s = false;\n      r = new BN(0);\n    }\n  }\n  return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n  r = r.toArray();\n  s = s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80) { r = [0].concat(r); }\n  if (s[0] & 0x80) { s = [0].concat(s); }\n\n  var total = r.length + s.length + 4;\n  var res = [\n    0x30, total, 0x02, r.length\n  ];\n  res = res.concat(r, [0x02, s.length], s);\n  return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n  x = Buffer.from(x.toArray());\n  if (x.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - x.length);\n    x = Buffer.concat([zeros, x]);\n  }\n  var hlen = hash.length;\n  var hbits = bits2octets(hash, q);\n  var v = Buffer.alloc(hlen);\n  v.fill(1);\n  var k = Buffer.alloc(hlen);\n  k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n  var bits = new BN(obits);\n  var shift = (obits.length << 3) - q.bitLength();\n  if (shift > 0) { bits.ishrn(shift); }\n  return bits;\n}\n\nfunction bits2octets(bits, q) {\n  bits = bits2int(bits, q);\n  bits = bits.mod(q);\n  var out = Buffer.from(bits.toArray());\n  if (out.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - out.length);\n    out = Buffer.concat([zeros, out]);\n  }\n  return out;\n}\n\nfunction makeKey(q, kv, algo) {\n  var t;\n  var k;\n\n  do {\n    t = Buffer.alloc(0);\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n      t = Buffer.concat([t, kv.v]);\n    }\n\n    k = bits2int(t, q);\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n  } while (k.cmp(q) !== -1);\n\n  return k;\n}\n\nfunction makeR(g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n","'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n  var pub = parseKeys(key);\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n    return ecVerify(sig, hash, pub);\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n    return dsaVerify(sig, hash, pub);\n  }\n  if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = pub.modulus.byteLength();\n  var pad = [1];\n  var padNum = 0;\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff);\n    padNum += 1;\n  }\n  pad.push(0x00);\n  var i = -1;\n  while (++i < hash.length) {\n    pad.push(hash[i]);\n  }\n  pad = Buffer.from(pad);\n  var red = BN.mont(pub.modulus);\n  sig = new BN(sig).toRed(red);\n\n  sig = sig.redPow(new BN(pub.publicExponent));\n  sig = Buffer.from(sig.fromRed().toArray());\n  var out = padNum < 8 ? 1 : 0;\n  len = Math.min(sig.length, pad.length);\n  if (sig.length !== pad.length) { out = 1; }\n\n  i = -1;\n  while (++i < len) { out |= sig[i] ^ pad[i]; }\n  return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')];\n  if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n  var curve = new EC(curveId);\n  var pubkey = pub.data.subjectPrivateKey.data;\n\n  return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n  var p = pub.data.p;\n  var q = pub.data.q;\n  var g = pub.data.g;\n  var y = pub.data.pub_key;\n  var unpacked = parseKeys.signature.decode(sig, 'der');\n  var s = unpacked.s;\n  var r = unpacked.r;\n  checkValue(s, q);\n  checkValue(r, q);\n  var montp = BN.mont(p);\n  var w = s.invm(q);\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q);\n  return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n  if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n  if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n  algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n  stream.Writable.call(this);\n\n  var data = algorithms[algorithm];\n  if (!data) { throw new Error('Unknown message digest'); }\n\n  this._hashType = data.hash;\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n  done();\n};\n\nSign.prototype.update = function update(data, enc) {\n  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n  return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n  this.end();\n  var hash = this._hash.digest();\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n  return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n  stream.Writable.call(this);\n\n  var data = algorithms[algorithm];\n  if (!data) { throw new Error('Unknown message digest'); }\n\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n  done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n  return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n  var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n  this.end();\n  var hash = this._hash.digest();\n  return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n  return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n  return new Verify(algorithm);\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n};\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  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\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    this.length = num === 0 ? 1 : this.length;\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n  return new ECDH(curve)\n}\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n  this.curveType = aliases[curve]\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    }\n  }\n  this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n  this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair()\n  return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8'\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc)\n  }\n  var otherPub = this.curve.keyFromPublic(other).getPublic()\n  var out = otherPub.mul(this.keys.getPrivate()).getX()\n  return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true)\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7\n    } else {\n      key[0] = 6\n    }\n  }\n  return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc)\n  }\n  this.keys._importPublic(pub)\n  return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc)\n  }\n\n  var _priv = new BN(priv)\n  _priv = _priv.toString(16)\n  this.keys = this.curve.genKeyPair()\n  this.keys._importPrivate(_priv)\n  return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray()\n  }\n  var buf = new Buffer(bn)\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length)\n    zeros.fill(0)\n    buf = Buffer.concat([zeros, buf])\n  }\n  if (!enc) {\n    return buf\n  } else {\n    return buf.toString(enc)\n  }\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n  var t = Buffer.alloc(0)\n  var i = 0\n  var c\n  while (t.length < len) {\n    c = i2ops(i++)\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n  }\n  return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n  var out = Buffer.allocUnsafe(4)\n  out.writeUInt32BE(c, 0)\n  return out\n}\n","module.exports = function xor (a, b) {\n  var len = a.length\n  var i = -1\n  while (++i < len) {\n    a[i] ^= b[i]\n  }\n  return a\n}\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  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\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    this.length = num === 0 ? 1 : this.length;\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n  return Buffer.from(paddedMsg\n    .toRed(BN.mont(key.modulus))\n    .redPow(new BN(key.publicExponent))\n    .fromRed()\n    .toArray())\n}\n\nmodule.exports = withPublic\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n  var padding\n  if (publicKey.padding) {\n    padding = publicKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n  var key = parseKeys(publicKey)\n  var paddedMsg\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg)\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    paddedMsg = new BN(msg)\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus')\n    }\n  } else {\n    throw new Error('unknown padding')\n  }\n  if (reverse) {\n    return crt(paddedMsg, key)\n  } else {\n    return withPublic(paddedMsg, key)\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var mLen = msg.length\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  var hLen2 = 2 * hLen\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long')\n  }\n  var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n  var dblen = k - hLen - 1\n  var seed = randomBytes(hLen)\n  var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n  return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n  var mLen = msg.length\n  var k = key.modulus.byteLength()\n  if (mLen > k - 11) {\n    throw new Error('message too long')\n  }\n  var ps\n  if (reverse) {\n    ps = Buffer.alloc(k - mLen - 3, 0xff)\n  } else {\n    ps = nonZero(k - mLen - 3)\n  }\n  return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n  var out = Buffer.allocUnsafe(len)\n  var i = 0\n  var cache = randomBytes(len * 2)\n  var cur = 0\n  var num\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len * 2)\n      cur = 0\n    }\n    num = cache[cur++]\n    if (num) {\n      out[i++] = num\n    }\n  }\n  return out\n}\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n  var padding\n  if (privateKey.padding) {\n    padding = privateKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n\n  var key = parseKeys(privateKey)\n  var k = key.modulus.byteLength()\n  if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error')\n  }\n  var msg\n  if (reverse) {\n    msg = withPublic(new BN(enc), key)\n  } else {\n    msg = crt(enc, key)\n  }\n  var zBuffer = Buffer.alloc(k - msg.length)\n  msg = Buffer.concat([zBuffer, msg], k)\n  if (padding === 4) {\n    return oaep(key, msg)\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    return msg\n  } else {\n    throw new Error('unknown padding')\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  if (msg[0] !== 0) {\n    throw new Error('decryption error')\n  }\n  var maskedSeed = msg.slice(1, hLen + 1)\n  var maskedDb = msg.slice(hLen + 1)\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error')\n  }\n  var i = hLen\n  while (db[i] === 0) {\n    i++\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error')\n  }\n  return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n  var p1 = msg.slice(0, 2)\n  var i = 2\n  var status = 0\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++\n      break\n    }\n  }\n  var ps = msg.slice(2, i - 1)\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n    status++\n  }\n  if (ps.length < 8) {\n    status++\n  }\n  if (status) {\n    throw new Error('decryption error')\n  }\n  return msg.slice(i)\n}\nfunction compare (a, b) {\n  a = Buffer.from(a)\n  b = Buffer.from(b)\n  var dif = 0\n  var len = a.length\n  if (a.length !== b.length) {\n    dif++\n    len = Math.min(a.length, b.length)\n  }\n  var i = -1\n  while (++i < len) {\n    dif += (a[i] ^ b[i])\n  }\n  return dif\n}\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n  return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n  return exports.privateDecrypt(key, buf, true)\n}\n","'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n  if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n    throw new TypeError('offset must be a number')\n  }\n\n  if (offset > kMaxUint32 || offset < 0) {\n    throw new TypeError('offset must be a uint32')\n  }\n\n  if (offset > kBufferMaxLength || offset > length) {\n    throw new RangeError('offset out of range')\n  }\n}\n\nfunction assertSize (size, offset, length) {\n  if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n    throw new TypeError('size must be a number')\n  }\n\n  if (size > kMaxUint32 || size < 0) {\n    throw new TypeError('size must be a uint32')\n  }\n\n  if (size + offset > length || size > kBufferMaxLength) {\n    throw new RangeError('buffer too small')\n  }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n  exports.randomFill = randomFill\n  exports.randomFillSync = randomFillSync\n} else {\n  exports.randomFill = oldBrowser\n  exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  if (typeof offset === 'function') {\n    cb = offset\n    offset = 0\n    size = buf.length\n  } else if (typeof size === 'function') {\n    cb = size\n    size = buf.length - offset\n  } else if (typeof cb !== 'function') {\n    throw new TypeError('\"cb\" argument must be a function')\n  }\n  assertOffset(offset, buf.length)\n  assertSize(size, offset, buf.length)\n  return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n  if (process.browser) {\n    var ourBuf = buf.buffer\n    var uint = new Uint8Array(ourBuf, offset, size)\n    crypto.getRandomValues(uint)\n    if (cb) {\n      process.nextTick(function () {\n        cb(null, buf)\n      })\n      return\n    }\n    return buf\n  }\n  if (cb) {\n    randombytes(size, function (err, bytes) {\n      if (err) {\n        return cb(err)\n      }\n      bytes.copy(buf, offset)\n      cb(null, buf)\n    })\n    return\n  }\n  var bytes = randombytes(size)\n  bytes.copy(buf, offset)\n  return buf\n}\nfunction randomFillSync (buf, offset, size) {\n  if (typeof offset === 'undefined') {\n    offset = 0\n  }\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  assertOffset(offset, buf.length)\n\n  if (size === undefined) size = buf.length - offset\n\n  assertSize(size, offset, buf.length)\n\n  return actualFill(buf, offset, size)\n}\n","'use strict';\n\n// eslint-disable-next-line no-multi-assign\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes');\n\n// eslint-disable-next-line no-multi-assign\nexports.createHash = exports.Hash = require('create-hash');\n\n// eslint-disable-next-line no-multi-assign\nexports.createHmac = exports.Hmac = require('create-hmac');\n\nvar algos = require('browserify-sign/algos');\nvar algoKeys = Object.keys(algos);\nvar hashes = [\n\t'sha1',\n\t'sha224',\n\t'sha256',\n\t'sha384',\n\t'sha512',\n\t'md5',\n\t'rmd160'\n].concat(algoKeys);\n\nexports.getHashes = function () {\n\treturn hashes;\n};\n\nvar p = require('pbkdf2');\nexports.pbkdf2 = p.pbkdf2;\nexports.pbkdf2Sync = p.pbkdf2Sync;\n\nvar aes = require('browserify-cipher');\n\nexports.Cipher = aes.Cipher;\nexports.createCipher = aes.createCipher;\nexports.Cipheriv = aes.Cipheriv;\nexports.createCipheriv = aes.createCipheriv;\nexports.Decipher = aes.Decipher;\nexports.createDecipher = aes.createDecipher;\nexports.Decipheriv = aes.Decipheriv;\nexports.createDecipheriv = aes.createDecipheriv;\nexports.getCiphers = aes.getCiphers;\nexports.listCiphers = aes.listCiphers;\n\nvar dh = require('diffie-hellman');\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup;\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup;\nexports.getDiffieHellman = dh.getDiffieHellman;\nexports.createDiffieHellman = dh.createDiffieHellman;\nexports.DiffieHellman = dh.DiffieHellman;\n\nvar sign = require('browserify-sign');\n\nexports.createSign = sign.createSign;\nexports.Sign = sign.Sign;\nexports.createVerify = sign.createVerify;\nexports.Verify = sign.Verify;\n\nexports.createECDH = require('create-ecdh');\n\nvar publicEncrypt = require('public-encrypt');\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt;\nexports.privateEncrypt = publicEncrypt.privateEncrypt;\nexports.publicDecrypt = publicEncrypt.publicDecrypt;\nexports.privateDecrypt = publicEncrypt.privateDecrypt;\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// [\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error('sorry, ' + name + ' is not implemented yet\\nwe accept pull requests\\nhttps://github.com/browserify/crypto-browserify');\n//   };\n// });\n\nvar rf = require('randomfill');\n\nexports.randomFill = rf.randomFill;\nexports.randomFillSync = rf.randomFillSync;\n\nexports.createCredentials = function () {\n\tthrow new Error('sorry, createCredentials is not implemented yet\\nwe accept pull requests\\nhttps://github.com/browserify/crypto-browserify');\n};\n\nexports.constants = {\n\tDH_CHECK_P_NOT_SAFE_PRIME: 2,\n\tDH_CHECK_P_NOT_PRIME: 1,\n\tDH_UNABLE_TO_CHECK_GENERATOR: 4,\n\tDH_NOT_SUITABLE_GENERATOR: 8,\n\tNPN_ENABLED: 1,\n\tALPN_ENABLED: 1,\n\tRSA_PKCS1_PADDING: 1,\n\tRSA_SSLV23_PADDING: 2,\n\tRSA_NO_PADDING: 3,\n\tRSA_PKCS1_OAEP_PADDING: 4,\n\tRSA_X931_PADDING: 5,\n\tRSA_PKCS1_PSS_PADDING: 6,\n\tPOINT_CONVERSION_COMPRESSED: 2,\n\tPOINT_CONVERSION_UNCOMPRESSED: 4,\n\tPOINT_CONVERSION_HYBRID: 6\n};\n","export const randomNumberFromRange = (min, max) => Math.floor(Math.random() * (max - min)) + min;\n","// import { createHash } from \"crypto\";\nimport { createHash } from \"crypto-browserify\";\nimport { appConfig } from \"../config/AppConfig\";\nimport { randomNumberFromRange } from \"./NumberHelper\";\n\ntype GetURLProps = {\n  source: string;\n  local?: string;\n  size?: number | string;\n};\n\nexport const WAX_DEFAULT_MEDIA_LIST = [\n  \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CjxjaXJjbGUgY3g9IjE2IiBjeT0iMTYiIHI9IjE2IiBmaWxsPSJ1cmwoI3BhdHRlcm4wKSIvPgo8ZGVmcz4KPHBhdHRlcm4gaWQ9InBhdHRlcm4wIiBwYXR0ZXJuQ29udGVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgd2lkdGg9IjEiIGhlaWdodD0iMSI+Cjx1c2UgeGxpbms6aHJlZj0iI2ltYWdlMF83NDI0XzIwNzc5IiB0cmFuc2Zvcm09InNjYWxlKDAuMDA4NDAzMzYpIi8+CjwvcGF0dGVybj4KPGltYWdlIGlkPSJpbWFnZTBfNzQyNF8yMDc3OSIgd2lkdGg9IjExOSIgaGVpZ2h0PSIxMTkiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSGNBQUFCM0NBSUFBQUMyVzBqZEFBQU1QMmxEUTFCSlEwTWdVSEp2Wm1sc1pRQUFTSW1WVndkWVU4a1dubHVTa0VCb0FRU2toTjRFa1JwQVNnZ3Q5STVnSXlRQlFva3hFRVRzNktLQ2F4Y0wyTkJWRVFVcklIYkV6cUxZKzRLSWlySXVGbXlvdkVrQlhmZVY3ODMzelozLy9uUG1QMmZPbmJuM0RnQnFwemdpVVE2cURrQ3VNRjhjRyt4UEg1ZWNRaWM5QXhnZ0FnSXdCTTRjYnA2SUdSMGREbUFaYXY5ZTN0OENpTFM5YmkvVittZi9meTBhUEg0ZUZ3QWtHdUkwWGg0M0YrSkRBT0NWWEpFNEh3Q2lsRGVibGkrU1lsaUJsaGdHQ1BFaUtjNlE0MG9wVHBQamZUS2IrRmdXeEMwQUtLbHdPT0lNQUZTdlFwNWV3TTJBR3FwOUVEc0tlUUloQUdwMGlIMXljNmZ3SUU2RjJCcmFpQ0NXNmpQU2Z0REorSnRtMnJBbWg1TXhqT1Z6a1JXbEFFR2VLSWN6L2Y5TXgvOHV1VG1TSVIrV3NLcGtpa05pcFhPR2VidVRQU1ZNaWxVZzdoV21SVVpCckFueFJ3RlBaZzh4U3NtVWhDVEk3VkVEYmg0TDVnem9RT3pJNHdTRVFXd0FjWkF3SnpKY3dhZWxDNExZRU1NVmdoWUs4dG54RU90Q3ZJaWZGeGluc05raW5oS3I4SVhXcDR0WlRBVi9nU09XK1pYNmVpVEpUbUFxOU45azh0a0tmVXkxS0RNK0NXSUt4T1lGZ3NSSWlGVWhkc2pMamd0VDJJd3R5bVJGRHRtSUpiSFMrTTBoanVVTGcvM2wrbGhCdWpnb1ZtRmZtcHMzTkY5c1M2YUFIYW5BQi9JejQwUGsrY0ZhdUJ4Wi9IQXUyRlcra0prd3BNUFBHeGMrTkJjZVB5QlFQbmZzT1YrWUVLZlErU2pLOTQrVmo4VXBvcHhvaFQxdXlzOEpsdkttRUx2a0ZjUXB4dUtKK1hCQnl2WHhkRkYrZEx3OFRyd29peE1hTFk4SFh3N0NBUXNFQURxUXdKb0dwb0FzSUdqcmJlaUZkL0tlSU1BQllwQUIrTUJld1F5TlNKTDFDT0UxRGhTQlB5SGlnN3poY2Y2eVhqNG9nUHpYWVZaK3RRZnBzdDRDMlloczhCVGlYQkFHY3VDOVJEWktPT3d0RVR5QmpPQWYzam13Y21HOE9iQksrLzg5UDhSK1o1aVFDVmN3a2lHUGRMVWhTMklnTVlBWVFnd2kydUQ2dUEvdWhZZkRxeCtzVGpnRDl4aWF4M2Q3d2xOQ08rRXg0U2FoZzNCM3NxQlkvRk9VRWFBRDZnY3BjcEgyWXk1d1M2anBpdnZqM2xBZEt1TTZ1RDZ3eDEyZ0h5YnVDejI3UXBhbGlGdWFGZnBQMm4rYndROVBRMkZIZGlTajVCRmtQN0wxenlOVmJWVmRoMVdrdWY0eFAvSlkwNGJ6elJydStkay82NGZzODJBYjlyTWx0Z2c3aUozSFRtTVhzV05ZQTZCako3RkdyQlU3THNYRHErdUpiSFVOZVl1VnhaTU5kUVQvOERmMFpLV1p6SE9zY2V4eC9DTHZ5K2NYU3QvUmdEVkZORjBzeU1qTXB6UGhGNEZQWnd1NURxUG9UbzVPemdCSXZ5L3kxOWZiR05sM0E5RnAvYzdOL3dNQTc1T0RnNE5IdjNPaEp3SFk3dzYzLzVIdm5EVURmanFVQWJod2hDc1JGOGc1WEhvaHdMZUVHdHhwZXNBSW1BRnJPQjhuNEFhOGdCOElCS0VnQ3NTRFpEQUpScDhKMTdrWVRBTXp3VHhRQXNyQWNyQUdiQUNid1Rhd0Mrd0ZCMEFET0FaT2czUGdNcmdLYm9MN2NQVjBnNWVnRDd3SEF3aUNrQkFxUWtQMEVHUEVBckZEbkJBRzRvTUVJdUZJTEpLTXBDSVppQkNSSURPUitVZ1pzaExaZ0d4RnFwSDl5QkhrTkhJUmFVZnVJcDFJRC9JRytZeGlxQXFxaFJxaWx1aG9sSUV5MFRBMEhwMklacUJUMFNKMEFib1VYWWRXb1h2UWV2UTBlaG05aVhhZ0w5RitER0RLbUE1bWd0bGpESXlGUldFcFdEb214bVpqcFZnNVZvWFZZazN3T1YvSE9yQmU3Qk5PeEdrNEhiZUhLemdFVDhDNStGUjhOcjRFMzREdnd1dnhGdnc2M29uMzRkOElWSUlCd1k3Z1NXQVR4aEV5Q05NSUpZUnl3ZzdDWWNKWnVKZTZDZStKUktJTzBZcm9EdmRpTWpHTE9JTzRoTGlSV0VjOFJXd25kaEg3U1NTU0hzbU81RTJLSW5GSSthUVMwbnJTSHRKSjBqVlNOK21qa3JLU3NaS1RVcEJTaXBKUXFWaXBYR20zMGdtbGEwclBsQWJJNm1RTHNpYzVpc3dqVHljdkkyOG5ONUd2a0x2SkF4UU5paFhGbXhKUHlhTE1vNnlqMUZMT1VoNVEzaW9ySzVzcWV5akhLQXVVNXlxdlU5Nm5mRUc1VS9tVGlxYUtyUXBMWllLS1JHV3B5azZWVXlwM1ZkNVNxVlJMcWg4MWhacFBYVXF0cHA2aFBxSitWS1dwT3FpeVZYbXFjMVFyVk90VnI2bStVaU9yV2FneDFTYXBGYW1WcXgxVXU2TFdxMDVXdDFSbnFYUFVaNnRYcUI5UnY2M2VyMEhUR0tNUnBaR3JzVVJqdDhaRmplZWFKRTFMelVCTm51WUN6VzJhWnpTN2FCak5qTWFpY1duemFkdHBaMm5kV2tRdEt5MjJWcFpXbWRaZXJUYXRQbTFOYlJmdFJPMUM3UXJ0NDlvZE9waU9wUTViSjBkbm1jNEJuVnM2bjBjWWptQ080STlZUEtKMnhMVVJIM1JINnZycDhuVkxkZXQwYitwKzFxUHJCZXBsNjYzUWE5QjdxSS9yMitySDZFL1QzNlIvVnI5M3BOWklyNUhja2FVakQ0eThaNEFhMkJyRUdzd3cyR2JRYXRCdmFHUVliQ2d5WEc5NHhyRFhTTWZJenlqTGFMWFJDYU1lWTVxeGo3SEFlTFh4U2VNWGRHMDZrNTVEWDBkdm9mZVpHSmlFbUVoTXRwcTBtUXlZV3BrbW1CYWIxcGsrTktPWU1jelN6VmFiTlp2MW1SdWJSNWpQTks4eHYyZEJ0bUJZWkZxc3RUaHY4Y0hTeWpMSmNxRmxnK1Z6SzEwcnRsV1JWWTNWQTJ1cXRhLzFWT3NxNnhzMlJCdUdUYmJOUnB1cnRxaXRxMjJtYllYdEZUdlV6czFPWUxmUnJuMFVZWlRIS09Hb3FsRzM3VlhzbWZZRjlqWDJuUTQ2RHVFT3hRNE5EcTlHbTQ5T0diMWk5UG5SM3h4ZEhYTWN0enZlSDZNNUpuUk04WmltTVcrY2JKMjRUaFZPTjV5cHprSE9jNXdiblYrNzJMbndYVGE1M0hHbHVVYTRMblJ0ZHYzcTV1NG1kcXQxNjNFM2QwOTFyM1MvemRCaVJET1dNQzU0RUR6OFBlWjRIUFA0NU9ubW1lOTV3UE12TDN1dmJLL2RYcy9IV28zbGo5MCt0c3ZiMUp2anZkVzd3NGZ1aytxenhhZkQxOFNYNDF2bCs5alB6SS9udDhQdkdkT0dtY1hjdzN6bDcrZ3Y5ai9zLzRIbHlackZPaFdBQlFRSGxBYTBCV29HSmdSdUNId1VaQnFVRVZRVDFCZnNHandqK0ZRSUlTUXNaRVhJYmJZaG04dXVadmVGdW9mT0NtMEpVd21MQzlzUTlqamNObHdjM2hTQlJvUkdySXA0RUdrUktZeHNpQUpSN0toVlVRK2pyYUtuUmgrTkljWkV4MVRFUEkwZEV6c3o5bndjTFc1eTNPNjQ5L0grOGN2aTd5ZFlKMGdTbWhQVkVpY2tWaWQrU0FwSVdwblVNVzcwdUZuakxpZnJKd3VTRzFOSUtZa3BPMUw2eHdlT1h6TytlNExyaEpJSnR5WmFUU3ljZUhHUy9xU2NTY2NucTAzbVRENllTa2hOU3QyZCtvVVR4YW5pOUtleDB5clQrcmdzN2xydVM1NGZield2aCsvTlg4bC9sdTZkdmpMOWVZWjN4cXFNbmt6ZnpQTE1YZ0ZMc0VId09pc2thM1BXaCt5bzdKM1pnemxKT1hXNVNybXB1VWVFbXNKc1ljc1VveW1GVTlwRmRxSVNVY2RVejZscnB2YUp3OFE3OHBDOGlYbU4rVnJ3Ujc1VllpMzVSZEpaNEZOUVVmQnhXdUswZzRVYWhjTEMxdW0yMHhkUGYxWVVWUFRiREh3R2QwYnpUSk9aODJaMnptTE8yam9ibVowMnUzbU8yWndGYzdybkJzL2ROWTh5TDN2ZTc4V094U3VMMzgxUG10KzB3SERCM0FWZHZ3VC9VbE9pV2lJdXViM1FhK0htUmZnaXdhSzJ4YzZMMXkvK1Zzb3J2VlRtV0ZaZTltVUpkOG1sWDhmOHV1N1h3YVhwUzl1V3VTM2J0Snk0WExqODFncmZGYnRXYXF3c1d0bTFLbUpWL1dyNjZ0TFY3OVpNWG5PeDNLVjg4MXJLV3NuYWpuWGg2eHJYbTY5ZnZ2N0xoc3dOTnl2OEsrb3FEU29YVjM3WXlOdDRiWlBmcHRyTmhwdkxObi9lSXRoeVoydncxdm9xeTZyeWJjUnRCZHVlYmsvY2Z2NDN4bS9WTy9SM2xPMzR1bE80czJOWDdLNldhdmZxNnQwR3U1ZlZvRFdTbXA0OUUvWmMzUnV3dDdIV3ZuWnJuVTVkMlQ2d1Q3THZ4ZjdVL2JjT2hCMW9Qc2c0V0h2STRsRGxZZHJoMG5xa2ZucDlYME5tUTBkamNtUDdrZEFqelUxZVRZZVBPaHpkZWN6a1dNVng3ZVBMVGxCT0xEZ3hlTExvWlA4cDBhbmUweG1udTVvbk45OC9NKzdNalphWWxyYXpZV2N2bkFzNmQrWTg4L3pKQzk0WGpsMzB2SGprRXVOU3cyVzN5L1d0cnEySGYzZjkvWENiVzF2OUZmY3JqVmM5cmphMWoyMC9jYzMzMnVuckFkZlAzV0RmdUh3ejhtYjdyWVJiZDI1UHVOMXhoM2ZuK2QyY3U2L3ZGZHdidUQvM0FlRkI2VVAxaCtXUERCNVYvV0h6UjEySFc4Znh6b0RPMXNkeGorOTNjYnRlUHNsNzhxVjd3VlBxMC9KbnhzK3FuenM5UDlZVDFIUDF4ZmdYM1M5Rkx3ZDZTLzdVK0xQeWxmV3JRMy81L2RYYU42NnYrN1g0OWVDYkpXLzEzdTU4NS9LdXVUKzYvOUg3M1BjREgwby82bjNjOVlueDZmem5wTS9QQnFaOUlYMVo5OVhtYTlPM3NHOFBCbk1IQjBVY01VZjJLNERCaXFhbkEvQm1Kd0RVWkFCbzhIeEdHUzgvLzhrS0lqK3p5aEQ0VDFoK1JwUVZOd0JxNGY5N1RDLzh1N2tOd0w3dDhQZ0Y5ZFVtQUJCTkJTRGVBNkRPenNOMTZLd21PMWRLQ3hHZUE3WkVmMDNMVFFQL3BzalBuRC9FL1hNTHBLb3U0T2YyWHpBNGZHamxNTXg5QUFBQU9HVllTV1pOVFFBcUFBQUFDQUFCaDJrQUJBQUFBQUVBQUFBYUFBQUFBQUFDb0FJQUJBQUFBQUVBQUFCM29BTUFCQUFBQUFFQUFBQjNBQUFBQUcvNDA5QUFBQnRqU1VSQlZIZ0I3VjNwYngzWGRaOTV3MzJUU0ZIY0xXcjFvc1dLRlZ0eUhOdVNsUUpGRUhRQmlxQkZQd1ZJVWlCb1doVEpoMzVvWEtDdDBSMWRzZ0JkUC9UZnlJZG1hZHE0aVEwN2pwZG9zV2hidTBpS3BEWktYTjcwclBlZU96TnY0U01wa1hJbjlYM25udk03djNQdWJ5NHZoKzlSYkh6eTJDc1JYMmtLcnluOEQ2KzB1YlB6a2M5OHRudlhIbkdRTjdBUmxjYnNkeU5uRjRJUnI3ZzB1ditKVURzbzZwcXhqV21EdHRYVkp5YTd4azRpY3lneE9KWVhGbWRQdnhzdEwzZU9qTVdsa3ErS2FMemlqTVIxTm8ySkRhMTJGWW5RUE9qckphNjcxYlZLSkpXOXhGaWZadmdLLzkyNmRPSHU1SldlSGJ0S1RjMHc1V3R6NlFzOU42YnZHaVltdTBaZmNxY0U4RnFKV2VpN005ZHZmalRST1RUUzNObUZoUlVCTmw1MTd3dll3c0ZscDlabWtQRTBuTWk5UFhDSllVSEp6dEdYYUYyNExCV1FsOGdlSEJmdjNKNDk4NHZXbmkzdHZkdWlXTnRtRkNVSFd1YzgyU01DS3pISUdPcndvZndSVVhlaTAxZDdOWVZjNmFLSzY1SUlLc05lNWhZcVNjek5MQzh1ems2Y2paWVd1NGJobUU2c0ZvRnRoU0RicjVPSjdDS3R2WGFKWE1mWHRWV3NuYXU0TG9sVUJWUStnWWFVNXhjY1UzVjV1N3g4ODlKSGQ2ZXY5WXp2TFRVMWdUK3JiK2o1L3kzc0pLSnp1UjZKVVZIRXpWKy9QbnZtM2M3QmtaYXVIbVJ4bDVEUVBQTVVBYjR3NnBMUUNFTitEeklvakZaSjVKQlBmN0NKNGJxU25TTXZVWC9jRkk2NVhXeERpRjI2Tno4M2NhYWxvNk85ZjRoeUE2VStqbHZZM2xGV3hIcFMrZTVuZFpTNGFtMURucUM4dUREei9pbllPQjBEUTZVU25SN1Z2MWxCcWkwY1RxdmRtQkNKSFZnZXNxR054cmJ3MmljV3RRYytlTVk0QVMrMGczMzcxU1htaFFMbXhvVVA3czFjN3g3ZGtUUzMrblVTWFY0TGRsTXBid0tzNFVSbThlbSsvZkJPQUs0b3RNYUozSTByNUF6eXM4cUJyMDZKbVhaK1ptcnV3ek05bytQTkhmZzBMWmZsc3phRXpYUmpiV0hUV0tWVndJMHB2amZodXV3YW1RcFVQbTVQNGhWSnpPREYrZHVUNzczUjJ0bmQwVDlvMjhnWDg1NFZiV0c3QnRLaTRtcXJLTFZPaWF5aXJXdHRQVVdUOFpIampNUzF5Tk1iQTNIVXh6bnJZVHNBcCtYbDJROU9MOTI3MnpNeUhpZmgwM1N1ait3V0ZqN0NXVHVYeURlcGVEZmQvOFFLN2JFYlI3T1Q0Qm5qdU9CclNhejNnQmp5NEhMNTFwWHp0eWN2OVl6dFNscmFtRk5HbFNDckw0UTFSS1JCVXVBaDJNYmR3bllWdEloZ3BmaU1RU3FyZ2d6SDBleGlubnFtSXJCRTUyZW5wMCs5MWRHM3ZiV25MNGFmeFgwU3ZoVVhYSFpxYlFaWkQyMkt4clp3SXpjR0Y0L25iM0hGb3Zic3VqTDZjZ2hWTGxJdElGTUFPdFZtR1hCVUQ2ZEV5NHNMMDJkKzN0VFMwajAwenE2Z01MdENFU1hUdmJnb0dYNjFBSENoakoyWnJsTWlkK2g2Y0FiNzZSUldNMmcxR1I5K2tRS2NnV05qdTVnU0laMTQwdkxjaFhQTEMzZDZoc2ZkMDdTVTV6bzhzWGJlVTJWRHJVY2ljYTd0RnBZbHcvTXlmZmZqcm5Fa2llMlViY1RybnEwU05hRnlDc2YwbmNuTFBjTTdtbHJiS1I4SHVUeHJrWWVpZmd0YnNMVTUxWHJXSTdGQ0ZlMGI5MVZ4cXlZUlZQWjdXWGV4TUtpc09GV2IxNFNqZWx6VWh0QUpFRGltcjArODJ6MDAxdHE1bFYzazlxWlluQW9UTllyNzFxalBkeDQxMWppUkt5azV6cXhOMCtLS1lTS3JqS21ON1dMVm1vczdIdGRPQ285MzEzN3hSbXYzMXZiZWdUZ3VjWFUvMnFiSmhxWUwrcll3VHJhZTlVaXNVTVYzcnMvQzZMSE5GQ1dDeWk4Z0RIR01KY3ZzYXFOamxaQ2thMTVBbGFibDZYUHZsQmZ1YmhuYmcrOU44OFdRMEM3UVY0Z2xDVi91UTJLRktyNkpLcWRFVVh1NGwxVWE0Vlpaa1ZOdFNkWFBydkloQkNnUGc5bWppV2w2OCtxRkc1Y24rblkrbmpTMzVKVmFneTBzcGJDM2dKOGNnWWVRdnFKTnJBQm1ONC8ra2FudXhHUUhQbU13SEVlVkZRblZCbitWRUFJSmpDbHNxd2Y5NkJMNTA3czNaaVpQdmQ3VzNkZlJCeitMQzlhdlZqMFlna3V5ZVJKT0tiVDJpWm1pbVFic0VaRkJacWE1UkhpU3d4T0RGNkZ5MEZ5bHFScHlpWmlpU21BUlI2VUdWMDdoYVhwcTRoMzRpYnhuYUJ4T0QxQktMdHVadFpGTE1jWmU0MFREak1Wc1JaeWpwN2dpaFFoQlE0VkVWaG1ES2dlaTFaYWsxUndVcGpoWGlkSnllZTdpKy9NelYvdkdIeThsNFNkYlJWMFNnNmNwM3NJTkp6SzdUYmMyUmYwUkFkTk0xRTZ0SFNhQ3lzOWpycDZweHVZa2lQaHN0U1ZFWU9LVDRpc0EzNTY1T3ZQUmUvMDdEeVROK3FhSHIwT2NkcXAyOFliU0tMY1NDS0doNGtSY2dDVGhpN1hadmJvdExOVHdQZ2FjR0tvZEZmSUhSYmFzd3JnWEhGVi84U2lnbU1lQytZdGo0ZmFONlltM3UvcEg0S1RHSEh2WkJaTzlHYmN3TG9pYVQzWU00VjdtUzJWUzFRQ2lxODJFQUUrcUNaS21Dc1dROTNNZEo3RXc2bnp4M3AzSnMyODJ0N1ozRFl6aHUwdlNoN3h5OVdKOXNhVENNbGthcXBpWXdXZDRxbitYVTNMa3FEc1JuakZFWlNNTlp1dVUyRUxWVkNJdVVnTk1WRWlDbE55WDVwTUxUdW5sNitmZlc3eHpZOHZ3N2xMaWYwL01TVXk1NFpKeXl3c1dURkc5WTJFaWM5bDBhMk5EbGIvTFVWU2F5ZGkxRWtWbDFWUnErajJNMnJEVGpyNFc4b2VxVWN5RE5Tak1LTFZlbWdqVjBodlhQcHE3ZkxidmtjZWJXdHFkdnNWS2VRSlRpamtwdEhHMnNDd1V6bVhZeTdSYTdoMUhYVHhpMUphb1NsUVhtTktSQkdsWU9jMG5seUdoNk4yYnMxZE8vYlM5dTdlemQ2amc5TUFjNUFvdTV5R2pYbjJCd2lVU1hiV25pQXk0b2NUa2thRlBhMDBrVUZteHVOcE1yRE5wY0FYZzJoSkw2Mmw1YVdGeTRpMFl0dzd2am1QOVdUeXpUbXhOV3paMjhjWTNBRFl6K3NMMFBpVENkejlRR2E0YXFrbUxwa2VuT2liTEpnVVM1bUU0Mlp4U2RSY1RXc0JBTlh2cC9WdFRGL3BHSDVWUHRqQVNYczVEeG9iZHd0ZzBkY2dxbzZsS1VjaXJaaU84dUVLd0RTR0R5RjJQeE1SSENVUkNwZS9NVGs1OStQT2U3ZU50bmIzRXBnUFg0Um5aOTJFbmFtMTZiV2p2ZzhyUFFYWVZpWU1hc2xYOVdtMGk4VEFjQWJVUENnSnBBbkdhTGI4d2YrdnEyVGU2K2diaG1HWU0zekswdGY2bWtCajZ4YjFzbFZLYjEwRmkwVURyNUNtSGFMRit5enVrYUZDM3hNeE9uRVppYnFPOHZIajEvVGZoM1k2ZUFUaW05YjFwd3ZwVGdxYlVuZzdXWTIySysyOTB1WkM3ZVFqTVJSdE9CS3Jra1VIY3kzd1ppYkdJcnBvTHNzY1hyd0plRTRtcFBoUXBYNzl3K3U3Y3RkNnh4NUtraGZ1c3VJVjlkMVZsd3JVeGs0NTJhbTJLZTMxWG1NaFZvRnQ0eGhDVlNUV3VnR1BkRW1NakZseEZZZzFoQ2k5VVBYNWw1dVk1VkhSeit1THN4ZE85STN0YjJycEVZcDlCTU9FcnNza0hTc25sREhVRWl1ZWlEU2M2aWNGQWxjT0ZZUjJybXNpaExvcHlMekJtd1JuVkxMT0dlSEdVeUkwVU0wTk1NcmpLL08yWmErZGU3OXd5MExHbFA0NzA5UEJrYkRGV2JYcHRlQ2Mybk1qTGtqT05wRXJHQmo5RnpkQ000cnBxNjJFYmdWVzJ2T29vNElZa3hsemxvYjY0SlJxWEZ1NWVQdnZhOHVLOXZ0SEg1SmoyZlJYb0MwbU5uUzJyU1lTbXJiNjBocFRQWlc2V1ZpaDlXNCs0Y1AxNkIwUUFBMVpwUEpnTFlCWnB4QU9Mb1I0UHpqQlhBa1BDM05XSm1TdG5Cc1lQSlVrcnQ0R2paeEpmd3p1eDRVVHVJWGVnWVdlZ3N0L0xxaUczaktOZFBOazJ4T3NoR0ZkdytXTFlVRVd3VnFrQjVzSjRscVhwL0kzSlMyZitkK3ZncnZhdWJSdEtYNVJZR3ZYckJRK3JUQ3ZVZFZDY1Blb3lxc2xtMUFqUjB1VCtTSXpOWWJuRmhmbXI3Ny9lMHRyUnMyMkhmY2lyZUVSSUh1YmpKZjN6QktjTkp6SkZKWDA1Q2lvL2kwV05hdHlDMjhWcU1BSkhDODU4N1Z1d2hyZ1FKZkxpWEw0WU5sUVJyRlU5dUx5ME5Qbmgyd3QzNS9wRzhKT3RhbC9wMkRRekcwTWREU2N5SitoYlhXS0E0VjUycTZhNklKVHJDSmJHdGg4MWlCN1ZVZkFXckNGZWlvSTFHWE1OY3pHWVFGUUYwVVNrUE9LRkJzcXoxejY0UFh0eFlPeFEwa1JQMDlJTHdYbXdIbXNUeWJwdVlheFBGWk94QVg4dWk0K2JDNFhna0txRXFTcE5ybkVmWWlJRExtSlduaHlZaWhsMncwTmVTWXpTV3pOWHBzKy8zVDkyb0xtMVV5dm9xOHQzaGtidXd4YldVaEUveVhFTDBMYkt1RUtKTlE5NWlsWHp4SzVJWlRDeWNGUU1aQTJabmNTTW5MOHpkLzdVZjNWdEdlenFIWmIzcGpGREwydlgvNEVUWkllSlBLMTlST1FTUVdVOGwzRTFGWVNRRlVvOWZGRWQxU1dKTmtTVVRwb0t6TW9UZ3FrWHFvSk5VU3pMbkpHWVFlV2x4Y3NUcnkvQ01UMzhhS21rbjJ4eGpDc1E2Ym9mRWRLNmxxUUdXT1dnRjVXYm5UaXFTbVR6RFhXdUNrTEl2V0d3cTFnUFdNdHJWVnNVaWJ6RVJNdGRDamlGWXhxZXBrOFA3SGl5cVZrKzJkTGk0ZC9sa0RRWDVINTFtb25xdE1aM09jaFdwQkRSRkxKQTVXUFFvb3VxeVE0Y05RYXY1TlE1aFF4TW9zeFBpU2dJQTlCcG1aVkt3RHJsTEhKS292SmdQdm9GcWN6Q0hvTHYzSncrZi9wSHZkdjN0SGYxdTlOajlWc1l6bkZ6U1RmZUUwVEpUUjYrTWNub3dERUh0VUx3c3FoL2hGc2hHRy9CR3BXSTRHdExuR1dXVmtQVmtKUUNWSVV0VHFSeVJlQ2x4WHNYei82NHVhV3RkMkJ2N1AvV2hQQlFHdWQ2azB1WXVZQkJKbFpLUTlLS1R1bVZmTjVEVTVzSXp4aWlzbFdOS3ppVlZFUlBac0VhNVNxSUVZK1dyUXhXSkZVUzlpTFZDamlsR2llWm9zSUNYenJMVTVmZXZUMTNaV2pINGV5Zm1wQmM3WS9ZellSTTRnbjFWWnlXUUp5MUtZODltVVJSMlFwaEpFWU9GZEh6V2JCR3BZSk9LNE1sa21WV043L2FLRElUTFlXcTNBK095N3FKb2J4OFkvcWp5WXZ2OUkvc2IybXQ3NS9XVWpFWTdFN0VEcGlXU3RCVUhHTHpDMFZ6aVJoRGxhMXFuTzEyc2JDWXVRV3JwcWFJSkxnODdvdldMT3ZQSW1BdXphOXlGNGZFL0MwQm1PZHZYYi95d1d0OVEzdmJPN2NoUklvUjJ0cWNUcDdNVHBRY0M3YTI0Y3dsU3BWa2RQdFJVeEN6VlZKNEpUS2RVNGpwQ1NaUnlzYWtPc0UybDIydVQrbEVvbFRvSjlzek0waGI1SFNPTXBJeWNPQVFNb0FOdnlkMi91eC9kMjhkNmV5QnAybDZiMXFJQ01BRGVYSTdVY2c5cnQ1RXlsQXdmL2ZqR1k2dVBWMnFBakVrTUEzNTd0UlRBRVpPMG80R0tpRlR0cmtiWVJZd3pTU3JKdGptVkFBREZmeWUyTVZ6UDU2L05ibDk5R0RpbnFhcE9DZlYxcGNLY1lhTTFHY3VrWUs4SU1iQit4aWpBMzR2aTR5T3ljeWR4QzdveUZSRVQyekJHcFU4blNKWUV2VG1rVWQ5RXFRcEFUVEFyemdxbFRBTFh3NHNNQ0tjbS9wdzZ2SzcyNGVmYUducmxqVGl5MzJsazVkTE1jN2F4cE5McEpnRms4MHFvK25hMCs0OTFxbW1IZk9LS0l2bEVLV3doZ09qTFZFeS9aUVRFY3hWNllYS3lVQXZocG5uRGt4MERsb05UQTBJa3JQbWIwMWZuSGkxcDIrc3EyY1lQRVU3MGVNQndGMmc0UzZLRnlVU2d0c0IweG53M1c5MDRCbjBvSXYvbzJDUmFrYXkybUJDTUZVQm1BSlNsVjRjRXByZ0lIdHc1UG1hU0F4c3dMZTBPSDlwNGlkTlRVMjkyL2VGSHlGeVVVTHhJTFhWbzlNNnQ3Q20wWWxSajhRdWdReXNwcUpyWlZTTGJSc2xZQWlXQkFOR1R2S3VTR0xNd29zenVTZzcyQ1kvT1FqRVV3ckJyeCtVbDY1ZWVHdis5dFRnMkdIOU44d0VjRW5PVUFhdVU3eUZMZGphbkF2bjhnZytZMkNraW1vYTBxU3FZS0dTWWxsbWRmTXJLRTJHRE9MRU11N09xKzJickFOTXRNWE11aFd3eU96a3hLUGxOM2FNN3IwVmI0bnNINGJsUmhCQ0YwMkw5WVc0QlZ0YlE1QUlUM0owWXNocVBVcTdDWVR3UzBVS0FUc2swWkpUSThhRExuWHphOEFzY3BzMkRKaHp5U0VEQjNtQ0k4LzEzc0NNUXhBQmk0TTRhcXZvaDhrTEkvRXJSMmFmaTc3ZkVkKytXdHA1TDJwVElnSWdSb3lWSGhGQklxdXNHMG9wZlRmZVE5V29VU1pRaVcwN3lzTytMRmk0SkZHWjZkVUtvVXB4UVFnandqSlhCU3ZTdDhXRmlNVDJuS2I3dDhYZk9oRnRhNFBmN1NqdldENTlvUHhxRXBVdmxYYVhJLzJOWGtxdHZZVzVnbGJFVjV0SWZqZ3hucWFBeCtvTlJ3OHVTU0k2Ulc4R2JFUEVTamtxRFVmSmJ5UjJ6RnFBT0FrZzdHaHpMb2VRb1NyWVJDV0RYcGpFOUF6OTk3ZkgvL2FaZU5SOHROS2UzdDVYL3RtQjhrOHZsUGJlakh2NUFGbmxGdWFPWVFTVm44bXBSc3Z4U3dxbnBsMjlIOGlHRnkrS1Y4V1RyR29DVXJFQTVJWEk3V0ttRk1Fb3N4bzRvUExOWTByUVo1cDJ0VVQvZUx4MGFCdXpZUlYzZGFaelR5My9vQythQXEwWDh3Y0k0RnlTTTF3eWVXVHZzMU14eVVnLzdXWHlhamVnRGNVRmhDL3EwVHhwM1lZOHNRVXJCNzhHeklFdTJmdVJaYTRLNXZha0ZFMmtISFpPek5nY0dXMU4wZCsvVUhweFJNSGN0Um5oQUJrcG56dFcvdTVTM0RvZER5OUcrcnMxTnNQYXlDejV1UGY1VWcvTzZCa0RWZFpXTUtnYUlZQUoxQ09wOVlPSmpyT3l6TVdxaVNMMWdiRTdTUEQ4YkZxUHRvcElnRGVWb2o5NXR2UzVuWnlDeTZ0MEpkSFN2dktiKzlLMzV1UHU2L0ZRT1EwTzZ5Q0x5UHdXdHR4cTQ3bXNyYUJQQldVZTY5R01vQUpOSkpJRjA1eGpOb1FwVmdoZVArTWN0MjJqR0N6c25yK2F4TVRiWElxK2VyajBoY2N6cFZ6TkFxTTduWVh2aXFQcHVXdWxSMjVGVzdtRXh4R1QxeGNDbHR2WXlYRC9KeWtOZlhadG5LRWV5YWg5UDJqTE9IUWhjN0ZxVWp6YmhnZkxOcWVGU0JXdVE2TU0zcU90d2pyUUNmOWk4dytmTG4xeGYxcnlYOVhVWGEwQjROdlN5MGZLMyt1THB5ZmpzVHVSdms5TnBUd1pWMlkyYTVPSHoyVjBxNkFlcUI1SjByNHJneHVXV0JUTU1tY2tkbjM0YmtsekhUaE9KRUlvRWdQUEZ3NlV2bm9vTW4vRGdKZFo3NGlIZFhydXlmUkhMZkhDcFhqWGN0cnN0N0MwUlZUV1ptN3lnTXE0bDFWUUgxRlBKZytuR3NxQk1VUlhUZFdRaGFrNEFlZjBIeEhJUUM5S0tiaDhLT2ZSM2VBeTB0L1ltN3o4REI3S3E3eGFvbnU3MG5lZVNGK2JqM3Ntb3pGOHI0bDdaRjVyaHg1VXVhSnF1aU8wYjZRcEJsdkpWaVl4ODJXWnBRcFc0eEIxTFRhdmhrWVp2RWRiZFhjeC9lWHgwcDkvS21yVjcxNjgvTldNbmRHTkErbXIrK0tmWFkxMjNJemduM0NGV2pNMWQ2UTJuTXRIMEJZdnZxaU82cXFnR3Vlb0hNd25hd3RDUktNd25uQ1Yrc0JLckhKelYwTHF1NlVGNUNVKzJGLzZ6dkdvUzM4SHhwR3Qwb0RqWWtzNmZTVDlRWGMwOTBHOGZ6bVN2MEF0dE53alQ4aW03MzdpQlRtNWU0L1N2dEdqVVordEhya1BMRVExaVdVekVrT0ZtMWZsZm9RaEpIRWU3ZE16UTJpOEovNzI4WGk0ZzV6ck1NUlJlVFE2KzRuMGg3UHh3RXkwSFg4MDk4cXhEUEwrZFRLOFRaNHhwR05WRE5kUVFZaFFSMDJvQUNaYWYvT2tqV3Bnckl5YWFQbXF1eGlSRHNoWjZJblM3VzNSUDd4WU9wRDd3eHVJV2RPckxicHpNUHFmbmZHcG1XaG9Mb0lQY1AwQjRwNUErRWxPMXM3cjRSNjBkVnFHTEZzaThKSzlKVFZVUXlVb2l4aHFnS2tad1dBbFgwNG54bE1zTVp6QzN6N1pkSFNBa3FubXVnNmdabTkwN1hEMHcrM3g1WXZ4M3J0cGgzOENvVjd4WE01S2hwcHdmemhxbFB1MEhsV2lBcGdTaVljQXpLZzMwdklnczFRUkhUbUtmZVJDRGt3aGJZRzhBbTRDaVkrWGpsZitHUnJCNjNEQjA5NWc5T0hSNkx0Um5FeEY4S081Zng4MUdlcC9DaXVhZHF0SXJJcXJDajdSeUlFbXE4WlduV0JPeW9KRDlZT2JvWDFpT1hjLzJwdWlQenFhL01wTysydGJCTGhmUXlsYTNoMjk5VmpwallXb2ZTb2Q1Y09hbmpIV1JXSmFsbXhHYjZQK2NnL1lySFkvTWhKYm9Rb2xCc0JYRHNWZjN2L0FKSFlkd3RQZUU5RlBkcFRPVEVXak45SSsrTzVIZTVuaTJyb0tnYTl3NlJSTnR0bk5ZUnNOOWxvMU1LV0dJbWFadzJqQXJIMzZOZ0FNUDNSOC9aUEo3eDRpNThZWWVxT3JUOFhmN3kxZDh3OTYyam9JS1Jyd0ltQlVUMWFJOEFZb1ROSUx3TXFEeEdKWEFJZlJBS3g5Y25kY0pZVzNLWDd2Y1B3Nys2bHppbXlRQWQ3Yk94TDlwNmlzcldlNmxEVmd4N1Yyc2E2S0dDcUFpWWNITGxRTXpraHNtYlZQOGtrVkpQbjh2dEpYRHVMRDZjYThVR1Z0SGR2RkZiSUM5Q0tUQ3FwcEZKZEdkckZxR0RUTVdxQVlIRVlEWnUwVG5YclhrUVErSkgzNTZXaWxiN1lSeTMwYW1yUjFGY0xVVlJFNVJBR1MyNnNHUGdTUlhqeFd2eDhNUnlaS3lZRkRLc1lCa2hxUTB1aTBFc09IcEgvOWZBeVBGaHY1NHU1b0diQVlXcnVzcW9JUXRFVEN5Y0E1UE1HUjV5eUVwK0s0Qkl2QldsNWUvUlJMQ2l0S0tmY0dQY09kMGIrZWpPSEh2QTErZ2NyWUxpNUpGcUpUOUxKTlMwRGJodENwT2VqUGdTbk9HSTVMZ1FKd3lFTmtCbHhSNHE3bzMwOG1nKzFFaUVrYjk4TDNYSFdSWkxwcFZtSmNneUJycVlaUWtza3hxMUVnTVlFRno5cGFjQ1dKdDdaR2YvVmM2ZEd0bTBCaVdGc1RMa2xheFJlWlpDVzJJWlJGY3lnekM2WTRZemd1QlFyQUlVK1d1WkxFOEdqOHR5OGt6dzBSSVNadDlLdHBzMG1jd29lazN6aWFuTGp2YjFPczVrNkczLzJBcVdCajZzNnR0VEdwRDhnWEhKTEpQU3pZeGRwME1ialNMb1ovdi9jSFR5Vy92WSt5bEdManY1cnZmcWdLZGk4clFKdW41SkNCWGhqaXdTeG1mV0JDaGVxalN0YVRrZGlHdm42azlLWDkrSlBlNXJwd0w4c3l2R3JnWWpWMUxUU3pxdzN2QjNGNEhzeXFDT1k3cE1ROHMrQXFFbi81WVBMRkp4ci9ITnJWdlA4R2ZmZERWWGduVWdNaU1ieUl1aGdYZGRqandPem1hVTB3VmdsNXNKejFlSW1sSCtLazB2QWg2ZTgvR2NHaHZCa3ZPcGRsU2RRLzJqVlU0NlhyZnE4QkpoMkYyUXJLZDgxNnFrajg3SERwTHo2MTBYL0FxM0w3UzdsZFhGczFRMWNiSE40UzFaeTh4Ukx6SGVHYlFPUHVMZkhmUFIvM3lOOUZOTVUzandrbkJpK0xYM0dVeGVlRW9LOTNRZFB5YTRDSlNyNHdyS0Fzb1BWVTJjVzd0c1QvOFV1bEFmcC9xc2ExTitQb1Q0dzFPeWl5NTQvZU5sV1gxRGMzbGZDb25TVDYwR0JIL00wWGsrRk85bXhHZWFWbk9URnFTcXhMOUJJVWIza25XWkZxcXJNaGNmaWN4SEJFd0M4YVA5Rzc2U1VHSldndjArcUxWU094WktHaUNNNXlZSUtJVWhBdjJKZ3JrcmlqS2ZyVzhhYWpndytEeENBR3FGeW9HdXJFWXNsQzc2UEVMYVg0VDUrTlB6MzhrRWpNS3VjMzVvb2t4bnVoUjZxMVdTTytWUVRoMjhZM1ZlNlpTL1JnK09YWHJ4MHAvZnB1b25wWUJ2ZFRpUk9DZGNHUmw4NEs4aXgzVUJCcUpRZUZmNXpBVks3Q2RYQ0VuNXgvNjFIOEFlOGh1K2huS1ZvbUtjZ1dqbVNKRU5Va3RucmtWR01XWlFhRmhSV1Rpc0NmMzVlOGZQVEIvemFGWGRPYTJQak9wK3hRa1dRbEVvdFMxRW1SYXBhNXBzU2YzVlhDMytYZWJPOEUxWE1iOU1SWW1jUzBKZGRVNG1NanlTdlBSaHY4UTlKNkJDM0UrQ2M1L1JMMkc3UHlRUkZTRmUxaVJkQlhCZ0hFVXdUZXV6WCtweE5SOTFyL0xyZjI4T0JmNVVtdWJvblhmaGZ2MlJyLzg4blNReXd4M0dUYXk3bXZmYitMV1ZVK1R5cWNLdjd3ellGcm5zVURIZEhmUEY4YTF6OXY4K0IzM2ZwMGtIOVBEdXJRbHptTU9kWHlXOTVMVFAzWmFUV0pnVG1OMnBxamI1NW9laEorZmYxaHYzQXZrNWp3UWt2SHFhaExJUTZ5QjBlZXE5dzJxb2tFeVVoczFXZUtscWJvTzhkTFQyOFh2b2RiNTh3N244RmlRMmxxU0t5WkJNdDl1OU9vM0NYNDRPNGJ6eVF2am5qM3cyMzVjNWsyTSswc0dlaUZOMTd1NEE1dlFMVmREUElST0dEKzBzSGtOL2M5aEQ5OVZOb3I4Rk9KcUNuQ3JiUEU4QXNybjl1ZGZPMFRjY1AvV0xmU1NqYXlueit0WktIbHl6bmNweGlTc094b21OSC95Y0JCSERObk1TVnkxRFAvNnA3NHo0N0ZMWnZ6UTlLR2J5UStMOWZleGF5aHFFM0N5Y0FpY3BodDZpUzRIMTdpWDl1VHdJZWtINnRkekRkR2Y4TE9xYVpQRVhRWFVDZ3ZLSnZXVTJFWEN5bHY2cE9QbFA3NG1ZK2p4TEQ4ekh0eUpBZ09LQkRyU2tZREVrT2VVTUQ5T0x3OS9zdm5TdkNMbWgvUFMzNGIwVzVNTHpGSkhZWllPaTk2WmhjWGdzZTZTLzl5c2dSL1UreGplLzBmTmpDT2RxYXBaVWdBQUFBQVNVVk9SSzVDWUlJPSIvPgo8L2RlZnM+Cjwvc3ZnPgo=\",\n  // \"/static/img/default-media-2.pncong\",\n  // \"/static/img/default-media-3.png\",\n];\n\nexport const randomDefaultMediaImage = () => {\n  return WAX_DEFAULT_MEDIA_LIST[\n    randomNumberFromRange(0, WAX_DEFAULT_MEDIA_LIST.length)\n  ];\n};\n\nconst imageResize = (url: string, size: number | string = \"250x250\") => {\n  let urlWithSize;\n  if (!size) {\n    urlWithSize = `${url}`;\n  } else if (!isNaN(Number(size))) {\n    urlWithSize = `${url}/${size}x${size}`;\n  } else {\n    urlWithSize = `${url}/${size}`;\n  }\n\n  if (!!appConfig.service.media) {\n    return `${appConfig.service.media}/${urlWithSize}`;\n  } else {\n    return `${appConfig.service.ipfs}/${url}`;\n  }\n};\n\nexport const getURL = ({ source, local, size }: GetURLProps) => {\n  if (!source || source.trim().length === 0) return randomDefaultMediaImage();\n  if (local) return source;\n  // const url = source.replace(/\\s/g, \"\");\n  const url = source;\n  const isIPFS = url.includes(\"/ipfs/\");\n\n  if (isIPFS && url.match(\"^(https?://).*$\")) {\n    const arrUrls = url.split(\"/ipfs/\");\n    const hash = arrUrls[arrUrls.length - 1];\n\n    if (!hash) {\n      return randomDefaultMediaImage();\n    }\n    // const newHash = hash.replace(/\\s/g, \"\");\n    const newHash = hash;\n\n    return imageResize(newHash, size);\n  }\n\n  if (!isIPFS && url.match(\"^(https?://).*$\")) return url;\n\n  return imageResize(url, size);\n};\n\nfunction stringHashToNum(str) {\n\tlet result = BigInt(0);\n\tfor (let i = 0; i < 8; i++) {\n\t\tconst bytes = str.slice(i * 2, i * 2 + 2);\n\t\tconst a = parseInt(bytes, 16) & 127;\n\t\tresult = (result << BigInt(8)) + BigInt(a);\n\t}\n\treturn result.toString();\n}\n\nexport const hashIdFromAssetId = (vals) => {\n\tlet buffer = \"\";\n\tfor (const val of vals) {\n\t\tbuffer += val;\n\t}\n\tconst hash = createHash(\"sha256\").update(buffer).digest(\"hex\");\n\n\treturn stringHashToNum(hash);\n};","import { appConfig } from \"../config/AppConfig\";\nimport { Action } from \"../types/Transaction\";\nimport { useContext } from \"react\";\nimport { WaxAuthenContext } from \"./useWaxAuthen\";\nimport { waxJs } from \"../services/waxJS\";\nimport { jsonRpc } from \"../services/apisSetup\";\nimport { AutomicConfig } from \"../types/AutomicConfig\";\nimport { isDelegateForAutoRetrive } from \"../services/RpcService\";\nimport { DSL_PERMISSION } from \"../constant/constants\";\nimport { hashIdFromAssetId } from \"../helpers/HashHelper\";\n\nconst { defaultTxOptions } = appConfig.chain;\n\nexport default function useUal() {\n  const { authen } = useContext(WaxAuthenContext);\n  const { userAccount } = authen;\n  const isEnabledDualSignature = appConfig.common.isEnableDualSignature;\n  const isDisabledDualSales = appConfig.common.isDisableDualSale;\n\n  async function sendActionsForDualSignature(actions: Action[]) {\n    return sendActions(actions);\n  }\n\n  function createAction<T = Record<string, unknown>>(\n    contract: string,\n    name: string,\n    data: T,\n    dualSignature?: boolean\n  ) {\n    return {\n      account: contract,\n      name,\n      authorization:\n        dualSignature && isEnabledDualSignature\n          ? [\n              { actor: userAccount, permission: \"active\" },\n              { actor: \"approve.virl\", permission: \"approve\" },\n            ]\n          : [{ actor: userAccount, permission: \"active\" }],\n      data,\n    } as Action;\n  }\n\n  async function sendActions(actions: Action[]) {\n    try {\n      console.log({ actions });\n      return await waxJs.api.transact({ actions }, defaultTxOptions);\n    } catch (error) {\n      console.log({ error });\n      throw new Error(error);\n    }\n  }\n\n  const getMemo = (\n    median: number,\n    price_symbol: string,\n    settlement_symbol: string\n  ): string => {\n    let memo = \"\";\n    if (\n      settlement_symbol &&\n      !settlement_symbol.includes(price_symbol) &&\n      median\n    ) {\n      memo = `-${median}`;\n    }\n\n    return memo;\n  };\n\n  async function borrowDsll(\n    dsll_id: string,\n    duration: number,\n    intended_delphi_median: number\n  ) {\n    return sendActions([\n      createAction(\"market.virl\", \"borrowdsll\", {\n        dsll_id,\n        lendee: userAccount,\n        duration,\n        intended_delphi_median,\n      }),\n    ]);\n  }\n\n  async function cancelDsll(dsll_id: string, reason: string) {\n    return sendActions([\n      createAction(\"market.virl\", \"canceldsll\", {\n        dsll_id,\n        reason,\n      }),\n    ]);\n  }\n\n  async function cancelAuction(auctionId: string, contract: string) {\n    return sendActions([\n      createAction(contract, \"cancelauct\", {\n        auction_id: auctionId,\n      }),\n    ]);\n  }\n\n  async function claimAuction(auctionId: string, contract: string) {\n    return sendActions([\n      createAction(contract, \"auctclaimbuy\", {\n        auction_id: auctionId,\n      }),\n    ]);\n  }\n\n  async function claimAuctionSell(auctionId: string, contract: string) {\n    return sendActions([\n      createAction(contract, \"auctclaimsel\", {\n        auction_id: auctionId,\n      }),\n    ]);\n  }\n\n  async function auctionBid(bid: number, auctionId: string, contract: string) {\n    const actions: Action[] = [];\n    const totalBid = `${bid.toFixed(8)} WAX`;\n    if (contract === \"atomicmarket\") {\n      actions.push(\n        createAction(\"eosio.token\", \"transfer\", {\n          from: userAccount,\n          to: \"atomicmarket\",\n          quantity: totalBid,\n          memo: \"deposit\",\n        })\n      );\n      actions.push(\n        createAction(\"atomicmarket\", \"auctionbid\", {\n          bidder: userAccount,\n          auction_id: auctionId,\n          bid: totalBid,\n          taker_marketplace: \"market.wax\",\n        })\n      );\n    }\n\n    if (contract === \"market.virl\") {\n      actions.push(\n        createAction(\"eosio.token\", \"transfer\", {\n          from: userAccount,\n          to: \"market.virl\",\n          quantity: totalBid,\n          memo: `market.virl-bidauction-${auctionId}-`,\n        })\n      );\n    }\n    console.log({ contract, actions });\n    return sendActions(actions);\n  }\n\n  /**\n   *\n   * @param price Ex: `12.34000000 WAX`\n   * @param saleId\n   * @returns\n   */\n  async function buy(\n    price: any,\n    saleId: any,\n    assetIds: any[],\n    settlement_symbol: string\n  ) {\n    console.log(\"buy\", { price, saleId, assetIds, settlement_symbol });\n\n    const actions: Action[] = [];\n    actions.push(\n      createAction(\n        \"atomicmarket\",\n        \"assertsale\",\n        {\n          asset_ids_to_assert: assetIds,\n          listing_price_to_assert: price,\n          sale_id: saleId,\n          settlement_symbol_to_assert: settlement_symbol,\n        },\n        true\n      ),\n      createAction(\n        \"eosio.token\",\n        \"transfer\",\n        {\n          from: userAccount,\n          memo: \"deposit\",\n          quantity: price,\n          to: \"atomicmarket\",\n        },\n        true\n      ),\n      createAction(\n        \"atomicmarket\",\n        \"purchasesale\",\n        {\n          buyer: userAccount,\n          sale_id: saleId,\n          intended_delphi_median: 0,\n          taker_marketplace: \"\",\n        },\n        true\n      )\n    );\n\n    return sendActionsForDualSignature(actions);\n  }\n\n  async function cancelSale(offerId, saleId, market, isDeferred = false) {\n    console.log({ offerId, saleId, market, isDeferred });\n    if (isDeferred === true) {\n      return sendActionsForDualSignature([\n        createAction(\"market.virl\", \"cancelsale\", { sale_id: saleId }, true),\n      ]);\n    }\n    return sendActionsForDualSignature([\n      createAction(\"atomicassets\", \"canceloffer\", { offer_id: offerId }),\n      createAction(market, \"cancelsale\", { sale_id: saleId }, true),\n    ]);\n  }\n\n  async function cancelMultipleSales(\n    salesObj: { saleId: string; offerId: string; market: string }[]\n  ) {\n    const arrActions = [];\n    console.log(salesObj);\n\n    salesObj.forEach((v) => {\n      arrActions.push(\n        createAction(\"atomicassets\", \"canceloffer\", { offer_id: v.offerId })\n      );\n      arrActions.push(\n        createAction(v.market, \"cancelsale\", { sale_id: v.saleId }, true)\n      );\n    });\n\n    return sendActionsForDualSignature(arrActions);\n  }\n\n  async function getAtomicConfig(): Promise<AutomicConfig> {\n    try {\n      const {\n        rows: [datapoint],\n      } = await jsonRpc.get_table_rows({\n        code: \"atomicmarket\",\n        table: \"config\",\n        scope: \"atomicmarket\",\n      });\n\n      return datapoint;\n    } catch (error) {\n      return {} as AutomicConfig;\n    }\n  }\n\n  async function sell(\n    listing_price,\n    seller,\n    asset_ids\n    // price_symbol: string,\n    // settlement_symbol: string,\n    // median,\n    // deposit_fee?,\n  ) {\n    // const memo = getMemo(median, price_symbol, settlement_symbol);\n    const sortedAssetIds = asset_ids.sort();\n    if (isDisabledDualSales) {\n      return sendActionsForDualSignature([\n        createAction(\n          \"market.virl\",\n          \"newsale\",\n          {\n            seller,\n            asset_contract: \"atomicassets\",\n            asset_ids: sortedAssetIds,\n            listing_price,\n            settlement_symbol: \"8,WAX\",\n            maker_marketplace: \"market.wax\",\n            is_deferred_listing: false,\n          },\n          true\n        ),\n        createAction(\"atomicassets\", \"createoffer\", {\n          sender: seller,\n          recipient: \"market.virl\",\n          sender_asset_ids: sortedAssetIds,\n          recipient_asset_ids: [],\n          memo: \"sale\",\n        }),\n      ]);\n    }\n\n    const actions = [\n      createAction(\n        \"market.virl\",\n        \"newsale\",\n        {\n          seller,\n          asset_contract: \"atomicassets\",\n          asset_ids: sortedAssetIds,\n          listing_price,\n          settlement_symbol: \"8,WAX\",\n          maker_marketplace: \"market.wax\",\n          is_deferred_listing: false,\n        },\n        true\n      ),\n      createAction(\"atomicmarket\", \"announcesale\", {\n        seller: seller,\n        asset_ids: sortedAssetIds,\n        listing_price,\n        settlement_symbol: \"8,WAX\",\n        maker_marketplace: \"market.wax\",\n      }),\n      createAction(\"atomicassets\", \"createoffer\", {\n        sender: seller,\n        recipient: \"market.virl\",\n        sender_asset_ids: sortedAssetIds,\n        recipient_asset_ids: [],\n        memo: \"sale\",\n      }),\n      createAction(\"atomicassets\", \"createoffer\", {\n        sender: seller,\n        recipient: \"atomicmarket\",\n        sender_asset_ids: sortedAssetIds,\n        recipient_asset_ids: [],\n        memo: \"sale\",\n      }),\n    ];\n    console.log(\"Offers sell: \", actions);\n\n    return sendActionsForDualSignature([\n      createAction(\n        \"market.virl\",\n        \"newsale\",\n        {\n          seller,\n          asset_contract: \"atomicassets\",\n          asset_ids: sortedAssetIds,\n          listing_price,\n          settlement_symbol: \"8,WAX\",\n          maker_marketplace: \"market.wax\",\n          is_deferred_listing: false,\n        },\n        true\n      ),\n      createAction(\"atomicmarket\", \"announcesale\", {\n        seller: seller,\n        asset_ids: sortedAssetIds,\n        listing_price,\n        settlement_symbol: \"8,WAX\",\n        maker_marketplace: \"market.wax\",\n      }),\n      createAction(\"atomicassets\", \"createoffer\", {\n        sender: seller,\n        recipient: \"market.virl\",\n        sender_asset_ids: sortedAssetIds,\n        recipient_asset_ids: [],\n        memo: \"sale\",\n      }),\n      createAction(\"atomicassets\", \"createoffer\", {\n        sender: seller,\n        recipient: \"atomicmarket\",\n        sender_asset_ids: sortedAssetIds,\n        recipient_asset_ids: [],\n        memo: \"sale\",\n      }),\n    ]);\n  }\n\n  const checkTransaction = async (_tx: any) => {\n    await new Promise((resolve) => {\n      setTimeout(() => {\n        resolve(true);\n      }, 1000);\n    });\n  };\n\n  async function createAuction(\n    accountName,\n    assetId,\n    startingBid,\n    duration,\n    buy_now_price?\n  ) {\n    console.log(\"createAuction\", {\n      accountName,\n      assetId,\n      startingBid,\n      duration,\n      buy_now_price,\n    });\n\n    const totalStartingBid = `${startingBid.toFixed(8)} WAX`;\n    const totalBuyOut = `${buy_now_price.toFixed(8)} WAX`;\n    const actions: Action[] = [];\n\n    actions.push(\n      createAction(\"atomicassets\", \"createoffer\", {\n        sender: accountName,\n        recipient: \"market.virl\",\n        sender_asset_ids: [assetId],\n        recipient_asset_ids: [],\n        memo: \"auction\",\n      })\n    );\n    actions.push(\n      createAction(\"market.virl\", \"newauct\", {\n        seller: accountName,\n        asset_contract: \"atomicassets\",\n        asset_ids: [assetId],\n        starting_bid: totalStartingBid,\n        buyout_price: totalBuyOut,\n        duration,\n        bid_increase: 0.1,\n      })\n    );\n\n    return sendActions(actions);\n  }\n\n  async function acceptBcbrawlersTerm(account: string) {\n    const actions = [];\n\n    actions.push(\n      createAction(\"bcbrawlers\", \"tosaccept\", {\n        account,\n      })\n    );\n\n    return sendActionsForDualSignature(actions);\n  }\n\n  async function deferSupportAutoRetrive(\n    seller: string,\n    asset_ids: string[],\n    listing_price: string\n  ) {\n    const sortedAssetIds = asset_ids.sort();\n    const actions = [];\n\n    //delegate for auto retrive\n    if (!(await isDelegateForAutoRetrive(seller))) {\n      actions.push(\n        createAction(\"market.virl\", \"assertnodsl\", {\n          seller,\n        }),\n        createAction(\"eosio\", \"updateauth\", {\n          account: seller,\n          permission: DSL_PERMISSION,\n          parent: \"active\",\n          auth: {\n            threshold: 1,\n            keys: [],\n            accounts: [\n              {\n                permission: {\n                  actor: \"market.virl\",\n                  permission: \"eosio.code\",\n                },\n                weight: 1,\n              },\n            ],\n            waits: [],\n          },\n        }),\n        createAction(\"eosio\", \"linkauth\", {\n          account: seller,\n          code: \"bcbrawlers\",\n          type: \"wdrawbrawler\",\n          requirement: DSL_PERMISSION,\n        }),\n        createAction(\"eosio\", \"linkauth\", {\n          account: seller,\n          code: \"atomicassets\",\n          type: \"transfer\",\n          requirement: DSL_PERMISSION,\n        })\n      );\n    }\n\n    actions.push(\n      // TODO: Change the market\n      createAction(\n        \"market.virl\",\n        \"newsale\",\n        {\n          seller,\n          asset_contract: \"atomicassets\",\n          asset_ids: sortedAssetIds,\n          listing_price,\n          settlement_symbol: \"8,WAX\",\n          maker_marketplace: \"market.wax\",\n          is_deferred_listing: true,\n        },\n        true\n      )\n    );\n    return sendActionsForDualSignature(actions);\n  }\n\n  const defer = (\n    seller: string,\n    asset_ids: string[],\n    listing_price: string,\n    median: number,\n    deposit_fee: string\n  ) => {\n    const sortedAssetIds = asset_ids.sort();\n    return sendActionsForDualSignature([\n      // TODO: Change the market\n      createAction(\n        \"market.virl\",\n        \"newsale\",\n        {\n          seller,\n          asset_contract: \"atomicassets\",\n          asset_ids: sortedAssetIds,\n          listing_price,\n          settlement_symbol: \"8,WAX\",\n          maker_marketplace: \"market.wax\",\n          is_deferred_listing: true,\n        },\n        true\n      ),\n      createAction(\n        \"eosio.token\",\n        \"transfer\",\n        {\n          from: seller,\n          to: \"market.virl\",\n          quantity: deposit_fee,\n          memo: `market.virl-listingfee-${hashIdFromAssetId(\n            asset_ids\n          )}-${median}`,\n        },\n        true\n      ),\n    ]);\n  };\n\n  async function claimDefer(saleId: number) {\n    return sendActionsForDualSignature([\n      createAction(\n        \"market.virl\",\n        \"claimsalefee\",\n        {\n          sale_id: saleId,\n        },\n        true\n      ),\n    ]);\n  }\n\n  async function transferDeferred(\n    from: string,\n    assetId: string,\n    saleId: string\n  ) {\n    const actions: Action[] = [];\n    actions.push(\n      createAction(\n        \"atomicassets\",\n        \"transfer\",\n        {\n          from,\n          to: \"market.virl\",\n          asset_ids: [assetId],\n          memo: `deferredsale-${saleId}`,\n        },\n        true\n      )\n    );\n    return sendActionsForDualSignature(actions);\n  }\n\n  async function auctionBuyOut(\n    accountName: string,\n    auctionId: string,\n    buyOutPrice: number\n  ) {\n    const price = `${buyOutPrice.toFixed(8)} WAX`;\n\n    const actions: Action[] = [];\n    actions.push(\n      createAction(\"eosio.token\", \"transfer\", {\n        from: accountName,\n        to: \"market.virl\",\n        quantity: price,\n        memo: `market.virl-bidauction-${auctionId}-`,\n      })\n    );\n    return sendActions(actions);\n  }\n\n  const burnItems = (...props: any): Promise<any> => {\n    return Promise.resolve();\n  };\n\n  async function makeOffer({\n    buyer,\n    marketContract,\n    recipient,\n    price,\n    asset_ids,\n    expired_time_sec,\n  }: {\n    buyer: string;\n    marketContract: string;\n    recipient: string;\n    price: string;\n    asset_ids: string[];\n    expired_time_sec: number;\n  }) {\n    const actions = [\n      createAction(\"market.virl\", \"newbuyo\", {\n        buyer,\n        recipient,\n        price,\n        asset_contract: marketContract,\n        asset_ids: asset_ids.sort((id1, id2) => Number(id1) - Number(id2)),\n        expired_time_sec,\n        memo: \"I want this item\",\n      }),\n      createAction(\"eosio.token\", \"transfer\", {\n        from: buyer,\n        to: \"market.virl\",\n        quantity: price,\n        memo: `market.virl-buyofferprice`,\n      }),\n    ];\n    console.log(\"Offers: \", actions);\n\n    return sendActions(actions);\n  }\n\n  async function cancelOffer({ buyoffer_id }: { buyoffer_id: string }) {\n    const actions = [\n      createAction(\"market.virl\", \"cancelbuyo\", {\n        buyoffer_id,\n      }),\n    ];\n    console.log(\"Cancel offer: \", actions);\n    return sendActions(actions);\n  }\n\n  async function acceptOffer({\n    sender,\n    buyoffer_id,\n    asset_ids,\n  }: {\n    sender: string;\n    buyoffer_id: string;\n    asset_ids: string[];\n  }) {\n    const actions = [\n      createAction(\"atomicassets\", \"createoffer\", {\n        sender,\n        recipient: \"market.virl\",\n        sender_asset_ids: asset_ids.sort(\n          (id1, id2) => Number(id1) - Number(id2)\n        ),\n        recipient_asset_ids: [],\n        memo: \"buyoffer\",\n      }),\n      createAction(\"market.virl\", \"acceptbuyo\", {\n        buyoffer_id,\n      }),\n    ];\n    console.log(\"Approve offer: \", actions);\n    return sendActions(actions);\n  }\n\n  async function declineOffer({ buyoffer_id }: { buyoffer_id: string }) {\n    const actions = [\n      createAction(\"market.virl\", \"declinebuyo\", {\n        buyoffer_id,\n      }),\n    ];\n    console.log(\"Declince offer: \", actions);\n    return sendActions(actions);\n  }\n\n  return {\n    userAccount,\n    sell,\n    buy,\n    createAuction,\n    acceptBcbrawlersTerm,\n    deferSupportAutoRetrive,\n    defer,\n    burnItems,\n    claimDefer,\n    transferDeferred,\n    checkTransaction,\n    auctionBid,\n    cancelAuction,\n    cancelSale,\n    cancelMultipleSales,\n    claimAuction,\n    claimAuctionSell,\n    borrowDsll,\n    cancelDsll,\n    getAtomicConfig,\n    auctionBuyOut,\n    makeOffer,\n    cancelOffer,\n    acceptOffer,\n    declineOffer,\n  };\n}\n","import BigNumber from \"bignumber.js\";\nimport {\n  AUTO_RETRIVE_COLLECTION,\n  AUTO_RETRIVE_SCHEMA,\n  CONVERT_WAXP_USD_PARAMS,\n} from \"../constant/constants\";\n\nexport const convertToSeconds = (days, hours) => {\n  if (!days) days = 0;\n  if (!hours) hours = 0;\n\n  return days * 86400 + hours * 3600;\n};\n\nexport const formatWaxp = (price: number) => {\n  return `${new BigNumber(Math.floor(price)).shiftedBy(-8).toFixed(8)}`;\n};\n\nexport const formatUsd = (price: number) => {\n  return `${new BigNumber(price).shiftedBy(-2).toFixed(2)}`;\n};\n\nconst toUsdPrecision =\n  CONVERT_WAXP_USD_PARAMS.TO_SYMBOL_PRECISION -\n  CONVERT_WAXP_USD_PARAMS.QUOTE_PRECISION -\n  CONVERT_WAXP_USD_PARAMS.FROM_QUANTITY_SYMBOL_PRECISION;\n\nexport const convertToUsd = (price: number, median: number) => {\n  const bigPrice = new BigNumber(price);\n  const bigMedian = new BigNumber(median);\n  const TEN = new BigNumber(10);\n  const bigPrecision = new BigNumber(TEN.exponentiatedBy(toUsdPrecision));\n  const convertedPrice = bigPrice\n    .multipliedBy(bigMedian)\n    .multipliedBy(bigPrecision);\n  return formatUsd(Number(convertedPrice));\n};\n\nexport const convertToWaxp = (price: number, median) => {\n  const precision =\n    CONVERT_WAXP_USD_PARAMS.QUOTE_PRECISION +\n    CONVERT_WAXP_USD_PARAMS.FROM_QUANTITY_SYMBOL_PRECISION -\n    CONVERT_WAXP_USD_PARAMS.TO_SYMBOL_PRECISION;\n\n  const bigPrice = new BigNumber(price);\n  const bigMedian = new BigNumber(median);\n  const TEN = new BigNumber(10);\n  const bigPrecision = new BigNumber(TEN.exponentiatedBy(precision));\n  const convertedPrice = bigPrice\n    .dividedBy(bigMedian)\n    .multipliedBy(bigPrecision);\n\n  return formatWaxp(Number(convertedPrice));\n};\n\nexport const isSupportAutoRetrive = (\n  collection: string,\n  schema: string\n): boolean => {\n  if (\n    AUTO_RETRIVE_COLLECTION.includes(collection) &&\n    AUTO_RETRIVE_SCHEMA.includes(schema)\n  ) {\n    return true;\n  } else {\n    return false;\n  }\n};\n\nexport const checkEndTime = (endTime) => {\n  return new Date(parseInt(endTime)) < new Date();\n};\n","import React from \"react\";\n\ninterface Props {\n  children: any;\n}\nexport default function HighlightContainer({ children }: Props) {\n  return (\n    <div\n      style={{\n        border: \"1px solid #CBC6FB\",\n        borderRadius: 16,\n        background: \"rgba(229, 226, 253, 0.16)\",\n        paddingTop: 24,\n        paddingBottom: 24,\n        paddingLeft: 24,\n        paddingRight: 24,\n      }}\n    >\n      {children}\n    </div>\n  );\n}\n","import { Checkbox, Col, Row } from \"antd\";\nimport \"./index.css\";\nexport interface AcceptPolicyProps {\n  isAcceptPolicy: boolean;\n  onAcceptPolicy?: (isAcceptPolicy: boolean) => void;\n  actions: JSX.Element;\n}\nexport default function FooterAcceptPolicy({\n  isAcceptPolicy = true,\n  onAcceptPolicy,\n  actions,\n}: AcceptPolicyProps) {\n  console.log({ isAcceptPolicy });\n  return (\n    <Row\n      gutter={[0, 24]}\n      className=\"footer-with-policy\"\n      justify={\"space-between\"}\n    >\n      <Col xs={24}>\n        <Row gutter={[12, 0]} align={\"top\"}>\n          <Col>\n            <Checkbox\n              checked={isAcceptPolicy}\n              onChange={(e) => onAcceptPolicy?.(e.target.checked)}\n            />\n          </Col>\n          <Col xs={20} lg={22}>\n            <p style={{ textAlign: \"left\" }} className=\"font-md fw2\">\n              I acknowledge that I have read an accept the{\" \"}\n              <a className=\"color-primary\" href=\"https://virl.com/terms\">\n                Term of Service\n              </a>{\" \"}\n              and{\" \"}\n              <a className=\"color-primary\" href=\"https://virl.com/privacy\">\n                Privacy Policy\n              </a>\n            </p>\n          </Col>\n        </Row>\n      </Col>\n      <Col xs={24}>{actions}</Col>\n    </Row>\n  );\n}\n","import styled from \"styled-components\";\n\nexport const AudioWrapper = styled.div`\n\tdisplay: flex;\n\tflex-direction: column-reverse;\n\tjustify-content: space-between;\n\talign-items: center;\n\twidth: 100%;\n\theight: 100%;\n\tobject-fit: contain;\n\tflex-direction: column;\n\n\t.image-audio {\n\t\ttext-align: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\n\t\t& img {\n\t\t\tborder-radius: 0px !important;\n\t\t\twidth: 48px !important;\n\t\t}\n\t}\n\t.rhap_main-controls-button {\n\t\twidth: 35px;\n\t\theight: 20px;\n\t}\n\t.rhap_container {\n\t\tbackground-color: #c4c4c4;\n\t\tborder-radius: 15px;\n\t\twidth: 100%;\n\t}\n\t.rhap_play-pause-button {\n\t\tfont-size: 35px;\n\t}\n\t.rhap_time {\n\t\tfont-size: 11px;\n\t\tfont-weight: 650;\n\t\theight: 11px;\n\t\tcolor: white;\n\t}\n\t//progress\n\t.rhap_progress-bar {\n\t\theight: 5px;\n\t\tmargin: auto;\n\t}\n\t.rhap_progress-container {\n\t\theight: 20px;\n\t\tpadding-left: 5px;\n\t}\n\t.rhap_progress-indicator {\n\t\tbackground-color: whitesmoke;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\ttop: -6px;\n\t}\n\t//control\n\t.rhap_controls-section {\n\t\tmargin-top: 0;\n\t\tjustify-content: center;\n\t}\n\t.rhap_main-controls-button {\n\t\tfont-size: 20px;\n\t}\n\t//volume\n\t.rhap_volume-bar-area {\n\t\tdisplay: none;\n\t}\n\t.rhap_volume-button {\n\t\tmargin: 0 0 0 3px;\n\t}\n\t.rhap_volume-container {\n\t\tflex: 0;\n\t}\n`;\n","import React from \"react\";\nimport { useRef, useState } from \"react\";\n\ninterface Props {\n  delay?: number;\n  onPlay?: () => void;\n  onPause?: () => void;\n}\nexport default function UseHoverToPlay(props: Props) {\n  const [state, setState] = useState<State>({ isPlay: false });\n\n  const { delay = 1000, onPause, onPlay } = props;\n  const hoverToPlayTimer = useRef({ isMouseOver: false, timer: null }).current;\n\n  const onMouseOver = () => {\n    if (hoverToPlayTimer.isMouseOver === false) {\n      hoverToPlayTimer.isMouseOver = true;\n      hoverToPlayTimer.timer = setTimeout(() => {\n        onPlay?.();\n        setState({ isPlay: true });\n      }, delay);\n    }\n  };\n\n  const onMouseLeave = () => {\n    clearTimeout(hoverToPlayTimer.timer);\n    hoverToPlayTimer.isMouseOver = false;\n    setState({ isPlay: false });\n    onPause?.();\n  };\n\n  return { ...state, onMouseOver, onMouseLeave };\n}\n\ninterface State {\n  isPlay: boolean;\n}\n\nexport const HoverToPlayContext = React.createContext<ReturnType<typeof UseHoverToPlay>>({} as any);\n","import React from \"react\";\n\nexport default function Audio() {\n  return (\n    <svg\n      width=\"41\"\n      height=\"37\"\n      viewBox=\"0 0 41 37\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <mask id=\"path-1-inside-1_3035_9766\" fill=\"white\">\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M10.225 3.82759V2C10.225 0.895431 11.1204 0 12.225 0H38.2074C39.312 0 40.2074 0.895431 40.2074 2V3.82759H40.2078V28.7066H40.207V28.7071C40.207 33.2872 36.4941 37.0001 31.914 37.0001C27.3339 37.0001 23.621 33.2872 23.621 28.7071C23.621 24.127 27.3339 20.4141 31.914 20.4141C32.3482 20.4141 32.7745 20.4475 33.1906 20.5118V7.01716L17.2421 7.01716V28.6599L17.2423 28.7071C17.2423 33.2872 13.5294 37.0001 8.94926 37.0001C4.36916 37.0001 0.65625 33.2872 0.65625 28.7071C0.65625 24.127 4.36916 20.4141 8.94926 20.4141C9.38309 20.4141 9.80913 20.4474 10.225 20.5116V5.01716V3.82759Z\"\n        />\n      </mask>\n      <path\n        d=\"M40.2074 3.82759H37.7074V6.32759H40.2074V3.82759ZM40.2078 3.82759H42.7078V1.32759H40.2078V3.82759ZM40.2078 28.7066V31.2066H42.7078V28.7066H40.2078ZM40.207 28.7066V26.2066H37.707V28.7066H40.207ZM33.1906 20.5118L32.8089 22.9824L35.6906 23.4277V20.5118H33.1906ZM33.1906 7.01716H35.6906V4.51716H33.1906V7.01716ZM17.2421 7.01716V4.51716H14.7421V7.01716H17.2421ZM17.2421 28.6599H14.7421L14.7422 28.6669L17.2421 28.6599ZM17.2423 28.7071H19.7423L19.7423 28.7001L17.2423 28.7071ZM10.225 20.5116L9.84351 22.9823L12.725 23.4272V20.5116H10.225ZM12.725 3.82759V2H7.72498V3.82759H12.725ZM12.725 2C12.725 2.27614 12.5011 2.5 12.225 2.5V-2.5C9.7397 -2.5 7.72498 -0.48528 7.72498 2H12.725ZM12.225 2.5H38.2074V-2.5H12.225V2.5ZM38.2074 2.5C37.9313 2.5 37.7074 2.27614 37.7074 2H42.7074C42.7074 -0.485279 40.6927 -2.5 38.2074 -2.5V2.5ZM37.7074 2V3.82759H42.7074V2H37.7074ZM40.2078 1.32759H40.2074V6.32759H40.2078V1.32759ZM42.7078 28.7066V3.82759H37.7078V28.7066H42.7078ZM40.207 31.2066H40.2078V26.2066H40.207V31.2066ZM42.707 28.7071V28.7066H37.707V28.7071H42.707ZM31.914 39.5001C37.8748 39.5001 42.707 34.6679 42.707 28.7071H37.707C37.707 31.9065 35.1134 34.5001 31.914 34.5001V39.5001ZM21.121 28.7071C21.121 34.6679 25.9532 39.5001 31.914 39.5001V34.5001C28.7146 34.5001 26.121 31.9065 26.121 28.7071H21.121ZM31.914 17.9141C25.9532 17.9141 21.121 22.7463 21.121 28.7071H26.121C26.121 25.5077 28.7146 22.9141 31.914 22.9141V17.9141ZM33.5724 18.0411C33.0304 17.9573 32.4764 17.9141 31.914 17.9141V22.9141C32.2199 22.9141 32.5186 22.9376 32.8089 22.9824L33.5724 18.0411ZM30.6906 7.01716V20.5118H35.6906V7.01716H30.6906ZM33.1906 4.51716L17.2421 4.51716V9.51716H33.1906V4.51716ZM14.7421 7.01716V28.6599H19.7421V7.01716H14.7421ZM14.7422 28.6669L14.7423 28.7141L19.7423 28.7001L19.7421 28.6529L14.7422 28.6669ZM14.7423 28.7071C14.7423 31.9065 12.1487 34.5001 8.94926 34.5001V39.5001C14.9101 39.5001 19.7423 34.6679 19.7423 28.7071H14.7423ZM8.94926 34.5001C5.74987 34.5001 3.15625 31.9065 3.15625 28.7071H-1.84375C-1.84375 34.6679 2.98845 39.5001 8.94926 39.5001V34.5001ZM3.15625 28.7071C3.15625 25.5077 5.74987 22.9141 8.94926 22.9141V17.9141C2.98845 17.9141 -1.84375 22.7463 -1.84375 28.7071H3.15625ZM8.94926 22.9141C9.25493 22.9141 9.55345 22.9376 9.84351 22.9823L10.6064 18.0409C10.0648 17.9573 9.51124 17.9141 8.94926 17.9141V22.9141ZM12.725 20.5116V5.01716H7.72498V20.5116H12.725ZM12.725 5.01716V3.82759H7.72498V5.01716H12.725Z\"\n        fill=\"#7D70F6\"\n        mask=\"url(#path-1-inside-1_3035_9766)\"\n      />\n    </svg>\n  );\n}\n","import React from \"react\";\n\nexport default function WhitelistAndVerify() {\n  return (\n    <svg\n      width=\"16\"\n      height=\"10\"\n      viewBox=\"0 0 16 10\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M4.66634 4.99967L7.96617 8.29951L15.0378 1.22852M1.36621 5.0332L4.66604 8.33303M11.737 1.26204L8.2015 4.79758\"\n        stroke=\"#7D70F6\"\n        stroke-width=\"1.5\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  );\n}\n","import React from \"react\";\n\nexport default function WhitelistOrVerify() {\n  return (\n    <svg\n      width=\"12\"\n      height=\"12\"\n      viewBox=\"0 0 60 60\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <circle cx=\"30\" cy=\"30\" r=\"30\" fill=\"#7D70F6\" />\n      <path\n        d=\"M17.1428 27.1802L26.1568 37.8038L41.9313 19.2125\"\n        stroke=\"white\"\n        stroke-width=\"4\"\n      />\n    </svg>\n  );\n}\n","import React from \"react\";\n\nexport default function Check() {\n  return (\n    <svg\n      width=\"15\"\n      height=\"11\"\n      viewBox=\"0 0 15 11\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path d=\"M1 5.5L5 9.5L13.5 1\" stroke=\"white\" stroke-width=\"2\" />\n    </svg>\n  );\n}\n","import React from \"react\";\n\nexport default function ThreeDot() {\n  return (\n    <svg\n      width=\"20\"\n      height=\"20\"\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M14.166 10.0003C14.166 10.4606 14.5391 10.8337 14.9993 10.8337C15.4596 10.8337 15.8327 10.4606 15.8327 10.0003C15.8327 9.54009 15.4596 9.16699 14.9993 9.16699C14.5391 9.16699 14.166 9.54009 14.166 10.0003Z\"\n        stroke=\"#2C2C2C\"\n        stroke-width=\"1.5\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M9.16602 10.0003C9.16602 10.4606 9.53911 10.8337 9.99935 10.8337C10.4596 10.8337 10.8327 10.4606 10.8327 10.0003C10.8327 9.54009 10.4596 9.16699 9.99935 9.16699C9.53911 9.16699 9.16602 9.54009 9.16602 10.0003Z\"\n        stroke=\"#2C2C2C\"\n        stroke-width=\"1.5\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n      <path\n        d=\"M4.16602 10.0003C4.16602 10.4606 4.53911 10.8337 4.99935 10.8337C5.45959 10.8337 5.83268 10.4606 5.83268 10.0003C5.83268 9.54009 5.45959 9.16699 4.99935 9.16699C4.53911 9.16699 4.16602 9.54009 4.16602 10.0003Z\"\n        stroke=\"#2C2C2C\"\n        stroke-width=\"1.5\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  );\n}\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React, { useContext } from \"react\";\nimport { BsVolumeUpFill, BsVolumeMute } from \"react-icons/bs\";\nimport { FaPlay, FaAngleDoubleRight, FaAngleDoubleLeft } from \"react-icons/fa\";\nimport { IoMdPause } from \"react-icons/io\";\nimport AudioPlayer, { RHAP_UI } from \"react-h5-audio-player\";\nimport { AudioWrapper } from \"./styled\";\nimport { Tooltip } from \"antd\";\nimport { HoverToPlayContext } from \"../../../HoveToPlay/useHoverToPlay\";\nimport { AudioIcon } from \"../../../../icon\";\n\ninterface Props {\n  previewImage?: string;\n  audio: string;\n}\n\nexport default function HoverToPlayAudio({ previewImage, audio }: Props) {\n  const { isPlay, onMouseOver } = useContext(HoverToPlayContext);\n\n  return (\n    <div style={{ width: \"100%\", height: \"100%\" }} onMouseOver={onMouseOver}>\n      {!isPlay && (\n        <Tooltip zIndex={9999} placement=\"bottomRight\" title=\"Keep hovering to play\">\n          <img style={{width: '100%', height:'100%'}} alt=\"preview\" src={previewImage} />\n        </Tooltip>\n      )}\n      {isPlay && (\n        <AudioWrapper>\n          <div className=\"image-audio\">\n            <AudioIcon/>\n          </div>\n          <AudioPlayer\n            layout=\"stacked\"\n            autoPlay={true}\n            src={audio}\n            customIcons={{\n              play: <FaPlay color=\"white\" size={\"16px\"} />,\n              forward: <FaAngleDoubleRight color=\"white\" size={\"17px\"} />,\n              rewind: <FaAngleDoubleLeft color=\"white\" size={\"17px\"} />,\n              pause: <IoMdPause color=\"white\" size={\"17px\"} />,\n              volume: <BsVolumeUpFill color=\"white\" size={\"20px\"} />,\n              volumeMute: <BsVolumeMute color=\"white\" size={\"20px\"} />,\n            }}\n            customProgressBarSection={[RHAP_UI.CURRENT_TIME, RHAP_UI.PROGRESS_BAR, RHAP_UI.DURATION, RHAP_UI.VOLUME]}\n            timeFormat={\"mm:ss\"}\n            customControlsSection={[RHAP_UI.MAIN_CONTROLS]}\n          />\n        </AudioWrapper>\n      )}\n    </div>\n  );\n}\n","import { Tooltip } from \"antd\";\nimport { useContext, useEffect } from \"react\";\nimport { LazyLoadVideo } from \"react-video-lazy-load\";\nimport { LoadingBase64 } from \"../../../icon/loading-base64\";\nimport { HoverToPlayContext } from \"../../HoveToPlay/useHoverToPlay\";\n\ninterface Props {\n  previewImage?: string;\n  video: string;\n}\n\nexport default function HoverToPlayVideo({ previewImage, video }: Props) {\n  const { isPlay, onMouseOver } = useContext(HoverToPlayContext);\n\n  useEffect(() => {}, []);\n\n  const renderPreview = previewImage ? (\n    <img alt=\"preview\" src={previewImage} />\n  ) : (\n    <LazyLoadVideo\n      height={\"100%\"}\n      width={\"100%\"}\n      controls={false}\n      muted={true}\n      loop={true}\n      playsInline={true}\n      autoPlay={true}\n      poster={LoadingBase64}\n      data-src={video}\n    />\n  );\n\n  return (\n    <div style={{ width: \"100%\", height: \"100%\" }} onMouseOver={onMouseOver}>\n      {!isPlay && (\n        <Tooltip\n          zIndex={9999}\n          placement=\"bottomRight\"\n          title=\"Keep hovering to play\"\n        >\n          {renderPreview}\n        </Tooltip>\n      )}\n      {isPlay && (\n        <video\n          src={video}\n          height={\"100%\"}\n          width={\"100%\"}\n          controls={true}\n          muted={true}\n          loop={true}\n          playsInline={true}\n          autoPlay={true}\n        />\n      )}\n    </div>\n  );\n}\n","export const LoadingBase64 ='data:image/gif;base64,R0lGODlhyADIAPcAAIWitoejt4ikuI6pu4+pu5KrvZavwJiwwJ60xKC2xaG2xaG2xqK3xqO4x6S4x6a6yKe7yam9yqq9y6u+y62/zK7Aza/BzbHCzrLE0LPE0LTF0bXG0bbG0bfH0rjH0rjI07nI07rJ1LvK1LvL1bzM1r3L1b7M1r/N1sDN18HO2MHP2MPQ2cPR2sTQ2cTQ2sTR2sXR28bT28fS28jT3MjU3MnU3MrV3MrV3cvW3cvW3szX383X3s3X383Y38/Y38/Z4NDZ4NDa4dHb4dLb4tPc4tTc4tTd49Xd49Xe5Nbe5Nfe5Nff5Njf5djg5dng5dng5tnh5trh5tvi59zi59zj593j593j6N7k6N/k6N/k6d/l6eDl6eHm6uLn6uLn6+Pn6+Po6+To6+To7OTp7OXp7OXp7ebq7efq7efr7efr7ujr7ujs7uns7uns7+rt7+vt7+vt8Ovu8Ozu8Ozv8O3v8O3v8e7v8e7w8e7w8u/w8u/x8vDx8vDx8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAwB9ACwAAAAAyADIAAAI/gD7CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NGyEfOHD41H5YR42aOrsLzjFhQklBN77dCGfDJo/sIQAALAAukI9v3wT1kNHChY7sKNEB/iSQInDPdTUD64zRwv6O7CsNwosof37gGvZawOCZvSK8gSt9WHedQHWAgZ9ys1nxQHgdCIScGgiqgd8Y+7FWRxVmmEFQf9EF0EUfvf3Wxx1dHEhQHXS44V5pKxBAAAI4oCGQFRoMEN0YAeKm2x3sbYHGinWYUUUSTuBYmgouughBDWT08cYGAAgAYB966EEgezKCaMYVSXSZhBimGWFBki56IFAUPNCA0BtyrNiFl11egWBpW4xJ5gdeOCSHF0rAecWKpzmBwgNkTuFQG3BOEUYcrDVhggMEFFCEQ2p0GQUYjL5mhRTGPQSHHHMEJ+pAbNhAwQGoHkCBDWxIZAcX/kjwICsPSHBhR2hadJDqrgc0CJEbUMwqLA9Q4Korr6j6+hCww85abGilnprqqq1G9Gqss9Z662h2sEEGGWxsS9Eed8jR5h6sffEFFhC1IQccsGkhwwQKVHCEQ1vA4MILT7TBWhY0XKDAwApE4ZAXLiTsQg5RoIeaGh4QrAADLeTZUBpMzKCwCz+ga5oUIEiswAoChUEFEwhxUUareDCxMccalnaDxB38YGQNEXDAhUFfkDDCEAKxcYUQGxtaGg4DZwBEk32YQYMEEUQAZhw00MAoGSNkLQSCQgeRsNGlVREG0wIREXUEGTSJBAYYINF0DFmPQN5AbaghhpWsmVHC0Nk59JFHCmynINARcdMgB21mR+3BznGwzbZAYNAQNxWznRHC2TsItIbjGAyURNwsZAobGWebsHMfmzs+kBg6xC36a1pEfUK1fTSu+kBq9JB1zLH94MOUAv0deEFcLMGEc6P2sXbbyStEtdXNKzSGkdFXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/778Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCdIwQpa8IIYzKAGN1iQgAAAIfkECQQAWwAsAAAAAMgAyACHiaW5j6m8kKq9kqy+la6/lq7AmLDBmrPDnbPFnrXEorjHo7nIpLnIqb3Kqr/Mq7/Mrb/NrsDOsMLOscPPssTQs8XQtcXStsbSt8bTucnTvcvWvs3Xv8zXwM7XwM/Ywc/YwtDYxdHaxdLbx9TbyNTbydXcytTdytXdy9bdzNfezNffztjfz9ng0Nrg0drg0dvh09vh09zj1N3j1t7k197k19/k2ODk2eDl2uHl2+Hm2+Ln3OLn3OPn3ePo3uTo3+Xp4ebp4efp4ubq4ufq4+jr5Ojr5Ojs5Ons5ens5urt5+rt5+vu6Ovu6Ozu6ezt6ezu6u3v6+3v6+7w7O7w7O/x7e/x7vDx7vDy7/Dy7/Hy8PHy8fLz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CP4AtwgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTTshFSq1IV6RIuVKboMtMDwpSIU3boJanEyZTQQAAAFECPLmTRALkSFDtMhu7hyB9OkEkf5gH4JlNgHnADQMnC5l4JPxSGiXQC9g+Bb2ArVcx96e9nnn6m1RnBTHvYfdEa8VAUVBLaBXgEC79SbQeEMsR1AWVZwGwwADJKACQRKgt4NAtwlkxXhMENTEDjjgYB9pHnDIYQIwCPSEAgAEcJAW2CWh3RZPsNgiDvGVVoQBMnJ4wYJbtBDdQVhYmEUQQ7aYQ4amFbFAkgMwAJEPVeLgA5aoeYCkjDY4FEWVORS5GhRmDmBAEQ5VkQMObWYRm4IQYfjbnwRF4cEDBxR6wAMeRCGRFT/U4MKjLtTwgxWiOWDopYdKNAOknEZaKaaGOqBpp5DOIFoUHVgaageKRmSFD/6bluoDpYACqkSrDlmBq2tRnNAAAw0ooSYKJKDAA62r+crAsgz04FASJERbLA+qDVEBs8tSABEL0kbbwq6jKfErtqwKpEMTCD0BhIk0dFssuKGdgG0ENwg0BQcQTHCQFSBsgAKtRaTQLbWl3bBsBDEQJAIEDBuxxRQffLDcEhtU/AJBQghMAp2m3VqQDgxDYIFALFxwAQsCfVDxBkEUpOtrFoS8gkAdmPyBQDasHEJtM4Q8gYUmm2yiyhU7O1vMDM8sUNAXDJRzxTvL1kTIGRDENEEjrPzia1Pni+5AV7tHNLKw6WCChQPVfEEHLsvQcq1blHwy3AlN0UEHaNOt91refPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AjHhAAIfkECQMAWwAsAAAAAMgAyACHjKi7kqy+k6y+lq6/mLDBmbHBm7LCn7XEn7XFobbFpbnJp7rIp7vJqLzJrL/MrsDNsMLOsMPOscPPtMTQtcTRtcXRtcbRt8fSuMjSuMjTucnTvcvVvs3Xwc7XwtDYwtDZw8/Yw8/Zw9DZxNDZxdHbx9TcyNTbytXdy9bezNbezdbezdjgztjfz9rg0Nnf0drg0dvg0tvi09zi09zj1d7j1t7k2eDl2eHl2eHm2uDm3OLn3ePo3uTo3uTp3+Xp4OXp4Obp4ebp4ebq4ufq4ufr4+fr4+jr5Ojr5Ons5ens5urt5+rt5+vt5+vu6Ozu6evu6ezu6u3v6+7w7O7w7O/w7e/x7vDx7/Dy7/Hy8PHy8PLz8fLz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CP4AtwgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTTshFiy1IWa5nSW3wRcZohS8fbuglihWZhsBAECAEYLEcQ/EwkSJEi2ylzNHAJ04QSfWlf5Ij02AOQAO070LlBLeCe0T5gUI3xJdoJbq1qnULs8cPX317FnnnmtJzDfQC+YVINBuWPS2BX5KJEfQFVecJsMAAyTAAkESmLeDQMXRF56BWzzxww47kCiaCBhimIAMAkWhAAABHHSfElBgt0UUJ6K4wxKmJWFAixheMN8Lzx2EhYRXFOEjij1UGOQCRA7AAERBPLlDEFKiJsKQLebg0BRP9gAka1F8OYABSTh0RQ87mNklgSouRKFveBIkRQgPHODnAQ+EIIVEVwBhwwyIzmADEHN61uefkD4gEQ6JVqqoaI9C6qekEVFqKaI4iCaFB5kC6sGgERXqKaiM5ukqE/5TQHQFqq9NkYIDDTjAhENSrIDCClG2dmsDxDbAg0NNoKDsrz2oNoQFxRJbAUQxLKtsDLSSxgSu0YIQ6xY6QIFQFEIIdAUO1v6arWgpRBvBDQJN0QEEFBxUBQkfrFCFQEi0YG2zpd1AbAQ0EGQCBAgfsUUVI4ywbxMfRDwDQUT4iwISp8FakA4IQ4CBQDBooAEMAuEb8RAFzfoaBh27INAIIo8g0A0Rf1BCbTZ0PMG3Ioss0L01+0Abywi7LFDPGgxEc8Q3ywZFxxsQhDRBKNRcJ2tPQzCBuANNPVAUJu8rmw4qfDsQzBrITFAVNaDs6hYhj/x2Qgw7PPfdeOet91befPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689454QAAh+QQJAwBYACwAAAAAyADIAIeHpLeQqryWrr+ZscGassKas8KbssOcssOetcSht8aiuMajuMeovMmovcqpvcqrv8ywws6xw86xw8+zxNC0xNG1xtG3x9K3yNK4yNO5ydO6ytS7ydW9y9a/zde/ztfDz9nF0NnF0drF0tvG0tvH09zH1NvI1NzL1d3N1t7N19/N2N/O2ODP2d/P2eDQ2uDR2uDS2uHT2+LU3OLV3ePW3uTY3+TZ4OXa4Oba4ebb4ebb4ubc4ufd4+je5Onf5eng5enh5uni5uri5+ri5+vj5+vj6Ovk6Ozl6ezl6u3m6u3o6+7p6+7p7O3p7O7q7e/r7e/r7vDs7vDs7/Dt7/Dt7/Hu8PHv8fLw8fLx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gCxCBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NG2GTAgWa1H5YAQCACrsNwtCgmyAB3wUKXplSZbaRAAEEGCHo2zfBK06aNLki+zn0BNSr/hN8on37bAPQA3gYWB3AQCrln9BGkV5A8fYCsZdvThs99PVYHAcAAQLBp50TryEhH0EwpHeAQL39JlB5TfA30BVWnDbDAAMswAJBE6TXAxZNEECAblaUFwVBTggBBBALkhYChxwuMMOEDER30BXaQcEdFk+4+CIQTJiGBAI0cpjBgjBMtyN/Vxwx5ItBZGikA0kO0ABEREwJBBFWohYCkjTm4NAUUwZRJGtPjDkAAkg4ZEUQQKj5Y4IxNoRhcHyOB4IECgSqgAQg5OnQFUHwUMOiNfAQxJ2fRSDopINKtAOjmDYqmqSUBhqBpZkyuoNobXLqaQiG6hnEpaI+2uer/kqs+FAVsr4WxQoQPACBEg5F8UILL/xgoWop5PrAsT44pEQLzAL7g2pFXHDstBhANEOzzM5QK2lKGDvtCLLysARCThQhUBU6YAvstqKlMO0DE5iJhRQfUGDBQVWYIIIL/CURA7bPlpbDsRPQQNAJFCR8BBZTkEDCFFgwIcLEBg9UxL8tJHFarAXxkDAFGwgkAwccyCBQCROLMERBtL62wccwCDQCySQIhEPKJ9R2w8cWSCEQySSfi/LEQND2csIx/wz0QDdPnLNsS3zcAUFAc0CQCikjGFvU9o47UNUsDj3sazys4DNBM3MwAss2rPwqFiOX/HZCU4wwAsRz5633Wd589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456777rz37vvviQcEACH5BAkEAF4ALAAAAADIAMgAh4unupOtv5mwwZmxwp2zxJ20xZ61xJ+1xJ+1xaG3xqW5yaa6yai7yaq+zKy+zK2/za/BzbLE0LPE0LTE0bfH0bfH0rfH07jH0rrJ1LrK1LvJ1LvK1bzK1b3K1b7M18DO18HP2MXR2sbS28bT28fT28nU3MnV3MrV3MzW3czX383W3s3Y387Y38/Z4NDZ39Da4NLb4NLb4dPb4dPc4tTc4tTd4tXd49be49be5Njf5Njg5Nng5Nrh5tvh5tvh59vi593j6N7k6N/k6d/l6eDl6eDm6eLm6eLm6uPo6+To6+To7OTp7OXo7OXp7Obp7ebq7efq7ujr7unr7ens7urt7+zu8O3v8e7v8e7w8e/w8u/x8vDx8vDx8/Dy8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+AL0IHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0b4RQDBqbUfkgBAAAKuw3S4EClYAHfBgxm2TJ7SYAAA5YQ9O2b4BYr2Js/D6BgOnWCWLD+W2Eu+8B2EAOpAxiYRTwW2iu2DyjuRf1A8Vay1Db/HL2X4wAUIFB74r32BH0D0bAdAgL19ptA+JE3UBdanIYDAQQwEANBFmwnhBdTFFCAbly4R1AVTiihRBWmiYAhhgzgIBAVDQQgAELYXTEQiiqqiOBoTyTwIoYd0EeDdAdtQV4XU/SoIhMVmvaEA0MS8ABEUDipBBRRoiaCkC/64JAVTjLxY2pUfElAAk84pAUTSpjZRWwHQkRhcHieKMIEC/S5wAQisBiRFk0M0cOhPQzRRJefSeDno39KRASilCYqmqOQ9imBpJUiSoRoVYyAqaYjCAoRoZN6umierEZhakP+WrzaWhUvRABBBFE4VEUNMtRgBKOptWArBMQW4ZAUMiTbqxGqIbEBsdBmANEOyiarg6yiRTEstCQIGoRuB1WRhEBaAFFtr9iC1gK0EFzwg0BVhFCBBgddgcIJNOjoRRQ3VMtsaT8Qe0EOBKVQwcFNeGGFCSZYAeIJEBM8UBP9ypCraa4WFMTBFXggkA0ffGCDQCpAfMK4BMX6mgcczyBQCSGbIBAQJrNQGw8cYyBoyCELdEXJEB9BG8sHuywQzx8MRDPENss2Bcf+Hc0zQTCYnO5qT1eAAbhS97wj0PrGFoQLssL8QQkFXdEDyqyCLDKrCllRQgkOw2333XjnrfdW3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPcuUUAAIfkECQMAVwAsAAAAAMgAyACHj6m7mLDAnbTEnrTEobbForfForjGo7nHprnJqbzJqb3Kqr3LrsDNsMHNsMHOssTQt8bSt8fSt8fTuMjSucnUusnUu8rVvczXvszWvszXvs3XwtDYxNDaxNHaxdLbyNPbyNTbyNTcydTcydXczNbezNbfzNffztjgz9ngz9nh0dvh09vi09zi1Nzi1t7k197l19/k19/l2eDl2uDm2uHl2uHm2+Ln3OLn3ePo3+Xp4OXp4Obp4ebp4ebq4efq4ufr4+jr5Ojs5ens5ent5ert5urt5+vt5+vu6Ovu6Ozt6evu6ezu6uzv6u3v6+7w7O7w7e/w7e/x7u/x7vDx7vDy7/Dx8PHy8fLz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CP4ArwgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTRshkwIFmNR+WAEAgAq7DbbAoJsgAd8FghMUEiDAACEEfftWPpB58wTRpVMfaKB5gA4Dpf4D2C4QhfcBxcWTF9i9OfgrxwEQ2F3EScEW3g8I7P2boRUrp8VAAAELrEDQBN7pcAUTAxaHkBRKIIHEFKZ9MOCAC8QgEBMMBCCAQ1NEKCEST5hWBAIXDpiBfVe0AN1CVjAxooRLAGiiAykS0ABEM45oI2ofoHjhDSDOuESJrDkRJAEIFOGQFUsgceSPrtUH0X/rBeeECBAo4KUCEIjA4pVG9JDDmTn0YASVnkXw5ZtgSuQDmnSmKZqbcHoZgZx1oumDaE6AgKeeIIz5kBVGzOnnmlnulkQUEFUBRWxRqCDBAxIk4RAUMLgAAxBVtGbpA6Q+wINDTbigqqdAqBZEBv6lkpoBRDWsqmoNk5qWxKWxjgDpFTksgdATQwhUxQ62eporaSrESgEOAkURggUXHERFCia4QIVAS9Bga6ul4UAqBTIQlIIF6DoZBQkkQLqECfDOQNAR3rogrK6/DpQDuhZsINALHHDwgkAnwGsCEQVJ+toG/LogUAkBkyBQDgarUNsN/Grwa8ABC0RFwfD+QBvD6DosEMcc6FvxbEvw6wFBKBPEgsFIwtayBRrcezLHBD0B8ray5bBCvg8HXEJBVNiAMHkAC9yoQVGUUALRT1dt9dVYZ6311lx37fXXYIct9thkl2322WinrfbabLft9ttwxy333HTXbffdeOet9yvefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6554wEBACH5BAkDAF0ALAAAAADIAMgAh4mluY+pvJCqvZKsvpWuv5qzw5yzxJ+2xaC2xaK4x6O5yKS5yKW6yam9yqu/zK2/za7Aza/Dz7DCzrLE0LPF0LbG0rfG07nJ07rJ1LrK1LvJ1b3L1b3L1r7N18DO18DP2MHP2MLQ2MXR2sXS28fU28jU28nV3MrU3crV3cvV3cvW3c/Z4NDa4NHa4NHb4dPb4dPb4tPc4tTd49Xd49Xe5Nbe5Njg5Nng5Nng5drg5drh5drh5tvh5tzi593j593j6N7k6ODl6OHm6eHn6eLm6uLn6uPo6+Xp7OXq7ebq7efq7efr7efr7ujs7unr7ens7ens7urt7+vt7+vu8Ozu8Ozv8Ozv8e3v8O3v8e7w8e/x8vDx8vDy8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+ALsIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0bYZQFC6LUfqhhwAANuw3S+CCloALfCwpCscBi9pECBRAcIejbN0EjAgAAgCL7OXQH1Kv+EzSgHYCR2QygFxgxsPqAgRzKG6DNQj2C4l3cC4SSXbuJ2ulBx14Xxw2ggEDxaUfAa0rgNxAN6jEgUG+/CRRAec0VxMVpOOAGQQwEZaBeEF1EoYACuvVQngQEaVHFFFNoYRoKuHmIg0BSRFDAAQdBcWEC3HXhIowwZmGaEg3UiBsI+NEw3UFGZNgFFkQSueGREyi5AAUQWVHlFFZciRoKSdb4g0NafGkka1KQuUADSjjEBZFrwtZgRGIGp2cXVKSAwQOAPoBBClRItMUTRxShaBFHPLGFaBcEKqmgEiW66KVPghbppIBeUOmlmIpGxQmbdnpCoREdaqmijT66557+TqCKJhaxUQHDBRVc4IRDWPCgAw9HyMjarRUUWwERDkmhw7K/ZnoaEiAYW6wHEAHB7LJA0GqaE7hKS6hAQwRp0BVLCKRFEdf+qi1pMEi7ARACZaFCByEclMULLdywJhQ9XOusaEAUu0EOBLnQwcFMdJEFCywYGUULEPtAUBP96iAuabEWNMTBHYgg0A4llLCDQPhCnERBWqzLmggc2yDQCiFnKATELcxQ2w8cg7BmyCHHW3IL/77G8sEuC8RzCQPNDLHNskHBMQkEHU1QDTRf0fTBIFws9UBXlFwnbEPI8HUXMJewQkFZAHHyq12ALDLbCWWxwgpjw2333XjnrfdV3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvAseEAAh+QQJBABWACwAAAAAyADIAIeMqLuSrL6TrL6Wrr+YsMGftcSkucekucilucmnusinu8movMmpvMqpvcqsv8yuwM2wws6ww86xw8+yxM+1xdG1xtG4yNO5ydO9ytW9y9W9y9a+y9a+zde/zdbC0NnDz9nD0NnE0NnF0dvH09vI1NzK1d3L1t7M1t7N1t7N2N/N2ODR2uDS2uHS2+LT3OLT3OPU3OLU3eTV3ePV3uTW3uTX3+TZ4eXZ4eba4ebb4ufd4+je5Oje5Onf5eng5erg5unh5unh5uri5+rj6Ovl6ezm6ezm6u3n6u3n6+3n6+7o6+7o7O7p6+7p7O7q7e/r7vDs7vDt7/Hv8PLv8fLw8fLw8vPx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gCtCBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NG6ETBQqc1H64YcCADbsN1vjwpGAC3woKOrGwYnaRAgUOFCHo2zfBIQIAANAd+zn0B9Sr/hMsoB3AkNkMoBcYMbD6gIEcyhegzUL9geJW3At0kl17idrpQceeFccNkIBA8WlHwGtIQFFQDeo1IFBvvwkUQHnNtWbDAgtEIANBG6gHhBVOJJCAbjqUJwFBVUzhIhWmncAhhxHYINATExRgwEFOXIgAd1S4KCSMpSHhwIwcguCgFTVMd9AQGVrRopAuooYEBUguUAFEVAq52glHzriDQ0FSSeRqUIC5gANIPDSkbA0GJ6dFUKCAAQR4QoABCktCVIUTSxghqBFLOFGFaBnkqaieEgU66KNLILponhk0+iikotWZKKV8SvSno4IWeuicczYRBURSSBFbFDJocIEG/k04JMUOOuxwhKqsweDqBbwK4RAUOgRb6xGqFRECr8iGABEQwgYLBK6lNbErsimcaoUQ3BkURRICSUFEs7VCOxoMyF7QQQ8CRaGCByIcJMUML+CAqxM+NEtsaT3w2kEOBLngwb/cStFCC6o68cLBPBDERL06ZEuaqQUJ8a8HJAiUgwkm8GtFDAe/oERBqb5GwsQ2WtECxi0IFETHNdTWw8QiWIsxxt1yfLARtI38b8lWzGzCQCsf3LJsTkz880A+E3RDx9bCVjS7Dic9UBQ2i/uaEDQ0LdDJJqRMkBQ/fEyqFRdnPHZCAhN89tpst+3223DHLffcdNdt99145633R9589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHzndAACH5BAkDAFkALAAAAADIAMgAh4ekt42oupCqvJSuv5auv5mxwZqywpuyw6K4xqK4x6e7yKi8yai9yqm9yqu/zKy+y6y/zK/BzrHDz7PE0LTE0bbG0rfI0rjI07rK1LzL1b3L1r7M1r/N1r/N17/O18DO18PP2cXQ2cXR2sXS28bS28fT3MfU28jU3MnU3MnV3MvW3s3W3s3X383Y387Y387Y4M/Z4NDa4NLa4dTc4tXd49be5Nff5djf5Nng5drg5drh5tvh5tzi593j6N7j6N7k6d/l6eHm6eLm6uLn6uLn6+Pn6+To6+To7Obq7efq7efr7ejr7unr7uns7ens7urt7+vt7+vu8Ozu8Ozv8O3v8O3v8e7w8e/x8vDx8vHy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+ALMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0bIRQGDKDUfsihQAEOuw3eCKGbYAPfDAo6wSBjNhIECBQgIejbN8EjBAQIcCL7OXQJ1Kv+E0ygXcCR2Q+gI0AxsHqBgR7KJ6A9Q72C4u4FOsmufUXt9NCxl8VxBTQgUHzaHfDaElIUdIN6EAjU228C8SdAcwQ5McRpOzjgAAU2EMSBekJkAUUDDej2Q3kTEJTCAAAAAINpLHjoIQU7CARFBdEdtJ8AC3CXBQwwxghABqYtEYGNHorQYBY3THfQERg60YCRMQawYZIXMOmABRAZgCUABmyJGgtL2giEQzVgGQCSrEmBpgMRLOHQEAEA8KaQCz7pkIbBBUrQFC5sQMGhFGzgwhQSYUEFFE5E6gQUVGAhWgeIZpqoRJBK6mlxoGGq6aEdcOrpp6JN8YKopL7AaET+jnYaKaWWCiroE1RAhMUVsVFhwwcafPCEQ1cIEYQQTdS62q8aNKtBEQ5REcS0xzahWhIlONssCRAVQe20RvBq2hPAahtDrlkQMexBVTAhEBZKfHusuKTZoC0IQQhkRQwjnHAQFjnc4EOtUAzxrbWlBdEsCD0QRMMIEFtrBQ00WJFFFDdkXOJATxgcBKik4VoQERCPoIJAPcAAQ8NZBJyxuwTt+poKJesgEA0q0yDQERnfkCNtQZRsgsVDqjxjFgD3rARtNENss0BGH50Fzxn/HNsTJbdAUNQE8dBzFbJhPYIJ60JtNEFVuKwsbETgQPRAOMOgc8xCwGxryivbqtBgxBXr7fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPfu++/ABy/88MQXP1FAACH5BAkDAF0ALAAAAADIAMgAh4unupGrvZOtv5iwwZmwwZmxwp2zxJ20xZ+1xKS5yKa6yaq+y6q+zKu+zKy+zK2/za/BzbDBzrPF0LTE0bfH0rfH07jI0rrK1LvK1bzK1b7M18DO18HP2MLP2MLQ2MTQ2cXS28bS28fT28nU3MnV3MrV3MrV3cvV3czW3c3W3s3Y38/Y4M/Z4NDZ39Da4NLb4NPb4dTc4tTc49bf5Njg5Njg5dng5Nng5dvh5tvi59zi5t3j593j6N7k6N/k6eDl6eDm6eHl6eHm6eHm6uLm6uPn6+Po6+To6+To7OTp7OXo7OXp7Obp7ebq7efq7ufr7ujr7unr7uns7ens7urt7+zu8O3v8O3v8e7v8e7w8e/w8u/x8vDy8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+ALsIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0bIZUHD6jUfsjBgAEOuw3eCFGloAPfDwpSyRBj9hMFCho8IejbN8EkBQQI0B37OfQJ1Kv+E0ygXUCS2RCgKzgxsLqBgRzKJ6AtQ32D4l3cC6SSXbuK2ulBx14XxxnggEDxaYfAa1DgN9AN6kWAoG/AdUFAec0RNEURp+UAAQQU1ECQB+oN0QUVDjigmw/lVUCQCQMAAIALprHw4YcU5CBQFRYosMBBVFzIAHcuxCgjABqYBoUEN34oAn43THdQEhlOscCRMgbAoZIXNAkBBhAdgCUAB2yJGgtM3giEQzNgGUCSrFWBJgQSQOFQEQEA8OYUsTUI0YbBBUpQFS50QMGhFHTggoMQaZHFFZBekYUWo3GA6KWJSvRopJxmIZqlmB5aIUSbcgqpp6FV0QKoorbA6EP+jnZKqaC0UnEFRFxsEdsVNHywwQfcMbSFEkgoQQUXrfW6wbIbnNfQFUhEW2ywp0FBArPLjgCRE9JG64SuplHhK7Yw3NrFEa8OlAV3XETRbbHgkkYDtiAEIRAWMZSAwkFb7ICDEOBWwUS31IoWxLIg9EAQDSU0zOcWNNCgqxU4VGzEoAMjkW5othZ0RMMlrCAQEDDAsGYXOlSMA58E5fraCiDzIJANJdMgUBMqK0wbESCngIVAJZcs0BYpVywFbTA3LDPQQQ+Ec8U6x1YFyC8QFDQMBP2gMqqwTV1CCoxeTVAWRccL2xE4/EwQzTDYUNAWS7BMK8km06rQFjbYYLZe3Xz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPfu++/ABy/88A8FBAAh+QQJBABWACwAAAAAyADIAIePqbuUrb+YsMCbs8OdtMSetMShtsWiuMaovMmpvcqtv8ytv82uwM2wwc2wwc6yw8+yxM+yxNC2xtK3xtK4yNK6ytS7ytS7ytW+zNa+zNe/zdbDz9nE0NrE0drF0drF0tvG0tzJ1NzK1d3M1t3M1t7M1t/M197M19/O2ODP2eDP2eHR2+HS2uHT2+LT3OLU3OLU3ePV3ePW3uTX3+TZ4eXa4Oba4ebb4ebb4ufd4+jf5eng5eng5unh5unh5+ri5uri5+vj5+vj6Ovl6ezl6u3n6+3o6+7o7O3p6+7p7O7q7O/q7e/r7e/r7vDs7vDt7/Dt7/Hu7/Hu8PHu8PLv8PHw8fLx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gCtCBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NG2GTBg2a1H64wYCBDbsN3gihm6AD3w0KKsHwYraRBAkYGCHo2zfBIQUECFAi+zn0CdSr/hNEoF3AkNkPoCcwMbC6gYEdyiOgHUM9g+LuBSrJrj1F7fTQsWfFcQY4IFB82h3w2hFQFHSDehAI1NtvAhFQXnMEKSHEaTlEEEEFNBDEgXpBWNGEAw7otkN5FBA0wgAAAMCCaSt46GEFOQjUhAUJKHCQEhYywJ0VLMAYIwAamHaEBDZ6KEKDVtww3UFDYKjEAkfGGMCGSmbQZAQZQGRAlgAYwCVqKzBpYw8OzZBlAEmyBkWaEUhwhENCBAAAnEMuCKVDGgYnKEFQtODBBYhe4EELfw4q0AeJRqqoowRBKimiH1A6UKGWYsqopqBaxESjDFVRRWxQ1AACByAw4VAV/kkYkYQTp7KmKge4ckCEQ1IY4ausTqhmBAm54loCRL8mW2tpTKxaLAxQEhHsQVIsIVAVSyQr67Kj1VBsCEAINIUMJ6hwUBU86CBErVIgkey0pAGBawg6EFTDCfgmYQUVNthAhRVP6CDweQNF4a4RUpw2akFE4HvCCgL9IIMMPwiUrsDWEmTqays4XK8VNkxsg0BGCKxDxbQB4TAKUwg08cTXXqxDxrJ1jO/HVrwsw0AlC4xybE447AJBOhPkg8kJA40vCvDm/DJBUlzM7WtE4NAyQSHLMLLGRdA8qMQUh2oQv/6KbfbZaKet9tpst+3223DHLffcdNdt99145633QN589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqiBwQAIfkECQMAWgAsAAAAAMgAyACHiaW5kqy+mLDBmrPDnLPEnbPFnrXEn7bFoLbFo7nIpLnIpbrJqr/Mrb/Nr8PPsMLOscPPssTQs8XQtcXStsbSt8bTucnUusnUusrUvcvWvsvWvs3XwM7XwM/Ywc/YxdHaxdLbx9TbyNTbyNTcy9Xdy9bdzNbezNfezNffztjfz9ng0Nrg0drg09vh09vi1N3j1d3j1d7k1t7k197k2ODk2eDk2uHl2+Hm2+Ln3OPn3ePn3uTo4OXo4ebp4ubq4ufq4+fr4+jr5Ojr5Ojs5Ons5ens5urt6Ovu6Ozu6evt6evu6ezt6ezu6u3v6+3v6+7w7O7w7O/w7O/x7e/w7fDx7vDx7/Dy7/Hy8PHy8PLz8fLz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CP4AtQgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTRuhEwkSnNR++EGBgg+7DeIgAaVgBN8SCjrpEGM2kgYNICAh6Ns3wSIIBgzQHfs59AvUq/4TZKB9QJHZE6A3SDGwuoKBIMozoC1DPYTiWtwLdJJd+4ra6UHHnhbHKRCBQPFpt8BrSeA3EA7qUSBQb78JdEB5zRHUhBCn7UABBRncQBAI6g2hhRMRRKAbD+VhQBAKBgQQQAumufDhhxnsIBAUGkR3kBMXOsBdCzHKGEAHpiVhwY0fmoAfDtMdVESGTTxgpIwCcJgkB0xS4AFECVwZQAJaoubCkjf64BANVwqAJGtQnEmBBUk4JIQAAbjZRGwNQrRhcIASVMULI2xg6AYjvFCFRExUUAAAkAJQQAVMiBbCoZgiKhEBkXYqqaWZHhrCpp5GSoBog14qqqKMUsCpqf4UVBpooE4sClEWsVWRQwkilMAdQ1k8IaytrO0qwrEiGOHQFcI2S+xpSqyA7LEqQCRFs8JKgatpTvA67Qy2GjEFQlY4SAW2wm5LWg7TnqBlFTWwQKNBWATxgxFYCHRFFNg+K5oQx56g5kA6sGDwnlfssMMVWlTxw8NHELSvsAxz668RBrMAg0BA2GADEAI9/LCDA6nLGgwZ9yDQDh7rqAUTIhNRWxEZt2Crxx4LhIXIPzxBG8oGqywQzjYMBPPDMss2RcYyEET0dSJbobTBLYw70NMDWSFyvrIZsYO/LNvg8kBYLEEyoB1/PKtCCS+89ttwxy333HTXbffdeOet907efPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvtEAQEAIfkECQMAUwAsAAAAAMgAyACHjKi7lq6/m7LCn7XEn7XFobbFpLnHpLnIp7rIqLzJqbzKrsDNsMLOssTPtMTQtcTRtcXRtcbRuMjSuMjTucjTucnTvcrVvcvVvsvWwM7XwtDZw8/Zw9DZxNDZx9PbyNTby9Xey9bezdbezdjgztjgz9rg0Nnf0trh0tvi09zi09zj1Nzi1N3k1d7k1t7k19/k19/l2eDl2eHm2uDm2uHm2+Lm3OLn3ePo3uTp3+Xp4Obp4ebp4ebq4ufq4ufr5Ojr5Ons5ens5uns5urt5+vt5+vu6Ovu6Ozu6ezu6u3v6+7w7O7w7O/w7e/x7vDx7/Dy7/Hy8PHy8PLz8fLz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CP4ApwgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTRvhkggRltR+6CFBAg+7DdoQoZsgBN8RCirZ8GI2EgYMHiAh6Ns3QSEHBgxQIvs5dAvUq/4TXKB9gJDZEqAzMDGweoKBHsovoB1D/YPi7gUqya79RO300LE3xXEJQCBQfNop8BoSTRRkg3oUHOgbcFMYUF5zBCURxGk5VFBBBjUQ9IF6P0yxBAQQ6LZDeRgQREIBAQSQgmkreOhhBjkItEQGDDhwkBIWNsDdFCnAGGMAHJiGxAU2ekhCg1PYMN1BQmCYRANHxijAhkp20GQFHUCEQJYBIMAlaiswaWMPDs2QpQBJstZEmhVcMCVDQQgQAJxJxMYgRBoGJyhBTcAAggaIagACDFACOgEBAEQKAAET9BlaCIlmqqhEA0jq6aSiYaopoiFw+qmkA4jWhAuikupCo/4PJTFBp6hWOuitSjxxa0JP4DBCCCMM2RAUxEbhmq8hJBtCEQ5FQeyzxqZmBArKJosCRM9mi5oSv1Yrg65TGAErQVA4MZCz2UJxGg7VlgCEQE/QoEILB0lBxBBISCEQutCaBkSyJfhAUA4qFNznEzvsoCsUQzRsqUBS9GtargUZUbAKMAgUxA03cHlvw+bWBsPFPAi0A8c76NfwEEfUNsTFLIDLMccQfzwEE7SNXHDJAs18w0BKrNyybE1cLANBPhN0xMrqxla0CizAmvRAUHysr2xG6ADuQCffkDJBUiQR8q0bd7wrrwlvffbabLft9ttwxy333HTXbffdeOet90fefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+uikl2766ainrvrqrLfu+uuwx553QAAh+QQJBABbACwAAAAAyADIAIeHpLeNqbqQqryUrb+ZscGassKas8KetcSht8aiuMaiuMejuMenu8ipvcqrv8ysvsuuwMyxw860xNC0xNG2xtK3x9K3yNK4yNO6ytS7ydW8ytW8y9W9y9a+zNa/zdbAztfDz9nE0NrF0NnF0drF0tvG0tvH09zJ1NzJ1dzL1d3N2N/O2N/O2ODP2eDP2uDR2uDR2uHS2uHT2+LU3OLV3ePW3uTX3+XY3+TY4OXZ4OXa4OXa4Obb4ebb4ubc4ufd4+je4+jg5enh5uni5uri5+rj5+vj6Ovk6Ovk6Ozl6ezl6u3m6u3n6+3o6+7p6+7p7O7q7O7q7e/r7e/r7vDs7vDs7/Dt7/Dt7/Hu8PHv8fLw8fLx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gC3CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NGyEVCxao1H6IwoEDFLsN/lhRpeAF3xYKShFxY7aTCRMqOCHo2zfBJQwSJJAi+zn0DtSr/hOMoD3BktkZoE+IMbC6g4EnykegvUN9heJb3AuUkl37jNrpQcfeFsc5cIFA8Wn3wGtRWFHQD+plIFBvvwnUXwLNESSFEqcJwQEHIfxAUArqJbEFFRdcoNsQ5XlAkAsLEEAADabZ8OGHIQghUBUgRHcQfwlQwN0WNMQoIwEjmBbFBzd+CIODW/ww3UFLZCiFBEfKeACHSpbQJAcmQNRAlgQ0wCVqNjB5YxEO8ZDlAUmyZkWaHHwQhUNKHEAAnEMyCKVDGwYnKEFY4MACCYiSwAIOWEj0BAYICCCpAAhg8IRoKiSqqaISKTDpp5RiummiKnQK6qQKiIZFDpmSmkOj/hE96imqlg5qKxWwOvQEEbFhEcQLLbygW0NEBABAABpcytqvLTTbQhMO1QDAtMdqoBoUNDjbLI0PFUDttAbwahoVwGrbA6xOXIGQFrA+AcG3x4pLWhDaynDeFloAcYMOB2kRxRNTaCFQCwN8u4FpSzQrgxEECXHDw1Pge8QRAmfxxMXDTlgwAC2chmtBTjx8Aw8CNSGEENBucfHFuQq062s8iIyEQEWcfIRAV6x8J21MiKyDwFucfLJAWqz8RMuwxfzwzAIJrSPOOs92hcg+NCy0hisDDdvU+6o7kNMEFX2x1rA5MQTZW9QsBJthW4F0cCajbKtCWhRRBNpz5633Wt589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456777rz37vvvwDsUEAAh+QQJAwBcACwAAAAAyADIAIeLp7qSrL6Trb+XsMGds8SdtMWetcSht8akucilucmmusmou8mqvsurvsysvsyvwc2wws6zxNC3x9K4yNK6ydS6ytS7ydS7ytW8ytW+zNa+zNfAztfCz9jC0NjDz9nF0dvG0tvG09vJ1NzJ1dzK1dzK1d3L1d3M1t7M19/Q2uDR2uDS2+DS2+HT2+HT3OLU3OPU3eLW3uPW3uTW3+TY4OTZ4OTZ4OXa4ebb4ebb4efc4ubd4+fd4+je5Ojf5eng5enh5enh5unh5uri5uni5+rj5+vk6Ozk6ezl6ezm6u3n6u7n6+7o6+7p6+3p7O3p7O7q7e/r7e/s7vDt7/Dt7/Hu7/Hu8PHv8PLv8fLw8fLw8fPw8vPx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gC5CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NG6GUCxek1H544sGDE7sN9kihm2AF3xcKSgFhY/YTCRIsPCHo2zfBJQ0UKCgO+zl0DtSr/hOMoF3BktkaoEtwMbD6g4EmykegfUO9heLuBUrJrv1F7fTQscfFcQ9UIFB82r3nGhRUFNSDehkI1NtvAjFQXnMEQZHEaUBssEEIPhCEgnpIcCFFBRXoJkR5HRCkwgIEECCDaTR46GEIQOj3gQQUHCSFhRMUJwOMMRIAgmlQeGCjhyw0yEUP0x20BIZQSFBkjAdsiKQIS24wAkQOXEmAA1qiRoOSNh7hUA5XHnAka1ScuYEHUDiUxAEEuFknbAxCpGFwgBJUBQ4qkGAoCSrgUIVEUGCQgACQCpAABnuCtsKhmCIqEQKRdiqpaJdmaugKm3oaKQKiDRrqqIoyigGn/qdSGuisUmAB0RNFxIbFEDC0AAN3CxURAAABZBDlary2oGwLTTg0AwDQEhthalHQsKyyNUBUQLTQGpCraVL0ei0PtnLxhBUIZZGFQE9AwC2x35I2xLUxMCEQFkHgsANCVFCxqEApDMCtBqYxoWwMJQ5EBA4MT8HFFkoosQUXWvRLBboDlSAwACmcVmtBTzCMQw/sGmFElBZTsS5BuL7Wg8haKmGyEgJdkXJtToisQ7kmmzxQylfQ9jLDZfZsxEA2WzybFSL/QJDRBFlh8cqwMY2DDhgLBPVAWSjtHBLlDiSzETQXdAXVgT5h8rGzHgSxxG3HLffcdNdt99145633UN589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++24TxQQACH5BAkDAF0ALAAAAADIAMgAh4Witoynuo+pu5OsvpWtv5iwwJmxwZuzwqC2xaG2xaK3xaa5yai8yam8yam9yqq9y62/zK7AzbDBzrLDz7LE0LPE0LTE0bfH0rnJ07vK1LvK1b3M177M1r7M177N17/N1sDO18HP2MLQ2MTQ2sXR2sbT3MjT28jU28jV3MnU3MrV3czW3czW3szW38zX3szX383Y4M/Z4M/Z4dLa4dPb4tPc4tTc49Xd49be5Nff5Nff5drg5trh5drh5tvh5tvi59zi59zj59zj6N/l6eDm6eHn6uLm6uLn6+Pn6+Po6+Xp7OXq7ebq7efr7efr7ujr7uns7uns7+rs7+rt7+vt7+vu8Ozu8O3v8O3v8e7w8e7w8u/w8fDx8vHy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+ALsIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0bIZYOHbDUfgiDAgUYuw0OoaGbYAffHQpWSeFjNhQNGjZAIejbN8EnERw4qCL7OXQS1Kv+E7yg3cGT2SKga8AxsDqFgS7KX6ANRP2G4u4FVsmu/Ubt9NCx18VxFCTXRXzaTfAaFcUNNIR6IQjU228CQVBecwRVwcRpR4wwggpEECSDehvellsXSJQ3AkEzPJBAAjqYtoOHHqpwhEBYoKCBBwdVYWEG3HWhg4svJmCCaVSUQKOHNhQ3xHQHPYFhFRgU+eICGyLZwpIjsACRBFYmIEGWqO2gJI1LOASElQscyRoWZo5QAhUOMbFAAm0GuWCDDWkY3J8EaSEEDS8U+gINQmghkRQcNFDAowU0wIEUotVg6KWHSsQApJxGWimmhtagaaeQMiCaFj9YGuoPikbE6Kb+pU4K6KxXbAGRFEnEtkUSOeCQwxUOJUGAAASAQClrvOKgLA5TOJSDANASC4JqVPSwrLI9QJRAtNAqkKtpV/R6LRG2djFFFgghEYNAUlTALbHfkpbEtTxAyUUSQ4RoUBQBAIBAFALNcAC3H5gGhbI8OEGQEkM0DCwXTzzBRRdBAGBxBAStMLAAM5xWa0FTNDyEEQJZEbEVAvVr8boE4fqaESKf10XEEQuUgcUADFBbyA0TMfHMNAvEL84n0AZzwzIDXbPNOOssWxYiF3Fd0AMZgDMST/eM7kA0J42iygDLNkUTP3NN9UBRWMDyrCY/gfKsCUEsMdx012333XjnrfdU3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuEwUEACH5BAkEAFkALAAAAADIAMgAh4mluY+pvJCqvZKsvpauwJixwZqzw5yzxJ20xaO5yKS5yKm9yqq/zKu/zK2/za7AzbDCz7HDz7LE0LXF0rbG0rnJ07zK1b3L1r7L1r7N18DO18DP2MHP2MLQ2MXR2sXS28jU28jU3MnV3MrV3cvV3MvV3cvW3szX383Y387Y38/Z4NDa4NHa4NHa4dHb4dPb4dPc49Td49be5Nff5Nff5djg5Nng5drh5dvh5tvi59zi59zj593j6N7k6N/l6eHn6eLm6eLn6uPo6+To6+To7OTp7OXp7Obq7efq7efr7ujr7ujs7uns7ens7urt7+vt7+vu8Ozu8Ozv8e3v8e7w8e7w8u/w8u/x8vDx8vHy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+ALMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0bYRQOHKLUfqiCAgUVuw3+iEGloAbfHApGKZFjdpMMGTo0IejbN8ElERw40B37OfQQ1Kv+E6yg3cGS2R6gZ6gxsDqFgSnKV6DNQ32H4lncC4ySXbuM2ulBx14Wx1GggUDxaTfBa0/gN9AP6nkgUG+/CdSfA80R9AQSpw0BAggoAEGQC+olkUUUGmigGxHlfUAQDA8ooIANpu3w4YcoDCEQFSZkkJxB/DmAAXc2xCijAiOY9gQJN35IA34/THfQEhk+YcGRMi7AoZIqNAnCChBJgKUCEmyJ2g5M3niEQzxguUCSrFGBJggkPOEQEgso8KadsDUI0YbBBUoQFT7MwMKhLMzgg4MPPbFBAwZEakADG/AJmgyIZpqoRAxI6umkomGq6aH/RdTpp5EyIBoVPYhKag/+jDr0hAanpqqBpYIGN8UVEDmhI2xXGIHDDThM4dAQBQxQAAdOtCbsDdDegKtCNQxgrbI/ohZFD9FC2wNECVxrrQK/ljbFsN0GweuJViAkRAsCOTGBuMqWO5oR3eogJRZHBCHEQU0IAEACUr6AgLgbmNYEtDqcN5ASQUSMnxRSCKQDABhDQNAJBw/wwmm7KhdxEEUIVAUUUFQhUAAYAwAmQb6+VsTIUkqBcsVZXNAyAbVBMXIQWAiEMsoCNcEyxiLQNnPEUmYxNBQD6Ywxz7JZMbIRBD1N0AEt/xub1RG3O5DWAwlxdNOwRcFE0ATZDAXOAzVBwcu5npxyrgtRjPdd3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPfu++/ABy88RQEBACH5BAkDAFcALAAAAADIAMgAh4you5KsvpOsvpauv5mxwZuzw5+1xKK3xqa6yae6yKe7yai8yay/zK7AzbDCzrDDzrLE0LTE0LXE0bXF0bjI0rjI07nJ073L1b7N18DO18LQ2MLQ2cPP2cPQ2cTQ2cXR28fU3MjU28jU3MrV3cvV3svW3szW3s3W3s3Y4M7Y4NDZ39Da4dHa4NHb4NHb4dLb4tPc4tPc49Xe49ff5dng5dnh5dnh5trg5tzi593j6N7k6N7k6d/l6eDl6uDm6eHm6eLn6uLn6+Po6+To6+Tp7OXp7Obq7efq7efr7efr7ujs7unr7uns7urt7+vu8Ozu8Ozv8O3v8e7w8e/w8u/x8vDx8vDy8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+AK8IHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0bYRQPHqLUftjCgoUWuw0CmaGboAffHgo+OYFjdpMNGz40IejbN0EmEhw4eCL7OXQS1Kv+E7yg3QGT2SKgb6gxsLqFgSrKX6DNQ/2H4u4FPsmunUbt9NCxd8VxFiR3RXzaUfCaE1MUBIR6IAjU228CRVBecwQ9gcRpRJRQwgpBEASDeklccVtuVwxRXggEyfDAAgsISNoOHnq4AhECRYFCdAc9YWEG3F1Rw4swLmCCaU6gUKOHNjR4BRDTHcQEhk9gUCSMDGyI5AtLlvACRBNcucAEWqK2g5I1ltiQDlcycCRrU5xZAgpOOIQEAwu4GeSCTjqkYXCAEjSFDzTEYGgMNPjQ50NOcNCAAZAa0AAHdYZmw6GYIirRo5F22oBol2ZqqA2bduqpaIOGOqqiEjmhAaf+kDagQaWBAjrFogw1UURsUxyhQw464JpQEQUMUAAHUa7maw7M5rDnQjcMIK2xHKgWxQ/NMvsDRAlMK60Cu5o2xa/ZFuGkFFQgJIQLAjVBgbfGhkvaEdn2EKUVTBhRJkFNCAAAAlHCcIC3HZjWBLM9LMGvEQynewUVDucAwMQQEJTCwAPAcNqtBUnBsBFKCFQFxFUIFMDEALBQkK6vKfFxpRBDLBAGKBNQGxQfI2GFQDE73MTJE49Am8sM09rzQDRPbLNsVHwc8kBHD2QAykIwzTASDvMcM0FCAJ0sbFI0sTNBUQ/URAUq13rFyFSUrHZCMr8t99x012333XjnrfdQ3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bgPHhAAIfkECQMAWQAsAAAAAMgAyACHh6S3kKq8lq6/mbHBmrLCmrPCnLLDnrTDorjGorjHo7nIqL3KqbzKqb3Kq7/Mr8HOscPOscPPtMTQtMTRtcbRt8fSuMjTucrUusrUu8nVvcvWv83Xv87Xwc/Yw8/ZxdDZxdHaxdLbxtLbx9Pcx9TbyNTcy9Xdy9bezdbezdffztjfztjgz9ngz9rg0Nvh0dvg0trh09vh1Nzi1d3j1t7k2N/k2ODl2uDm2uHm2+Hm3OLn3ePo3uTp3+Xp4OXp4ebp4ubq4ufq4ufr4+fr4+jr5Ojr5Ojs5ens5ert5urt5+vt6Ovu6evu6ezt6ezu6u3v6+3v6+7w7O7w7O/w7e/w7e/x7vDx7/Hy8PHy8fLz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CP4AswgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTRshlREjqNR+KEODBhm7DQqxYaWgCN8jCk5RsWP2kxAhSjwh6Ns3QSYVJkyYIvs59BXUq/4T3KB9ApPZJ6CHwDGwuoaBMMpvoP1DfYniWdwLnJJd+43a6UHHXhbHaSCCQPFpl8FrUuA3kBDqmSBQb78J1N8EzREkxRKnJcECCzEQQdAM6jWRBRUiiKDbEeVJOBANEzjgQA6m+fDhhzEkIZAVLoRAwkH8TeABd1nkEKOMDqRgmhQv3PhhDvgJMd1BTGQoRQdIyvgAh0vO4CQLM0BkQZYOWMAlaj40eeOZC/WQ5QNKsmZFmiy8IIVDSzzgAJx3wtYgRBsGJyhBWACxQw2I1rADEFhIBMUHESAgKQIRfACFaDokqqmiEkEw6aeUYrppojp0CuqkEIhWaKakMuooCP6eogrCpYMOekWjD0GBRGxYNAHED0Bc4RASBwxwwKyt+frDsj/o1lAOA0RrLAiqVVEEs8sOAVED0ka7wK6mXfErtkrgagWuBhkRg0BQXNCtseCS1gS2QdCKRRROTFmQEwIEwIATAs2gQLfUlgbFskHom4UUTjQsrBMFFAAwDwFULAFBLQw8QJjhortjw/kKRAEAAFAgUL8Vw1CQrq89AXIVAhFAcgECcVBxAAbUZgXITuBKMskC8XszCrS53DDMAv0MwEA2V5yzbFiATGvSPxOUwM1GQA2yx0oTZATKAMtmBRUeZyEzAATsi4HKtWYxcsltJ+QEAQSEHffdeOet91befPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689254QAAh+QQJBABdACwAAAAAyADIAIeLp7qTrb+ZsMGZscKds8SdtMWetcSftcWiuMekucimusmou8mrv8ysvsytv82vwc2zxNCzxdC0xNG2xtK3x9G3x9K6ydS6ytS7ydS8ytW+zNfAztfBz9jE0NrF0dvG0tvG09vH09zJ1NzJ1dzK1dzM1t3M19/N1t7N2N/O2N/P2ODP2eDQ2uDR2uDT2+HT2+LT3OLU3OLU3ePV3ePW3uPW3uTY3+TY4OTZ4OTa4ebb4ebb4efb4ufd4+fd4+je5Ojf5Onf5eng5eng5uni5uni5urk6Ovk6Ozk6ezl6Ozl6ezm6e3m6u3n6u7o6+7p6+3p6+7p7O7q7e/s7vDt7/Hu7/Hu8PHu8PLv8PLv8fLw8fLw8fPw8vPx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gC7CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NGyGVESOo1H44Y8OGGbsNGtFRpaAI3yMKTmHxY/YUEiRKTCHo2zfBKBgqVJge+zn0FtSr/hPkoL1ClNkqoJPwMbD6hoEwynOgXUR9ieJd3Auckl17jtrpQcdeF8dtIIJA8WmnwWtTZFGQEeqlIFBvvwlkQXnNETSFE6c54YILNChB0A3qnUeFCCLopkR5JhBkQwUPPMCDaUR8+CENHHZRhQsknHDQFBd6wB0PMMb4wAqmTSGDjR/24GAXRnBnUBQZTtGBkTFGkGNpU+DApAs3QHQBlg9csOVpRCxp4xMODYFlBEiylkWaLsgg5UJORPAAnHe21iBEGwYnKEFZKBGEDojqEIQSTwL6gQQKRKqABB/02ZkQiWaqqEQQSOrppKJhqimiQnD6qaQQiFaoqKQyKtEU/iB0iioIlg5KWxZcQCQFE7FxIUUSRyTR6EJMIEAAAiFI0dqvRzR7hG4N7UDAtMeGoNoVTTjbbBMQNUDttA7waloWwGoLRa5daKEFQki8IJAUGXx7rLikSaHtElJWQQW0BUkxQAAMKNtFDQt8+0GSzeJLkBX7UrFFF1EYYMB5QARg8QQEtVAwATWchmtBWjQMLQUAAECBQAJYHEAM/dLLmshYCFRAyQYIxIHKB9SGhcgDlVzyuylbjAJtMPfs80A3W5yzbCHvawVBPgNAUAIqI8F0w+sa/fNASAQtcGxaxFzQzAAU0G8GLNvaBckmq51QFAUUcJ7bdNdt99145633U9589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456474QEBACH5BAkDAFQALAAAAADIAMgAh4+pu5iwwJ20xJ60xKG2xaK3xaO5x6W5yKi8yam9yqq+y67AzbDBzbDBzrLE0LbG0rfG0rfH0rnJ07rJ1LrK1LvK1b3M177M1r7M177N18LQ2MTQ2sTR2sXS28jT28jU28jV3MnU3MzW3szW38zX387Y4M/Z4M/Z4dHb4dLa4dPb4tTc4tTd49Xd49be5Nfe5dff5djf5Nng5dnh5drg5trh5tzi59zj6N3j6N/l6eDl6eDm6eHm6eHm6uHn6uLn6+Po6+Xp7OXq7ebq7efr7ejr7ujs7enr7uns7urs7+rt7+vu8Ozu8O3v8O3v8e7v8e7w8e7w8u/w8fDx8vHy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+AKkIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0boRMRIpzUfvhiw4YXuw0KuRGl4AjfIgo6UZFjNhMSJE4wIejbN0EkFipU0B37OXQV1Kv+E+ygvQKS2Sigk2gusPqGgS7Kd6D9Q/2J4lTcC3SSXbuN2ulBx95xG4wgUHzaafBaE1IUJIR6KAjU228CZVAeewM5YcRpSLjgwgxEEESDeuc5McIIug1R3gkEyUCBAw7gYBoQHno4w3lURNECCSUc5ISFIHCHw4swOhBhaU3EUKOHOzRIhRDTHYQEe050UCSMD2xoWhM1LOlCDRBhcKUDGGiJGhBK1qiEQzxc+cCRq0mBpgsxNOGQEQ848CZ3CzrpkIbBBUrQFET0kMOhOfRAxBQSLRECBAlEmgAEISwhmg+IZpqoRBFI6umkl2qKqA+cfippBKIRiumoizb6Qaf+p35gqaCCTsHoQ0sMEdsUTCBRBBK3MjTEAQQcUGlrvRahbBFQOGQDAdAWG4JqUixrLUQNRAstA7qaNoWv1ioRbEJBsCDQEhdoW2y3pDFh7RHNMpTEAAEskIRAMCigrQemQaHsEU8olEQBBdyrQwAIS0BQCvoSAMNptjI0AQAATCCQAAgHsEJBue5GAMUFCMRBxgbQOhDFFAuUBMYIm2AyFSgDMNDICJdscswEIZBxEDejTFAQLN9L68cAEFBQEhdsbPLEFb+MUBLQCu301FRXbfXVWGet9dZcd+3112CHLfbYZJdt9tlop6322my37fbbcMct99x012333Xjnrfcp3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGdOWEAAIfkECQMAWwAsAAAAAMgAyACHiaW5j6m8kKq9kqy+la6/mrPDnLPEn7bFoLbFo7nIpLnIpbrJqb3Kqr/Mrb/NrsDOr8LOsMLOssTQs8XQtsbSucnTucnUusnUu8nVu8rVvcvWvs3XwM7Xwc/YwtDYxdHaxdLbx9TbyNTbydXcytTdytXdy9Xdy9bez9ng0Nrg0drg0dvh09vh09vi09zj1N3j1d3j1d7k1t7k19/k2ODk2eDk2eDl2uDl2uHl2uHm2+Hm3OLn3ePn3ePo3uTo3+Xp4OXo4ebp4efp4ubq4ufq4+jr5ens5urt5+rt5+vu6Ozu6evt6ezt6ezu6u3v6+3v6+7w7O7w7O/w7O/x7e/w7e/x7fDx7vDx7/Hy8PHy8PLz8fLz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CP4AtwgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTRvhlRQprtR+mEOEiBy7DR75oZsgCt8pCl55IWQ2FRUqWFAh6Ns3wSYeNmwoDvs59BnUq/4TDKF9Q5PZMKCrCDKwuoiBNMqHoG1EPYvi7gVeya69R+300LG3xXEioCBQfNp98FoVWBR0hHowCNTbbwJ1UF5zBEWxxGlN4IDDDkoQxIN6TmxxBQoo6JZEeSsQdIMGFFDgg2lGeOjhDueZWEN0B11h4QnF+QBjjBS0YFoVOtjo4RANbnHEdAc1gWEUIhAZowUbHumDkjjM+BAHVlLAQZaoGZGkjU84NISVFhjJGhZm4qBDFQ4tYQEFbUYRG4MQaRjcnwRlwYQRRBRKhBFMZCFRFCZc4MCjDlxggp6hEWropUZIVAGknEYqmqWXFpppRJt2+mgFogkK6qGJLkpCqf6nkkApoH9qEdETSMh2BRS82toQEgwowEAJabK2K6+8NslQDwo0K2wJqmUxBbK8TgGRBM42O0GupmlBLa9WDJRCEQgZIYNAT3CQrbDcknYsr1I02UQCAAhw0BMIFABBsTY8kC20pWEBr7JbRADAwTts4USzJQJRwMMZEOSCvwrYcJqvBKVwMAAECITBAANgINABDxcQQ0G4vkbAxhoIlADICggEQskL1DbCxgHkCDLI6JL8cHKzrXxwywLtPMBAMz9cs2xFbGwAQUYT1EDJo8LWNAABkDtQ1AMZ4XOxsaVAQY4DvTxAAihzcDKtW3wcMtsJOZFAAiXCbffdeOet91XefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++68Gx4QACH5BAkEAFUALAAAAADIAMgAh4you5KsvpOsvpauv5iwwZ+1xKS5x6S5yKa6yae6yKe7yai8yam9yqy/zK7AzbDCzrDDzrHDz7PE0LXF0bXG0bjI07nJ073K1b3L1b7L1r7M1r7N18DO18LQ2MLQ2cPP2MTQ2cXR28fT28jU3MrV3MrV3cvW3szW3s3W3s3Y4NHa4NLa4dLb4tPc4tPc49Tc4tTd5NXe49Xe5Nff5Nff5dng5dnh5drh5tvi593j6N7k6N7k6d/l6eDl6eDm6eHm6eHm6uLn6uPo6+Xp7Obp7Obq7efq7efr7efr7ujr7ujs7unr7uns7urt7+vu8Ozu8O3v8e/w8u/x8vDx8vDy8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+AKsIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0bYRQWLKLUfojDhAkcuw0m8aGbIAvfLApCoRFkNhQXLmRAIejbN8EmITx4mB77OfQa1Kv+U9fuoclsGtBdABlY3cRAG+Tdzy6SXkbx9gKhZNfOozZ66OtVcZwJyVUBn3YjvBZFcQMlkd4MAvX2m0D7edAcQVAwcVoTOeTQwxIE8ZCeebflVgUS5LVAEA4cWGBBf6UZ0WGHPZhXRRQ3uADDQfp5kAJ3PLToogUvmBbFDjN2OERxSXBnUBMXQkHCkC5ioKGRPySZww8QgUClBSBciZoRSM74hENBUIlBkaxFQWYOOzC4EBMYWLCmk64tCFGGwfVJEBVNKFHEoEUo0QQVEj2BwgUPNPrABSicGZqghFaqhEQYOKrpo6JRWumgl0aU6aaNYiAaoJ4WemiiKIxaaqT+fsaa6BGyTSHFrQ8d0cACDZwg6Wq23nrrFA7psMCxvJ6wmrDMQjQBssdSQOtpzA47kApCIEQEDQI98QG0vE5LWrDCEltFEwgAIMBBThxQgAROCGQDBNAqWxq5iA4UAQD85nCuAgqY90MBBGtAUAz0LmCDayrwCwABAmUwwAAZCGQAwQVASNAT4rJGgMMbCJTAxAoIJALGDNRWgsMB2DjxxAI5cTHBK9D2Mb8hC/TyAAOdTHDKsgnhcAEE7UyQAxgTETS/AWQ7kNEDETFzvLKpUIGNA408QAIFOdGBxrFKTLGsCTWRQAJYk6322my37fbbcMct99x012333XjnrfdG3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsOMdEAAh+QQJAwBZACwAAAAAyADIAIeHpLeNqbqQqryUrb+Wrr+ZscGassKas8KbssOiuMaiuMenu8iovcqpvMqpvcqrv8ysv8yuwMywws6xw86zxNC0xNG2xtG3yNK4yNO6ytS8ytW8y9W9y9a+zNa/zda/zde/ztfAztfE0NrF0drF0tvG0tvH1NvI1NzJ1NzJ1dzL1t7N1t7N19/N2N/O2N/O2ODP2eDQ2+HS2uHU3OLV3ePW3uTX3+XY3+TY4OTY4OXa4OXa4ebb4ebc4+jd4+je4+je5Onf5enh5uni5uri5+ri5+vj5+vk6Ovk6Ozm6u3n6+3o6+7p6+7p7O3p7O7q7e/r7e/r7vDs7vDs7/Dt7/Dt7/Hu8PHv8fLw8fLx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gCzCBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NG6EVGjSs1H7oAwYMH7sNMhmCpSAN3zQKWslRZHaVGzd0VCHo2zfBJydIkNAd+zl04AOr/sMg2EI7iSezeUC/gSR89YE7zLegrWS9juJZxAu0kl27kNrqQddeFsfBkFwW8WmnwmtX4DcQE+vxIFBvvwlkgnnNEUQFeqZBIYQQRHAokBDrRZHFbbll0YR5B04oAgcc/FdaEx9+SAQUAmHxQ3QHWXFhDNwJ8SKMHNhg2hVD1PihEvgxMd1BT2RIBQtEwhiCiKRdYYSSQhwBUQlVclAClqY1kWSNVDhkRJUhGMkaFmYKMcQVDj0RAgdtpglbgxBtGNyfBGFBBRROFOoEFFQ4+NAULnRQwaMVdODCFKIRauilOEb0AaScRlrppZhKtGmnj34gmqCWFoqoog5N8cKo/qW+QCmggBLhBERSLBGbExoEAEAARDi0hAQPSPCCFK1t4CsAzNbgUBAPRFvsC6r1cACz2BoAEQbSRnuBrqYRsSy2EdyahQwDGpQEDgJJUUK3xYJL2gbYAjDAeFk40YAABBwExQIJWJApDxR0y4JpMDA7QAoEUSDAw0BkAQUDDOA4RAIYh0BQDQU/IGG45g4kw8MCICCQBwUU4IFAAGN8Q0G5voYAySAI5EDKDAiEAsYJQFDbCiQTYG7KKQv0L88z0DbzwzULRHQBA+2Msc+yIUGyAgQ9TdAEPCdR9cMEpJuF1gMl0XKmscmQQcg2p+xAQVCM8DKtWaCsMt0JQeGAXwNo4+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456777rz37vvvwAcv/PDEMx4QACH5BAkDAGAALAAAAADIAMgAh4unupKsvpOtv5ewwZmwwZmxwp2zxJ20xZ61xJ+1xKS5yKa6yaq+y6u+zKu/zKy+zK2/za/BzbDBzrDCzrLE0LPE0LfH0rfH07jH0rjI07rK1LvK1bzK1b7M1r7M18DO18HP2MLP2MPP2cbT28fT28nU3MrV3MrV3cvV3czW3c3W3s3Y38/Y4M/Z38/Z4NDZ39Da4NLb4NPb4dTc4tTc49bf5Njf5Njg5Nng5Nng5drh5dvh5tvi59zi5t3j593j6N7k6N/k6d/l6eDm6eHl6eHm6eHm6uLm6uLn6uPn6+To6+To7OTp7OXo7OXp7Obp7ebq7efq7ufr7ujr7unr7uns7ens7urt7+zu8O3v8O3v8e7v8e7w8e/w8u/x8vDy8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+AMEIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0boZcbN7zUfjhEhowhuw1acaKbIA7fNwpu2aFkNpcdO3xwIejbN0EsKUyY2CL7OXQh1Kv+E4yh3QSW2UCg74AysLqMgT/Kx6BdRb2P4u4Fbsmu/Ujt9NCxB8ZxMuAgUHzasfCaF18UZIV6QAjU228CqVBecwRpccVpWCyxxBPnDYSEelmA4QUOOOhmRXnJDQTECB98QIRpV3joIYgCeVHEDj0ctIWFMnAHBhEwxvhBi6R50YSNHlLRIBhWTHcQFhhq0YKRMYqwoWleRMHkElFAVAKWH5SwJWpXLGmjFg4xgaUISKr2RZpLNFEcQ1eI8AGcbMLGIEQaBidoQV1wocWhWnDRxURYwBCCBZBaEAIMIYJmKKKYSgkRCJF2Kqlol2J6qKYPceoppCCMVmimi0qExQv+pqL6QqWDBpeEFRBhMUVsVnQQAAABJOHQFBREQAGlrXnwKwDM1uDQEBFEaywMqv2AALPYHgCRBtJGu8GupiWxLLYT4ArGDEwgJIUOAmFBQrfGgkuaB9gCMAC1YFzhgAAFTNnAAhmEyAMG3bpgGgzMDnACQRcI4HAQ+UIAwYZGLGBxCATZQHAEPJx2a0EzOCxAAgKBYIABqYLBgMUL5FCQrq8lIHLKD5wMgUAosCxBbSuITMCWJ5/c7soW00CbzA6nDEbQBgyUs8U7y8aEyAoQxDRBFbAshdQOE5DuQFcPJAXRtL42AwdnClSzAQ+8PILLtYJhMspxJ3TFAw+kXfdb3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPfu++/AB494QAAh+QQJBABaACwAAAAAyADIAIePqbuVrb+YsMCbs8KdtMSetMShtsWit8WiuMaovMmpvcqtv8yuwM2wwc2wwc6yxM+yxNCzxNC3x9K3x9O4yNK5ydS7ytS7ytW+zNa+zNe/zdbAztfDz9nE0NnE0NrE0drF0drF0tvG09zI1NvJ1dzK1d3M1t3M1t/M197M19/O2ODP2eDP2eHR2+HS2uHS2+LT2+LT3OLU3OLV3ePW3uTX3+TZ4OXa4OXa4Oba4ebb4ebc4+jd4+je5Ojf5eng5eng5unh5unh5uri5uri5+vj5+vj6Ovl6ezl6u3n6+3o6+7o7O3p6+7p7O7q7O/q7e/r7e/r7vDs7vDt7/Dt7/Hu7/Hu8PHu8PLv8PHw8fLx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gC1CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NGyGWHDmw1H44hAaNIbsNPkmSpWAO3zkKXtmBZLYVHz6AWCHo2zdBKSxSpLgi+zl0IdSr/hOMoT2FlNlDoPtQMrA6jYE+yseg/UQ9kOJa3Au8kl07kdrpQceeFsfRkJwW8WnXwmtZ4DdQfdABp0VvvwmkQnnNEUQFFKdZoYQSTFRB0BHqTaHFbblp0UR5OBDkQwkeePBfaVJ8+CET02mRhRHRHXTFhTNwpwURMMboQYulZdGEjR8+gd8TORokRYZUvGBkjCJwaFoWTNoI0QlXenCClqhJsaSNUS6ExJUiILlaFmYq0YSDC0EhggdtUhFbgxBtGNyfIFEBAwgXFHoBCDDoCShBIRjq6KGLMvqooSFEOpCgjVKaqKXBGeFEn0vE5sQGAQAQgBEOLTEBBBO0oOhq/hqUCsCsNTgUBAS4srpgaj0cMOuvBkCUQa64ZhCqaUbI+msEn2ohwxEIKXGDQFSQQCyrx5Kmwa8ADOCCQE4wIEABB0XBgAIWRCEQDxUQuytpLsw6gAkEUSDAvT9oEUUDDahbhAIAd0CQDe1CwMNpnhYkw70CICAQBwYYwIFACwCsgA4FUZEtawgw/IFADkTcgEAoWPxAbSswTECzEUcsUBQVAzwDbR3f+7FALQdLssmzHcFwAgTlTJAEFg8Im88CEADtQEIPpETM6somAwbNDhSyAQ4UFMUIGEcKscScluuAA1GHbfbZaKet9tpst+3223DHLffcdNdt99145633Qd589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqs8xQQACH5BAkDAFkALAAAAADIAMgAh4mluZKsvpixwZqzw5yzxJ2zxZ20xZ+2xaC2xaO5yKS5yKW6yaq/zK2/za/CzrHDz7LE0LPF0LXF0rbG0rfG07nJ07rK1L3L1b7N17/M18DO18DP2MHP2MXR2sXS28bS28fU28jU28jU3MrU3cvV3MvV3czX383Y387Y38/Z4NDa4NHa4NPb4dPb4tTd49Xd49Xe5Nbe5Njg5Nng5Nrg5drh5dvh5tvi59zj593j597k6N/l6eDl6OHm6eLm6uLn6uPn6+Po6+To6+To7OTp7OXp7Obq7ejr7ujs7unr7ens7ens7urt7+vt7+vu8Ozu8Ozv8Ozv8e3v8O3w8e7w8e/w8u/x8vDx8vDy8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+ALMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0boRUdOqzUfgikRg0guw0+UXKloA7fOgpS2WFkdpUfP4JUIejbN0EpLFasoCL7OfQi1Kv+E4yhfYWU2USg/1gysHqNgT3Kx6DtRH2Q4lncC6SSXTt42ulBx14Wx9WQXBbxaffCa1gIpx4RAvX2m0D9rdAcQVQ0cZoVTjgBhW4DHaEed7fllgUT5eVAkA8nhBCCEKZR0WGHHwp0hRHQHcTfCjNwl4UQLboYAg6mYTHjjFMM9MR0B0lxIRUvCOkiCRoWGcWRTkQBUQpShpBClajJeCSIDBkhJQlEtiamEw021AQJIaDpI4MRZRjcnQQtQUEBAPQJQAEUDAgRFS6IgMGhGIjgwpyfEeDno39KBAKilCYqmqOQ9kmApJUiCoJoS0yAqaYTCPoQoZN6uiierArBBET+TyQRGxMcCBCAADA2lEQFE1TQwhOtbWBrAMTK4JAPEyTbawuq6aAAsdAmAJEGyibLgaymCTEstBK8mgUM/xmEhA0CPVFCtb1iS9oG0AZgAAsCNeHAAAgc9MQDDWQALIEXVMtsaSwQa4AJBFkwwME8ZNFEBBFoOEQDEH9AEA39TnBgaa4WBMPBAywgUAcKKNCBQPhCfENBsb62AMceCARByBEIhALEDUxQmwocH1BlyCGXW3ID88228sEtC8SzAgPNDLHNshXBMQMEHU1QBTQj0fTBB4SbhdQDIVHyvrHBoAGYLocMAcojnMxqFiCLvHZCTUAAAdlv12333XjnrfdU3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuggcEACH5BAkDAFkALAAAAADIAMgAh4you5auv5uzw5+1xJ+1xaK3xqS5x6S5yKe6yKe7yai8yam8yq7AzbDCzrPE0LTE0LXE0bXF0bXG0bjI0rjI07nI07nJ073L1b3L1r7L1r/N1sHO18LQ2MLQ2cPP2cPQ2cTQ2cfT28nU3MvV3svW3s3W3s3Y383Y4M7Y4NDZ39Da4dLa4dLb4tPc4tPc49Tc4tTd5NXd49Xe5Nbe5Nbf5dff5Nff5dng5dnh5trg5trh5tvi59zi593j6N7k6d/l6eDm6eHm6eHm6uLn6uLn6+To6+Tp7OXp7Obp7Obq7efr7efr7ujr7ujs7uns7urt7+vu8Ozu8Ozv8O3v8e7w8e/w8u/x8vDx8vDy8/Hy8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wj+ALMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk0bYZUgQarUfnikR48juw1SeYKlYBDfQQpWAcJktpUkSZRYIejbN8EpMly40B37OfQm1Kv+E8Sh3cWU2U2gJ4EysHqPgULK46AtRb2S4lncC6ySXXuS2ulBx14Wx/WQXBbxaWfDblSoB14Wvf0mEAzlNUdQFQOWdoUVHOIn0BPqTXdbblk8Ud4PBBGhAgkkGGHahhxyeIVAWDgR3UFVUKgDd0asyCIJPpwWY4wzCkTFdAdNYWEVNPzI4gkZljZkjBCx4CQJLET54pRFMrSEkycE2RqMSDYExQkkhMldcAphyOabH1JAAAB0AkAABU9INIUNI3TgZwcj2HBeaAPUaaidEpHw56KAilbooXQOkCijf5Ig2hMUPBopnnrOoGilMwwKZ3BH5PnQFE7E9oQHAgQgAHD+DTmBgQUYxCCqah+0GsCuOTg0hAXA0hqDaj8ksOuxCEAEQrDAgpCqaUfoeuwEptaABEJOvJfFFCYwS+uzpH1wbAAFtCAQFA4McMBBUUDQwAZRCPSDBsy+YFoLuxaAAkEZDOBvclFIIEG8RTRgsAgE7UCvBShCa+pANfg7wAIChaCAAiEI9IDBDfBQEKqvLSBxxllEcLEEAqXAcQW1rSCxAQNefLFAUWxs8A20iewvyVnIrMBAKhvMsmxISMwAQT4TdAHH4L5W9AAGXDtQ0gM5YXO8stXAgZYmKxBBQVGU4PGoFmM8akJRRBAB1me37fbbcMct99x012333XjnrfdK3nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++x8BwQAIfkECQQAWAAsAAAAAMgAyACHh6S3jai6kKq8lK6/mbHBmrLCmrPCnrTDobfGorjGorjHo7nIp7vIqL3Kqb3Kq7/MrL7Lr8HNscPOtMTRtsbRt8fSt8jSuMjTucrUusrUu8nVvMvVvcvWv83Wv83XwM7Xw8/ZxdHaxdLbxtLbx9PcydTcydXcytTdzdjfztjgz9ngz9rg0Nrg0dvg0trh09vh1Nzi1d3j1t7k19/l2N/k2ODl2eDl2eHl2uDl2uDm2+Hm3OLn3ePo3uPo4OXp4Obp4ebp4ubq4ufq4+fr4+jr5Ojr5Ojs5ens5ert5urt5+vt6Ovu6evu6ezu6u3v6+3v6+7w7O7w7O/w7e/w7e/x7vDx7/Hy8PHy8fLz////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CP4AsQgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTRvhlSJFrtR+uAQIkCW7DVaZopvgEN9FCl4JwmT2lSZNnBQX6Ns3QSo4aNCY/vo59CcEq/4DIbhDOw0qs51Ab4KeevWBRszvoF1lvXT31rFcya5dSW310LV3HBBDCBSfdjq8JkQTBdUHnRMC9fabQPzR0BxBVURxmgoAADCACQRFsZ4V+g0xhG5QmDfeQES8oIIKSZi2QYcdDqCCQFdAAd1B+9HQQ3FJuPiiCj6YJkQANHYYAYNYVMHddRdWccOQL7agoZEFJAmAARDFQKUKMVyJ2gZI0iiDQ0tQ2UKRrDVBJgABCOFQFC2osGYVsS0IUYbB9UlQExkgIMCgAiCQAZN71pCCCIyKkEINeIamAKGUFioRCo1m6qhok1Y6qAKXatooCqIB2umnh0pUhQ2YjmpDpP5+9okEeA9NASFsT4RwAAEHIOGQEx9w8MEMU7SmKwHIEpBgQ0Nw4KywM6j2QwPJIusARCM86ywJt5aGxK7VYkArDTEexAQPAk3BgrbCdjtaCNUuEINAT1CQAAMHSVHBBCBIQR0I2kZbWgzILrACQR0koHAQWERhgQUaHjHBxCcQxAPAHKzoLa0D0aBwAhAIZMIDD4CIxb4To0uQra9B8HEJAl1AsgUCuTDxBBrUBsPHDNBKMskC6XtzDrS5rDDMAv38wEA2T5yzbEl8LAFBShPkwc0Xwhb1veUm/TNBTKDsr2w0hMBxzCRfUJAUKagc68glx6pQFBdcIKbceOet91nefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+777xAFBAAh+QQJAwBdACwAAAAAyADIAIeLp7qRq72Trb+YsMGds8SdtMWetcSiuMekucilucmmusmou8mqvsurvsysvsytv82vwc2ww8+zxNC3x9K4yNO6ydS6ytS7ydS7ytW8ytW+zNa+zNfAztfBz9jC0NjE0NnF0drF0tvG0tvG09vH09zJ1NzJ1dzK1dzL1d3M1t7Q2d/Q2uDR2uDS2+DT2+HT3OLU3OPU3ePW3uPW3uTW3+TY4OTZ4OTZ4OXa4ebb4ebb4efc4ubc4ufd4+fe5Ojf5Ong5eng5unh5enh5unh5uri5uni5+rj5+vk6Ozk6ezl6ezm6u3n6u7n6+7o6+7p6+3p7O3p7O7q7e/s7vDt7/Dt7/Hu7/Hu8PHv8PLv8fLw8fLw8fPw8vPx8vP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8I/gC7CBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55NGyEXJky41H4YBQmSKLsNasFikIlvJgWzKAEuW0uV51oI+vZN8EqPHDmyNH9e5Yr06QSB/mDP4V029yrEBU5HMnDJeCC0sZwfuF5gluvYodQ+n944EuRduIedD68dwdxAznEnUG+/CbTDeAfaN8VpKwAAwAAoVMfdFl3cllsXVIxnBEFKyOCCC06YtoGFFg6wwkBWPHdQFg8OoV0XTph4ogtFmHZEACxaGAFzWkR30BXMZcHDjifGMKGPBQQJgAEQ2cCkCzY8idoGQLJIg0NPMBlDj6xFwSUAARzh0BQxuDDmjQVGyFAWWgZnZxdSZJCAAHwKkEAGUkhkRQ4snGDoCSzkYIVoCPTpqJ8StXDopIgy+mifCERK6aEtiJZno5gCKmgOknKq6J2oLhHoQ1Ws+poU/iQcQMABSzgkxQccfFBDFa2JICsBwOrgUBIcFJtrDaoF8QCwzDoAUQnGFmuCq6Qt8SuzonZxQxMIRfGDQFW4EG2u1IomArMELDCDQFNQoEADB01xwQQgPClECNEiW9oMwC7AAkEeKCAwEV1MgQEGEyoxwcIpEOQDvhwIcZqqBd0gsAIQCJQCBBA03EUFC09AIEGtvgbBxRl2YQHHGAj0Qsga1AbDxQw8yTHH7IK8MA60nSxwyl3cnLHLMM/WxMUSECQ0QR2ELGdrRyvAALcDLT1QFDrX+doNI2i9MgQWFDSFCiOjunHHqCo0hQUWaJ3223DHLffcdNdt99145633Tt589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNduu0MBAQA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';","import React from \"react\";\nimport { getURL } from \"../../../../helpers/HashHelper\";\nimport { BaseAsset } from \"../../../../types/Asset\";\nimport HoverToPlayAudio from \"../HoverToPlayAudio\";\nimport HoverToPlayVideo from \"../HoverToPlayVideo\";\n\ninterface Props {\n  asset: BaseAsset;\n  size?: number;\n}\nexport default function AssetCardPreview({ asset, size= 250 }: Props) {\n  const getPreviewImage = () => getURL({ source: asset.image, size });\n\n  const getPreview = () => {\n    const previewImage = getPreviewImage();\n    if (asset.video?.length > 0)\n      return (\n        <HoverToPlayVideo\n          previewImage={asset.image && getURL({ source: asset.image })}\n          video={getURL({ source: asset.video, size })}\n        />\n      );\n\n    if (asset.audio?.length > 0)\n      return <HoverToPlayAudio previewImage={previewImage} audio={getURL({ source: asset.audio, size })} />;\n    return <img style={{width:'100%', height: '100%'}} src={previewImage} alt={previewImage} />;\n  };\n\n  return getPreview();\n}\n","import { Row, Col } from \"antd\";\nimport React from \"react\";\nimport { BaseAsset } from \"../../../types/Asset\";\nimport AssetCardPreview from \"../../AssetCard/components/AssetCard/AssetCardPreview\";\n\ninterface Props {\n  assets: BaseAsset[];\n  moreInfo?: JSX.Element;\n}\nexport default function AssetsPreview({ assets, moreInfo }: Props) {\n  var currentAsset = assets?.[0];\n  return (\n    <Row\n      style={{\n        background: \"rgba(229, 226, 253, 0.16)\",\n        boxShadow: \"inset 16px 16px 40px rgba(125, 112, 246, 0.12)\",\n        borderRadius: 16,\n        padding: 16,\n      }}\n      gutter={[16,16]}\n      align={\"middle\"}\n    >\n      <Col style={{ height: 80, borderRadius: 16 }}>\n        <AssetCardPreview asset={currentAsset} />\n      </Col>\n      <Col>\n        <Row gutter={[0, 4]}>\n          <Col xs={24}>\n            <p className=\"font-md fw3\">{currentAsset.name}</p>\n          </Col>\n          <Col xs={24}>\n            <p className=\"font-sm color-text-secondary\">\n              {currentAsset.collection_name}\n            </p>\n          </Col>\n          {moreInfo}\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n","import { Row, Col } from \"antd\";\nimport React from \"react\";\nimport { priceWithCurrencyToString } from \"../../../helpers/CurrencyHelper\";\nimport WaxCurrencyIcon from \"../../../icon/wax-currency\";\nimport { BaseSale } from \"../../../types/Sale\";\nimport AssetsPreview from \"../../BaseComponent/AssetsPreview\";\n\ninterface Props {\n  sale: BaseSale;\n}\nexport default function SalePreview({ sale }: Props) {\n  return (\n    <AssetsPreview\n      assets={sale.assets}\n      moreInfo={\n        <Col xs={24}>\n          <Row align={\"middle\"} gutter={8}>\n            {sale.price_symbol.toLowerCase() === \"wax\" && (\n              <Col style={{ height: 16 }}>\n                <WaxCurrencyIcon height={16} width={16} />\n              </Col>\n            )}\n            <Col>\n              <p className=\"font-md fw3\">\n                {priceWithCurrencyToString(\n                  sale.price_symbol,\n                  sale.price,\n                  sale.token_precision\n                )}\n              </p>\n            </Col>\n          </Row>\n        </Col>\n      }\n    />\n  );\n}\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\nimport { Asset } from \"../../../../../types/Asset\";\nimport { BaseSale } from \"../../../../../types/Sale\";\nimport { WithLabel } from \"../../../../../types/WithLabel\";\n\ninterface Props {\n  sale: BaseSale;\n}\nexport default function SaleSummary({ sale }: Props) {\n  const firstAsset = sale.assets?.[0] || ({} as Asset);\n  const saleSummaries: WithLabel<string>[] = [\n    { label: \"Sale ID\", value: sale.id },\n    { label: \"Asset ID\", value: `#${firstAsset.asset_id}` },\n    { label: \"Collection\", value: sale.collection_name },\n    {\n      label: \"Mint Number\",\n      value: String(firstAsset.template_mint || 0),\n    },\n    { label: \"Asset Name\", value: firstAsset.name },\n    {\n      label: \"Seller\",\n      value: sale.seller,\n    },\n  ];\n  return (\n    <Row gutter={[0, 12]}>\n      <Col>\n        <p className=\"font-sm color-text-secondary fw3\">Summary</p>\n      </Col>\n      <Row gutter={[8, 8]}>\n        {saleSummaries.map((summary) => {\n          return (\n            <Col xs={24} lg={12}>\n              <Row justify={\"space-between\"}>\n                <Col xs={24} className=\"fw1\">\n                  <span className=\"font-sm color-text-secondary\">{summary.label}</span>\n                </Col>\n                <Col xs={24} className=\"fw2\">\n                  <span className=\"font-md fw3\">{summary.value}</span>\n                </Col>\n              </Row>\n            </Col>\n          );\n        })}\n      </Row>\n    </Row>\n  );\n}\n","import { Col, Modal, Row } from \"antd\";\nimport { useState } from \"react\";\nimport { BaseSale } from \"../../../types/Sale\";\nimport HighlightContainer from \"../../BaseComponent/HighlightContainer\";\nimport FooterAcceptPolicy from \"../../ModalWithAcceptPolicy/Footer\";\nimport SalePreview from \"../SalePreview\";\nimport SaleSummary from \"./component/SaleSummary\";\n\ninterface Props {\n  isOpen: boolean;\n  onCancel: () => void;\n  onConfirmed: () => void;\n  sale: BaseSale;\n}\n\nexport default function BuyTheSale({\n  isOpen,\n  onCancel,\n  onConfirmed,\n  sale,\n}: Props) {\n  const [state, setState] = useState<State>({ isAcceptPolicy: true });\n  return (\n    <Modal\n      className=\"with-policy-modal\"\n      width={560}\n      open={isOpen}\n      onCancel={onCancel}\n      footer={\n        <FooterAcceptPolicy\n          isAcceptPolicy={state.isAcceptPolicy}\n          onAcceptPolicy={(isAcceptPolicy) => setState({ isAcceptPolicy })}\n          actions={\n            <button\n              className=\"btn btn-primary-active\"\n              onClick={onConfirmed}\n              disabled={!state.isAcceptPolicy}\n            >\n              Buy NFT\n            </button>\n          }\n        />\n      }\n    >\n      <Row gutter={[24, 24]}>\n        <Col style={{ marginTop: 24 }} xs={24}>\n          <h1 style={{ textAlign: \"center\", marginTop: 24 }}>Buy NFT</h1>\n        </Col>\n        <Col xs={24} md={24}>\n          <SalePreview sale={sale} />\n        </Col>\n        <Col xs={24} md={24}>\n          <Row gutter={[16, 16]}>\n            <HighlightContainer>\n              <SaleSummary sale={sale} />\n            </HighlightContainer>\n          </Row>\n        </Col>\n      </Row>\n    </Modal>\n  );\n}\n\ninterface State {\n  isAcceptPolicy: boolean;\n}\n","export enum CollectionStatus {\n  UN_WHITELISTED = 1,\n  WHITELISTED = 2,\n  VERIFIED = 3,\n  BLACKLIST = 4,\n}\n\nexport interface Collection {\n  collection_name: string;\n  name: string;\n  img?: string;\n  author?: string;\n  allow_notify?: boolean;\n  authorized_accounts?: string[];\n  notify_accounts?: any[];\n  market_fee?: number;\n  created_at_block?: string;\n  created_at_time?: string;\n  contract?: string;\n  image?: string;\n  status?: number;\n}\n","import { Row } from \"antd\";\nimport React from \"react\";\nimport {\n  WhiteListAndVerifyIcon,\n  WhiteListOrVerifyIcon,\n} from \"../../../../icon\";\nimport { CollectionStatus } from \"../../../../types/Collection\";\n\ninterface Props {\n  name: string;\n  status?: CollectionStatus;\n}\nexport default function CollectionWithStatus({ name, status }: Props) {\n  return (\n    <Row align=\"middle\">\n      <span>{name}</span>\n      {status && (\n        <div style={{ marginLeft: 5 }}>\n          {status === CollectionStatus.WHITELISTED && <WhiteListOrVerifyIcon />}\n          {status === CollectionStatus.VERIFIED && <WhiteListAndVerifyIcon />}\n        </div>\n      )}\n    </Row>\n  );\n}\n","import { Progress, Timeline, Tooltip } from \"antd\";\n\nexport interface AwaitProgressItemProps {\n\tid: string;\n\tprogress: number;\n\thasError: boolean;\n\tcontent: string;\n  }\n\nexport default function AwaitProgressTimeLine({ items }: Props) {\n  const showColor = (progress: number) => {\n    if (progress === -1) return \"red\";\n    if (progress === 0) return \"gray\";\n    if (progress <= 99) return \"blue\";\n    if (progress === 100) return \"green\";\n  };\n\n  const showTitleTooltip = (progress: number) => {\n    if (progress > 0 && progress <= 99) {\n      return `Waiting a moment, already running: ${progress}%`;\n    } else if (progress === 100) {\n      return `Finished with success: ${progress}%`;\n    } else if (progress < 0) {\n      return `Process: Error !`;\n    } else {\n      return `Starting process: 0%`;\n    }\n  };\n\n  const showStatusOfProgress = (progress: number) => {\n    if (progress <= 0) return \"exception\";\n    if (progress <= 99) return \"active\";\n    if (progress === 100) return \"success\";\n  };\n\n  return (\n    <Timeline>\n      {items.map((item) => (\n        <Timeline.Item key={item.id} color={showColor(item.progress)}>\n          {<span>{item.content}</span>}\n          <Tooltip\n            color={showColor(item.progress)}\n            title={showTitleTooltip(item.progress)}\n          >\n            <Progress\n              percent={item.progress}\n              showInfo={item.progress === 100 || item.hasError}\n              status={showStatusOfProgress(item.progress)}\n            />\n          </Tooltip>\n        </Timeline.Item>\n      ))}\n    </Timeline>\n  );\n}\n\ninterface Props {\n  items: AwaitProgressItemProps[];\n}","import { Modal, Row, Col } from \"antd\";\nimport React from \"react\";\nimport Card from \"./BaseAssetCard\";\nimport CollectionWithStatus from \"./CollectionWithStatus\";\nimport AssetCardPreview from \"./AssetCard/AssetCardPreview\";\nimport styled from \"styled-components\";\nimport { BaseAsset } from \"../../../types/Asset\";\nimport { BaseSale, Sale } from \"../../../types/Sale\";\nimport AwaitProgressTimeLine, {\n  AwaitProgressItemProps,\n} from \"../../AwaitProgressTimeline\";\nimport { FooterLogoIcon } from \"../../../icon\";\nimport SalePreview from \"../../AssetAction/SalePreview\";\n\nexport const ContentWrapper = styled(Row)`\n  .preview {\n    width: 180px;\n    margin-right: 48px;\n  }\n  .progress {\n  }\n\n  .progress > .title {\n    font-weight: 700;\n    margin-bottom: 24px;\n  }\n\n  .finish {\n    margin-top: 40px;\n  }\n\n  @media (max-width: 768px) {\n    justify-content: center;\n\n    .content {\n      justify-content: center;\n    }\n\n    .preview {\n      width: 300px;\n      margin-right: 0px;\n    }\n    .progress {\n      margin-top: 24px;\n    }\n\n    .finish {\n      margin-top: 24px;\n    }\n\n    .finish > p {\n      text-align: center;\n    }\n  }\n`;\n\ninterface Props {\n  visible: boolean;\n  sale: BaseSale;\n  hasFinish: boolean;\n  finishDescription?: JSX.Element;\n  onCancel: () => void;\n  onFinish: () => void;\n  steps: AwaitProgressItemProps[];\n}\nexport function ProcessingBuyModal({\n  sale,\n  visible,\n  onCancel,\n  onFinish,\n  hasFinish,\n  steps,\n  finishDescription,\n}: Props) {\n  const normalizeSale = (s: BaseSale) =>\n    ({\n      ...s,\n      assets: s.assets.map((a) => ({\n        ...a,\n        image: a.previewImage || a.image || a.img,\n        collection_name: s.collection_name,\n        collection_status: s.collection_status,\n      })),\n    } as Sale);\n\n  const renderDefaultContent = (asset: BaseAsset) => {\n    return (\n      <div className=\"content\">\n        <p className=\"title\">{asset.name}</p>\n        <p style={{ marginTop: 4 }} className=\"desc\">\n          <CollectionWithStatus name={asset.collection_name} />\n        </p>\n      </div>\n    );\n  };\n\n  const normalizedSale = normalizeSale(sale);\n\n  return (\n    <Modal\n      className=\"with-policy-modal\"\n      centered\n      open={visible}\n      title={<span className=\"font-lg\">Buy sale #${sale.id}</span>}\n      onCancel={onCancel}\n      footer={[\n        <Row align=\"middle\" justify=\"space-between\" key={\"footer\"}>\n          <Col xs={24}>\n            <button\n              style={{ width: \"100%\", borderRadius: 100 }}\n              className=\"btn btn-primary-active list-nft-btn\"\n              key=\"submit\"\n              disabled={!hasFinish}\n              onClick={onFinish}\n            >\n              Close\n            </button>\n          </Col>\n        </Row>,\n      ]}\n      width={560}\n    >\n      <ContentWrapper>\n        <Row gutter={[0, 40]} className=\"content\">\n          <Col xs={24} className=\"preview\">\n            <SalePreview sale={sale} />\n          </Col>\n          <Col xs={24} className=\"progress\">\n            <AwaitProgressTimeLine items={steps} />\n          </Col>\n        </Row>\n        {hasFinish && <div className=\"finish\">{ finishDescription}</div>}\n      </ContentWrapper>\n    </Modal>\n  );\n}\n","import React from \"react\";\nimport { useState } from \"react\";\n\nexport default function UseAssetDetail() {\n  const [state, setState] = useState<State>({ selectedItem: null });\n\n  return {\n    ...state,\n    setAssetDetail: (selectedItem: any) =>\n      {\n        console.log({selectedItem});\n        setState((prev) => ({ ...prev, selectedItem }))\n      }\n  };\n}\n\ninterface State {\n  selectedItem: any;\n}\n\nexport const AssetDetailContext = React.createContext<\n\tReturnType<typeof UseAssetDetail>\n>({} as any);\n","import { useContext } from \"react\";\nimport { appConfig } from \"../../../config/AppConfig\";\nimport { waxCurrency } from \"../../../constant/constants\";\nimport { priceWithCurrencyToString } from \"../../../helpers/CurrencyHelper\";\nimport { getMedianValue } from \"../../../hook/useMedian\";\nimport { NavigatorContext } from \"../../../hook/useNavigator\";\nimport UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport { WaxAuthenContext } from \"../../../hook/useWaxAuthen\";\nimport { getAcceptBcbrawlers } from \"../../../services/RpcService\";\nimport { Sale } from \"../../../types/Sale\";\nimport {\n  formatWaxp,\n  formatUsd,\n  convertToWaxp,\n  convertToUsd,\n  isSupportAutoRetrive,\n} from \"../../../utils/helpers\";\nimport BuyTheSale from \"../../AssetAction/BuyTheSale\";\nimport { ProcessingBuyModal } from \"../../AssetCard/components/ProcessingBuyModal\";\nimport { AssetDetailContext } from \"../../marketplace/context/useAssetDetail\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function RapidSaleBuyable(props: Props) {\n  const { goToUserInventory } = useContext(NavigatorContext);\n  const { setAssetDetail } = useContext(AssetDetailContext);\n  const { sale } = props;\n  const {\n    progress,\n    isConfirming,\n    isProgressing,\n    setTransactionProgressState,\n    onError,\n    onFinish,\n    onStart,\n    onReset,\n  } = UseTransactionProgress({});\n  const { authen } = useContext(WaxAuthenContext);\n  const { acceptBcbrawlersTerm, checkTransaction, buy } = useUal();\n\n  const saleStatusFilter =\n    props.sale.deferred_listing === true ? \"deferred\" : \"sales\";\n\n  const calculateSalePrice = (\n    price: number,\n    symbol: string,\n    settlementSymbol: string,\n    median: number\n  ) => {\n    if (settlementSymbol.includes(symbol)) {\n      if (symbol === waxCurrency.toUpperCase()) {\n        return `${formatWaxp(price)} ${symbol}`;\n      }\n      return `${formatUsd(price)} ${symbol}`;\n    } else {\n      if (settlementSymbol.includes(waxCurrency.toUpperCase())) {\n        return `${convertToWaxp(price, median)} WAX`;\n      }\n      return `${convertToUsd(price, median)} USD`;\n    }\n  };\n\n  const doBuy = async () => {\n    const { price, price_symbol, settlement_symbol, market_contract } = sale;\n    const asset = sale.assets[0];\n\n    onStart();\n    try {\n      const medianValue: number = await getMedianValue();\n      const salePrice = calculateSalePrice(\n        price,\n        price_symbol,\n        settlement_symbol,\n        medianValue\n      );\n\n      const tx = await buy(\n        salePrice,\n        sale.id,\n        sale.assets.map((asset) => asset.asset_id),\n        settlement_symbol\n      );\n      await checkTransaction(tx);\n\n      onFinish(\"Transaction finished\", \"The asset was successfully bought!\");\n    } catch (error) {\n      onError(\"Error buying item on sale\", error.message);\n    }\n  };\n\n  return (\n    <div>\n      <span\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        Buy Now\n      </span>\n\n      <BuyTheSale\n        isOpen={isConfirming}\n        onCancel={() => setTransactionProgressState({ isConfirming: false })}\n        onConfirmed={doBuy}\n        sale={props.sale}\n      />\n\n      <ProcessingBuyModal\n        hasFinish={progress.hasFinish}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        finishDescription={\n          <div>\n            <p className=\"font-lg fw4\">\n              Congrats! You just purchased{\" \"}\n              <span className=\"font-lg color-primary\">\n                {sale.assets?.[0]?.name}\n              </span>{\" \"}\n              for{\" \"}\n              {priceWithCurrencyToString(\n                sale.price_symbol,\n                sale.price,\n                sale.token_precision\n              )}\n              . Please view your NFTs in the{\" \"}\n              <span\n                style={{ cursor: \"pointer\" }}\n                // target=\"_blank\"\n                className=\"font-lg color-primary\"\n                // href={`${appConfig.service.marketplace}/profile/${authen.userAccount}?status=${saleStatusFilter}&verified=false&whitelisted=false`}\n                onClick={() => {\n                  setAssetDetail(null);\n                  goToUserInventory();\n                  onReset();\n                }}\n              >\n                Marketplace Inventory\n              </span>\n              !\n            </p>\n          </div>\n        }\n        sale={props.sale}\n        steps={progress.steps}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}\n","export const wait = (millisecond: number) =>\n  new Promise<void>((resolve) => {\n    setTimeout(() => {\n      resolve();\n    }, millisecond);\n  });\n","import { Col, Modal, Row } from \"antd\";\nimport React from \"react\";\nimport { BaseSale, SaleState } from \"../../../types/Sale\";\nimport SalePreview from \"../../AssetAction/SalePreview\";\nimport AwaitProgressTimeLine, { AwaitProgressItemProps } from \"../../AwaitProgressTimeline\";\n\ninterface Props {\n  visible: boolean;\n  sale: BaseSale;\n  hasFinish: boolean;\n  onCancel: () => void;\n  onFinish: () => void;\n  steps: AwaitProgressItemProps[];\n}\nexport default function CancellingSaleModal({\n  sale,\n  visible,\n  onCancel,\n  onFinish,\n  hasFinish,\n  steps,\n}: Props) {\n  return (\n    <Modal\n      centered\n      visible={visible}\n      title={\n        <p>\n          {sale.state === SaleState.ADMIN_REMOVED\n            ? `Withdraw item`\n            : `Cancel sale #${sale.id}`}\n        </p>\n      }\n      onCancel={onCancel}\n      footer={[\n        <button\n          className=\"btn btn-primary list-nft-btn\"\n          key=\"submit\"\n          disabled={!hasFinish}\n          onClick={onFinish}\n        >\n          Close\n        </button>,\n      ]}\n      width={560}\n    >\n      {/* <AwaitProgressTimeLine items={steps} /> */}\n      <Row gutter={[0, 40]} className=\"content\">\n          <Col xs={24} className=\"preview\">\n            <SalePreview sale={sale} />\n          </Col>\n          <Col xs={24} className=\"progress\">\n            <AwaitProgressTimeLine items={steps} />\n          </Col>\n        </Row>\n    </Modal>\n  );\n}\n","import { Modal } from \"antd\";\nimport { BaseSale, SaleState } from \"../../../types/Sale\";\n\ninterface Props {\n  visible: boolean;\n  sale: BaseSale;\n  onCancel: () => void;\n  onSubmit: (sale: BaseSale) => void;\n}\nexport default function CancelSaleModal({\n  sale,\n  visible,\n  onCancel,\n  onSubmit,\n}: Props) {\n  return (\n    <Modal\n      centered\n      visible={visible}\n      title={\n        <p>\n          {sale.state === SaleState.ADMIN_REMOVED\n            ? `Withdraw item`\n            : `Cancel sale #${sale.id}`}\n        </p>\n      }\n      onCancel={onCancel}\n      footer={[\n        <button\n          className=\"btn btn-primary list-nft-btn\"\n          key=\"reset\"\n          onClick={onCancel}\n        >\n          No\n        </button>,\n        <button\n          className=\"btn btn-primary list-nft-btn\"\n          key=\"submit\"\n          onClick={() => onSubmit(sale)}\n        >\n          Yes\n        </button>,\n      ]}\n      width={400}\n    >\n      <p>\n        {sale.state === SaleState.ADMIN_REMOVED\n          ? `Are you sure you want to withdraw this item?`\n          : `Are you sure you want to cancel this sale #${sale.id}?`}\n      </p>\n    </Modal>\n  );\n}\n","import { appConfig } from \"../../../config/AppConfig\";\nimport { saleController } from \"../../../controller\";\nimport { wait } from \"../../../helpers/TimeoutHelper\";\nimport UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport { Sale, SaleState } from \"../../../types/Sale\";\nimport CancellingSaleModal from \"../../AssetCard/components/CancellingSaleModal\";\nimport CancelSaleModal from \"../../AssetCard/components/CancelSaleModal\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function RapidSaleCancelable(props: Props) {\n  const { sale } = props;\n  const {\n    isConfirming,\n    isProgressing,\n    onError,\n    onFinish,\n    onStart,\n    progress,\n    setTransactionProgressState,\n  } = UseTransactionProgress({});\n  const { cancelSale, cancelMultipleSales } = useUal();\n  const isDisabledDualSales = appConfig.common.isDisableDualSale;\n\n  const checkSaleCancelled = (saleId: string) =>\n    new Promise<boolean>((resolve) => {\n      wait(2000);\n      resolve(true);\n      //   const isCancelled = () =>\n      //     getSaleAsset(saleId, sale.market_contract).then((resp) => {\n      //       const sale: Sale = resp.data;\n      //       return [SaleState.CANCELED, SaleState.ADMIN_REMOVED].includes(sale.state);\n      //     });\n\n      //   tryToCheckHelper(isCancelled).then((isCancelled) => resolve(isCancelled));\n    });\n\n  const doCancelRapidSale = async (sale: Sale) => {\n    onStart();\n    try {\n      const { offer_id, sale_id, asset_ids, market_contract } = sale;\n      console.log({ isDisabledDualSales });\n\n      await cancelSale(offer_id, sale_id, market_contract, false);\n      progress.startStep(2);\n      // const isCancelled = await checkSaleCancelled(sale_id);\n      const isCancelled = true;\n      progress.startStep(3);\n      if (isCancelled)\n        onFinish(\n          \"Transaction finished\",\n          \"The asset sale was cancelled, and the offer was removed from the market!\"\n        );\n      else throw new Error(\"The asset sale wasn't cancelled!\");\n    } catch (error) {\n      onError(\"Transaction failed!\", error.message);\n    }\n  };\n\n  /**\n   * On production environment we supported dual sale, means one asset can sale on two or more sale.\n   * When cancel one sale we need to cancel all sales contained this asset\n   */\n  const doCancelSalesContainedAsset = async (assetIds: string) => {\n    const sales: Sale[] = await saleController\n      .listByAssetIds(assetIds)\n      .then((resp) => resp.data);\n    if (!sales || sales.length === 0) return;\n\n    await cancelMultipleSales(\n      sales.map((s) => ({\n        saleId: s.sale_id,\n        offerId: s.offer_id,\n        market: s.market_contract,\n      }))\n    );\n  };\n\n  return (\n    <div>\n      <span\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        {sale.state === SaleState.ADMIN_REMOVED ? \"Withdraw\" : \"Cancel Sale\"}\n      </span>\n\n      <CancelSaleModal\n        onCancel={() =>\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          })\n        }\n        onSubmit={() => doCancelRapidSale(sale)}\n        sale={sale}\n        visible={isConfirming}\n      />\n\n      <CancellingSaleModal\n        hasFinish={progress.hasFinish}\n        steps={progress.steps}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        sale={sale}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}\n","import { Col, Row, Skeleton } from \"antd\";\nimport { title } from \"process\";\nimport React, { useContext, useEffect, useState } from \"react\";\nimport { saleController } from \"../../controller\";\nimport { formatPrice } from \"../../helpers/CurrencyHelper\";\nimport { normalizeSale } from \"../../helpers/NormalizeHelper\";\nimport { CurrencyContext } from \"../../hook/useCurrency\";\nimport { WaxAuthenContext } from \"../../hook/useWaxAuthen\";\nimport WaxCurrencyIcon from \"../../icon/wax-currency\";\nimport { Asset } from \"../../types/Asset\";\nimport { Sale } from \"../../types/Sale\";\nimport RapidSaleBuyable from \"../AssetActions/RapidSale/RapidSaleBuyable\";\nimport RapidSaleCancelable from \"../AssetActions/RapidSale/RapidSaleCancellable\";\nimport \"./index.css\";\n\ninterface Props {\n  asset: Asset;\n}\n\ninterface ListingItem {\n  price: string;\n  usdPrice: string;\n  from: string;\n}\n\nconst titles = [\"Price\", \"USD Price\", \"From\", \"\"];\n\nexport default function AssetListing({ asset }: Props) {\n  const [state, setState] = useState<State>({\n    listingItems: [],\n    isFetching: false,\n  });\n  const { authen } = useContext(WaxAuthenContext);\n  const { getRate } = useContext(CurrencyContext);\n\n  useEffect(() => {\n    getListingSales();\n  }, [JSON.stringify(asset)]);\n\n  const getListingSales = async () => {\n    setState((prev) => ({ ...prev, isFetching: true }));\n    var listingSales = await saleController.list({\n      collection_name: asset.collection_name,\n      template_id: asset.template_id.toString(),\n      schema_name: asset.schema_name,\n      state: \"1\",\n    });\n    setState({\n      isFetching: false,\n      listingItems: listingSales.items,\n    });\n  };\n\n  const { listingItems } = state;\n  return (\n    <Row className=\"listing-items\" gutter={[0, 16]}>\n      <Col xs={24}>\n        <Row>\n          {titles.map((title) => (\n            <Col\n              key={title}\n              className=\"title\"\n              xs={title === \"USD Price\" ? 0 : 8}\n              lg={6}\n            >\n              <p className=\"font-md\">{title}</p>\n            </Col>\n          ))}\n        </Row>\n      </Col>\n      <Col xs={24}>\n        <Row align=\"middle\">\n          {state.isFetching && (\n            <Col xs={24}>\n              <Row gutter={[0, 32]}>\n                {Array.from(new Array(8)).map(() => (\n                  <Col xs={22}>\n                    <Skeleton.Input active={true} size={\"large\"} block={true} />\n                  </Col>\n                ))}\n              </Row>\n            </Col>\n          )}\n          {!state.isFetching && (\n            <Col xs={24}>\n              {listingItems.map((a) => {\n                const sale = normalizeSale(a);\n                const isOwner = sale.seller === authen.userAccount;\n                return (\n                  <Col className=\"item\" xs={24} key={sale.sale_id}>\n                    <Row align={\"middle\"}>\n                      <Col xs={8} lg={6}>\n                        <Row gutter={8} align=\"middle\">\n                          <Col>\n                            <WaxCurrencyIcon height={16} width={16} />\n                          </Col>\n                          <Col>\n                            <p className=\"font-md fw3\">\n                              {formatPrice(\n                                sale.price_symbol,\n                                sale.price,\n                                sale.token_precision\n                              )}\n                            </p>\n                          </Col>\n                        </Row>\n                      </Col>\n                      <Col xs={0} lg={6}>\n                        <p className=\"font-md fw3\">{`$ ${formatPrice(\n                          \"usd\",\n                          sale.price * getRate(\"waxpusd\"),\n                          8\n                        )}`}</p>\n                      </Col>\n                      <Col xs={8} lg={6}>\n                        {\" \"}\n                        <p className=\"font-md  fw3\">{sale.seller}</p>\n                      </Col>\n                      <Col className=\"btn-buy-now\" xs={8} lg={6}>\n                        {/* <button className=\"btn btn-primary btn-buy-now\" >Buy Now</button> */}\n                        <Row justify={\"center\"}>\n                          {isOwner ? (\n                            <RapidSaleCancelable sale={sale} />\n                          ) : (\n                            <RapidSaleBuyable sale={sale} />\n                          )}\n                        </Row>\n                      </Col>\n                    </Row>\n                  </Col>\n                );\n              })}\n            </Col>\n          )}\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n\ninterface State {\n  listingItems: Sale[];\n  isFetching: boolean;\n}\n","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.9\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n    let id = 0;\n    return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n    return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n    if (Array.isArray && Array.isArray(value)) {\n        return true;\n    }\n    const type = Object.prototype.toString.call(value);\n    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n        return true;\n    }\n    return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n    return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */ function isNumberFinite(value) {\n    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n    return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n    return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n    if (fn && typeof fn.call === 'function') {\n        return fn.apply(thisArg, args);\n    }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n    let i, len, keys;\n    if (isArray(loopable)) {\n        len = loopable.length;\n        if (reverse) {\n            for(i = len - 1; i >= 0; i--){\n                fn.call(thisArg, loopable[i], i);\n            }\n        } else {\n            for(i = 0; i < len; i++){\n                fn.call(thisArg, loopable[i], i);\n            }\n        }\n    } else if (isObject(loopable)) {\n        keys = Object.keys(loopable);\n        len = keys.length;\n        for(i = 0; i < len; i++){\n            fn.call(thisArg, loopable[keys[i]], keys[i]);\n        }\n    }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n    let i, ilen, v0, v1;\n    if (!a0 || !a1 || a0.length !== a1.length) {\n        return false;\n    }\n    for(i = 0, ilen = a0.length; i < ilen; ++i){\n        v0 = a0[i];\n        v1 = a1[i];\n        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n    if (isArray(source)) {\n        return source.map(clone);\n    }\n    if (isObject(source)) {\n        const target = Object.create(null);\n        const keys = Object.keys(source);\n        const klen = keys.length;\n        let k = 0;\n        for(; k < klen; ++k){\n            target[keys[k]] = clone(source[keys[k]]);\n        }\n        return target;\n    }\n    return source;\n}\nfunction isValidKey(key) {\n    return [\n        '__proto__',\n        'prototype',\n        'constructor'\n    ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        merge(tval, sval, options);\n    } else {\n        target[key] = clone(sval);\n    }\n}\nfunction merge(target, source, options) {\n    const sources = isArray(source) ? source : [\n        source\n    ];\n    const ilen = sources.length;\n    if (!isObject(target)) {\n        return target;\n    }\n    options = options || {};\n    const merger = options.merger || _merger;\n    let current;\n    for(let i = 0; i < ilen; ++i){\n        current = sources[i];\n        if (!isObject(current)) {\n            continue;\n        }\n        const keys = Object.keys(current);\n        for(let k = 0, klen = keys.length; k < klen; ++k){\n            merger(keys[k], target, current, options);\n        }\n    }\n    return target;\n}\nfunction mergeIf(target, source) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    return merge(target, source, {\n        merger: _mergerIf\n    });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        mergeIf(tval, sval);\n    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n        target[key] = clone(sval);\n    }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n    if (value !== undefined) {\n        console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n    }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n    // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n    '': (v)=>v,\n    // default resolvers\n    x: (o)=>o.x,\n    y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n    const parts = key.split('.');\n    const keys = [];\n    let tmp = '';\n    for (const part of parts){\n        tmp += part;\n        if (tmp.endsWith('\\\\')) {\n            tmp = tmp.slice(0, -1) + '.';\n        } else {\n            keys.push(tmp);\n            tmp = '';\n        }\n    }\n    return keys;\n}\nfunction _getKeyResolver(key) {\n    const keys = _splitKey(key);\n    return (obj)=>{\n        for (const k of keys){\n            if (k === '') {\n                break;\n            }\n            obj = obj && obj[k];\n        }\n        return obj;\n    };\n}\nfunction resolveObjectKey(obj, key) {\n    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n    return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n    if (a.size !== b.size) {\n        return false;\n    }\n    for (const item of a){\n        if (!b.has(item)) {\n            return false;\n        }\n    }\n    return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n    return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n    const roundedRange = Math.round(range);\n    range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n    const niceRange = Math.pow(10, Math.floor(log10(range)));\n    const fraction = range / niceRange;\n    const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n    return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n    const result = [];\n    const sqrt = Math.sqrt(value);\n    let i;\n    for(i = 1; i < sqrt; i++){\n        if (value % i === 0) {\n            result.push(i);\n            result.push(value / i);\n        }\n    }\n    if (sqrt === (sqrt | 0)) {\n        result.push(sqrt);\n    }\n    result.sort((a, b)=>a - b).pop();\n    return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n    return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n    return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n    const rounded = Math.round(x);\n    return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n    let i, ilen, value;\n    for(i = 0, ilen = array.length; i < ilen; i++){\n        value = array[i][property];\n        if (!isNaN(value)) {\n            target.min = Math.min(target.min, value);\n            target.max = Math.max(target.max, value);\n        }\n    }\n}\nfunction toRadians(degrees) {\n    return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n    return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n    if (!isNumberFinite(x)) {\n        return;\n    }\n    let e = 1;\n    let p = 0;\n    while(Math.round(x * e) / e !== x){\n        e *= 10;\n        p++;\n    }\n    return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n    const distanceFromXCenter = anglePoint.x - centrePoint.x;\n    const distanceFromYCenter = anglePoint.y - centrePoint.y;\n    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n    if (angle < -0.5 * PI) {\n        angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n    }\n    return {\n        angle,\n        distance: radialDistanceFromCenter\n    };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n    return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n    return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n    const a = _normalizeAngle(angle);\n    const s = _normalizeAngle(start);\n    const e = _normalizeAngle(end);\n    const angleToStart = _normalizeAngle(s - a);\n    const angleToEnd = _normalizeAngle(e - a);\n    const startToAngle = _normalizeAngle(a - s);\n    const endToAngle = _normalizeAngle(a - e);\n    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n    return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n    return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n    cmp = cmp || ((index)=>table[index] < value);\n    let hi = table.length - 1;\n    let lo = 0;\n    let mid;\n    while(hi - lo > 1){\n        mid = lo + hi >> 1;\n        if (cmp(mid)) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    return {\n        lo,\n        hi\n    };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n        const ti = table[index][key];\n        return ti < value || ti === value && table[index + 1][key] === value;\n    } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n    let start = 0;\n    let end = values.length;\n    while(start < end && values[start] < min){\n        start++;\n    }\n    while(end > start && values[end - 1] > max){\n        end--;\n    }\n    return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n    'push',\n    'pop',\n    'shift',\n    'splice',\n    'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n    if (array._chartjs) {\n        array._chartjs.listeners.push(listener);\n        return;\n    }\n    Object.defineProperty(array, '_chartjs', {\n        configurable: true,\n        enumerable: false,\n        value: {\n            listeners: [\n                listener\n            ]\n        }\n    });\n    arrayEvents.forEach((key)=>{\n        const method = '_onData' + _capitalize(key);\n        const base = array[key];\n        Object.defineProperty(array, key, {\n            configurable: true,\n            enumerable: false,\n            value (...args) {\n                const res = base.apply(this, args);\n                array._chartjs.listeners.forEach((object)=>{\n                    if (typeof object[method] === 'function') {\n                        object[method](...args);\n                    }\n                });\n                return res;\n            }\n        });\n    });\n}\nfunction unlistenArrayEvents(array, listener) {\n    const stub = array._chartjs;\n    if (!stub) {\n        return;\n    }\n    const listeners = stub.listeners;\n    const index = listeners.indexOf(listener);\n    if (index !== -1) {\n        listeners.splice(index, 1);\n    }\n    if (listeners.length > 0) {\n        return;\n    }\n    arrayEvents.forEach((key)=>{\n        delete array[key];\n    });\n    delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n    const set = new Set(items);\n    if (set.size === items.length) {\n        return items;\n    }\n    return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n    if (typeof window === 'undefined') {\n        return function(callback) {\n            return callback();\n        };\n    }\n    return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n    let argsToUse = [];\n    let ticking = false;\n    return function(...args) {\n        // Save the args for use later\n        argsToUse = args;\n        if (!ticking) {\n            ticking = true;\n            requestAnimFrame.call(window, ()=>{\n                ticking = false;\n                fn.apply(thisArg, argsToUse);\n            });\n        }\n    };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n    let timeout;\n    return function(...args) {\n        if (delay) {\n            clearTimeout(timeout);\n            timeout = setTimeout(fn, delay, args);\n        } else {\n            fn.apply(this, args);\n        }\n        return delay;\n    };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n    const check = rtl ? 'left' : 'right';\n    return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n    const pointCount = points.length;\n    let start = 0;\n    let count = pointCount;\n    if (meta._sorted) {\n        const { iScale , vScale , _parsed  } = meta;\n        const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n        const axis = iScale.axis;\n        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n        if (minDefined) {\n            start = Math.min(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n            if (spanGaps) {\n                const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                start -= Math.max(0, distanceToDefinedLo);\n            }\n            start = _limitValue(start, 0, pointCount - 1);\n        }\n        if (maxDefined) {\n            let end = Math.max(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n            if (spanGaps) {\n                const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                end += Math.max(0, distanceToDefinedHi);\n            }\n            count = _limitValue(end, start, pointCount) - start;\n        } else {\n            count = pointCount - start;\n        }\n    }\n    return {\n        start,\n        count\n    };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n    const { xScale , yScale , _scaleRanges  } = meta;\n    const newRanges = {\n        xmin: xScale.min,\n        xmax: xScale.max,\n        ymin: yScale.min,\n        ymax: yScale.max\n    };\n    if (!_scaleRanges) {\n        meta._scaleRanges = newRanges;\n        return true;\n    }\n    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n    Object.assign(_scaleRanges, newRanges);\n    return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n    linear: (t)=>t,\n    easeInQuad: (t)=>t * t,\n    easeOutQuad: (t)=>-t * (t - 2),\n    easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n    easeInCubic: (t)=>t * t * t,\n    easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n    easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n    easeInQuart: (t)=>t * t * t * t,\n    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n    easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n    easeInQuint: (t)=>t * t * t * t * t,\n    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n    easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n    easeOutSine: (t)=>Math.sin(t * HALF_PI),\n    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n    easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n    easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n    easeInOutElastic (t) {\n        const s = 0.1125;\n        const p = 0.45;\n        return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n    },\n    easeInBack (t) {\n        const s = 1.70158;\n        return t * t * ((s + 1) * t - s);\n    },\n    easeOutBack (t) {\n        const s = 1.70158;\n        return (t -= 1) * t * ((s + 1) * t + s) + 1;\n    },\n    easeInOutBack (t) {\n        let s = 1.70158;\n        if ((t /= 0.5) < 1) {\n            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n        }\n        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n    },\n    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n    easeOutBounce (t) {\n        const m = 7.5625;\n        const d = 2.75;\n        if (t < 1 / d) {\n            return m * t * t;\n        }\n        if (t < 2 / d) {\n            return m * (t -= 1.5 / d) * t + 0.75;\n        }\n        if (t < 2.5 / d) {\n            return m * (t -= 2.25 / d) * t + 0.9375;\n        }\n        return m * (t -= 2.625 / d) * t + 0.984375;\n    },\n    easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n    if (value && typeof value === 'object') {\n        const type = value.toString();\n        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n    }\n    return false;\n}\nfunction color(value) {\n    return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n    return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n    'x',\n    'y',\n    'borderWidth',\n    'radius',\n    'tension'\n];\nconst colors = [\n    'color',\n    'borderColor',\n    'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n    defaults.set('animation', {\n        delay: undefined,\n        duration: 1000,\n        easing: 'easeOutQuart',\n        fn: undefined,\n        from: undefined,\n        loop: undefined,\n        to: undefined,\n        type: undefined\n    });\n    defaults.describe('animation', {\n        _fallback: false,\n        _indexable: false,\n        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n    });\n    defaults.set('animations', {\n        colors: {\n            type: 'color',\n            properties: colors\n        },\n        numbers: {\n            type: 'number',\n            properties: numbers\n        }\n    });\n    defaults.describe('animations', {\n        _fallback: 'animation'\n    });\n    defaults.set('transitions', {\n        active: {\n            animation: {\n                duration: 400\n            }\n        },\n        resize: {\n            animation: {\n                duration: 0\n            }\n        },\n        show: {\n            animations: {\n                colors: {\n                    from: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    duration: 0\n                }\n            }\n        },\n        hide: {\n            animations: {\n                colors: {\n                    to: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    easing: 'linear',\n                    fn: (v)=>v | 0\n                }\n            }\n        }\n    });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n    defaults.set('layout', {\n        autoPadding: true,\n        padding: {\n            top: 0,\n            right: 0,\n            bottom: 0,\n            left: 0\n        }\n    });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n    options = options || {};\n    const cacheKey = locale + JSON.stringify(options);\n    let formatter = intlCache.get(cacheKey);\n    if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, options);\n        intlCache.set(cacheKey, formatter);\n    }\n    return formatter;\n}\nfunction formatNumber(num, locale, options) {\n    return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n        return isArray(value) ?  value : '' + value;\n    },\n numeric (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const locale = this.chart.options.locale;\n        let notation;\n        let delta = tickValue;\n        if (ticks.length > 1) {\n            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n            if (maxTick < 1e-4 || maxTick > 1e+15) {\n                notation = 'scientific';\n            }\n            delta = calculateDelta(tickValue, ticks);\n        }\n        const logDelta = log10(Math.abs(delta));\n        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n        const options = {\n            notation,\n            minimumFractionDigits: numDecimal,\n            maximumFractionDigits: numDecimal\n        };\n        Object.assign(options, this.options.ticks.format);\n        return formatNumber(tickValue, locale, options);\n    },\n logarithmic (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n        if ([\n            1,\n            2,\n            3,\n            5,\n            10,\n            15\n        ].includes(remain) || index > 0.8 * ticks.length) {\n            return formatters.numeric.call(this, tickValue, index, ticks);\n        }\n        return '';\n    }\n};\nfunction calculateDelta(tickValue, ticks) {\n    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n        delta = tickValue - Math.floor(tickValue);\n    }\n    return delta;\n}\n var Ticks = {\n    formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n    defaults.set('scale', {\n        display: true,\n        offset: false,\n        reverse: false,\n        beginAtZero: false,\n bounds: 'ticks',\n        clip: true,\n grace: 0,\n        grid: {\n            display: true,\n            lineWidth: 1,\n            drawOnChartArea: true,\n            drawTicks: true,\n            tickLength: 8,\n            tickWidth: (_ctx, options)=>options.lineWidth,\n            tickColor: (_ctx, options)=>options.color,\n            offset: false\n        },\n        border: {\n            display: true,\n            dash: [],\n            dashOffset: 0.0,\n            width: 1\n        },\n        title: {\n            display: false,\n            text: '',\n            padding: {\n                top: 4,\n                bottom: 4\n            }\n        },\n        ticks: {\n            minRotation: 0,\n            maxRotation: 50,\n            mirror: false,\n            textStrokeWidth: 0,\n            textStrokeColor: '',\n            padding: 3,\n            display: true,\n            autoSkip: true,\n            autoSkipPadding: 3,\n            labelOffset: 0,\n            callback: Ticks.formatters.values,\n            minor: {},\n            major: {},\n            align: 'center',\n            crossAlign: 'near',\n            showLabelBackdrop: false,\n            backdropColor: 'rgba(255, 255, 255, 0.75)',\n            backdropPadding: 2\n        }\n    });\n    defaults.route('scale.ticks', 'color', '', 'color');\n    defaults.route('scale.grid', 'color', '', 'borderColor');\n    defaults.route('scale.border', 'color', '', 'borderColor');\n    defaults.route('scale.title', 'color', '', 'color');\n    defaults.describe('scale', {\n        _fallback: false,\n        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n    });\n    defaults.describe('scales', {\n        _fallback: 'scale'\n    });\n    defaults.describe('scale.ticks', {\n        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n        _indexable: (name)=>name !== 'backdropPadding'\n    });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n    if (!key) {\n        return node;\n    }\n    const keys = key.split('.');\n    for(let i = 0, n = keys.length; i < n; ++i){\n        const k = keys[i];\n        node = node[k] || (node[k] = Object.create(null));\n    }\n    return node;\n}\nfunction set(root, scope, values) {\n    if (typeof scope === 'string') {\n        return merge(getScope$1(root, scope), values);\n    }\n    return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n    constructor(_descriptors, _appliers){\n        this.animation = undefined;\n        this.backgroundColor = 'rgba(0,0,0,0.1)';\n        this.borderColor = 'rgba(0,0,0,0.1)';\n        this.color = '#666';\n        this.datasets = {};\n        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n        this.elements = {};\n        this.events = [\n            'mousemove',\n            'mouseout',\n            'click',\n            'touchstart',\n            'touchmove'\n        ];\n        this.font = {\n            family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n            size: 12,\n            style: 'normal',\n            lineHeight: 1.2,\n            weight: null\n        };\n        this.hover = {};\n        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n        this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n        this.indexAxis = 'x';\n        this.interaction = {\n            mode: 'nearest',\n            intersect: true,\n            includeInvisible: false\n        };\n        this.maintainAspectRatio = true;\n        this.onHover = null;\n        this.onClick = null;\n        this.parsing = true;\n        this.plugins = {};\n        this.responsive = true;\n        this.scale = undefined;\n        this.scales = {};\n        this.showLine = true;\n        this.drawActiveElementsOnTop = true;\n        this.describe(_descriptors);\n        this.apply(_appliers);\n    }\n set(scope, values) {\n        return set(this, scope, values);\n    }\n get(scope) {\n        return getScope$1(this, scope);\n    }\n describe(scope, values) {\n        return set(descriptors, scope, values);\n    }\n    override(scope, values) {\n        return set(overrides, scope, values);\n    }\n route(scope, name, targetScope, targetName) {\n        const scopeObject = getScope$1(this, scope);\n        const targetScopeObject = getScope$1(this, targetScope);\n        const privateName = '_' + name;\n        Object.defineProperties(scopeObject, {\n            [privateName]: {\n                value: scopeObject[name],\n                writable: true\n            },\n            [name]: {\n                enumerable: true,\n                get () {\n                    const local = this[privateName];\n                    const target = targetScopeObject[targetName];\n                    if (isObject(local)) {\n                        return Object.assign({}, target, local);\n                    }\n                    return valueOrDefault(local, target);\n                },\n                set (value) {\n                    this[privateName] = value;\n                }\n            }\n        });\n    }\n    apply(appliers) {\n        appliers.forEach((apply)=>apply(this));\n    }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n    _scriptable: (name)=>!name.startsWith('on'),\n    _indexable: (name)=>name !== 'events',\n    hover: {\n        _fallback: 'interaction'\n    },\n    interaction: {\n        _scriptable: false,\n        _indexable: false\n    }\n}, [\n    applyAnimationsDefaults,\n    applyLayoutsDefaults,\n    applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n        return null;\n    }\n    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n    let textWidth = data[string];\n    if (!textWidth) {\n        textWidth = data[string] = ctx.measureText(string).width;\n        gc.push(string);\n    }\n    if (textWidth > longest) {\n        longest = textWidth;\n    }\n    return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n    cache = cache || {};\n    let data = cache.data = cache.data || {};\n    let gc = cache.garbageCollect = cache.garbageCollect || [];\n    if (cache.font !== font) {\n        data = cache.data = {};\n        gc = cache.garbageCollect = [];\n        cache.font = font;\n    }\n    ctx.save();\n    ctx.font = font;\n    let longest = 0;\n    const ilen = arrayOfThings.length;\n    let i, j, jlen, thing, nestedThing;\n    for(i = 0; i < ilen; i++){\n        thing = arrayOfThings[i];\n        // Undefined strings and arrays should not be measured\n        if (thing !== undefined && thing !== null && !isArray(thing)) {\n            longest = _measureText(ctx, data, gc, longest, thing);\n        } else if (isArray(thing)) {\n            // if it is an array lets measure each element\n            // to do maybe simplify this function a bit so we can do this more recursively?\n            for(j = 0, jlen = thing.length; j < jlen; j++){\n                nestedThing = thing[j];\n                // Undefined strings and arrays should not be measured\n                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n                    longest = _measureText(ctx, data, gc, longest, nestedThing);\n                }\n            }\n        }\n    }\n    ctx.restore();\n    const gcLen = gc.length / 2;\n    if (gcLen > arrayOfThings.length) {\n        for(i = 0; i < gcLen; i++){\n            delete data[gc[i]];\n        }\n        gc.splice(0, gcLen);\n    }\n    return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n    const devicePixelRatio = chart.currentDevicePixelRatio;\n    const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n    return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n    if (!ctx && !canvas) {\n        return;\n    }\n    ctx = ctx || canvas.getContext('2d');\n    ctx.save();\n    // canvas.width and canvas.height do not consider the canvas transform,\n    // while clearRect does\n    ctx.resetTransform();\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n    const style = options.pointStyle;\n    const rotation = options.rotation;\n    const radius = options.radius;\n    let rad = (rotation || 0) * RAD_PER_DEG;\n    if (style && typeof style === 'object') {\n        type = style.toString();\n        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n            ctx.save();\n            ctx.translate(x, y);\n            ctx.rotate(rad);\n            ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n            ctx.restore();\n            return;\n        }\n    }\n    if (isNaN(radius) || radius <= 0) {\n        return;\n    }\n    ctx.beginPath();\n    switch(style){\n        // Default includes circle\n        default:\n            if (w) {\n                ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n            } else {\n                ctx.arc(x, y, radius, 0, TAU);\n            }\n            ctx.closePath();\n            break;\n        case 'triangle':\n            width = w ? w / 2 : radius;\n            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            ctx.closePath();\n            break;\n        case 'rectRounded':\n            // NOTE: the rounded rect implementation changed to use `arc` instead of\n            // `quadraticCurveTo` since it generates better results when rect is\n            // almost a circle. 0.516 (instead of 0.5) produces results with visually\n            // closer proportion to the previous impl and it is inscribed in the\n            // circle with `radius`. For more details, see the following PRs:\n            // https://github.com/chartjs/Chart.js/issues/5597\n            // https://github.com/chartjs/Chart.js/issues/5858\n            cornerRadius = radius * 0.516;\n            size = radius - cornerRadius;\n            xOffset = Math.cos(rad + QUARTER_PI) * size;\n            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            yOffset = Math.sin(rad + QUARTER_PI) * size;\n            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n            ctx.closePath();\n            break;\n        case 'rect':\n            if (!rotation) {\n                size = Math.SQRT1_2 * radius;\n                width = w ? w / 2 : size;\n                ctx.rect(x - width, y - size, 2 * width, 2 * size);\n                break;\n            }\n            rad += QUARTER_PI;\n        /* falls through */ case 'rectRot':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            ctx.closePath();\n            break;\n        case 'crossRot':\n            rad += QUARTER_PI;\n        /* falls through */ case 'cross':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'star':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            rad += QUARTER_PI;\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'line':\n            xOffset = w ? w / 2 : Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            ctx.moveTo(x - xOffset, y - yOffset);\n            ctx.lineTo(x + xOffset, y + yOffset);\n            break;\n        case 'dash':\n            ctx.moveTo(x, y);\n            ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n            break;\n        case false:\n            ctx.closePath();\n            break;\n    }\n    ctx.fill();\n    if (options.borderWidth > 0) {\n        ctx.stroke();\n    }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n    margin = margin || 0.5; // margin - default is to match rounded decimals\n    return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n    ctx.clip();\n}\nfunction unclipArea(ctx) {\n    ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    if (mode === 'middle') {\n        const midpoint = (previous.x + target.x) / 2.0;\n        ctx.lineTo(midpoint, previous.y);\n        ctx.lineTo(midpoint, target.y);\n    } else if (mode === 'after' !== !!flip) {\n        ctx.lineTo(previous.x, target.y);\n    } else {\n        ctx.lineTo(target.x, previous.y);\n    }\n    ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n    if (opts.translation) {\n        ctx.translate(opts.translation[0], opts.translation[1]);\n    }\n    if (!isNullOrUndef(opts.rotation)) {\n        ctx.rotate(opts.rotation);\n    }\n    if (opts.color) {\n        ctx.fillStyle = opts.color;\n    }\n    if (opts.textAlign) {\n        ctx.textAlign = opts.textAlign;\n    }\n    if (opts.textBaseline) {\n        ctx.textBaseline = opts.textBaseline;\n    }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n    if (opts.strikethrough || opts.underline) {\n        /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */ const metrics = ctx.measureText(line);\n        const left = x - metrics.actualBoundingBoxLeft;\n        const right = x + metrics.actualBoundingBoxRight;\n        const top = y - metrics.actualBoundingBoxAscent;\n        const bottom = y + metrics.actualBoundingBoxDescent;\n        const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n        ctx.strokeStyle = ctx.fillStyle;\n        ctx.beginPath();\n        ctx.lineWidth = opts.decorationWidth || 2;\n        ctx.moveTo(left, yDecoration);\n        ctx.lineTo(right, yDecoration);\n        ctx.stroke();\n    }\n}\nfunction drawBackdrop(ctx, opts) {\n    const oldColor = ctx.fillStyle;\n    ctx.fillStyle = opts.color;\n    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n    ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n    const lines = isArray(text) ? text : [\n        text\n    ];\n    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n    let i, line;\n    ctx.save();\n    ctx.font = font.string;\n    setRenderOpts(ctx, opts);\n    for(i = 0; i < lines.length; ++i){\n        line = lines[i];\n        if (opts.backdrop) {\n            drawBackdrop(ctx, opts.backdrop);\n        }\n        if (stroke) {\n            if (opts.strokeColor) {\n                ctx.strokeStyle = opts.strokeColor;\n            }\n            if (!isNullOrUndef(opts.strokeWidth)) {\n                ctx.lineWidth = opts.strokeWidth;\n            }\n            ctx.strokeText(line, x, y, opts.maxWidth);\n        }\n        ctx.fillText(line, x, y, opts.maxWidth);\n        decorateText(ctx, x, y, line, opts);\n        y += Number(font.lineHeight);\n    }\n    ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n    const { x , y , w , h , radius  } = rect;\n    // top left arc\n    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n    // line from top left to bottom left\n    ctx.lineTo(x, y + h - radius.bottomLeft);\n    // bottom left arc\n    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n    // line from bottom left to bottom right\n    ctx.lineTo(x + w - radius.bottomRight, y + h);\n    // bottom right arc\n    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n    // line from bottom right to top right\n    ctx.lineTo(x + w, y + radius.topRight);\n    // top right arc\n    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n    // line from top right to top left\n    ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n    const matches = ('' + value).match(LINE_HEIGHT);\n    if (!matches || matches[1] === 'normal') {\n        return size * 1.2;\n    }\n    value = +matches[2];\n    switch(matches[3]){\n        case 'px':\n            return value;\n        case '%':\n            value /= 100;\n            break;\n    }\n    return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n    const ret = {};\n    const objProps = isObject(props);\n    const keys = objProps ? Object.keys(props) : props;\n    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n    for (const prop of keys){\n        ret[prop] = numberOrZero(read(prop));\n    }\n    return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n    return _readValueToProps(value, {\n        top: 'y',\n        right: 'x',\n        bottom: 'y',\n        left: 'x'\n    });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n    return _readValueToProps(value, [\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight'\n    ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n    const obj = toTRBL(value);\n    obj.width = obj.left + obj.right;\n    obj.height = obj.top + obj.bottom;\n    return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n    options = options || {};\n    fallback = fallback || defaults.font;\n    let size = valueOrDefault(options.size, fallback.size);\n    if (typeof size === 'string') {\n        size = parseInt(size, 10);\n    }\n    let style = valueOrDefault(options.style, fallback.style);\n    if (style && !('' + style).match(FONT_STYLE)) {\n        console.warn('Invalid font style specified: \"' + style + '\"');\n        style = undefined;\n    }\n    const font = {\n        family: valueOrDefault(options.family, fallback.family),\n        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n        size,\n        style,\n        weight: valueOrDefault(options.weight, fallback.weight),\n        string: ''\n    };\n    font.string = toFontString(font);\n    return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n    let cacheable = true;\n    let i, ilen, value;\n    for(i = 0, ilen = inputs.length; i < ilen; ++i){\n        value = inputs[i];\n        if (value === undefined) {\n            continue;\n        }\n        if (context !== undefined && typeof value === 'function') {\n            value = value(context);\n            cacheable = false;\n        }\n        if (index !== undefined && isArray(value)) {\n            value = value[index % value.length];\n            cacheable = false;\n        }\n        if (value !== undefined) {\n            if (info && !cacheable) {\n                info.cacheable = false;\n            }\n            return value;\n        }\n    }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n    const { min , max  } = minmax;\n    const change = toDimension(grace, (max - min) / 2);\n    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n    return {\n        min: keepZero(min, -Math.abs(change)),\n        max: keepZero(max, change)\n    };\n}\nfunction createContext(parentContext, context) {\n    return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n    ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n    const finalRootScopes = rootScopes || scopes;\n    if (typeof fallback === 'undefined') {\n        fallback = _resolve('_fallback', scopes);\n    }\n    const cache = {\n        [Symbol.toStringTag]: 'Object',\n        _cacheable: true,\n        _scopes: scopes,\n        _rootScopes: finalRootScopes,\n        _fallback: fallback,\n        _getTarget: getTarget,\n        override: (scope)=>_createResolver([\n                scope,\n                ...scopes\n            ], prefixes, finalRootScopes, fallback)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete target._keys; // remove cached keys\n            delete scopes[0][prop]; // remove from top level scope\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop) {\n            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(scopes[0]);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return getKeysFromAllScopes(target).includes(prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys (target) {\n            return getKeysFromAllScopes(target);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            const storage = target._storage || (target._storage = getTarget());\n            target[prop] = storage[prop] = value; // set to top level scope + cache\n            delete target._keys; // remove cached keys\n            return true;\n        }\n    });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n    const cache = {\n        _cacheable: false,\n        _proxy: proxy,\n        _context: context,\n        _subProxy: subProxy,\n        _stack: new Set(),\n        _descriptors: _descriptors(proxy, descriptorDefaults),\n        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete proxy[prop]; // remove from proxy\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop, receiver) {\n            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n                enumerable: true,\n                configurable: true\n            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(proxy);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return Reflect.has(proxy, prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys () {\n            return Reflect.ownKeys(proxy);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            proxy[prop] = value; // set to proxy\n            delete target[prop]; // remove from cache\n            return true;\n        }\n    });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n    scriptable: true,\n    indexable: true\n}) {\n    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;\n    return {\n        allKeys: _allKeys,\n        scriptable: _scriptable,\n        indexable: _indexable,\n        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n    };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n    if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n        return target[prop];\n    }\n    const value = resolve();\n    // cache the resolved value\n    target[prop] = value;\n    return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    let value = _proxy[prop]; // resolve from proxy\n    // resolve with context\n    if (isFunction(value) && descriptors.isScriptable(prop)) {\n        value = _resolveScriptable(prop, value, target, receiver);\n    }\n    if (isArray(value) && value.length) {\n        value = _resolveArray(prop, value, target, descriptors.isIndexable);\n    }\n    if (needsSubResolver(prop, value)) {\n        // if the resolved value is an object, create a sub resolver for it\n        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n    }\n    return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n    const { _proxy , _context , _subProxy , _stack  } = target;\n    if (_stack.has(prop)) {\n        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n    }\n    _stack.add(prop);\n    let value = getValue(_context, _subProxy || receiver);\n    _stack.delete(prop);\n    if (needsSubResolver(prop, value)) {\n        // When scriptable option returns an object, create a resolver on that.\n        value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n    }\n    return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n        return value[_context.index % value.length];\n    } else if (isObject(value[0])) {\n        // Array of objects, return array or resolvers\n        const arr = value;\n        const scopes = _proxy._scopes.filter((s)=>s !== arr);\n        value = [];\n        for (const item of arr){\n            const resolver = createSubResolver(scopes, _proxy, prop, item);\n            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n        }\n    }\n    return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n    return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n    for (const parent of parentScopes){\n        const scope = getScope(key, parent);\n        if (scope) {\n            set.add(scope);\n            const fallback = resolveFallback(scope._fallback, key, value);\n            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n                // When we reach the descriptor that defines a new _fallback, return that.\n                // The fallback will resume to that new scope.\n                return fallback;\n            }\n        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n            // Fallback to `false` results to `false`, when falling back to different key.\n            // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n            return null;\n        }\n    }\n    return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n    const rootScopes = resolver._rootScopes;\n    const fallback = resolveFallback(resolver._fallback, prop, value);\n    const allScopes = [\n        ...parentScopes,\n        ...rootScopes\n    ];\n    const set = new Set();\n    set.add(value);\n    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n    if (key === null) {\n        return false;\n    }\n    if (typeof fallback !== 'undefined' && fallback !== prop) {\n        key = addScopesFromKey(set, allScopes, fallback, key, value);\n        if (key === null) {\n            return false;\n        }\n    }\n    return _createResolver(Array.from(set), [\n        ''\n    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n    while(key){\n        key = addScopes(set, allScopes, key, fallback, item);\n    }\n    return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n    const parent = resolver._getTarget();\n    if (!(prop in parent)) {\n        parent[prop] = {};\n    }\n    const target = parent[prop];\n    if (isArray(target) && isObject(value)) {\n        // For array of objects, the object is used to store updated values\n        return value;\n    }\n    return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n    let value;\n    for (const prefix of prefixes){\n        value = _resolve(readKey(prefix, prop), scopes);\n        if (typeof value !== 'undefined') {\n            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n        }\n    }\n}\nfunction _resolve(key, scopes) {\n    for (const scope of scopes){\n        if (!scope) {\n            continue;\n        }\n        const value = scope[key];\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n}\nfunction getKeysFromAllScopes(target) {\n    let keys = target._keys;\n    if (!keys) {\n        keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n    }\n    return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n    const set = new Set();\n    for (const scope of scopes){\n        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n            set.add(key);\n        }\n    }\n    return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n    const { iScale  } = meta;\n    const { key ='r'  } = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for(i = 0, ilen = count; i < ilen; ++i){\n        index = i + start;\n        item = data[index];\n        parsed[i] = {\n            r: iScale.parse(resolveObjectKey(item, key), index)\n        };\n    }\n    return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n    // Props to Rob Spencer at scaled innovation for his post on splining between points\n    // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n    // This function must also respect \"skipped\" points\n    const previous = firstPoint.skip ? middlePoint : firstPoint;\n    const current = middlePoint;\n    const next = afterPoint.skip ? middlePoint : afterPoint;\n    const d01 = distanceBetweenPoints(current, previous);\n    const d12 = distanceBetweenPoints(next, current);\n    let s01 = d01 / (d01 + d12);\n    let s12 = d12 / (d01 + d12);\n    // If all points are the same, s01 & s02 will be inf\n    s01 = isNaN(s01) ? 0 : s01;\n    s12 = isNaN(s12) ? 0 : s12;\n    const fa = t * s01; // scaling factor for triangle Ta\n    const fb = t * s12;\n    return {\n        previous: {\n            x: current.x - fa * (next.x - previous.x),\n            y: current.y - fa * (next.y - previous.y)\n        },\n        next: {\n            x: current.x + fb * (next.x - previous.x),\n            y: current.y + fb * (next.y - previous.y)\n        }\n    };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n    const pointsLen = points.length;\n    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen - 1; ++i){\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent || !pointAfter) {\n            continue;\n        }\n        if (almostEquals(deltaK[i], 0, EPSILON)) {\n            mK[i] = mK[i + 1] = 0;\n            continue;\n        }\n        alphaK = mK[i] / deltaK[i];\n        betaK = mK[i + 1] / deltaK[i];\n        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n        if (squaredMagnitude <= 9) {\n            continue;\n        }\n        tauK = 3 / Math.sqrt(squaredMagnitude);\n        mK[i] = alphaK * tauK * deltaK[i];\n        mK[i + 1] = betaK * tauK * deltaK[i];\n    }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    let delta, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        const iPixel = pointCurrent[indexAxis];\n        const vPixel = pointCurrent[valueAxis];\n        if (pointBefore) {\n            delta = (iPixel - pointBefore[indexAxis]) / 3;\n            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n        }\n        if (pointAfter) {\n            delta = (pointAfter[indexAxis] - iPixel) / 3;\n            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n        }\n    }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    const deltaK = Array(pointsLen).fill(0);\n    const mK = Array(pointsLen);\n    // Calculate slopes (deltaK) and initialize tangents (mK)\n    let i, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        if (pointAfter) {\n            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n            // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n        }\n        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n    }\n    monotoneAdjust(points, deltaK, mK);\n    monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n    return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n    let i, ilen, point, inArea, inAreaPrev;\n    let inAreaNext = _isPointInArea(points[0], area);\n    for(i = 0, ilen = points.length; i < ilen; ++i){\n        inAreaPrev = inArea;\n        inArea = inAreaNext;\n        inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n        if (!inArea) {\n            continue;\n        }\n        point = points[i];\n        if (inAreaPrev) {\n            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n        }\n        if (inAreaNext) {\n            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n        }\n    }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n    let i, ilen, point, controlPoints;\n    // Only consider points that are drawn in case the spanGaps option is used\n    if (options.spanGaps) {\n        points = points.filter((pt)=>!pt.skip);\n    }\n    if (options.cubicInterpolationMode === 'monotone') {\n        splineCurveMonotone(points, indexAxis);\n    } else {\n        let prev = loop ? points[points.length - 1] : points[0];\n        for(i = 0, ilen = points.length; i < ilen; ++i){\n            point = points[i];\n            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n            point.cp1x = controlPoints.previous.x;\n            point.cp1y = controlPoints.previous.y;\n            point.cp2x = controlPoints.next.x;\n            point.cp2y = controlPoints.next.y;\n            prev = point;\n        }\n    }\n    if (options.capBezierPoints) {\n        capBezierPoints(points, area);\n    }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n    return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n    let parent = domNode.parentNode;\n    if (parent && parent.toString() === '[object ShadowRoot]') {\n        parent = parent.host;\n    }\n    return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n    let valueInPixels;\n    if (typeof styleValue === 'string') {\n        valueInPixels = parseInt(styleValue, 10);\n        if (styleValue.indexOf('%') !== -1) {\n            // percentage * size in dimension\n            valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n        }\n    } else {\n        valueInPixels = styleValue;\n    }\n    return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n    return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n    'top',\n    'right',\n    'bottom',\n    'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n    const result = {};\n    suffix = suffix ? '-' + suffix : '';\n    for(let i = 0; i < 4; i++){\n        const pos = positions[i];\n        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n    }\n    result.width = result.left + result.right;\n    result.height = result.top + result.bottom;\n    return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n    const touches = e.touches;\n    const source = touches && touches.length ? touches[0] : e;\n    const { offsetX , offsetY  } = source;\n    let box = false;\n    let x, y;\n    if (useOffsetPos(offsetX, offsetY, e.target)) {\n        x = offsetX;\n        y = offsetY;\n    } else {\n        const rect = canvas.getBoundingClientRect();\n        x = source.clientX - rect.left;\n        y = source.clientY - rect.top;\n        box = true;\n    }\n    return {\n        x,\n        y,\n        box\n    };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n    if ('native' in event) {\n        return event;\n    }\n    const { canvas , currentDevicePixelRatio  } = chart;\n    const style = getComputedStyle(canvas);\n    const borderBox = style.boxSizing === 'border-box';\n    const paddings = getPositionedStyle(style, 'padding');\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const { x , y , box  } = getCanvasPosition(event, canvas);\n    const xOffset = paddings.left + (box && borders.left);\n    const yOffset = paddings.top + (box && borders.top);\n    let { width , height  } = chart;\n    if (borderBox) {\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    return {\n        x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n        y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n    };\n}\nfunction getContainerSize(canvas, width, height) {\n    let maxWidth, maxHeight;\n    if (width === undefined || height === undefined) {\n        const container = canvas && _getParentNode(canvas);\n        if (!container) {\n            width = canvas.clientWidth;\n            height = canvas.clientHeight;\n        } else {\n            const rect = container.getBoundingClientRect(); // this is the border box of the container\n            const containerStyle = getComputedStyle(container);\n            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n            const containerPadding = getPositionedStyle(containerStyle, 'padding');\n            width = rect.width - containerPadding.width - containerBorder.width;\n            height = rect.height - containerPadding.height - containerBorder.height;\n            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n        }\n    }\n    return {\n        width,\n        height,\n        maxWidth: maxWidth || INFINITY,\n        maxHeight: maxHeight || INFINITY\n    };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n    const style = getComputedStyle(canvas);\n    const margins = getPositionedStyle(style, 'margin');\n    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n    let { width , height  } = containerSize;\n    if (style.boxSizing === 'content-box') {\n        const borders = getPositionedStyle(style, 'border', 'width');\n        const paddings = getPositionedStyle(style, 'padding');\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    width = Math.max(0, width - margins.width);\n    height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n    if (width && !height) {\n        // https://github.com/chartjs/Chart.js/issues/4659\n        // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n        height = round1(width / 2);\n    }\n    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n        height = containerSize.height;\n        width = round1(Math.floor(height * aspectRatio));\n    }\n    return {\n        width,\n        height\n    };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n    const pixelRatio = forceRatio || 1;\n    const deviceHeight = Math.floor(chart.height * pixelRatio);\n    const deviceWidth = Math.floor(chart.width * pixelRatio);\n    chart.height = Math.floor(chart.height);\n    chart.width = Math.floor(chart.width);\n    const canvas = chart.canvas;\n    // If no style has been set on the canvas, the render size is used as display size,\n    // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n    // See https://github.com/chartjs/Chart.js/issues/3575\n    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n        canvas.style.height = `${chart.height}px`;\n        canvas.style.width = `${chart.width}px`;\n    }\n    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n        chart.currentDevicePixelRatio = pixelRatio;\n        canvas.height = deviceHeight;\n        canvas.width = deviceWidth;\n        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n        return true;\n    }\n    return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n    let passiveSupported = false;\n    try {\n        const options = {\n            get passive () {\n                passiveSupported = true;\n                return false;\n            }\n        };\n        if (_isDomSupported()) {\n            window.addEventListener('test', null, options);\n            window.removeEventListener('test', null, options);\n        }\n    } catch (e) {\n    // continue regardless of error\n    }\n    return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n    const value = getStyle(element, property);\n    const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n    return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: p1.y + t * (p2.y - p1.y)\n    };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n    };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n    const cp1 = {\n        x: p1.cp2x,\n        y: p1.cp2y\n    };\n    const cp2 = {\n        x: p2.cp1x,\n        y: p2.cp1y\n    };\n    const a = _pointInLine(p1, cp1, t);\n    const b = _pointInLine(cp1, cp2, t);\n    const c = _pointInLine(cp2, p2, t);\n    const d = _pointInLine(a, b, t);\n    const e = _pointInLine(b, c, t);\n    return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n    return {\n        x (x) {\n            return rectX + rectX + width - x;\n        },\n        setWidth (w) {\n            width = w;\n        },\n        textAlign (align) {\n            if (align === 'center') {\n                return align;\n            }\n            return align === 'right' ? 'left' : 'right';\n        },\n        xPlus (x, value) {\n            return x - value;\n        },\n        leftForLtr (x, itemWidth) {\n            return x - itemWidth;\n        }\n    };\n};\nconst getLeftToRightAdapter = function() {\n    return {\n        x (x) {\n            return x;\n        },\n        setWidth (w) {},\n        textAlign (align) {\n            return align;\n        },\n        xPlus (x, value) {\n            return x + value;\n        },\n        leftForLtr (x, _itemWidth) {\n            return x;\n        }\n    };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n    let style, original;\n    if (direction === 'ltr' || direction === 'rtl') {\n        style = ctx.canvas.style;\n        original = [\n            style.getPropertyValue('direction'),\n            style.getPropertyPriority('direction')\n        ];\n        style.setProperty('direction', direction, 'important');\n        ctx.prevTextDirection = original;\n    }\n}\nfunction restoreTextDirection(ctx, original) {\n    if (original !== undefined) {\n        delete ctx.prevTextDirection;\n        ctx.canvas.style.setProperty('direction', original[0], original[1]);\n    }\n}\n\nfunction propertyFn(property) {\n    if (property === 'angle') {\n        return {\n            between: _angleBetween,\n            compare: _angleDiff,\n            normalize: _normalizeAngle\n        };\n    }\n    return {\n        between: _isBetween,\n        compare: (a, b)=>a - b,\n        normalize: (x)=>x\n    };\n}\nfunction normalizeSegment({ start , end , count , loop , style  }) {\n    return {\n        start: start % count,\n        end: end % count,\n        loop: loop && (end - start + 1) % count === 0,\n        style\n    };\n}\nfunction getSegment(segment, points, bounds) {\n    const { property , start: startBound , end: endBound  } = bounds;\n    const { between , normalize  } = propertyFn(property);\n    const count = points.length;\n    let { start , end , loop  } = segment;\n    let i, ilen;\n    if (loop) {\n        start += count;\n        end += count;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n                break;\n            }\n            start--;\n            end--;\n        }\n        start %= count;\n        end %= count;\n    }\n    if (end < start) {\n        end += count;\n    }\n    return {\n        start,\n        end,\n        loop,\n        style: segment.style\n    };\n}\n function _boundSegment(segment, points, bounds) {\n    if (!bounds) {\n        return [\n            segment\n        ];\n    }\n    const { property , start: startBound , end: endBound  } = bounds;\n    const count = points.length;\n    const { compare , between , normalize  } = propertyFn(property);\n    const { start , end , loop , style  } = getSegment(segment, points, bounds);\n    const result = [];\n    let inside = false;\n    let subStart = null;\n    let value, point, prevValue;\n    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n    const shouldStart = ()=>inside || startIsBefore();\n    const shouldStop = ()=>!inside || endIsBefore();\n    for(let i = start, prev = start; i <= end; ++i){\n        point = points[i % count];\n        if (point.skip) {\n            continue;\n        }\n        value = normalize(point[property]);\n        if (value === prevValue) {\n            continue;\n        }\n        inside = between(value, startBound, endBound);\n        if (subStart === null && shouldStart()) {\n            subStart = compare(value, startBound) === 0 ? i : prev;\n        }\n        if (subStart !== null && shouldStop()) {\n            result.push(normalizeSegment({\n                start: subStart,\n                end: i,\n                loop,\n                count,\n                style\n            }));\n            subStart = null;\n        }\n        prev = i;\n        prevValue = value;\n    }\n    if (subStart !== null) {\n        result.push(normalizeSegment({\n            start: subStart,\n            end,\n            loop,\n            count,\n            style\n        }));\n    }\n    return result;\n}\n function _boundSegments(line, bounds) {\n    const result = [];\n    const segments = line.segments;\n    for(let i = 0; i < segments.length; i++){\n        const sub = _boundSegment(segments[i], line.points, bounds);\n        if (sub.length) {\n            result.push(...sub);\n        }\n    }\n    return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n    let start = 0;\n    let end = count - 1;\n    if (loop && !spanGaps) {\n        while(start < count && !points[start].skip){\n            start++;\n        }\n    }\n    while(start < count && points[start].skip){\n        start++;\n    }\n    start %= count;\n    if (loop) {\n        end += start;\n    }\n    while(end > start && points[end % count].skip){\n        end--;\n    }\n    end %= count;\n    return {\n        start,\n        end\n    };\n}\n function solidSegments(points, start, max, loop) {\n    const count = points.length;\n    const result = [];\n    let last = start;\n    let prev = points[start];\n    let end;\n    for(end = start + 1; end <= max; ++end){\n        const cur = points[end % count];\n        if (cur.skip || cur.stop) {\n            if (!prev.skip) {\n                loop = false;\n                result.push({\n                    start: start % count,\n                    end: (end - 1) % count,\n                    loop\n                });\n                start = last = cur.stop ? end : null;\n            }\n        } else {\n            last = end;\n            if (prev.skip) {\n                start = end;\n            }\n        }\n        prev = cur;\n    }\n    if (last !== null) {\n        result.push({\n            start: start % count,\n            end: last % count,\n            loop\n        });\n    }\n    return result;\n}\n function _computeSegments(line, segmentOptions) {\n    const points = line.points;\n    const spanGaps = line.options.spanGaps;\n    const count = points.length;\n    if (!count) {\n        return [];\n    }\n    const loop = !!line._loop;\n    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);\n    if (spanGaps === true) {\n        return splitByStyles(line, [\n            {\n                start,\n                end,\n                loop\n            }\n        ], points, segmentOptions);\n    }\n    const max = end < start ? end + count : end;\n    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n    if (!segmentOptions || !segmentOptions.setContext || !points) {\n        return segments;\n    }\n    return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n    const chartContext = line._chart.getContext();\n    const baseStyle = readStyle(line.options);\n    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;\n    const count = points.length;\n    const result = [];\n    let prevStyle = baseStyle;\n    let start = segments[0].start;\n    let i = start;\n    function addStyle(s, e, l, st) {\n        const dir = spanGaps ? -1 : 1;\n        if (s === e) {\n            return;\n        }\n        s += count;\n        while(points[s % count].skip){\n            s -= dir;\n        }\n        while(points[e % count].skip){\n            e += dir;\n        }\n        if (s % count !== e % count) {\n            result.push({\n                start: s % count,\n                end: e % count,\n                loop: l,\n                style: st\n            });\n            prevStyle = st;\n            start = e % count;\n        }\n    }\n    for (const segment of segments){\n        start = spanGaps ? start : segment.start;\n        let prev = points[start % count];\n        let style;\n        for(i = start + 1; i <= segment.end; i++){\n            const pt = points[i % count];\n            style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n                type: 'segment',\n                p0: prev,\n                p1: pt,\n                p0DataIndex: (i - 1) % count,\n                p1DataIndex: i % count,\n                datasetIndex\n            })));\n            if (styleChanged(style, prevStyle)) {\n                addStyle(start, i - 1, segment.loop, prevStyle);\n            }\n            prev = pt;\n            prevStyle = style;\n        }\n        if (start < i - 1) {\n            addStyle(start, i - 1, segment.loop, prevStyle);\n        }\n    }\n    return result;\n}\nfunction readStyle(options) {\n    return {\n        backgroundColor: options.backgroundColor,\n        borderCapStyle: options.borderCapStyle,\n        borderDash: options.borderDash,\n        borderDashOffset: options.borderDashOffset,\n        borderJoinStyle: options.borderJoinStyle,\n        borderWidth: options.borderWidth,\n        borderColor: options.borderColor\n    };\n}\nfunction styleChanged(style, prevStyle) {\n    if (!prevStyle) {\n        return false;\n    }\n    const cache = [];\n    const replacer = function(key, value) {\n        if (!isPatternOrGradient(value)) {\n            return value;\n        }\n        if (!cache.includes(value)) {\n            cache.push(value);\n        }\n        return cache.indexOf(value);\n    };\n    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n    return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n    const { xScale , yScale  } = meta;\n    if (xScale && yScale) {\n        return {\n            left: getSizeForArea(xScale, chartArea, 'left'),\n            right: getSizeForArea(xScale, chartArea, 'right'),\n            top: getSizeForArea(yScale, chartArea, 'top'),\n            bottom: getSizeForArea(yScale, chartArea, 'bottom')\n        };\n    }\n    return chartArea;\n}\nfunction getDatasetClipArea(chart, meta) {\n    const clip = meta._clip;\n    if (clip.disabled) {\n        return false;\n    }\n    const area = getDatasetArea(meta, chart.chartArea);\n    return {\n        left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n        right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n        top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n        bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n    };\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, getStyle as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, distanceBetweenPoints as aF, noop as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, Ticks as aM, log10 as aN, _longestText as aO, _filterBetween as aP, _lookup as aQ, isPatternOrGradient as aR, getHoverColor as aS, clone as aT, _merger as aU, _mergerIf as aV, _deprecated as aW, _splitKey as aX, toFontString as aY, splineCurve as aZ, splineCurveMonotone as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, getDatasetClipArea as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, fontString as b0, toLineHeight as b1, PITAU as b2, INFINITY as b3, RAD_PER_DEG as b4, QUARTER_PI as b5, TWO_THIRDS_PI as b6, _angleDiff as b7, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.dataset.js.map\n","/*!\n * Chart.js v4.4.9\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as getDatasetClipArea, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as distanceBetweenPoints, aG as noop, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as Ticks, aN as log10, aO as _longestText, aP as _filterBetween, aQ as _lookup } from './chunks/helpers.dataset.js';\nimport '@kurkle/color';\n\nclass Animator {\n    constructor(){\n        this._request = null;\n        this._charts = new Map();\n        this._running = false;\n        this._lastDate = undefined;\n    }\n _notify(chart, anims, date, type) {\n        const callbacks = anims.listeners[type];\n        const numSteps = anims.duration;\n        callbacks.forEach((fn)=>fn({\n                chart,\n                initial: anims.initial,\n                numSteps,\n                currentStep: Math.min(date - anims.start, numSteps)\n            }));\n    }\n _refresh() {\n        if (this._request) {\n            return;\n        }\n        this._running = true;\n        this._request = requestAnimFrame.call(window, ()=>{\n            this._update();\n            this._request = null;\n            if (this._running) {\n                this._refresh();\n            }\n        });\n    }\n _update(date = Date.now()) {\n        let remaining = 0;\n        this._charts.forEach((anims, chart)=>{\n            if (!anims.running || !anims.items.length) {\n                return;\n            }\n            const items = anims.items;\n            let i = items.length - 1;\n            let draw = false;\n            let item;\n            for(; i >= 0; --i){\n                item = items[i];\n                if (item._active) {\n                    if (item._total > anims.duration) {\n                        anims.duration = item._total;\n                    }\n                    item.tick(date);\n                    draw = true;\n                } else {\n                    items[i] = items[items.length - 1];\n                    items.pop();\n                }\n            }\n            if (draw) {\n                chart.draw();\n                this._notify(chart, anims, date, 'progress');\n            }\n            if (!items.length) {\n                anims.running = false;\n                this._notify(chart, anims, date, 'complete');\n                anims.initial = false;\n            }\n            remaining += items.length;\n        });\n        this._lastDate = date;\n        if (remaining === 0) {\n            this._running = false;\n        }\n    }\n _getAnims(chart) {\n        const charts = this._charts;\n        let anims = charts.get(chart);\n        if (!anims) {\n            anims = {\n                running: false,\n                initial: true,\n                items: [],\n                listeners: {\n                    complete: [],\n                    progress: []\n                }\n            };\n            charts.set(chart, anims);\n        }\n        return anims;\n    }\n listen(chart, event, cb) {\n        this._getAnims(chart).listeners[event].push(cb);\n    }\n add(chart, items) {\n        if (!items || !items.length) {\n            return;\n        }\n        this._getAnims(chart).items.push(...items);\n    }\n has(chart) {\n        return this._getAnims(chart).items.length > 0;\n    }\n start(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims) {\n            return;\n        }\n        anims.running = true;\n        anims.start = Date.now();\n        anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n        this._refresh();\n    }\n    running(chart) {\n        if (!this._running) {\n            return false;\n        }\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.running || !anims.items.length) {\n            return false;\n        }\n        return true;\n    }\n stop(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.items.length) {\n            return;\n        }\n        const items = anims.items;\n        let i = items.length - 1;\n        for(; i >= 0; --i){\n            items[i].cancel();\n        }\n        anims.items = [];\n        this._notify(chart, anims, Date.now(), 'complete');\n    }\n remove(chart) {\n        return this._charts.delete(chart);\n    }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n    boolean (from, to, factor) {\n        return factor > 0.5 ? to : from;\n    },\n color (from, to, factor) {\n        const c0 = color(from || transparent);\n        const c1 = c0.valid && color(to || transparent);\n        return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n    },\n    number (from, to, factor) {\n        return from + (to - from) * factor;\n    }\n};\nclass Animation {\n    constructor(cfg, target, prop, to){\n        const currentValue = target[prop];\n        to = resolve([\n            cfg.to,\n            to,\n            currentValue,\n            cfg.from\n        ]);\n        const from = resolve([\n            cfg.from,\n            currentValue,\n            to\n        ]);\n        this._active = true;\n        this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n        this._easing = effects[cfg.easing] || effects.linear;\n        this._start = Math.floor(Date.now() + (cfg.delay || 0));\n        this._duration = this._total = Math.floor(cfg.duration);\n        this._loop = !!cfg.loop;\n        this._target = target;\n        this._prop = prop;\n        this._from = from;\n        this._to = to;\n        this._promises = undefined;\n    }\n    active() {\n        return this._active;\n    }\n    update(cfg, to, date) {\n        if (this._active) {\n            this._notify(false);\n            const currentValue = this._target[this._prop];\n            const elapsed = date - this._start;\n            const remain = this._duration - elapsed;\n            this._start = date;\n            this._duration = Math.floor(Math.max(remain, cfg.duration));\n            this._total += elapsed;\n            this._loop = !!cfg.loop;\n            this._to = resolve([\n                cfg.to,\n                to,\n                currentValue,\n                cfg.from\n            ]);\n            this._from = resolve([\n                cfg.from,\n                currentValue,\n                to\n            ]);\n        }\n    }\n    cancel() {\n        if (this._active) {\n            this.tick(Date.now());\n            this._active = false;\n            this._notify(false);\n        }\n    }\n    tick(date) {\n        const elapsed = date - this._start;\n        const duration = this._duration;\n        const prop = this._prop;\n        const from = this._from;\n        const loop = this._loop;\n        const to = this._to;\n        let factor;\n        this._active = from !== to && (loop || elapsed < duration);\n        if (!this._active) {\n            this._target[prop] = to;\n            this._notify(true);\n            return;\n        }\n        if (elapsed < 0) {\n            this._target[prop] = from;\n            return;\n        }\n        factor = elapsed / duration % 2;\n        factor = loop && factor > 1 ? 2 - factor : factor;\n        factor = this._easing(Math.min(1, Math.max(0, factor)));\n        this._target[prop] = this._fn(from, to, factor);\n    }\n    wait() {\n        const promises = this._promises || (this._promises = []);\n        return new Promise((res, rej)=>{\n            promises.push({\n                res,\n                rej\n            });\n        });\n    }\n    _notify(resolved) {\n        const method = resolved ? 'res' : 'rej';\n        const promises = this._promises || [];\n        for(let i = 0; i < promises.length; i++){\n            promises[i][method]();\n        }\n    }\n}\n\nclass Animations {\n    constructor(chart, config){\n        this._chart = chart;\n        this._properties = new Map();\n        this.configure(config);\n    }\n    configure(config) {\n        if (!isObject(config)) {\n            return;\n        }\n        const animationOptions = Object.keys(defaults.animation);\n        const animatedProps = this._properties;\n        Object.getOwnPropertyNames(config).forEach((key)=>{\n            const cfg = config[key];\n            if (!isObject(cfg)) {\n                return;\n            }\n            const resolved = {};\n            for (const option of animationOptions){\n                resolved[option] = cfg[option];\n            }\n            (isArray(cfg.properties) && cfg.properties || [\n                key\n            ]).forEach((prop)=>{\n                if (prop === key || !animatedProps.has(prop)) {\n                    animatedProps.set(prop, resolved);\n                }\n            });\n        });\n    }\n _animateOptions(target, values) {\n        const newOptions = values.options;\n        const options = resolveTargetOptions(target, newOptions);\n        if (!options) {\n            return [];\n        }\n        const animations = this._createAnimations(options, newOptions);\n        if (newOptions.$shared) {\n            awaitAll(target.options.$animations, newOptions).then(()=>{\n                target.options = newOptions;\n            }, ()=>{\n            });\n        }\n        return animations;\n    }\n _createAnimations(target, values) {\n        const animatedProps = this._properties;\n        const animations = [];\n        const running = target.$animations || (target.$animations = {});\n        const props = Object.keys(values);\n        const date = Date.now();\n        let i;\n        for(i = props.length - 1; i >= 0; --i){\n            const prop = props[i];\n            if (prop.charAt(0) === '$') {\n                continue;\n            }\n            if (prop === 'options') {\n                animations.push(...this._animateOptions(target, values));\n                continue;\n            }\n            const value = values[prop];\n            let animation = running[prop];\n            const cfg = animatedProps.get(prop);\n            if (animation) {\n                if (cfg && animation.active()) {\n                    animation.update(cfg, value, date);\n                    continue;\n                } else {\n                    animation.cancel();\n                }\n            }\n            if (!cfg || !cfg.duration) {\n                target[prop] = value;\n                continue;\n            }\n            running[prop] = animation = new Animation(cfg, target, prop, value);\n            animations.push(animation);\n        }\n        return animations;\n    }\n update(target, values) {\n        if (this._properties.size === 0) {\n            Object.assign(target, values);\n            return;\n        }\n        const animations = this._createAnimations(target, values);\n        if (animations.length) {\n            animator.add(this._chart, animations);\n            return true;\n        }\n    }\n}\nfunction awaitAll(animations, properties) {\n    const running = [];\n    const keys = Object.keys(properties);\n    for(let i = 0; i < keys.length; i++){\n        const anim = animations[keys[i]];\n        if (anim && anim.active()) {\n            running.push(anim.wait());\n        }\n    }\n    return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n    if (!newOptions) {\n        return;\n    }\n    let options = target.options;\n    if (!options) {\n        target.options = newOptions;\n        return;\n    }\n    if (options.$shared) {\n        target.options = options = Object.assign({}, options, {\n            $shared: false,\n            $animations: {}\n        });\n    }\n    return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n    const opts = scale && scale.options || {};\n    const reverse = opts.reverse;\n    const min = opts.min === undefined ? allowedOverflow : 0;\n    const max = opts.max === undefined ? allowedOverflow : 0;\n    return {\n        start: reverse ? max : min,\n        end: reverse ? min : max\n    };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n    if (allowedOverflow === false) {\n        return false;\n    }\n    const x = scaleClip(xScale, allowedOverflow);\n    const y = scaleClip(yScale, allowedOverflow);\n    return {\n        top: y.end,\n        right: x.end,\n        bottom: y.start,\n        left: x.start\n    };\n}\nfunction toClip(value) {\n    let t, r, b, l;\n    if (isObject(value)) {\n        t = value.top;\n        r = value.right;\n        b = value.bottom;\n        l = value.left;\n    } else {\n        t = r = b = l = value;\n    }\n    return {\n        top: t,\n        right: r,\n        bottom: b,\n        left: l,\n        disabled: value === false\n    };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n    const keys = [];\n    const metasets = chart._getSortedDatasetMetas(filterVisible);\n    let i, ilen;\n    for(i = 0, ilen = metasets.length; i < ilen; ++i){\n        keys.push(metasets[i].index);\n    }\n    return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n    const keys = stack.keys;\n    const singleMode = options.mode === 'single';\n    let i, ilen, datasetIndex, otherValue;\n    if (value === null) {\n        return;\n    }\n    let found = false;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        datasetIndex = +keys[i];\n        if (datasetIndex === dsIndex) {\n            found = true;\n            if (options.all) {\n                continue;\n            }\n            break;\n        }\n        otherValue = stack.values[datasetIndex];\n        if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n            value += otherValue;\n        }\n    }\n    if (!found && !options.all) {\n        return 0;\n    }\n    return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n    const { iScale , vScale  } = meta;\n    const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n    const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n    const keys = Object.keys(data);\n    const adata = new Array(keys.length);\n    let i, ilen, key;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        key = keys[i];\n        adata[i] = {\n            [iAxisKey]: key,\n            [vAxisKey]: data[key]\n        };\n    }\n    return adata;\n}\nfunction isStacked(scale, meta) {\n    const stacked = scale && scale.options.stacked;\n    return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n    return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n    const { min , max , minDefined , maxDefined  } = scale.getUserBounds();\n    return {\n        min: minDefined ? min : Number.NEGATIVE_INFINITY,\n        max: maxDefined ? max : Number.POSITIVE_INFINITY\n    };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n    const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n    return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n    for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n        const value = stack[meta.index];\n        if (positive && value > 0 || !positive && value < 0) {\n            return meta.index;\n        }\n    }\n    return null;\n}\nfunction updateStacks(controller, parsed) {\n    const { chart , _cachedMeta: meta  } = controller;\n    const stacks = chart._stacks || (chart._stacks = {});\n    const { iScale , vScale , index: datasetIndex  } = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const key = getStackKey(iScale, vScale, meta);\n    const ilen = parsed.length;\n    let stack;\n    for(let i = 0; i < ilen; ++i){\n        const item = parsed[i];\n        const { [iAxis]: index , [vAxis]: value  } = item;\n        const itemStacks = item._stacks || (item._stacks = {});\n        stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n        stack[datasetIndex] = value;\n        stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n        stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n        const visualValues = stack._visualValues || (stack._visualValues = {});\n        visualValues[datasetIndex] = value;\n    }\n}\nfunction getFirstScaleId(chart, axis) {\n    const scales = chart.scales;\n    return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n    return createContext(parent, {\n        active: false,\n        dataset: undefined,\n        datasetIndex: index,\n        index,\n        mode: 'default',\n        type: 'dataset'\n    });\n}\nfunction createDataContext(parent, index, element) {\n    return createContext(parent, {\n        active: false,\n        dataIndex: index,\n        parsed: undefined,\n        raw: undefined,\n        element,\n        index,\n        mode: 'default',\n        type: 'data'\n    });\n}\nfunction clearStacks(meta, items) {\n    const datasetIndex = meta.controller.index;\n    const axis = meta.vScale && meta.vScale.axis;\n    if (!axis) {\n        return;\n    }\n    items = items || meta._parsed;\n    for (const parsed of items){\n        const stacks = parsed._stacks;\n        if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n            return;\n        }\n        delete stacks[axis][datasetIndex];\n        if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n            delete stacks[axis]._visualValues[datasetIndex];\n        }\n    }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n        keys: getSortedDatasetIndices(chart, true),\n        values: null\n    };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n        this.chart = chart;\n        this._ctx = chart.ctx;\n        this.index = datasetIndex;\n        this._cachedDataOpts = {};\n        this._cachedMeta = this.getMeta();\n        this._type = this._cachedMeta.type;\n        this.options = undefined;\n         this._parsing = false;\n        this._data = undefined;\n        this._objectData = undefined;\n        this._sharedOptions = undefined;\n        this._drawStart = undefined;\n        this._drawCount = undefined;\n        this.enableOptionSharing = false;\n        this.supportsDecimation = false;\n        this.$context = undefined;\n        this._syncList = [];\n        this.datasetElementType = new.target.datasetElementType;\n        this.dataElementType = new.target.dataElementType;\n        this.initialize();\n    }\n    initialize() {\n        const meta = this._cachedMeta;\n        this.configure();\n        this.linkScales();\n        meta._stacked = isStacked(meta.vScale, meta);\n        this.addElements();\n        if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n            console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n        }\n    }\n    updateIndex(datasetIndex) {\n        if (this.index !== datasetIndex) {\n            clearStacks(this._cachedMeta);\n        }\n        this.index = datasetIndex;\n    }\n    linkScales() {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n        const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n        const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n        const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n        const indexAxis = meta.indexAxis;\n        const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n        const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n        meta.xScale = this.getScaleForId(xid);\n        meta.yScale = this.getScaleForId(yid);\n        meta.rScale = this.getScaleForId(rid);\n        meta.iScale = this.getScaleForId(iid);\n        meta.vScale = this.getScaleForId(vid);\n    }\n    getDataset() {\n        return this.chart.data.datasets[this.index];\n    }\n    getMeta() {\n        return this.chart.getDatasetMeta(this.index);\n    }\n getScaleForId(scaleID) {\n        return this.chart.scales[scaleID];\n    }\n _getOtherScale(scale) {\n        const meta = this._cachedMeta;\n        return scale === meta.iScale ? meta.vScale : meta.iScale;\n    }\n    reset() {\n        this._update('reset');\n    }\n _destroy() {\n        const meta = this._cachedMeta;\n        if (this._data) {\n            unlistenArrayEvents(this._data, this);\n        }\n        if (meta._stacked) {\n            clearStacks(meta);\n        }\n    }\n _dataCheck() {\n        const dataset = this.getDataset();\n        const data = dataset.data || (dataset.data = []);\n        const _data = this._data;\n        if (isObject(data)) {\n            const meta = this._cachedMeta;\n            this._data = convertObjectDataToArray(data, meta);\n        } else if (_data !== data) {\n            if (_data) {\n                unlistenArrayEvents(_data, this);\n                const meta = this._cachedMeta;\n                clearStacks(meta);\n                meta._parsed = [];\n            }\n            if (data && Object.isExtensible(data)) {\n                listenArrayEvents(data, this);\n            }\n            this._syncList = [];\n            this._data = data;\n        }\n    }\n    addElements() {\n        const meta = this._cachedMeta;\n        this._dataCheck();\n        if (this.datasetElementType) {\n            meta.dataset = new this.datasetElementType();\n        }\n    }\n    buildOrUpdateElements(resetNewElements) {\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        let stackChanged = false;\n        this._dataCheck();\n        const oldStacked = meta._stacked;\n        meta._stacked = isStacked(meta.vScale, meta);\n        if (meta.stack !== dataset.stack) {\n            stackChanged = true;\n            clearStacks(meta);\n            meta.stack = dataset.stack;\n        }\n        this._resyncElements(resetNewElements);\n        if (stackChanged || oldStacked !== meta._stacked) {\n            updateStacks(this, meta._parsed);\n            meta._stacked = isStacked(meta.vScale, meta);\n        }\n    }\n configure() {\n        const config = this.chart.config;\n        const scopeKeys = config.datasetScopeKeys(this._type);\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n        this.options = config.createResolver(scopes, this.getContext());\n        this._parsing = this.options.parsing;\n        this._cachedDataOpts = {};\n    }\n parse(start, count) {\n        const { _cachedMeta: meta , _data: data  } = this;\n        const { iScale , _stacked  } = meta;\n        const iAxis = iScale.axis;\n        let sorted = start === 0 && count === data.length ? true : meta._sorted;\n        let prev = start > 0 && meta._parsed[start - 1];\n        let i, cur, parsed;\n        if (this._parsing === false) {\n            meta._parsed = data;\n            meta._sorted = true;\n            parsed = data;\n        } else {\n            if (isArray(data[start])) {\n                parsed = this.parseArrayData(meta, data, start, count);\n            } else if (isObject(data[start])) {\n                parsed = this.parseObjectData(meta, data, start, count);\n            } else {\n                parsed = this.parsePrimitiveData(meta, data, start, count);\n            }\n            const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n            for(i = 0; i < count; ++i){\n                meta._parsed[i + start] = cur = parsed[i];\n                if (sorted) {\n                    if (isNotInOrderComparedToPrev()) {\n                        sorted = false;\n                    }\n                    prev = cur;\n                }\n            }\n            meta._sorted = sorted;\n        }\n        if (_stacked) {\n            updateStacks(this, parsed);\n        }\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const labels = iScale.getLabels();\n        const singleScale = iScale === vScale;\n        const parsed = new Array(count);\n        let i, ilen, index;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            parsed[i] = {\n                [iAxis]: singleScale || iScale.parse(labels[index], index),\n                [vAxis]: vScale.parse(data[index], index)\n            };\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(item[0], index),\n                y: yScale.parse(item[1], index)\n            };\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n                y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n            };\n        }\n        return parsed;\n    }\n getParsed(index) {\n        return this._cachedMeta._parsed[index];\n    }\n getDataElement(index) {\n        return this._cachedMeta.data[index];\n    }\n applyStack(scale, parsed, mode) {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const value = parsed[scale.axis];\n        const stack = {\n            keys: getSortedDatasetIndices(chart, true),\n            values: parsed._stacks[scale.axis]._visualValues\n        };\n        return applyStack(stack, value, meta.index, {\n            mode\n        });\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        const parsedValue = parsed[scale.axis];\n        let value = parsedValue === null ? NaN : parsedValue;\n        const values = stack && parsed._stacks[scale.axis];\n        if (stack && values) {\n            stack.values = values;\n            value = applyStack(stack, parsedValue, this._cachedMeta.index);\n        }\n        range.min = Math.min(range.min, value);\n        range.max = Math.max(range.max, value);\n    }\n getMinMax(scale, canStack) {\n        const meta = this._cachedMeta;\n        const _parsed = meta._parsed;\n        const sorted = meta._sorted && scale === meta.iScale;\n        const ilen = _parsed.length;\n        const otherScale = this._getOtherScale(scale);\n        const stack = createStack(canStack, meta, this.chart);\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        const { min: otherMin , max: otherMax  } = getUserBounds(otherScale);\n        let i, parsed;\n        function _skip() {\n            parsed = _parsed[i];\n            const otherValue = parsed[otherScale.axis];\n            return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n        }\n        for(i = 0; i < ilen; ++i){\n            if (_skip()) {\n                continue;\n            }\n            this.updateRangeFromParsed(range, scale, parsed, stack);\n            if (sorted) {\n                break;\n            }\n        }\n        if (sorted) {\n            for(i = ilen - 1; i >= 0; --i){\n                if (_skip()) {\n                    continue;\n                }\n                this.updateRangeFromParsed(range, scale, parsed, stack);\n                break;\n            }\n        }\n        return range;\n    }\n    getAllParsedValues(scale) {\n        const parsed = this._cachedMeta._parsed;\n        const values = [];\n        let i, ilen, value;\n        for(i = 0, ilen = parsed.length; i < ilen; ++i){\n            value = parsed[i][scale.axis];\n            if (isNumberFinite(value)) {\n                values.push(value);\n            }\n        }\n        return values;\n    }\n getMaxOverflow() {\n        return false;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const vScale = meta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n            value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n        };\n    }\n _update(mode) {\n        const meta = this._cachedMeta;\n        this.update(mode || 'default');\n        meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n    }\n update(mode) {}\n    draw() {\n        const ctx = this._ctx;\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const elements = meta.data || [];\n        const area = chart.chartArea;\n        const active = [];\n        const start = this._drawStart || 0;\n        const count = this._drawCount || elements.length - start;\n        const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n        let i;\n        if (meta.dataset) {\n            meta.dataset.draw(ctx, area, start, count);\n        }\n        for(i = start; i < start + count; ++i){\n            const element = elements[i];\n            if (element.hidden) {\n                continue;\n            }\n            if (element.active && drawActiveElementsOnTop) {\n                active.push(element);\n            } else {\n                element.draw(ctx, area);\n            }\n        }\n        for(i = 0; i < active.length; ++i){\n            active[i].draw(ctx, area);\n        }\n    }\n getStyle(index, active) {\n        const mode = active ? 'active' : 'default';\n        return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n    }\n getContext(index, active, mode) {\n        const dataset = this.getDataset();\n        let context;\n        if (index >= 0 && index < this._cachedMeta.data.length) {\n            const element = this._cachedMeta.data[index];\n            context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n            context.parsed = this.getParsed(index);\n            context.raw = dataset.data[index];\n            context.index = context.dataIndex = index;\n        } else {\n            context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n            context.dataset = dataset;\n            context.index = context.datasetIndex = this.index;\n        }\n        context.active = !!active;\n        context.mode = mode;\n        return context;\n    }\n resolveDatasetElementOptions(mode) {\n        return this._resolveElementOptions(this.datasetElementType.id, mode);\n    }\n resolveDataElementOptions(index, mode) {\n        return this._resolveElementOptions(this.dataElementType.id, mode, index);\n    }\n _resolveElementOptions(elementType, mode = 'default', index) {\n        const active = mode === 'active';\n        const cache = this._cachedDataOpts;\n        const cacheKey = elementType + '-' + mode;\n        const cached = cache[cacheKey];\n        const sharing = this.enableOptionSharing && defined(index);\n        if (cached) {\n            return cloneIfNotShared(cached, sharing);\n        }\n        const config = this.chart.config;\n        const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n        const prefixes = active ? [\n            `${elementType}Hover`,\n            'hover',\n            elementType,\n            ''\n        ] : [\n            elementType,\n            ''\n        ];\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n        const names = Object.keys(defaults.elements[elementType]);\n        const context = ()=>this.getContext(index, active, mode);\n        const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n        if (values.$shared) {\n            values.$shared = sharing;\n            cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n        }\n        return values;\n    }\n _resolveAnimations(index, transition, active) {\n        const chart = this.chart;\n        const cache = this._cachedDataOpts;\n        const cacheKey = `animation-${transition}`;\n        const cached = cache[cacheKey];\n        if (cached) {\n            return cached;\n        }\n        let options;\n        if (chart.options.animation !== false) {\n            const config = this.chart.config;\n            const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n            const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n            options = config.createResolver(scopes, this.getContext(index, active, transition));\n        }\n        const animations = new Animations(chart, options && options.animations);\n        if (options && options._cacheable) {\n            cache[cacheKey] = Object.freeze(animations);\n        }\n        return animations;\n    }\n getSharedOptions(options) {\n        if (!options.$shared) {\n            return;\n        }\n        return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n    }\n includeOptions(mode, sharedOptions) {\n        return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n    }\n _getSharedOptions(start, mode) {\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const previouslySharedOptions = this._sharedOptions;\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n        return {\n            sharedOptions,\n            includeOptions\n        };\n    }\n updateElement(element, index, properties, mode) {\n        if (isDirectUpdateMode(mode)) {\n            Object.assign(element, properties);\n        } else {\n            this._resolveAnimations(index, mode).update(element, properties);\n        }\n    }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n        if (sharedOptions && !isDirectUpdateMode(mode)) {\n            this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n        }\n    }\n _setStyle(element, index, mode, active) {\n        element.active = active;\n        const options = this.getStyle(index, active);\n        this._resolveAnimations(index, mode, active).update(element, {\n            options: !active && this.getSharedOptions(options) || options\n        });\n    }\n    removeHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', false);\n    }\n    setHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', true);\n    }\n _removeDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', false);\n        }\n    }\n _setDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', true);\n        }\n    }\n _resyncElements(resetNewElements) {\n        const data = this._data;\n        const elements = this._cachedMeta.data;\n        for (const [method, arg1, arg2] of this._syncList){\n            this[method](arg1, arg2);\n        }\n        this._syncList = [];\n        const numMeta = elements.length;\n        const numData = data.length;\n        const count = Math.min(numData, numMeta);\n        if (count) {\n            this.parse(0, count);\n        }\n        if (numData > numMeta) {\n            this._insertElements(numMeta, numData - numMeta, resetNewElements);\n        } else if (numData < numMeta) {\n            this._removeElements(numData, numMeta - numData);\n        }\n    }\n _insertElements(start, count, resetNewElements = true) {\n        const meta = this._cachedMeta;\n        const data = meta.data;\n        const end = start + count;\n        let i;\n        const move = (arr)=>{\n            arr.length += count;\n            for(i = arr.length - 1; i >= end; i--){\n                arr[i] = arr[i - count];\n            }\n        };\n        move(data);\n        for(i = start; i < end; ++i){\n            data[i] = new this.dataElementType();\n        }\n        if (this._parsing) {\n            move(meta._parsed);\n        }\n        this.parse(start, count);\n        if (resetNewElements) {\n            this.updateElements(data, start, count, 'reset');\n        }\n    }\n    updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n        const meta = this._cachedMeta;\n        if (this._parsing) {\n            const removed = meta._parsed.splice(start, count);\n            if (meta._stacked) {\n                clearStacks(meta, removed);\n            }\n        }\n        meta.data.splice(start, count);\n    }\n _sync(args) {\n        if (this._parsing) {\n            this._syncList.push(args);\n        } else {\n            const [method, arg1, arg2] = args;\n            this[method](arg1, arg2);\n        }\n        this.chart._dataChanges.push([\n            this.index,\n            ...args\n        ]);\n    }\n    _onDataPush() {\n        const count = arguments.length;\n        this._sync([\n            '_insertElements',\n            this.getDataset().data.length - count,\n            count\n        ]);\n    }\n    _onDataPop() {\n        this._sync([\n            '_removeElements',\n            this._cachedMeta.data.length - 1,\n            1\n        ]);\n    }\n    _onDataShift() {\n        this._sync([\n            '_removeElements',\n            0,\n            1\n        ]);\n    }\n    _onDataSplice(start, count) {\n        if (count) {\n            this._sync([\n                '_removeElements',\n                start,\n                count\n            ]);\n        }\n        const newCount = arguments.length - 2;\n        if (newCount) {\n            this._sync([\n                '_insertElements',\n                start,\n                newCount\n            ]);\n        }\n    }\n    _onDataUnshift() {\n        this._sync([\n            '_insertElements',\n            0,\n            arguments.length\n        ]);\n    }\n}\n\nfunction getAllScaleValues(scale, type) {\n    if (!scale._cache.$bar) {\n        const visibleMetas = scale.getMatchingVisibleMetas(type);\n        let values = [];\n        for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n            values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n        }\n        scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n    }\n    return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n    const scale = meta.iScale;\n    const values = getAllScaleValues(scale, meta.type);\n    let min = scale._length;\n    let i, ilen, curr, prev;\n    const updateMinAndPrev = ()=>{\n        if (curr === 32767 || curr === -32768) {\n            return;\n        }\n        if (defined(prev)) {\n            min = Math.min(min, Math.abs(curr - prev) || min);\n        }\n        prev = curr;\n    };\n    for(i = 0, ilen = values.length; i < ilen; ++i){\n        curr = scale.getPixelForValue(values[i]);\n        updateMinAndPrev();\n    }\n    prev = undefined;\n    for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n        curr = scale.getPixelForTick(i);\n        updateMinAndPrev();\n    }\n    return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n    const thickness = options.barThickness;\n    let size, ratio;\n    if (isNullOrUndef(thickness)) {\n        size = ruler.min * options.categoryPercentage;\n        ratio = options.barPercentage;\n    } else {\n        size = thickness * stackCount;\n        ratio = 1;\n    }\n    return {\n        chunk: size / stackCount,\n        ratio,\n        start: ruler.pixels[index] - size / 2\n    };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n    const pixels = ruler.pixels;\n    const curr = pixels[index];\n    let prev = index > 0 ? pixels[index - 1] : null;\n    let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n    const percent = options.categoryPercentage;\n    if (prev === null) {\n        prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n    }\n    if (next === null) {\n        next = curr + curr - prev;\n    }\n    const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n    const size = Math.abs(next - prev) / 2 * percent;\n    return {\n        chunk: size / stackCount,\n        ratio: options.barPercentage,\n        start\n    };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n    const startValue = vScale.parse(entry[0], i);\n    const endValue = vScale.parse(entry[1], i);\n    const min = Math.min(startValue, endValue);\n    const max = Math.max(startValue, endValue);\n    let barStart = min;\n    let barEnd = max;\n    if (Math.abs(min) > Math.abs(max)) {\n        barStart = max;\n        barEnd = min;\n    }\n    item[vScale.axis] = barEnd;\n    item._custom = {\n        barStart,\n        barEnd,\n        start: startValue,\n        end: endValue,\n        min,\n        max\n    };\n}\nfunction parseValue(entry, item, vScale, i) {\n    if (isArray(entry)) {\n        parseFloatBar(entry, item, vScale, i);\n    } else {\n        item[vScale.axis] = vScale.parse(entry, i);\n    }\n    return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = [];\n    let i, ilen, item, entry;\n    for(i = start, ilen = start + count; i < ilen; ++i){\n        entry = data[i];\n        item = {};\n        item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n        parsed.push(parseValue(entry, item, vScale, i));\n    }\n    return parsed;\n}\nfunction isFloatBar(custom) {\n    return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n    if (size !== 0) {\n        return sign(size);\n    }\n    return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n    let reverse, start, end, top, bottom;\n    if (properties.horizontal) {\n        reverse = properties.base > properties.x;\n        start = 'left';\n        end = 'right';\n    } else {\n        reverse = properties.base < properties.y;\n        start = 'bottom';\n        end = 'top';\n    }\n    if (reverse) {\n        top = 'end';\n        bottom = 'start';\n    } else {\n        top = 'start';\n        bottom = 'end';\n    }\n    return {\n        start,\n        end,\n        reverse,\n        top,\n        bottom\n    };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n    let edge = options.borderSkipped;\n    const res = {};\n    if (!edge) {\n        properties.borderSkipped = res;\n        return;\n    }\n    if (edge === true) {\n        properties.borderSkipped = {\n            top: true,\n            right: true,\n            bottom: true,\n            left: true\n        };\n        return;\n    }\n    const { start , end , reverse , top , bottom  } = borderProps(properties);\n    if (edge === 'middle' && stack) {\n        properties.enableBorderRadius = true;\n        if ((stack._top || 0) === index) {\n            edge = top;\n        } else if ((stack._bottom || 0) === index) {\n            edge = bottom;\n        } else {\n            res[parseEdge(bottom, start, end, reverse)] = true;\n            edge = top;\n        }\n    }\n    res[parseEdge(edge, start, end, reverse)] = true;\n    properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n    if (reverse) {\n        edge = swap(edge, a, b);\n        edge = startEnd(edge, b, a);\n    } else {\n        edge = startEnd(edge, a, b);\n    }\n    return edge;\n}\nfunction swap(orig, v1, v2) {\n    return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n    return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount  }, ratio) {\n    properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n    static id = 'bar';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'bar',\n        categoryPercentage: 0.8,\n        barPercentage: 0.9,\n        grouped: true,\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'base',\n                    'width',\n                    'height'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category',\n                offset: true,\n                grid: {\n                    offset: true\n                }\n            },\n            _value_: {\n                type: 'linear',\n                beginAtZero: true\n            }\n        }\n    };\n parsePrimitiveData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseArrayData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseObjectData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const parsed = [];\n        let i, ilen, item, obj;\n        for(i = start, ilen = start + count; i < ilen; ++i){\n            obj = data[i];\n            item = {};\n            item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n            parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n        }\n        return parsed;\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        super.updateRangeFromParsed(range, scale, parsed, stack);\n        const custom = parsed._custom;\n        if (custom && scale === this._cachedMeta.vScale) {\n            range.min = Math.min(range.min, custom.min);\n            range.max = Math.max(range.max, custom.max);\n        }\n    }\n getMaxOverflow() {\n        return 0;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const { iScale , vScale  } = meta;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n        return {\n            label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n            value\n        };\n    }\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n        const meta = this._cachedMeta;\n        meta.stack = this.getDataset().stack;\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        this.updateElements(meta.data, 0, meta.data.length, mode);\n    }\n    updateElements(bars, start, count, mode) {\n        const reset = mode === 'reset';\n        const { index , _cachedMeta: { vScale  }  } = this;\n        const base = vScale.getBasePixel();\n        const horizontal = vScale.isHorizontal();\n        const ruler = this._getRuler();\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        for(let i = start; i < start + count; i++){\n            const parsed = this.getParsed(i);\n            const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n                base,\n                head: base\n            } : this._calculateBarValuePixels(i);\n            const ipixels = this._calculateBarIndexPixels(i, ruler);\n            const stack = (parsed._stacks || {})[vScale.axis];\n            const properties = {\n                horizontal,\n                base: vpixels.base,\n                enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n                x: horizontal ? vpixels.head : ipixels.center,\n                y: horizontal ? ipixels.center : vpixels.head,\n                height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n                width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n            }\n            const options = properties.options || bars[i].options;\n            setBorderSkipped(properties, options, stack, index);\n            setInflateAmount(properties, options, ruler.ratio);\n            this.updateElement(bars[i], i, properties, mode);\n        }\n    }\n _getStacks(last, dataIndex) {\n        const { iScale  } = this._cachedMeta;\n        const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n        const stacked = iScale.options.stacked;\n        const stacks = [];\n        const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n        const iScaleValue = currentParsed && currentParsed[iScale.axis];\n        const skipNull = (meta)=>{\n            const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n            const val = parsed && parsed[meta.vScale.axis];\n            if (isNullOrUndef(val) || isNaN(val)) {\n                return true;\n            }\n        };\n        for (const meta of metasets){\n            if (dataIndex !== undefined && skipNull(meta)) {\n                continue;\n            }\n            if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n                stacks.push(meta.stack);\n            }\n            if (meta.index === last) {\n                break;\n            }\n        }\n        if (!stacks.length) {\n            stacks.push(undefined);\n        }\n        return stacks;\n    }\n _getStackCount(index) {\n        return this._getStacks(undefined, index).length;\n    }\n _getStackIndex(datasetIndex, name, dataIndex) {\n        const stacks = this._getStacks(datasetIndex, dataIndex);\n        const index = name !== undefined ? stacks.indexOf(name) : -1;\n        return index === -1 ? stacks.length - 1 : index;\n    }\n _getRuler() {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const pixels = [];\n        let i, ilen;\n        for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n            pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n        }\n        const barThickness = opts.barThickness;\n        const min = barThickness || computeMinSampleSize(meta);\n        return {\n            min,\n            pixels,\n            start: iScale._startPixel,\n            end: iScale._endPixel,\n            stackCount: this._getStackCount(),\n            scale: iScale,\n            grouped: opts.grouped,\n            ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n        };\n    }\n _calculateBarValuePixels(index) {\n        const { _cachedMeta: { vScale , _stacked , index: datasetIndex  } , options: { base: baseValue , minBarLength  }  } = this;\n        const actualBase = baseValue || 0;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const floating = isFloatBar(custom);\n        let value = parsed[vScale.axis];\n        let start = 0;\n        let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n        let head, size;\n        if (length !== value) {\n            start = length - value;\n            length = value;\n        }\n        if (floating) {\n            value = custom.barStart;\n            length = custom.barEnd - custom.barStart;\n            if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n                start = 0;\n            }\n            start += value;\n        }\n        const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n        let base = vScale.getPixelForValue(startValue);\n        if (this.chart.getDataVisibility(index)) {\n            head = vScale.getPixelForValue(start + length);\n        } else {\n            head = base;\n        }\n        size = head - base;\n        if (Math.abs(size) < minBarLength) {\n            size = barSign(size, vScale, actualBase) * minBarLength;\n            if (value === actualBase) {\n                base -= size / 2;\n            }\n            const startPixel = vScale.getPixelForDecimal(0);\n            const endPixel = vScale.getPixelForDecimal(1);\n            const min = Math.min(startPixel, endPixel);\n            const max = Math.max(startPixel, endPixel);\n            base = Math.max(Math.min(base, max), min);\n            head = base + size;\n            if (_stacked && !floating) {\n                parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n            }\n        }\n        if (base === vScale.getPixelForValue(actualBase)) {\n            const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n            base += halfGrid;\n            size -= halfGrid;\n        }\n        return {\n            size,\n            base,\n            head,\n            center: head + size / 2\n        };\n    }\n _calculateBarIndexPixels(index, ruler) {\n        const scale = ruler.scale;\n        const options = this.options;\n        const skipNull = options.skipNull;\n        const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n        let center, size;\n        if (ruler.grouped) {\n            const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n            const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n            const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n            center = range.start + range.chunk * stackIndex + range.chunk / 2;\n            size = Math.min(maxBarThickness, range.chunk * range.ratio);\n        } else {\n            center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n            size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n        }\n        return {\n            base: center - size / 2,\n            head: center + size / 2,\n            center,\n            size\n        };\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        const vScale = meta.vScale;\n        const rects = meta.data;\n        const ilen = rects.length;\n        let i = 0;\n        for(; i < ilen; ++i){\n            if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n                rects[i].draw(this._ctx);\n            }\n        }\n    }\n}\n\nclass BubbleController extends DatasetController {\n    static id = 'bubble';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'borderWidth',\n                    'radius'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const parsed = super.parsePrimitiveData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const parsed = super.parseArrayData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const parsed = super.parseObjectData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n getMaxOverflow() {\n        const data = this._cachedMeta.data;\n        let max = 0;\n        for(let i = data.length - 1; i >= 0; --i){\n            max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n        }\n        return max > 0 && max;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        const r = parsed._custom;\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n        };\n    }\n    update(mode) {\n        const points = this._cachedMeta.data;\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const parsed = !reset && this.getParsed(i);\n            const properties = {};\n            const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n            const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel);\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n                if (reset) {\n                    properties.options.radius = 0;\n                }\n            }\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n resolveDataElementOptions(index, mode) {\n        const parsed = this.getParsed(index);\n        let values = super.resolveDataElementOptions(index, mode);\n        if (values.$shared) {\n            values = Object.assign({}, values, {\n                $shared: false\n            });\n        }\n        const radius = values.radius;\n        if (mode !== 'active') {\n            values.radius = 0;\n        }\n        values.radius += valueOrDefault(parsed && parsed._custom, radius);\n        return values;\n    }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n    let ratioX = 1;\n    let ratioY = 1;\n    let offsetX = 0;\n    let offsetY = 0;\n    if (circumference < TAU) {\n        const startAngle = rotation;\n        const endAngle = startAngle + circumference;\n        const startX = Math.cos(startAngle);\n        const startY = Math.sin(startAngle);\n        const endX = Math.cos(endAngle);\n        const endY = Math.sin(endAngle);\n        const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n        const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n        const maxX = calcMax(0, startX, endX);\n        const maxY = calcMax(HALF_PI, startY, endY);\n        const minX = calcMin(PI, startX, endX);\n        const minY = calcMin(PI + HALF_PI, startY, endY);\n        ratioX = (maxX - minX) / 2;\n        ratioY = (maxY - minY) / 2;\n        offsetX = -(maxX + minX) / 2;\n        offsetY = -(maxY + minY) / 2;\n    }\n    return {\n        ratioX,\n        ratioY,\n        offsetX,\n        offsetY\n    };\n}\nclass DoughnutController extends DatasetController {\n    static id = 'doughnut';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: false\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'circumference',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius',\n                    'startAngle',\n                    'x',\n                    'y',\n                    'offset',\n                    'borderWidth',\n                    'spacing'\n                ]\n            }\n        },\n        cutout: '50%',\n        rotation: 0,\n        circumference: 360,\n        radius: '100%',\n        spacing: 0,\n        indexAxis: 'r'\n    };\n    static descriptors = {\n        _scriptable: (name)=>name !== 'spacing',\n        _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        if (data.labels.length && data.datasets.length) {\n                            const { labels: { pointStyle , color  }  } = chart.legend.options;\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    strokeStyle: style.borderColor,\n                                    fontColor: color,\n                                    lineWidth: style.borderWidth,\n                                    pointStyle: pointStyle,\n                                    hidden: !chart.getDataVisibility(i),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.enableOptionSharing = true;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.offsetX = undefined;\n        this.offsetY = undefined;\n    }\n    linkScales() {}\n parse(start, count) {\n        const data = this.getDataset().data;\n        const meta = this._cachedMeta;\n        if (this._parsing === false) {\n            meta._parsed = data;\n        } else {\n            let getter = (i)=>+data[i];\n            if (isObject(data[start])) {\n                const { key ='value'  } = this._parsing;\n                getter = (i)=>+resolveObjectKey(data[i], key);\n            }\n            let i, ilen;\n            for(i = start, ilen = start + count; i < ilen; ++i){\n                meta._parsed[i] = getter(i);\n            }\n        }\n    }\n _getRotation() {\n        return toRadians(this.options.rotation - 90);\n    }\n _getCircumference() {\n        return toRadians(this.options.circumference);\n    }\n _getRotationExtents() {\n        let min = TAU;\n        let max = -TAU;\n        for(let i = 0; i < this.chart.data.datasets.length; ++i){\n            if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n                const controller = this.chart.getDatasetMeta(i).controller;\n                const rotation = controller._getRotation();\n                const circumference = controller._getCircumference();\n                min = Math.min(min, rotation);\n                max = Math.max(max, rotation + circumference);\n            }\n        }\n        return {\n            rotation: min,\n            circumference: max - min\n        };\n    }\n update(mode) {\n        const chart = this.chart;\n        const { chartArea  } = chart;\n        const meta = this._cachedMeta;\n        const arcs = meta.data;\n        const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n        const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n        const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n        const chartWeight = this._getRingWeight(this.index);\n        const { circumference , rotation  } = this._getRotationExtents();\n        const { ratioX , ratioY , offsetX , offsetY  } = getRatioAndOffset(rotation, circumference, cutout);\n        const maxWidth = (chartArea.width - spacing) / ratioX;\n        const maxHeight = (chartArea.height - spacing) / ratioY;\n        const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n        const outerRadius = toDimension(this.options.radius, maxRadius);\n        const innerRadius = Math.max(outerRadius * cutout, 0);\n        const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n        this.offsetX = offsetX * outerRadius;\n        this.offsetY = offsetY * outerRadius;\n        meta.total = this.calculateTotal();\n        this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n        this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n _circumference(i, reset) {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const circumference = this._getCircumference();\n        if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n            return 0;\n        }\n        return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const centerX = (chartArea.left + chartArea.right) / 2;\n        const centerY = (chartArea.top + chartArea.bottom) / 2;\n        const animateScale = reset && animationOpts.animateScale;\n        const innerRadius = animateScale ? 0 : this.innerRadius;\n        const outerRadius = animateScale ? 0 : this.outerRadius;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        let startAngle = this._getRotation();\n        let i;\n        for(i = 0; i < start; ++i){\n            startAngle += this._circumference(i, reset);\n        }\n        for(i = start; i < start + count; ++i){\n            const circumference = this._circumference(i, reset);\n            const arc = arcs[i];\n            const properties = {\n                x: centerX + this.offsetX,\n                y: centerY + this.offsetY,\n                startAngle,\n                endAngle: startAngle + circumference,\n                circumference,\n                outerRadius,\n                innerRadius\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n            }\n            startAngle += circumference;\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    calculateTotal() {\n        const meta = this._cachedMeta;\n        const metaData = meta.data;\n        let total = 0;\n        let i;\n        for(i = 0; i < metaData.length; i++){\n            const value = meta._parsed[i];\n            if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n                total += Math.abs(value);\n            }\n        }\n        return total;\n    }\n    calculateCircumference(value) {\n        const total = this._cachedMeta.total;\n        if (total > 0 && !isNaN(value)) {\n            return TAU * (Math.abs(value) / total);\n        }\n        return 0;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = formatNumber(meta._parsed[index], chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    getMaxBorderWidth(arcs) {\n        let max = 0;\n        const chart = this.chart;\n        let i, ilen, meta, controller, options;\n        if (!arcs) {\n            for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n                if (chart.isDatasetVisible(i)) {\n                    meta = chart.getDatasetMeta(i);\n                    arcs = meta.data;\n                    controller = meta.controller;\n                    break;\n                }\n            }\n        }\n        if (!arcs) {\n            return 0;\n        }\n        for(i = 0, ilen = arcs.length; i < ilen; ++i){\n            options = controller.resolveDataElementOptions(i);\n            if (options.borderAlign !== 'inner') {\n                max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n            }\n        }\n        return max;\n    }\n    getMaxOffset(arcs) {\n        let max = 0;\n        for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n            const options = this.resolveDataElementOptions(i);\n            max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n        }\n        return max;\n    }\n _getRingWeightOffset(datasetIndex) {\n        let ringWeightOffset = 0;\n        for(let i = 0; i < datasetIndex; ++i){\n            if (this.chart.isDatasetVisible(i)) {\n                ringWeightOffset += this._getRingWeight(i);\n            }\n        }\n        return ringWeightOffset;\n    }\n _getRingWeight(datasetIndex) {\n        return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n    }\n _getVisibleDatasetWeightTotal() {\n        return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n    }\n}\n\nclass LineController extends DatasetController {\n    static id = 'line';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        showLine: true,\n        spanGaps: false\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category'\n            },\n            _value_: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        this.supportsDecimation = true;\n        super.initialize();\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { dataset: line , data: points = [] , _dataset  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (_scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        line._chart = this.chart;\n        line._datasetIndex = this.index;\n        line._decimated = !!_dataset._decimated;\n        line.points = points;\n        const options = this.resolveDatasetElementOptions(mode);\n        if (!this.options.showLine) {\n            options.borderWidth = 0;\n        }\n        options.segment = this.options.segment;\n        this.updateElement(line, undefined, {\n            animated: !animationsDisabled,\n            options\n        }, mode);\n        this.updateElements(points, start, count, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        const end = start + count;\n        const pointsCount = points.length;\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = 0; i < pointsCount; ++i){\n            const point = points[i];\n            const properties = directUpdate ? point : {};\n            if (i < start || i >= end) {\n                properties.skip = true;\n                continue;\n            }\n            const parsed = this.getParsed(i);\n            const nullData = isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        const data = meta.data || [];\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n        super.draw();\n    }\n}\n\nclass PolarAreaController extends DatasetController {\n    static id = 'polarArea';\n static defaults = {\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: true\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'startAngle',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius'\n                ]\n            }\n        },\n        indexAxis: 'r',\n        startAngle: 0\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        if (data.labels.length && data.datasets.length) {\n                            const { labels: { pointStyle , color  }  } = chart.legend.options;\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    strokeStyle: style.borderColor,\n                                    fontColor: color,\n                                    lineWidth: style.borderWidth,\n                                    pointStyle: pointStyle,\n                                    hidden: !chart.getDataVisibility(i),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        },\n        scales: {\n            r: {\n                type: 'radialLinear',\n                angleLines: {\n                    display: false\n                },\n                beginAtZero: true,\n                grid: {\n                    circular: true\n                },\n                pointLabels: {\n                    display: false\n                },\n                startAngle: 0\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const arcs = this._cachedMeta.data;\n        this._updateRadius();\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n getMinMax() {\n        const meta = this._cachedMeta;\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        meta.data.forEach((element, index)=>{\n            const parsed = this.getParsed(index).r;\n            if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n                if (parsed < range.min) {\n                    range.min = parsed;\n                }\n                if (parsed > range.max) {\n                    range.max = parsed;\n                }\n            }\n        });\n        return range;\n    }\n _updateRadius() {\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n        const outerRadius = Math.max(minSize / 2, 0);\n        const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n        const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n        this.outerRadius = outerRadius - radiusLength * this.index;\n        this.innerRadius = this.outerRadius - radiusLength;\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const scale = this._cachedMeta.rScale;\n        const centerX = scale.xCenter;\n        const centerY = scale.yCenter;\n        const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n        let angle = datasetStartAngle;\n        let i;\n        const defaultAngle = 360 / this.countVisibleElements();\n        for(i = 0; i < start; ++i){\n            angle += this._computeAngle(i, mode, defaultAngle);\n        }\n        for(i = start; i < start + count; i++){\n            const arc = arcs[i];\n            let startAngle = angle;\n            let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n            let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n            angle = endAngle;\n            if (reset) {\n                if (animationOpts.animateScale) {\n                    outerRadius = 0;\n                }\n                if (animationOpts.animateRotate) {\n                    startAngle = endAngle = datasetStartAngle;\n                }\n            }\n            const properties = {\n                x: centerX,\n                y: centerY,\n                innerRadius: 0,\n                outerRadius,\n                startAngle,\n                endAngle,\n                options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n            };\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    countVisibleElements() {\n        const meta = this._cachedMeta;\n        let count = 0;\n        meta.data.forEach((element, index)=>{\n            if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n                count++;\n            }\n        });\n        return count;\n    }\n _computeAngle(index, mode, defaultAngle) {\n        return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n    }\n}\n\nclass PieController extends DoughnutController {\n    static id = 'pie';\n static defaults = {\n        cutout: 0,\n        rotation: 0,\n        circumference: 360,\n        radius: '100%'\n    };\n}\n\nclass RadarController extends DatasetController {\n    static id = 'radar';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        indexAxis: 'r',\n        showLine: true,\n        elements: {\n            line: {\n                fill: 'start'\n            }\n        }\n    };\n static overrides = {\n        aspectRatio: 1,\n        scales: {\n            r: {\n                type: 'radialLinear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const vScale = this._cachedMeta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: vScale.getLabels()[index],\n            value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const line = meta.dataset;\n        const points = meta.data || [];\n        const labels = meta.iScale.getLabels();\n        line.points = points;\n        if (mode !== 'resize') {\n            const options = this.resolveDatasetElementOptions(mode);\n            if (!this.options.showLine) {\n                options.borderWidth = 0;\n            }\n            const properties = {\n                _loop: true,\n                _fullLoop: labels.length === points.length,\n                options\n            };\n            this.updateElement(line, undefined, properties, mode);\n        }\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const scale = this._cachedMeta.rScale;\n        const reset = mode === 'reset';\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n            const x = reset ? scale.xCenter : pointPosition.x;\n            const y = reset ? scale.yCenter : pointPosition.y;\n            const properties = {\n                x,\n                y,\n                angle: pointPosition.angle,\n                skip: isNaN(x) || isNaN(y),\n                options\n            };\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n}\n\nclass ScatterController extends DatasetController {\n    static id = 'scatter';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        showLine: false,\n        fill: false\n    };\n static overrides = {\n        interaction: {\n            mode: 'point'\n        },\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + ')'\n        };\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { data: points = []  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (_scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        if (this.options.showLine) {\n            if (!this.datasetElementType) {\n                this.addElements();\n            }\n            const { dataset: line , _dataset  } = meta;\n            line._chart = this.chart;\n            line._datasetIndex = this.index;\n            line._decimated = !!_dataset._decimated;\n            line.points = points;\n            const options = this.resolveDatasetElementOptions(mode);\n            options.segment = this.options.segment;\n            this.updateElement(line, undefined, {\n                animated: !animationsDisabled,\n                options\n            }, mode);\n        } else if (this.datasetElementType) {\n            delete meta.dataset;\n            this.datasetElementType = false;\n        }\n        this.updateElements(points, start, count, mode);\n    }\n    addElements() {\n        const { showLine  } = this.options;\n        if (!this.datasetElementType && showLine) {\n            this.datasetElementType = this.chart.registry.getElement('line');\n        }\n        super.addElements();\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = start; i < start + count; ++i){\n            const point = points[i];\n            const parsed = this.getParsed(i);\n            const properties = directUpdate ? point : {};\n            const nullData = isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const data = meta.data || [];\n        if (!this.options.showLine) {\n            let max = 0;\n            for(let i = data.length - 1; i >= 0; --i){\n                max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n            }\n            return max > 0 && max;\n        }\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n    throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n    /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */ static override(members) {\n        Object.assign(DateAdapterBase.prototype, members);\n    }\n    options;\n    constructor(options){\n        this.options = options || {};\n    }\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    init() {}\n    formats() {\n        return abstract();\n    }\n    parse() {\n        return abstract();\n    }\n    format() {\n        return abstract();\n    }\n    add() {\n        return abstract();\n    }\n    diff() {\n        return abstract();\n    }\n    startOf() {\n        return abstract();\n    }\n    endOf() {\n        return abstract();\n    }\n}\nvar adapters = {\n    _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n    const { controller , data , _sorted  } = metaset;\n    const iScale = controller._cachedMeta.iScale;\n    const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n    if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n        const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n        if (!intersect) {\n            const result = lookupMethod(data, axis, value);\n            if (spanGaps) {\n                const { vScale  } = controller._cachedMeta;\n                const { _parsed  } = metaset;\n                const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                result.lo -= Math.max(0, distanceToDefinedLo);\n                const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                result.hi += Math.max(0, distanceToDefinedHi);\n            }\n            return result;\n        } else if (controller._sharedOptions) {\n            const el = data[0];\n            const range = typeof el.getRange === 'function' && el.getRange(axis);\n            if (range) {\n                const start = lookupMethod(data, axis, value - range);\n                const end = lookupMethod(data, axis, value + range);\n                return {\n                    lo: start.lo,\n                    hi: end.hi\n                };\n            }\n        }\n    }\n    return {\n        lo: 0,\n        hi: data.length - 1\n    };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const value = position[axis];\n    for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n        const { index , data  } = metasets[i];\n        const { lo , hi  } = binarySearch(metasets[i], axis, value, intersect);\n        for(let j = lo; j <= hi; ++j){\n            const element = data[j];\n            if (!element.skip) {\n                handler(element, index, j);\n            }\n        }\n    }\n}\n function getDistanceMetricForAxis(axis) {\n    const useX = axis.indexOf('x') !== -1;\n    const useY = axis.indexOf('y') !== -1;\n    return function(pt1, pt2) {\n        const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n        const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n        return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n    };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n    const items = [];\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return items;\n    }\n    const evaluationFunc = function(element, datasetIndex, index) {\n        if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n            return;\n        }\n        if (element.inRange(position.x, position.y, useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    };\n    evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n    return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n    let items = [];\n    function evaluationFunc(element, datasetIndex, index) {\n        const { startAngle , endAngle  } = element.getProps([\n            'startAngle',\n            'endAngle'\n        ], useFinalPosition);\n        const { angle  } = getAngleFromPoint(element, {\n            x: position.x,\n            y: position.y\n        });\n        if (_angleBetween(angle, startAngle, endAngle)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    let items = [];\n    const distanceMetric = getDistanceMetricForAxis(axis);\n    let minDistance = Number.POSITIVE_INFINITY;\n    function evaluationFunc(element, datasetIndex, index) {\n        const inRange = element.inRange(position.x, position.y, useFinalPosition);\n        if (intersect && !inRange) {\n            return;\n        }\n        const center = element.getCenterPoint(useFinalPosition);\n        const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n        if (!pointInArea && !inRange) {\n            return;\n        }\n        const distance = distanceMetric(position, center);\n        if (distance < minDistance) {\n            items = [\n                {\n                    element,\n                    datasetIndex,\n                    index\n                }\n            ];\n            minDistance = distance;\n        } else if (distance === minDistance) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return [];\n    }\n    return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n    const items = [];\n    const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n    let intersectsItem = false;\n    evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n        if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n            intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n        }\n    });\n    if (intersect && !intersectsItem) {\n        return [];\n    }\n    return items;\n}\n var Interaction = {\n    evaluateInteractionItems,\n    modes: {\n index (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'x';\n            const includeInvisible = options.includeInvisible || false;\n            const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            const elements = [];\n            if (!items.length) {\n                return [];\n            }\n            chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n                const index = items[0].index;\n                const element = meta.data[index];\n                if (element && !element.skip) {\n                    elements.push({\n                        element,\n                        datasetIndex: meta.index,\n                        index\n                    });\n                }\n            });\n            return elements;\n        },\n dataset (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            if (items.length > 0) {\n                const datasetIndex = items[0].datasetIndex;\n                const data = chart.getDatasetMeta(datasetIndex).data;\n                items = [];\n                for(let i = 0; i < data.length; ++i){\n                    items.push({\n                        element: data[i],\n                        datasetIndex,\n                        index: i\n                    });\n                }\n            }\n            return items;\n        },\n point (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n        },\n nearest (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n        },\n x (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n        },\n y (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n        }\n    }\n};\n\nconst STATIC_POSITIONS = [\n    'left',\n    'top',\n    'right',\n    'bottom'\n];\nfunction filterByPosition(array, position) {\n    return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n    return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n    return array.sort((a, b)=>{\n        const v0 = reverse ? b : a;\n        const v1 = reverse ? a : b;\n        return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n    });\n}\nfunction wrapBoxes(boxes) {\n    const layoutBoxes = [];\n    let i, ilen, box, pos, stack, stackWeight;\n    for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n        box = boxes[i];\n        ({ position: pos , options: { stack , stackWeight =1  }  } = box);\n        layoutBoxes.push({\n            index: i,\n            box,\n            pos,\n            horizontal: box.isHorizontal(),\n            weight: box.weight,\n            stack: stack && pos + stack,\n            stackWeight\n        });\n    }\n    return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n    const stacks = {};\n    for (const wrap of layouts){\n        const { stack , pos , stackWeight  } = wrap;\n        if (!stack || !STATIC_POSITIONS.includes(pos)) {\n            continue;\n        }\n        const _stack = stacks[stack] || (stacks[stack] = {\n            count: 0,\n            placed: 0,\n            weight: 0,\n            size: 0\n        });\n        _stack.count++;\n        _stack.weight += stackWeight;\n    }\n    return stacks;\n}\n function setLayoutDims(layouts, params) {\n    const stacks = buildStacks(layouts);\n    const { vBoxMaxWidth , hBoxMaxHeight  } = params;\n    let i, ilen, layout;\n    for(i = 0, ilen = layouts.length; i < ilen; ++i){\n        layout = layouts[i];\n        const { fullSize  } = layout.box;\n        const stack = stacks[layout.stack];\n        const factor = stack && layout.stackWeight / stack.weight;\n        if (layout.horizontal) {\n            layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n            layout.height = hBoxMaxHeight;\n        } else {\n            layout.width = vBoxMaxWidth;\n            layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n        }\n    }\n    return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n    const layoutBoxes = wrapBoxes(boxes);\n    const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n    const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n    const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n    const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n    const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n    const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n    const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n    return {\n        fullSize,\n        leftAndTop: left.concat(top),\n        rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n        chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n        vertical: left.concat(right).concat(centerVertical),\n        horizontal: top.concat(bottom).concat(centerHorizontal)\n    };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n    maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n    maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n    maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n    maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n    const { pos , box  } = layout;\n    const maxPadding = chartArea.maxPadding;\n    if (!isObject(pos)) {\n        if (layout.size) {\n            chartArea[pos] -= layout.size;\n        }\n        const stack = stacks[layout.stack] || {\n            size: 0,\n            count: 1\n        };\n        stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n        layout.size = stack.size / stack.count;\n        chartArea[pos] += layout.size;\n    }\n    if (box.getPadding) {\n        updateMaxPadding(maxPadding, box.getPadding());\n    }\n    const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n    const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n    const widthChanged = newWidth !== chartArea.w;\n    const heightChanged = newHeight !== chartArea.h;\n    chartArea.w = newWidth;\n    chartArea.h = newHeight;\n    return layout.horizontal ? {\n        same: widthChanged,\n        other: heightChanged\n    } : {\n        same: heightChanged,\n        other: widthChanged\n    };\n}\nfunction handleMaxPadding(chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function updatePos(pos) {\n        const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n        chartArea[pos] += change;\n        return change;\n    }\n    chartArea.y += updatePos('top');\n    chartArea.x += updatePos('left');\n    updatePos('right');\n    updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function marginForPositions(positions) {\n        const margin = {\n            left: 0,\n            top: 0,\n            right: 0,\n            bottom: 0\n        };\n        positions.forEach((pos)=>{\n            margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n        });\n        return margin;\n    }\n    return horizontal ? marginForPositions([\n        'left',\n        'right'\n    ]) : marginForPositions([\n        'top',\n        'bottom'\n    ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n    const refitBoxes = [];\n    let i, ilen, layout, box, refit, changed;\n    for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n        layout = boxes[i];\n        box = layout.box;\n        box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n        const { same , other  } = updateDims(chartArea, params, layout, stacks);\n        refit |= same && refitBoxes.length;\n        changed = changed || other;\n        if (!box.fullSize) {\n            refitBoxes.push(layout);\n        }\n    }\n    return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n    box.top = top;\n    box.left = left;\n    box.right = left + width;\n    box.bottom = top + height;\n    box.width = width;\n    box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n    const userPadding = params.padding;\n    let { x , y  } = chartArea;\n    for (const layout of boxes){\n        const box = layout.box;\n        const stack = stacks[layout.stack] || {\n            count: 1,\n            placed: 0,\n            weight: 1\n        };\n        const weight = layout.stackWeight / stack.weight || 1;\n        if (layout.horizontal) {\n            const width = chartArea.w * weight;\n            const height = stack.size || box.height;\n            if (defined(stack.start)) {\n                y = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n            } else {\n                setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n            }\n            stack.start = y;\n            stack.placed += width;\n            y = box.bottom;\n        } else {\n            const height = chartArea.h * weight;\n            const width = stack.size || box.width;\n            if (defined(stack.start)) {\n                x = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n            } else {\n                setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n            }\n            stack.start = x;\n            stack.placed += height;\n            x = box.right;\n        }\n    }\n    chartArea.x = x;\n    chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n        if (!chart.boxes) {\n            chart.boxes = [];\n        }\n        item.fullSize = item.fullSize || false;\n        item.position = item.position || 'top';\n        item.weight = item.weight || 0;\n        item._layers = item._layers || function() {\n            return [\n                {\n                    z: 0,\n                    draw (chartArea) {\n                        item.draw(chartArea);\n                    }\n                }\n            ];\n        };\n        chart.boxes.push(item);\n    },\n removeBox (chart, layoutItem) {\n        const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n        if (index !== -1) {\n            chart.boxes.splice(index, 1);\n        }\n    },\n configure (chart, item, options) {\n        item.fullSize = options.fullSize;\n        item.position = options.position;\n        item.weight = options.weight;\n    },\n update (chart, width, height, minPadding) {\n        if (!chart) {\n            return;\n        }\n        const padding = toPadding(chart.options.layout.padding);\n        const availableWidth = Math.max(width - padding.width, 0);\n        const availableHeight = Math.max(height - padding.height, 0);\n        const boxes = buildLayoutBoxes(chart.boxes);\n        const verticalBoxes = boxes.vertical;\n        const horizontalBoxes = boxes.horizontal;\n        each(chart.boxes, (box)=>{\n            if (typeof box.beforeLayout === 'function') {\n                box.beforeLayout();\n            }\n        });\n        const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n        const params = Object.freeze({\n            outerWidth: width,\n            outerHeight: height,\n            padding,\n            availableWidth,\n            availableHeight,\n            vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n            hBoxMaxHeight: availableHeight / 2\n        });\n        const maxPadding = Object.assign({}, padding);\n        updateMaxPadding(maxPadding, toPadding(minPadding));\n        const chartArea = Object.assign({\n            maxPadding,\n            w: availableWidth,\n            h: availableHeight,\n            x: padding.left,\n            y: padding.top\n        }, padding);\n        const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n        fitBoxes(boxes.fullSize, chartArea, params, stacks);\n        fitBoxes(verticalBoxes, chartArea, params, stacks);\n        if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n            fitBoxes(verticalBoxes, chartArea, params, stacks);\n        }\n        handleMaxPadding(chartArea);\n        placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n        chartArea.x += chartArea.w;\n        chartArea.y += chartArea.h;\n        placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n        chart.chartArea = {\n            left: chartArea.left,\n            top: chartArea.top,\n            right: chartArea.left + chartArea.w,\n            bottom: chartArea.top + chartArea.h,\n            height: chartArea.h,\n            width: chartArea.w\n        };\n        each(boxes.chartArea, (layout)=>{\n            const box = layout.box;\n            Object.assign(box, chart.chartArea);\n            box.update(chartArea.w, chartArea.h, {\n                left: 0,\n                top: 0,\n                right: 0,\n                bottom: 0\n            });\n        });\n    }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n        return false;\n    }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n        return 1;\n    }\n getMaximumSize(element, width, height, aspectRatio) {\n        width = Math.max(0, width || element.width);\n        height = height || element.height;\n        return {\n            width,\n            height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n        };\n    }\n isAttached(canvas) {\n        return true;\n    }\n updateConfig(config) {\n    }\n}\n\nclass BasicPlatform extends BasePlatform {\n    acquireContext(item) {\n        return item && item.getContext && item.getContext('2d') || null;\n    }\n    updateConfig(config) {\n        config.options.animation = false;\n    }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n    touchstart: 'mousedown',\n    touchmove: 'mousemove',\n    touchend: 'mouseup',\n    pointerenter: 'mouseenter',\n    pointerdown: 'mousedown',\n    pointermove: 'mousemove',\n    pointerup: 'mouseup',\n    pointerleave: 'mouseout',\n    pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n    const style = canvas.style;\n    const renderHeight = canvas.getAttribute('height');\n    const renderWidth = canvas.getAttribute('width');\n    canvas[EXPANDO_KEY] = {\n        initial: {\n            height: renderHeight,\n            width: renderWidth,\n            style: {\n                display: style.display,\n                height: style.height,\n                width: style.width\n            }\n        }\n    };\n    style.display = style.display || 'block';\n    style.boxSizing = style.boxSizing || 'border-box';\n    if (isNullOrEmpty(renderWidth)) {\n        const displayWidth = readUsedSize(canvas, 'width');\n        if (displayWidth !== undefined) {\n            canvas.width = displayWidth;\n        }\n    }\n    if (isNullOrEmpty(renderHeight)) {\n        if (canvas.style.height === '') {\n            canvas.height = canvas.width / (aspectRatio || 2);\n        } else {\n            const displayHeight = readUsedSize(canvas, 'height');\n            if (displayHeight !== undefined) {\n                canvas.height = displayHeight;\n            }\n        }\n    }\n    return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n    passive: true\n} : false;\nfunction addListener(node, type, listener) {\n    if (node) {\n        node.addEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction removeListener(chart, type, listener) {\n    if (chart && chart.canvas) {\n        chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction fromNativeEvent(event, chart) {\n    const type = EVENT_TYPES[event.type] || event.type;\n    const { x , y  } = getRelativePosition(event, chart);\n    return {\n        type,\n        chart,\n        native: event,\n        x: x !== undefined ? x : null,\n        y: y !== undefined ? y : null\n    };\n}\nfunction nodeListContains(nodeList, canvas) {\n    for (const node of nodeList){\n        if (node === canvas || node.contains(canvas)) {\n            return true;\n        }\n    }\n}\nfunction createAttachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n    const dpr = window.devicePixelRatio;\n    if (dpr === oldDevicePixelRatio) {\n        return;\n    }\n    oldDevicePixelRatio = dpr;\n    drpListeningCharts.forEach((resize, chart)=>{\n        if (chart.currentDevicePixelRatio !== dpr) {\n            resize();\n        }\n    });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n    if (!drpListeningCharts.size) {\n        window.addEventListener('resize', onWindowResize);\n    }\n    drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n    drpListeningCharts.delete(chart);\n    if (!drpListeningCharts.size) {\n        window.removeEventListener('resize', onWindowResize);\n    }\n}\nfunction createResizeObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n        return;\n    }\n    const resize = throttled((width, height)=>{\n        const w = container.clientWidth;\n        listener(width, height);\n        if (w < container.clientWidth) {\n            listener();\n        }\n    }, window);\n    const observer = new ResizeObserver((entries)=>{\n        const entry = entries[0];\n        const width = entry.contentRect.width;\n        const height = entry.contentRect.height;\n        if (width === 0 && height === 0) {\n            return;\n        }\n        resize(width, height);\n    });\n    observer.observe(container);\n    listenDevicePixelRatioChanges(chart, resize);\n    return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n    if (observer) {\n        observer.disconnect();\n    }\n    if (type === 'resize') {\n        unlistenDevicePixelRatioChanges(chart);\n    }\n}\nfunction createProxyAndListen(chart, type, listener) {\n    const canvas = chart.canvas;\n    const proxy = throttled((event)=>{\n        if (chart.ctx !== null) {\n            listener(fromNativeEvent(event, chart));\n        }\n    }, chart);\n    addListener(canvas, type, proxy);\n    return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n        const context = canvas && canvas.getContext && canvas.getContext('2d');\n        if (context && context.canvas === canvas) {\n            initCanvas(canvas, aspectRatio);\n            return context;\n        }\n        return null;\n    }\n releaseContext(context) {\n        const canvas = context.canvas;\n        if (!canvas[EXPANDO_KEY]) {\n            return false;\n        }\n        const initial = canvas[EXPANDO_KEY].initial;\n        [\n            'height',\n            'width'\n        ].forEach((prop)=>{\n            const value = initial[prop];\n            if (isNullOrUndef(value)) {\n                canvas.removeAttribute(prop);\n            } else {\n                canvas.setAttribute(prop, value);\n            }\n        });\n        const style = initial.style || {};\n        Object.keys(style).forEach((key)=>{\n            canvas.style[key] = style[key];\n        });\n        canvas.width = canvas.width;\n        delete canvas[EXPANDO_KEY];\n        return true;\n    }\n addEventListener(chart, type, listener) {\n        this.removeEventListener(chart, type);\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const handlers = {\n            attach: createAttachObserver,\n            detach: createDetachObserver,\n            resize: createResizeObserver\n        };\n        const handler = handlers[type] || createProxyAndListen;\n        proxies[type] = handler(chart, type, listener);\n    }\n removeEventListener(chart, type) {\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const proxy = proxies[type];\n        if (!proxy) {\n            return;\n        }\n        const handlers = {\n            attach: releaseObserver,\n            detach: releaseObserver,\n            resize: releaseObserver\n        };\n        const handler = handlers[type] || removeListener;\n        handler(chart, type, proxy);\n        proxies[type] = undefined;\n    }\n    getDevicePixelRatio() {\n        return window.devicePixelRatio;\n    }\n getMaximumSize(canvas, width, height, aspectRatio) {\n        return getMaximumSize(canvas, width, height, aspectRatio);\n    }\n isAttached(canvas) {\n        const container = canvas && _getParentNode(canvas);\n        return !!(container && container.isConnected);\n    }\n}\n\nfunction _detectPlatform(canvas) {\n    if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n        return BasicPlatform;\n    }\n    return DomPlatform;\n}\n\nclass Element {\n    static defaults = {};\n    static defaultRoutes = undefined;\n    x;\n    y;\n    active = false;\n    options;\n    $animations;\n    tooltipPosition(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    hasValue() {\n        return isNumber(this.x) && isNumber(this.y);\n    }\n    getProps(props, final) {\n        const anims = this.$animations;\n        if (!final || !anims) {\n            // let's not create an object, if not needed\n            return this;\n        }\n        const ret = {};\n        props.forEach((prop)=>{\n            ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n        });\n        return ret;\n    }\n}\n\nfunction autoSkip(scale, ticks) {\n    const tickOpts = scale.options.ticks;\n    const determinedMaxTicks = determineMaxTicks(scale);\n    const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n    const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n    const numMajorIndices = majorIndices.length;\n    const first = majorIndices[0];\n    const last = majorIndices[numMajorIndices - 1];\n    const newTicks = [];\n    if (numMajorIndices > ticksLimit) {\n        skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n        return newTicks;\n    }\n    const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n    if (numMajorIndices > 0) {\n        let i, ilen;\n        const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n        skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n        for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n            skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n        }\n        skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n        return newTicks;\n    }\n    skip(ticks, newTicks, spacing);\n    return newTicks;\n}\nfunction determineMaxTicks(scale) {\n    const offset = scale.options.offset;\n    const tickLength = scale._tickSize();\n    const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n    const maxChart = scale._maxLength / tickLength;\n    return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n    const evenMajorSpacing = getEvenSpacing(majorIndices);\n    const spacing = ticks.length / ticksLimit;\n    if (!evenMajorSpacing) {\n        return Math.max(spacing, 1);\n    }\n    const factors = _factorize(evenMajorSpacing);\n    for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n        const factor = factors[i];\n        if (factor > spacing) {\n            return factor;\n        }\n    }\n    return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n    const result = [];\n    let i, ilen;\n    for(i = 0, ilen = ticks.length; i < ilen; i++){\n        if (ticks[i].major) {\n            result.push(i);\n        }\n    }\n    return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n    let count = 0;\n    let next = majorIndices[0];\n    let i;\n    spacing = Math.ceil(spacing);\n    for(i = 0; i < ticks.length; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = majorIndices[count * spacing];\n        }\n    }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n    const start = valueOrDefault(majorStart, 0);\n    const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n    let count = 0;\n    let length, i, next;\n    spacing = Math.ceil(spacing);\n    if (majorEnd) {\n        length = majorEnd - majorStart;\n        spacing = length / Math.floor(length / spacing);\n    }\n    next = start;\n    while(next < 0){\n        count++;\n        next = Math.round(start + count * spacing);\n    }\n    for(i = Math.max(start, 0); i < end; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = Math.round(start + count * spacing);\n        }\n    }\n}\n function getEvenSpacing(arr) {\n    const len = arr.length;\n    let i, diff;\n    if (len < 2) {\n        return false;\n    }\n    for(diff = arr[0], i = 1; i < len; ++i){\n        if (arr[i] - arr[i - 1] !== diff) {\n            return false;\n        }\n    }\n    return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n    const result = [];\n    const increment = arr.length / numItems;\n    const len = arr.length;\n    let i = 0;\n    for(; i < len; i += increment){\n        result.push(arr[Math.floor(i)]);\n    }\n    return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n    const length = scale.ticks.length;\n    const validIndex = Math.min(index, length - 1);\n    const start = scale._startPixel;\n    const end = scale._endPixel;\n    const epsilon = 1e-6;\n    let lineValue = scale.getPixelForTick(validIndex);\n    let offset;\n    if (offsetGridLines) {\n        if (length === 1) {\n            offset = Math.max(lineValue - start, end - lineValue);\n        } else if (index === 0) {\n            offset = (scale.getPixelForTick(1) - lineValue) / 2;\n        } else {\n            offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n        }\n        lineValue += validIndex < index ? offset : -offset;\n        if (lineValue < start - epsilon || lineValue > end + epsilon) {\n            return;\n        }\n    }\n    return lineValue;\n}\n function garbageCollect(caches, length) {\n    each(caches, (cache)=>{\n        const gc = cache.gc;\n        const gcLen = gc.length / 2;\n        let i;\n        if (gcLen > length) {\n            for(i = 0; i < gcLen; ++i){\n                delete cache.data[gc[i]];\n            }\n            gc.splice(0, gcLen);\n        }\n    });\n}\n function getTickMarkLength(options) {\n    return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n    if (!options.display) {\n        return 0;\n    }\n    const font = toFont(options.font, fallback);\n    const padding = toPadding(options.padding);\n    const lines = isArray(options.text) ? options.text.length : 1;\n    return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n    return createContext(parent, {\n        scale,\n        type: 'scale'\n    });\n}\nfunction createTickContext(parent, index, tick) {\n    return createContext(parent, {\n        tick,\n        index,\n        type: 'tick'\n    });\n}\nfunction titleAlign(align, position, reverse) {\n     let ret = _toLeftRightCenter(align);\n    if (reverse && position !== 'right' || !reverse && position === 'right') {\n        ret = reverseAlign(ret);\n    }\n    return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n    const { top , left , bottom , right , chart  } = scale;\n    const { chartArea , scales  } = chart;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    const height = bottom - top;\n    const width = right - left;\n    if (scale.isHorizontal()) {\n        titleX = _alignStartEnd(align, left, right);\n        if (isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n        } else if (position === 'center') {\n            titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n        } else {\n            titleY = offsetFromEdge(scale, position, offset);\n        }\n        maxWidth = right - left;\n    } else {\n        if (isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n        } else if (position === 'center') {\n            titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n        } else {\n            titleX = offsetFromEdge(scale, position, offset);\n        }\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = position === 'left' ? -HALF_PI : HALF_PI;\n    }\n    return {\n        titleX,\n        titleY,\n        maxWidth,\n        rotation\n    };\n}\nclass Scale extends Element {\n    constructor(cfg){\n        super();\n         this.id = cfg.id;\n         this.type = cfg.type;\n         this.options = undefined;\n         this.ctx = cfg.ctx;\n         this.chart = cfg.chart;\n         this.top = undefined;\n         this.bottom = undefined;\n         this.left = undefined;\n         this.right = undefined;\n         this.width = undefined;\n         this.height = undefined;\n        this._margins = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        };\n         this.maxWidth = undefined;\n         this.maxHeight = undefined;\n         this.paddingTop = undefined;\n         this.paddingBottom = undefined;\n         this.paddingLeft = undefined;\n         this.paddingRight = undefined;\n         this.axis = undefined;\n         this.labelRotation = undefined;\n        this.min = undefined;\n        this.max = undefined;\n        this._range = undefined;\n         this.ticks = [];\n         this._gridLineItems = null;\n         this._labelItems = null;\n         this._labelSizes = null;\n        this._length = 0;\n        this._maxLength = 0;\n        this._longestTextCache = {};\n         this._startPixel = undefined;\n         this._endPixel = undefined;\n        this._reversePixels = false;\n        this._userMax = undefined;\n        this._userMin = undefined;\n        this._suggestedMax = undefined;\n        this._suggestedMin = undefined;\n        this._ticksLength = 0;\n        this._borderValue = 0;\n        this._cache = {};\n        this._dataLimitsCached = false;\n        this.$context = undefined;\n    }\n init(options) {\n        this.options = options.setContext(this.getContext());\n        this.axis = options.axis;\n        this._userMin = this.parse(options.min);\n        this._userMax = this.parse(options.max);\n        this._suggestedMin = this.parse(options.suggestedMin);\n        this._suggestedMax = this.parse(options.suggestedMax);\n    }\n parse(raw, index) {\n        return raw;\n    }\n getUserBounds() {\n        let { _userMin , _userMax , _suggestedMin , _suggestedMax  } = this;\n        _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n        _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n        _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n        _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n        return {\n            min: finiteOrDefault(_userMin, _suggestedMin),\n            max: finiteOrDefault(_userMax, _suggestedMax),\n            minDefined: isNumberFinite(_userMin),\n            maxDefined: isNumberFinite(_userMax)\n        };\n    }\n getMinMax(canStack) {\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n        let range;\n        if (minDefined && maxDefined) {\n            return {\n                min,\n                max\n            };\n        }\n        const metas = this.getMatchingVisibleMetas();\n        for(let i = 0, ilen = metas.length; i < ilen; ++i){\n            range = metas[i].controller.getMinMax(this, canStack);\n            if (!minDefined) {\n                min = Math.min(min, range.min);\n            }\n            if (!maxDefined) {\n                max = Math.max(max, range.max);\n            }\n        }\n        min = maxDefined && min > max ? max : min;\n        max = minDefined && min > max ? min : max;\n        return {\n            min: finiteOrDefault(min, finiteOrDefault(max, min)),\n            max: finiteOrDefault(max, finiteOrDefault(min, max))\n        };\n    }\n getPadding() {\n        return {\n            left: this.paddingLeft || 0,\n            top: this.paddingTop || 0,\n            right: this.paddingRight || 0,\n            bottom: this.paddingBottom || 0\n        };\n    }\n getTicks() {\n        return this.ticks;\n    }\n getLabels() {\n        const data = this.chart.data;\n        return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n    }\n getLabelItems(chartArea = this.chart.chartArea) {\n        const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n        return items;\n    }\n    beforeLayout() {\n        this._cache = {};\n        this._dataLimitsCached = false;\n    }\n    beforeUpdate() {\n        callback(this.options.beforeUpdate, [\n            this\n        ]);\n    }\n update(maxWidth, maxHeight, margins) {\n        const { beginAtZero , grace , ticks: tickOpts  } = this.options;\n        const sampleSize = tickOpts.sampleSize;\n        this.beforeUpdate();\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins = Object.assign({\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        }, margins);\n        this.ticks = null;\n        this._labelSizes = null;\n        this._gridLineItems = null;\n        this._labelItems = null;\n        this.beforeSetDimensions();\n        this.setDimensions();\n        this.afterSetDimensions();\n        this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n        if (!this._dataLimitsCached) {\n            this.beforeDataLimits();\n            this.determineDataLimits();\n            this.afterDataLimits();\n            this._range = _addGrace(this, grace, beginAtZero);\n            this._dataLimitsCached = true;\n        }\n        this.beforeBuildTicks();\n        this.ticks = this.buildTicks() || [];\n        this.afterBuildTicks();\n        const samplingEnabled = sampleSize < this.ticks.length;\n        this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n        this.configure();\n        this.beforeCalculateLabelRotation();\n        this.calculateLabelRotation();\n        this.afterCalculateLabelRotation();\n        if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n            this.ticks = autoSkip(this, this.ticks);\n            this._labelSizes = null;\n            this.afterAutoSkip();\n        }\n        if (samplingEnabled) {\n            this._convertTicksToLabels(this.ticks);\n        }\n        this.beforeFit();\n        this.fit();\n        this.afterFit();\n        this.afterUpdate();\n    }\n configure() {\n        let reversePixels = this.options.reverse;\n        let startPixel, endPixel;\n        if (this.isHorizontal()) {\n            startPixel = this.left;\n            endPixel = this.right;\n        } else {\n            startPixel = this.top;\n            endPixel = this.bottom;\n            reversePixels = !reversePixels;\n        }\n        this._startPixel = startPixel;\n        this._endPixel = endPixel;\n        this._reversePixels = reversePixels;\n        this._length = endPixel - startPixel;\n        this._alignToPixels = this.options.alignToPixels;\n    }\n    afterUpdate() {\n        callback(this.options.afterUpdate, [\n            this\n        ]);\n    }\n    beforeSetDimensions() {\n        callback(this.options.beforeSetDimensions, [\n            this\n        ]);\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = 0;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = 0;\n            this.bottom = this.height;\n        }\n        this.paddingLeft = 0;\n        this.paddingTop = 0;\n        this.paddingRight = 0;\n        this.paddingBottom = 0;\n    }\n    afterSetDimensions() {\n        callback(this.options.afterSetDimensions, [\n            this\n        ]);\n    }\n    _callHooks(name) {\n        this.chart.notifyPlugins(name, this.getContext());\n        callback(this.options[name], [\n            this\n        ]);\n    }\n    beforeDataLimits() {\n        this._callHooks('beforeDataLimits');\n    }\n    determineDataLimits() {}\n    afterDataLimits() {\n        this._callHooks('afterDataLimits');\n    }\n    beforeBuildTicks() {\n        this._callHooks('beforeBuildTicks');\n    }\n buildTicks() {\n        return [];\n    }\n    afterBuildTicks() {\n        this._callHooks('afterBuildTicks');\n    }\n    beforeTickToLabelConversion() {\n        callback(this.options.beforeTickToLabelConversion, [\n            this\n        ]);\n    }\n generateTickLabels(ticks) {\n        const tickOpts = this.options.ticks;\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            tick = ticks[i];\n            tick.label = callback(tickOpts.callback, [\n                tick.value,\n                i,\n                ticks\n            ], this);\n        }\n    }\n    afterTickToLabelConversion() {\n        callback(this.options.afterTickToLabelConversion, [\n            this\n        ]);\n    }\n    beforeCalculateLabelRotation() {\n        callback(this.options.beforeCalculateLabelRotation, [\n            this\n        ]);\n    }\n    calculateLabelRotation() {\n        const options = this.options;\n        const tickOpts = options.ticks;\n        const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n        const minRotation = tickOpts.minRotation || 0;\n        const maxRotation = tickOpts.maxRotation;\n        let labelRotation = minRotation;\n        let tickWidth, maxHeight, maxLabelDiagonal;\n        if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n            this.labelRotation = minRotation;\n            return;\n        }\n        const labelSizes = this._getLabelSizes();\n        const maxLabelWidth = labelSizes.widest.width;\n        const maxLabelHeight = labelSizes.highest.height;\n        const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n        tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n        if (maxLabelWidth + 6 > tickWidth) {\n            tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n            maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n            maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n            labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n            labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n        }\n        this.labelRotation = labelRotation;\n    }\n    afterCalculateLabelRotation() {\n        callback(this.options.afterCalculateLabelRotation, [\n            this\n        ]);\n    }\n    afterAutoSkip() {}\n    beforeFit() {\n        callback(this.options.beforeFit, [\n            this\n        ]);\n    }\n    fit() {\n        const minSize = {\n            width: 0,\n            height: 0\n        };\n        const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts  }  } = this;\n        const display = this._isVisible();\n        const isHorizontal = this.isHorizontal();\n        if (display) {\n            const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n            if (isHorizontal) {\n                minSize.width = this.maxWidth;\n                minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n            } else {\n                minSize.height = this.maxHeight;\n                minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n            }\n            if (tickOpts.display && this.ticks.length) {\n                const { first , last , widest , highest  } = this._getLabelSizes();\n                const tickPadding = tickOpts.padding * 2;\n                const angleRadians = toRadians(this.labelRotation);\n                const cos = Math.cos(angleRadians);\n                const sin = Math.sin(angleRadians);\n                if (isHorizontal) {\n                    const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n                    minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n                } else {\n                    const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n                    minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n                }\n                this._calculatePadding(first, last, sin, cos);\n            }\n        }\n        this._handleMargins();\n        if (isHorizontal) {\n            this.width = this._length = chart.width - this._margins.left - this._margins.right;\n            this.height = minSize.height;\n        } else {\n            this.width = minSize.width;\n            this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n        }\n    }\n    _calculatePadding(first, last, sin, cos) {\n        const { ticks: { align , padding  } , position  } = this.options;\n        const isRotated = this.labelRotation !== 0;\n        const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n        if (this.isHorizontal()) {\n            const offsetLeft = this.getPixelForTick(0) - this.left;\n            const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n            let paddingLeft = 0;\n            let paddingRight = 0;\n            if (isRotated) {\n                if (labelsBelowTicks) {\n                    paddingLeft = cos * first.width;\n                    paddingRight = sin * last.height;\n                } else {\n                    paddingLeft = sin * first.height;\n                    paddingRight = cos * last.width;\n                }\n            } else if (align === 'start') {\n                paddingRight = last.width;\n            } else if (align === 'end') {\n                paddingLeft = first.width;\n            } else if (align !== 'inner') {\n                paddingLeft = first.width / 2;\n                paddingRight = last.width / 2;\n            }\n            this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n            this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n        } else {\n            let paddingTop = last.height / 2;\n            let paddingBottom = first.height / 2;\n            if (align === 'start') {\n                paddingTop = 0;\n                paddingBottom = first.height;\n            } else if (align === 'end') {\n                paddingTop = last.height;\n                paddingBottom = 0;\n            }\n            this.paddingTop = paddingTop + padding;\n            this.paddingBottom = paddingBottom + padding;\n        }\n    }\n _handleMargins() {\n        if (this._margins) {\n            this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n            this._margins.top = Math.max(this.paddingTop, this._margins.top);\n            this._margins.right = Math.max(this.paddingRight, this._margins.right);\n            this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n        }\n    }\n    afterFit() {\n        callback(this.options.afterFit, [\n            this\n        ]);\n    }\n isHorizontal() {\n        const { axis , position  } = this.options;\n        return position === 'top' || position === 'bottom' || axis === 'x';\n    }\n isFullSize() {\n        return this.options.fullSize;\n    }\n _convertTicksToLabels(ticks) {\n        this.beforeTickToLabelConversion();\n        this.generateTickLabels(ticks);\n        let i, ilen;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            if (isNullOrUndef(ticks[i].label)) {\n                ticks.splice(i, 1);\n                ilen--;\n                i--;\n            }\n        }\n        this.afterTickToLabelConversion();\n    }\n _getLabelSizes() {\n        let labelSizes = this._labelSizes;\n        if (!labelSizes) {\n            const sampleSize = this.options.ticks.sampleSize;\n            let ticks = this.ticks;\n            if (sampleSize < ticks.length) {\n                ticks = sample(ticks, sampleSize);\n            }\n            this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n        }\n        return labelSizes;\n    }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n        const { ctx , _longestTextCache: caches  } = this;\n        const widths = [];\n        const heights = [];\n        const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n        let widestLabelSize = 0;\n        let highestLabelSize = 0;\n        let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n        for(i = 0; i < length; i += increment){\n            label = ticks[i].label;\n            tickFont = this._resolveTickFontOptions(i);\n            ctx.font = fontString = tickFont.string;\n            cache = caches[fontString] = caches[fontString] || {\n                data: {},\n                gc: []\n            };\n            lineHeight = tickFont.lineHeight;\n            width = height = 0;\n            if (!isNullOrUndef(label) && !isArray(label)) {\n                width = _measureText(ctx, cache.data, cache.gc, width, label);\n                height = lineHeight;\n            } else if (isArray(label)) {\n                for(j = 0, jlen = label.length; j < jlen; ++j){\n                    nestedLabel =  label[j];\n                    if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n                        width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n                        height += lineHeight;\n                    }\n                }\n            }\n            widths.push(width);\n            heights.push(height);\n            widestLabelSize = Math.max(width, widestLabelSize);\n            highestLabelSize = Math.max(height, highestLabelSize);\n        }\n        garbageCollect(caches, length);\n        const widest = widths.indexOf(widestLabelSize);\n        const highest = heights.indexOf(highestLabelSize);\n        const valueAt = (idx)=>({\n                width: widths[idx] || 0,\n                height: heights[idx] || 0\n            });\n        return {\n            first: valueAt(0),\n            last: valueAt(length - 1),\n            widest: valueAt(widest),\n            highest: valueAt(highest),\n            widths,\n            heights\n        };\n    }\n getLabelForValue(value) {\n        return value;\n    }\n getPixelForValue(value, index) {\n        return NaN;\n    }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n getPixelForDecimal(decimal) {\n        if (this._reversePixels) {\n            decimal = 1 - decimal;\n        }\n        const pixel = this._startPixel + decimal * this._length;\n        return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n    }\n getDecimalForPixel(pixel) {\n        const decimal = (pixel - this._startPixel) / this._length;\n        return this._reversePixels ? 1 - decimal : decimal;\n    }\n getBasePixel() {\n        return this.getPixelForValue(this.getBaseValue());\n    }\n getBaseValue() {\n        const { min , max  } = this;\n        return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n    }\n getContext(index) {\n        const ticks = this.ticks || [];\n        if (index >= 0 && index < ticks.length) {\n            const tick = ticks[index];\n            return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n        }\n        return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n    }\n _tickSize() {\n        const optionTicks = this.options.ticks;\n        const rot = toRadians(this.labelRotation);\n        const cos = Math.abs(Math.cos(rot));\n        const sin = Math.abs(Math.sin(rot));\n        const labelSizes = this._getLabelSizes();\n        const padding = optionTicks.autoSkipPadding || 0;\n        const w = labelSizes ? labelSizes.widest.width + padding : 0;\n        const h = labelSizes ? labelSizes.highest.height + padding : 0;\n        return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n    }\n _isVisible() {\n        const display = this.options.display;\n        if (display !== 'auto') {\n            return !!display;\n        }\n        return this.getMatchingVisibleMetas().length > 0;\n    }\n _computeGridLineItems(chartArea) {\n        const axis = this.axis;\n        const chart = this.chart;\n        const options = this.options;\n        const { grid , position , border  } = options;\n        const offset = grid.offset;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const ticksLength = ticks.length + (offset ? 1 : 0);\n        const tl = getTickMarkLength(grid);\n        const items = [];\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = borderOpts.display ? borderOpts.width : 0;\n        const axisHalfWidth = axisWidth / 2;\n        const alignBorderValue = function(pixel) {\n            return _alignPixel(chart, pixel, axisWidth);\n        };\n        let borderValue, i, lineValue, alignedLineValue;\n        let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n        if (position === 'top') {\n            borderValue = alignBorderValue(this.bottom);\n            ty1 = this.bottom - tl;\n            ty2 = borderValue - axisHalfWidth;\n            y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n            y2 = chartArea.bottom;\n        } else if (position === 'bottom') {\n            borderValue = alignBorderValue(this.top);\n            y1 = chartArea.top;\n            y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = this.top + tl;\n        } else if (position === 'left') {\n            borderValue = alignBorderValue(this.right);\n            tx1 = this.right - tl;\n            tx2 = borderValue - axisHalfWidth;\n            x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n            x2 = chartArea.right;\n        } else if (position === 'right') {\n            borderValue = alignBorderValue(this.left);\n            x1 = chartArea.left;\n            x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n            tx1 = borderValue + axisHalfWidth;\n            tx2 = this.left + tl;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            y1 = chartArea.top;\n            y2 = chartArea.bottom;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = ty1 + tl;\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            tx1 = borderValue - axisHalfWidth;\n            tx2 = tx1 - tl;\n            x1 = chartArea.left;\n            x2 = chartArea.right;\n        }\n        const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n        const step = Math.max(1, Math.ceil(ticksLength / limit));\n        for(i = 0; i < ticksLength; i += step){\n            const context = this.getContext(i);\n            const optsAtIndex = grid.setContext(context);\n            const optsAtIndexBorder = border.setContext(context);\n            const lineWidth = optsAtIndex.lineWidth;\n            const lineColor = optsAtIndex.color;\n            const borderDash = optsAtIndexBorder.dash || [];\n            const borderDashOffset = optsAtIndexBorder.dashOffset;\n            const tickWidth = optsAtIndex.tickWidth;\n            const tickColor = optsAtIndex.tickColor;\n            const tickBorderDash = optsAtIndex.tickBorderDash || [];\n            const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n            lineValue = getPixelForGridLine(this, i, offset);\n            if (lineValue === undefined) {\n                continue;\n            }\n            alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n            if (isHorizontal) {\n                tx1 = tx2 = x1 = x2 = alignedLineValue;\n            } else {\n                ty1 = ty2 = y1 = y2 = alignedLineValue;\n            }\n            items.push({\n                tx1,\n                ty1,\n                tx2,\n                ty2,\n                x1,\n                y1,\n                x2,\n                y2,\n                width: lineWidth,\n                color: lineColor,\n                borderDash,\n                borderDashOffset,\n                tickWidth,\n                tickColor,\n                tickBorderDash,\n                tickBorderDashOffset\n            });\n        }\n        this._ticksLength = ticksLength;\n        this._borderValue = borderValue;\n        return items;\n    }\n _computeLabelItems(chartArea) {\n        const axis = this.axis;\n        const options = this.options;\n        const { position , ticks: optionTicks  } = options;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const { align , crossAlign , padding , mirror  } = optionTicks;\n        const tl = getTickMarkLength(options.grid);\n        const tickAndPadding = tl + padding;\n        const hTickAndPadding = mirror ? -padding : tickAndPadding;\n        const rotation = -toRadians(this.labelRotation);\n        const items = [];\n        let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n        let textBaseline = 'middle';\n        if (position === 'top') {\n            y = this.bottom - hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'bottom') {\n            y = this.top + hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'left') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (position === 'right') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n            }\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                x = this.chart.scales[positionAxisID].getPixelForValue(value);\n            }\n            textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n        }\n        if (axis === 'y') {\n            if (align === 'start') {\n                textBaseline = 'top';\n            } else if (align === 'end') {\n                textBaseline = 'bottom';\n            }\n        }\n        const labelSizes = this._getLabelSizes();\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            label = tick.label;\n            const optsAtIndex = optionTicks.setContext(this.getContext(i));\n            pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n            font = this._resolveTickFontOptions(i);\n            lineHeight = font.lineHeight;\n            lineCount = isArray(label) ? label.length : 1;\n            const halfCount = lineCount / 2;\n            const color = optsAtIndex.color;\n            const strokeColor = optsAtIndex.textStrokeColor;\n            const strokeWidth = optsAtIndex.textStrokeWidth;\n            let tickTextAlign = textAlign;\n            if (isHorizontal) {\n                x = pixel;\n                if (textAlign === 'inner') {\n                    if (i === ilen - 1) {\n                        tickTextAlign = !this.options.reverse ? 'right' : 'left';\n                    } else if (i === 0) {\n                        tickTextAlign = !this.options.reverse ? 'left' : 'right';\n                    } else {\n                        tickTextAlign = 'center';\n                    }\n                }\n                if (position === 'top') {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = -lineCount * lineHeight + lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n                    } else {\n                        textOffset = -labelSizes.highest.height + lineHeight / 2;\n                    }\n                } else {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n                    } else {\n                        textOffset = labelSizes.highest.height - lineCount * lineHeight;\n                    }\n                }\n                if (mirror) {\n                    textOffset *= -1;\n                }\n                if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n                    x += lineHeight / 2 * Math.sin(rotation);\n                }\n            } else {\n                y = pixel;\n                textOffset = (1 - lineCount) * lineHeight / 2;\n            }\n            let backdrop;\n            if (optsAtIndex.showLabelBackdrop) {\n                const labelPadding = toPadding(optsAtIndex.backdropPadding);\n                const height = labelSizes.heights[i];\n                const width = labelSizes.widths[i];\n                let top = textOffset - labelPadding.top;\n                let left = 0 - labelPadding.left;\n                switch(textBaseline){\n                    case 'middle':\n                        top -= height / 2;\n                        break;\n                    case 'bottom':\n                        top -= height;\n                        break;\n                }\n                switch(textAlign){\n                    case 'center':\n                        left -= width / 2;\n                        break;\n                    case 'right':\n                        left -= width;\n                        break;\n                    case 'inner':\n                        if (i === ilen - 1) {\n                            left -= width;\n                        } else if (i > 0) {\n                            left -= width / 2;\n                        }\n                        break;\n                }\n                backdrop = {\n                    left,\n                    top,\n                    width: width + labelPadding.width,\n                    height: height + labelPadding.height,\n                    color: optsAtIndex.backdropColor\n                };\n            }\n            items.push({\n                label,\n                font,\n                textOffset,\n                options: {\n                    rotation,\n                    color,\n                    strokeColor,\n                    strokeWidth,\n                    textAlign: tickTextAlign,\n                    textBaseline,\n                    translation: [\n                        x,\n                        y\n                    ],\n                    backdrop\n                }\n            });\n        }\n        return items;\n    }\n    _getXAxisLabelAlignment() {\n        const { position , ticks  } = this.options;\n        const rotation = -toRadians(this.labelRotation);\n        if (rotation) {\n            return position === 'top' ? 'left' : 'right';\n        }\n        let align = 'center';\n        if (ticks.align === 'start') {\n            align = 'left';\n        } else if (ticks.align === 'end') {\n            align = 'right';\n        } else if (ticks.align === 'inner') {\n            align = 'inner';\n        }\n        return align;\n    }\n    _getYAxisLabelAlignment(tl) {\n        const { position , ticks: { crossAlign , mirror , padding  }  } = this.options;\n        const labelSizes = this._getLabelSizes();\n        const tickAndPadding = tl + padding;\n        const widest = labelSizes.widest.width;\n        let textAlign;\n        let x;\n        if (position === 'left') {\n            if (mirror) {\n                x = this.right + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x += widest;\n                }\n            } else {\n                x = this.right - tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x = this.left;\n                }\n            }\n        } else if (position === 'right') {\n            if (mirror) {\n                x = this.left + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x -= widest;\n                }\n            } else {\n                x = this.left + tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x = this.right;\n                }\n            }\n        } else {\n            textAlign = 'right';\n        }\n        return {\n            textAlign,\n            x\n        };\n    }\n _computeLabelArea() {\n        if (this.options.ticks.mirror) {\n            return;\n        }\n        const chart = this.chart;\n        const position = this.options.position;\n        if (position === 'left' || position === 'right') {\n            return {\n                top: 0,\n                left: this.left,\n                bottom: chart.height,\n                right: this.right\n            };\n        }\n        if (position === 'top' || position === 'bottom') {\n            return {\n                top: this.top,\n                left: 0,\n                bottom: this.bottom,\n                right: chart.width\n            };\n        }\n    }\n drawBackground() {\n        const { ctx , options: { backgroundColor  } , left , top , width , height  } = this;\n        if (backgroundColor) {\n            ctx.save();\n            ctx.fillStyle = backgroundColor;\n            ctx.fillRect(left, top, width, height);\n            ctx.restore();\n        }\n    }\n    getLineWidthForValue(value) {\n        const grid = this.options.grid;\n        if (!this._isVisible() || !grid.display) {\n            return 0;\n        }\n        const ticks = this.ticks;\n        const index = ticks.findIndex((t)=>t.value === value);\n        if (index >= 0) {\n            const opts = grid.setContext(this.getContext(index));\n            return opts.lineWidth;\n        }\n        return 0;\n    }\n drawGrid(chartArea) {\n        const grid = this.options.grid;\n        const ctx = this.ctx;\n        const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n        let i, ilen;\n        const drawLine = (p1, p2, style)=>{\n            if (!style.width || !style.color) {\n                return;\n            }\n            ctx.save();\n            ctx.lineWidth = style.width;\n            ctx.strokeStyle = style.color;\n            ctx.setLineDash(style.borderDash || []);\n            ctx.lineDashOffset = style.borderDashOffset;\n            ctx.beginPath();\n            ctx.moveTo(p1.x, p1.y);\n            ctx.lineTo(p2.x, p2.y);\n            ctx.stroke();\n            ctx.restore();\n        };\n        if (grid.display) {\n            for(i = 0, ilen = items.length; i < ilen; ++i){\n                const item = items[i];\n                if (grid.drawOnChartArea) {\n                    drawLine({\n                        x: item.x1,\n                        y: item.y1\n                    }, {\n                        x: item.x2,\n                        y: item.y2\n                    }, item);\n                }\n                if (grid.drawTicks) {\n                    drawLine({\n                        x: item.tx1,\n                        y: item.ty1\n                    }, {\n                        x: item.tx2,\n                        y: item.ty2\n                    }, {\n                        color: item.tickColor,\n                        width: item.tickWidth,\n                        borderDash: item.tickBorderDash,\n                        borderDashOffset: item.tickBorderDashOffset\n                    });\n                }\n            }\n        }\n    }\n drawBorder() {\n        const { chart , ctx , options: { border , grid  }  } = this;\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = border.display ? borderOpts.width : 0;\n        if (!axisWidth) {\n            return;\n        }\n        const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n        const borderValue = this._borderValue;\n        let x1, x2, y1, y2;\n        if (this.isHorizontal()) {\n            x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n            x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n            y1 = y2 = borderValue;\n        } else {\n            y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n            y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n            x1 = x2 = borderValue;\n        }\n        ctx.save();\n        ctx.lineWidth = borderOpts.width;\n        ctx.strokeStyle = borderOpts.color;\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.stroke();\n        ctx.restore();\n    }\n drawLabels(chartArea) {\n        const optionTicks = this.options.ticks;\n        if (!optionTicks.display) {\n            return;\n        }\n        const ctx = this.ctx;\n        const area = this._computeLabelArea();\n        if (area) {\n            clipArea(ctx, area);\n        }\n        const items = this.getLabelItems(chartArea);\n        for (const item of items){\n            const renderTextOptions = item.options;\n            const tickFont = item.font;\n            const label = item.label;\n            const y = item.textOffset;\n            renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n        }\n        if (area) {\n            unclipArea(ctx);\n        }\n    }\n drawTitle() {\n        const { ctx , options: { position , title , reverse  }  } = this;\n        if (!title.display) {\n            return;\n        }\n        const font = toFont(title.font);\n        const padding = toPadding(title.padding);\n        const align = title.align;\n        let offset = font.lineHeight / 2;\n        if (position === 'bottom' || position === 'center' || isObject(position)) {\n            offset += padding.bottom;\n            if (isArray(title.text)) {\n                offset += font.lineHeight * (title.text.length - 1);\n            }\n        } else {\n            offset += padding.top;\n        }\n        const { titleX , titleY , maxWidth , rotation  } = titleArgs(this, offset, position, align);\n        renderText(ctx, title.text, 0, 0, font, {\n            color: title.color,\n            maxWidth,\n            rotation,\n            textAlign: titleAlign(align, position, reverse),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n    draw(chartArea) {\n        if (!this._isVisible()) {\n            return;\n        }\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawBorder();\n        this.drawTitle();\n        this.drawLabels(chartArea);\n    }\n _layers() {\n        const opts = this.options;\n        const tz = opts.ticks && opts.ticks.z || 0;\n        const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n        const bz = valueOrDefault(opts.border && opts.border.z, 0);\n        if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n            return [\n                {\n                    z: tz,\n                    draw: (chartArea)=>{\n                        this.draw(chartArea);\n                    }\n                }\n            ];\n        }\n        return [\n            {\n                z: gz,\n                draw: (chartArea)=>{\n                    this.drawBackground();\n                    this.drawGrid(chartArea);\n                    this.drawTitle();\n                }\n            },\n            {\n                z: bz,\n                draw: ()=>{\n                    this.drawBorder();\n                }\n            },\n            {\n                z: tz,\n                draw: (chartArea)=>{\n                    this.drawLabels(chartArea);\n                }\n            }\n        ];\n    }\n getMatchingVisibleMetas(type) {\n        const metas = this.chart.getSortedVisibleDatasetMetas();\n        const axisID = this.axis + 'AxisID';\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            const meta = metas[i];\n            if (meta[axisID] === this.id && (!type || meta.type === type)) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n _resolveTickFontOptions(index) {\n        const opts = this.options.ticks.setContext(this.getContext(index));\n        return toFont(opts.font);\n    }\n _maxDigits() {\n        const fontSize = this._resolveTickFontOptions(0).lineHeight;\n        return (this.isHorizontal() ? this.width : this.height) / fontSize;\n    }\n}\n\nclass TypedRegistry {\n    constructor(type, scope, override){\n        this.type = type;\n        this.scope = scope;\n        this.override = override;\n        this.items = Object.create(null);\n    }\n    isForType(type) {\n        return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n    }\n register(item) {\n        const proto = Object.getPrototypeOf(item);\n        let parentScope;\n        if (isIChartComponent(proto)) {\n            parentScope = this.register(proto);\n        }\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope + '.' + id;\n        if (!id) {\n            throw new Error('class does not have id: ' + item);\n        }\n        if (id in items) {\n            return scope;\n        }\n        items[id] = item;\n        registerDefaults(item, scope, parentScope);\n        if (this.override) {\n            defaults.override(item.id, item.overrides);\n        }\n        return scope;\n    }\n get(id) {\n        return this.items[id];\n    }\n unregister(item) {\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope;\n        if (id in items) {\n            delete items[id];\n        }\n        if (scope && id in defaults[scope]) {\n            delete defaults[scope][id];\n            if (this.override) {\n                delete overrides[id];\n            }\n        }\n    }\n}\nfunction registerDefaults(item, scope, parentScope) {\n    const itemDefaults = merge(Object.create(null), [\n        parentScope ? defaults.get(parentScope) : {},\n        defaults.get(scope),\n        item.defaults\n    ]);\n    defaults.set(scope, itemDefaults);\n    if (item.defaultRoutes) {\n        routeDefaults(scope, item.defaultRoutes);\n    }\n    if (item.descriptors) {\n        defaults.describe(scope, item.descriptors);\n    }\n}\nfunction routeDefaults(scope, routes) {\n    Object.keys(routes).forEach((property)=>{\n        const propertyParts = property.split('.');\n        const sourceName = propertyParts.pop();\n        const sourceScope = [\n            scope\n        ].concat(propertyParts).join('.');\n        const parts = routes[property].split('.');\n        const targetName = parts.pop();\n        const targetScope = parts.join('.');\n        defaults.route(sourceScope, sourceName, targetScope, targetName);\n    });\n}\nfunction isIChartComponent(proto) {\n    return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n    constructor(){\n        this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n        this.elements = new TypedRegistry(Element, 'elements');\n        this.plugins = new TypedRegistry(Object, 'plugins');\n        this.scales = new TypedRegistry(Scale, 'scales');\n        this._typedRegistries = [\n            this.controllers,\n            this.scales,\n            this.elements\n        ];\n    }\n add(...args) {\n        this._each('register', args);\n    }\n    remove(...args) {\n        this._each('unregister', args);\n    }\n addControllers(...args) {\n        this._each('register', args, this.controllers);\n    }\n addElements(...args) {\n        this._each('register', args, this.elements);\n    }\n addPlugins(...args) {\n        this._each('register', args, this.plugins);\n    }\n addScales(...args) {\n        this._each('register', args, this.scales);\n    }\n getController(id) {\n        return this._get(id, this.controllers, 'controller');\n    }\n getElement(id) {\n        return this._get(id, this.elements, 'element');\n    }\n getPlugin(id) {\n        return this._get(id, this.plugins, 'plugin');\n    }\n getScale(id) {\n        return this._get(id, this.scales, 'scale');\n    }\n removeControllers(...args) {\n        this._each('unregister', args, this.controllers);\n    }\n removeElements(...args) {\n        this._each('unregister', args, this.elements);\n    }\n removePlugins(...args) {\n        this._each('unregister', args, this.plugins);\n    }\n removeScales(...args) {\n        this._each('unregister', args, this.scales);\n    }\n _each(method, args, typedRegistry) {\n        [\n            ...args\n        ].forEach((arg)=>{\n            const reg = typedRegistry || this._getRegistryForType(arg);\n            if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n                this._exec(method, reg, arg);\n            } else {\n                each(arg, (item)=>{\n                    const itemReg = typedRegistry || this._getRegistryForType(item);\n                    this._exec(method, itemReg, item);\n                });\n            }\n        });\n    }\n _exec(method, registry, component) {\n        const camelMethod = _capitalize(method);\n        callback(component['before' + camelMethod], [], component);\n        registry[method](component);\n        callback(component['after' + camelMethod], [], component);\n    }\n _getRegistryForType(type) {\n        for(let i = 0; i < this._typedRegistries.length; i++){\n            const reg = this._typedRegistries[i];\n            if (reg.isForType(type)) {\n                return reg;\n            }\n        }\n        return this.plugins;\n    }\n _get(id, typedRegistry, type) {\n        const item = typedRegistry.get(id);\n        if (item === undefined) {\n            throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n        }\n        return item;\n    }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n    constructor(){\n        this._init = [];\n    }\n notify(chart, hook, args, filter) {\n        if (hook === 'beforeInit') {\n            this._init = this._createDescriptors(chart, true);\n            this._notify(this._init, chart, 'install');\n        }\n        const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n        const result = this._notify(descriptors, chart, hook, args);\n        if (hook === 'afterDestroy') {\n            this._notify(descriptors, chart, 'stop');\n            this._notify(this._init, chart, 'uninstall');\n        }\n        return result;\n    }\n _notify(descriptors, chart, hook, args) {\n        args = args || {};\n        for (const descriptor of descriptors){\n            const plugin = descriptor.plugin;\n            const method = plugin[hook];\n            const params = [\n                chart,\n                args,\n                descriptor.options\n            ];\n            if (callback(method, params, plugin) === false && args.cancelable) {\n                return false;\n            }\n        }\n        return true;\n    }\n    invalidate() {\n        if (!isNullOrUndef(this._cache)) {\n            this._oldCache = this._cache;\n            this._cache = undefined;\n        }\n    }\n _descriptors(chart) {\n        if (this._cache) {\n            return this._cache;\n        }\n        const descriptors = this._cache = this._createDescriptors(chart);\n        this._notifyStateChanges(chart);\n        return descriptors;\n    }\n    _createDescriptors(chart, all) {\n        const config = chart && chart.config;\n        const options = valueOrDefault(config.options && config.options.plugins, {});\n        const plugins = allPlugins(config);\n        return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n    }\n _notifyStateChanges(chart) {\n        const previousDescriptors = this._oldCache || [];\n        const descriptors = this._cache;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n        this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n        this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n    }\n}\n function allPlugins(config) {\n    const localIds = {};\n    const plugins = [];\n    const keys = Object.keys(registry.plugins.items);\n    for(let i = 0; i < keys.length; i++){\n        plugins.push(registry.getPlugin(keys[i]));\n    }\n    const local = config.plugins || [];\n    for(let i = 0; i < local.length; i++){\n        const plugin = local[i];\n        if (plugins.indexOf(plugin) === -1) {\n            plugins.push(plugin);\n            localIds[plugin.id] = true;\n        }\n    }\n    return {\n        plugins,\n        localIds\n    };\n}\nfunction getOpts(options, all) {\n    if (!all && options === false) {\n        return null;\n    }\n    if (options === true) {\n        return {};\n    }\n    return options;\n}\nfunction createDescriptors(chart, { plugins , localIds  }, options, all) {\n    const result = [];\n    const context = chart.getContext();\n    for (const plugin of plugins){\n        const id = plugin.id;\n        const opts = getOpts(options[id], all);\n        if (opts === null) {\n            continue;\n        }\n        result.push({\n            plugin,\n            options: pluginOpts(chart.config, {\n                plugin,\n                local: localIds[id]\n            }, opts, context)\n        });\n    }\n    return result;\n}\nfunction pluginOpts(config, { plugin , local  }, opts, context) {\n    const keys = config.pluginScopeKeys(plugin);\n    const scopes = config.getOptionScopes(opts, keys);\n    if (local && plugin.defaults) {\n        scopes.push(plugin.defaults);\n    }\n    return config.createResolver(scopes, context, [\n        ''\n    ], {\n        scriptable: false,\n        indexable: false,\n        allKeys: true\n    });\n}\n\nfunction getIndexAxis(type, options) {\n    const datasetDefaults = defaults.datasets[type] || {};\n    const datasetOptions = (options.datasets || {})[type] || {};\n    return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n    let axis = id;\n    if (id === '_index_') {\n        axis = indexAxis;\n    } else if (id === '_value_') {\n        axis = indexAxis === 'x' ? 'y' : 'x';\n    }\n    return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n    return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n    if (id === 'x' || id === 'y' || id === 'r') {\n        return id;\n    }\n}\nfunction axisFromPosition(position) {\n    if (position === 'top' || position === 'bottom') {\n        return 'x';\n    }\n    if (position === 'left' || position === 'right') {\n        return 'y';\n    }\n}\nfunction determineAxis(id, ...scaleOptions) {\n    if (idMatchesAxis(id)) {\n        return id;\n    }\n    for (const opts of scaleOptions){\n        const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n        if (axis) {\n            return axis;\n        }\n    }\n    throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n    if (dataset[axis + 'AxisID'] === id) {\n        return {\n            axis\n        };\n    }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n    if (config.data && config.data.datasets) {\n        const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n        if (boundDs.length) {\n            return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n        }\n    }\n    return {};\n}\nfunction mergeScaleConfig(config, options) {\n    const chartDefaults = overrides[config.type] || {\n        scales: {}\n    };\n    const configScales = options.scales || {};\n    const chartIndexAxis = getIndexAxis(config.type, options);\n    const scales = Object.create(null);\n    Object.keys(configScales).forEach((id)=>{\n        const scaleConf = configScales[id];\n        if (!isObject(scaleConf)) {\n            return console.error(`Invalid scale configuration for scale: ${id}`);\n        }\n        if (scaleConf._proxy) {\n            return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n        }\n        const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n        const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n        const defaultScaleOptions = chartDefaults.scales || {};\n        scales[id] = mergeIf(Object.create(null), [\n            {\n                axis\n            },\n            scaleConf,\n            defaultScaleOptions[axis],\n            defaultScaleOptions[defaultId]\n        ]);\n    });\n    config.data.datasets.forEach((dataset)=>{\n        const type = dataset.type || config.type;\n        const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n        const datasetDefaults = overrides[type] || {};\n        const defaultScaleOptions = datasetDefaults.scales || {};\n        Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n            const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n            const id = dataset[axis + 'AxisID'] || axis;\n            scales[id] = scales[id] || Object.create(null);\n            mergeIf(scales[id], [\n                {\n                    axis\n                },\n                configScales[id],\n                defaultScaleOptions[defaultID]\n            ]);\n        });\n    });\n    Object.keys(scales).forEach((key)=>{\n        const scale = scales[key];\n        mergeIf(scale, [\n            defaults.scales[scale.type],\n            defaults.scale\n        ]);\n    });\n    return scales;\n}\nfunction initOptions(config) {\n    const options = config.options || (config.options = {});\n    options.plugins = valueOrDefault(options.plugins, {});\n    options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n    data = data || {};\n    data.datasets = data.datasets || [];\n    data.labels = data.labels || [];\n    return data;\n}\nfunction initConfig(config) {\n    config = config || {};\n    config.data = initData(config.data);\n    initOptions(config);\n    return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n    let keys = keyCache.get(cacheKey);\n    if (!keys) {\n        keys = generate();\n        keyCache.set(cacheKey, keys);\n        keysCached.add(keys);\n    }\n    return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n    const opts = resolveObjectKey(obj, key);\n    if (opts !== undefined) {\n        set.add(opts);\n    }\n};\nclass Config {\n    constructor(config){\n        this._config = initConfig(config);\n        this._scopeCache = new Map();\n        this._resolverCache = new Map();\n    }\n    get platform() {\n        return this._config.platform;\n    }\n    get type() {\n        return this._config.type;\n    }\n    set type(type) {\n        this._config.type = type;\n    }\n    get data() {\n        return this._config.data;\n    }\n    set data(data) {\n        this._config.data = initData(data);\n    }\n    get options() {\n        return this._config.options;\n    }\n    set options(options) {\n        this._config.options = options;\n    }\n    get plugins() {\n        return this._config.plugins;\n    }\n    update() {\n        const config = this._config;\n        this.clearCache();\n        initOptions(config);\n    }\n    clearCache() {\n        this._scopeCache.clear();\n        this._resolverCache.clear();\n    }\n datasetScopeKeys(datasetType) {\n        return cachedKeys(datasetType, ()=>[\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetAnimationScopeKeys(datasetType, transition) {\n        return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n                [\n                    `datasets.${datasetType}.transitions.${transition}`,\n                    `transitions.${transition}`\n                ],\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetElementScopeKeys(datasetType, elementType) {\n        return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n                [\n                    `datasets.${datasetType}.elements.${elementType}`,\n                    `datasets.${datasetType}`,\n                    `elements.${elementType}`,\n                    ''\n                ]\n            ]);\n    }\n pluginScopeKeys(plugin) {\n        const id = plugin.id;\n        const type = this.type;\n        return cachedKeys(`${type}-plugin-${id}`, ()=>[\n                [\n                    `plugins.${id}`,\n                    ...plugin.additionalOptionScopes || []\n                ]\n            ]);\n    }\n _cachedScopes(mainScope, resetCache) {\n        const _scopeCache = this._scopeCache;\n        let cache = _scopeCache.get(mainScope);\n        if (!cache || resetCache) {\n            cache = new Map();\n            _scopeCache.set(mainScope, cache);\n        }\n        return cache;\n    }\n getOptionScopes(mainScope, keyLists, resetCache) {\n        const { options , type  } = this;\n        const cache = this._cachedScopes(mainScope, resetCache);\n        const cached = cache.get(keyLists);\n        if (cached) {\n            return cached;\n        }\n        const scopes = new Set();\n        keyLists.forEach((keys)=>{\n            if (mainScope) {\n                scopes.add(mainScope);\n                keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n            }\n            keys.forEach((key)=>addIfFound(scopes, options, key));\n            keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n            keys.forEach((key)=>addIfFound(scopes, defaults, key));\n            keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n        });\n        const array = Array.from(scopes);\n        if (array.length === 0) {\n            array.push(Object.create(null));\n        }\n        if (keysCached.has(keyLists)) {\n            cache.set(keyLists, array);\n        }\n        return array;\n    }\n chartOptionScopes() {\n        const { options , type  } = this;\n        return [\n            options,\n            overrides[type] || {},\n            defaults.datasets[type] || {},\n            {\n                type\n            },\n            defaults,\n            descriptors\n        ];\n    }\n resolveNamedOptions(scopes, names, context, prefixes = [\n        ''\n    ]) {\n        const result = {\n            $shared: true\n        };\n        const { resolver , subPrefixes  } = getResolver(this._resolverCache, scopes, prefixes);\n        let options = resolver;\n        if (needContext(resolver, names)) {\n            result.$shared = false;\n            context = isFunction(context) ? context() : context;\n            const subResolver = this.createResolver(scopes, context, subPrefixes);\n            options = _attachContext(resolver, context, subResolver);\n        }\n        for (const prop of names){\n            result[prop] = options[prop];\n        }\n        return result;\n    }\n createResolver(scopes, context, prefixes = [\n        ''\n    ], descriptorDefaults) {\n        const { resolver  } = getResolver(this._resolverCache, scopes, prefixes);\n        return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n    }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n    let cache = resolverCache.get(scopes);\n    if (!cache) {\n        cache = new Map();\n        resolverCache.set(scopes, cache);\n    }\n    const cacheKey = prefixes.join();\n    let cached = cache.get(cacheKey);\n    if (!cached) {\n        const resolver = _createResolver(scopes, prefixes);\n        cached = {\n            resolver,\n            subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n        };\n        cache.set(cacheKey, cached);\n    }\n    return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n    const { isScriptable , isIndexable  } = _descriptors(proxy);\n    for (const prop of names){\n        const scriptable = isScriptable(prop);\n        const indexable = isIndexable(prop);\n        const value = (indexable || scriptable) && proxy[prop];\n        if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar version = \"4.4.9\";\n\nconst KNOWN_POSITIONS = [\n    'top',\n    'bottom',\n    'left',\n    'right',\n    'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n    return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n    return function(a, b) {\n        return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n    };\n}\nfunction onAnimationsComplete(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    chart.notifyPlugins('afterRender');\n    callback(animationOptions && animationOptions.onComplete, [\n        context\n    ], chart);\n}\nfunction onAnimationProgress(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    callback(animationOptions && animationOptions.onProgress, [\n        context\n    ], chart);\n}\n function getCanvas(item) {\n    if (_isDomSupported() && typeof item === 'string') {\n        item = document.getElementById(item);\n    } else if (item && item.length) {\n        item = item[0];\n    }\n    if (item && item.canvas) {\n        item = item.canvas;\n    }\n    return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n    const canvas = getCanvas(key);\n    return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n    const keys = Object.keys(obj);\n    for (const key of keys){\n        const intKey = +key;\n        if (intKey >= start) {\n            const value = obj[key];\n            delete obj[key];\n            if (move > 0 || intKey > start) {\n                obj[intKey + move] = value;\n            }\n        }\n    }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n    if (!inChartArea || e.type === 'mouseout') {\n        return null;\n    }\n    if (isClick) {\n        return lastEvent;\n    }\n    return e;\n}\nclass Chart {\n    static defaults = defaults;\n    static instances = instances;\n    static overrides = overrides;\n    static registry = registry;\n    static version = version;\n    static getChart = getChart;\n    static register(...items) {\n        registry.add(...items);\n        invalidatePlugins();\n    }\n    static unregister(...items) {\n        registry.remove(...items);\n        invalidatePlugins();\n    }\n    constructor(item, userConfig){\n        const config = this.config = new Config(userConfig);\n        const initialCanvas = getCanvas(item);\n        const existingChart = getChart(initialCanvas);\n        if (existingChart) {\n            throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n        }\n        const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n        this.platform.updateConfig(config);\n        const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n        const canvas = context && context.canvas;\n        const height = canvas && canvas.height;\n        const width = canvas && canvas.width;\n        this.id = uid();\n        this.ctx = context;\n        this.canvas = canvas;\n        this.width = width;\n        this.height = height;\n        this._options = options;\n        this._aspectRatio = this.aspectRatio;\n        this._layers = [];\n        this._metasets = [];\n        this._stacks = undefined;\n        this.boxes = [];\n        this.currentDevicePixelRatio = undefined;\n        this.chartArea = undefined;\n        this._active = [];\n        this._lastEvent = undefined;\n        this._listeners = {};\n         this._responsiveListeners = undefined;\n        this._sortedMetasets = [];\n        this.scales = {};\n        this._plugins = new PluginService();\n        this.$proxies = {};\n        this._hiddenIndices = {};\n        this.attached = false;\n        this._animationsDisabled = undefined;\n        this.$context = undefined;\n        this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n        this._dataChanges = [];\n        instances[this.id] = this;\n        if (!context || !canvas) {\n            console.error(\"Failed to create chart: can't acquire context from the given item\");\n            return;\n        }\n        animator.listen(this, 'complete', onAnimationsComplete);\n        animator.listen(this, 'progress', onAnimationProgress);\n        this._initialize();\n        if (this.attached) {\n            this.update();\n        }\n    }\n    get aspectRatio() {\n        const { options: { aspectRatio , maintainAspectRatio  } , width , height , _aspectRatio  } = this;\n        if (!isNullOrUndef(aspectRatio)) {\n            return aspectRatio;\n        }\n        if (maintainAspectRatio && _aspectRatio) {\n            return _aspectRatio;\n        }\n        return height ? width / height : null;\n    }\n    get data() {\n        return this.config.data;\n    }\n    set data(data) {\n        this.config.data = data;\n    }\n    get options() {\n        return this._options;\n    }\n    set options(options) {\n        this.config.options = options;\n    }\n    get registry() {\n        return registry;\n    }\n _initialize() {\n        this.notifyPlugins('beforeInit');\n        if (this.options.responsive) {\n            this.resize();\n        } else {\n            retinaScale(this, this.options.devicePixelRatio);\n        }\n        this.bindEvents();\n        this.notifyPlugins('afterInit');\n        return this;\n    }\n    clear() {\n        clearCanvas(this.canvas, this.ctx);\n        return this;\n    }\n    stop() {\n        animator.stop(this);\n        return this;\n    }\n resize(width, height) {\n        if (!animator.running(this)) {\n            this._resize(width, height);\n        } else {\n            this._resizeBeforeDraw = {\n                width,\n                height\n            };\n        }\n    }\n    _resize(width, height) {\n        const options = this.options;\n        const canvas = this.canvas;\n        const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n        const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n        const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n        const mode = this.width ? 'resize' : 'attach';\n        this.width = newSize.width;\n        this.height = newSize.height;\n        this._aspectRatio = this.aspectRatio;\n        if (!retinaScale(this, newRatio, true)) {\n            return;\n        }\n        this.notifyPlugins('resize', {\n            size: newSize\n        });\n        callback(options.onResize, [\n            this,\n            newSize\n        ], this);\n        if (this.attached) {\n            if (this._doResize(mode)) {\n                this.render();\n            }\n        }\n    }\n    ensureScalesHaveIDs() {\n        const options = this.options;\n        const scalesOptions = options.scales || {};\n        each(scalesOptions, (axisOptions, axisID)=>{\n            axisOptions.id = axisID;\n        });\n    }\n buildOrUpdateScales() {\n        const options = this.options;\n        const scaleOpts = options.scales;\n        const scales = this.scales;\n        const updated = Object.keys(scales).reduce((obj, id)=>{\n            obj[id] = false;\n            return obj;\n        }, {});\n        let items = [];\n        if (scaleOpts) {\n            items = items.concat(Object.keys(scaleOpts).map((id)=>{\n                const scaleOptions = scaleOpts[id];\n                const axis = determineAxis(id, scaleOptions);\n                const isRadial = axis === 'r';\n                const isHorizontal = axis === 'x';\n                return {\n                    options: scaleOptions,\n                    dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n                    dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n                };\n            }));\n        }\n        each(items, (item)=>{\n            const scaleOptions = item.options;\n            const id = scaleOptions.id;\n            const axis = determineAxis(id, scaleOptions);\n            const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n            if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n                scaleOptions.position = item.dposition;\n            }\n            updated[id] = true;\n            let scale = null;\n            if (id in scales && scales[id].type === scaleType) {\n                scale = scales[id];\n            } else {\n                const scaleClass = registry.getScale(scaleType);\n                scale = new scaleClass({\n                    id,\n                    type: scaleType,\n                    ctx: this.ctx,\n                    chart: this\n                });\n                scales[scale.id] = scale;\n            }\n            scale.init(scaleOptions, options);\n        });\n        each(updated, (hasUpdated, id)=>{\n            if (!hasUpdated) {\n                delete scales[id];\n            }\n        });\n        each(scales, (scale)=>{\n            layouts.configure(this, scale, scale.options);\n            layouts.addBox(this, scale);\n        });\n    }\n _updateMetasets() {\n        const metasets = this._metasets;\n        const numData = this.data.datasets.length;\n        const numMeta = metasets.length;\n        metasets.sort((a, b)=>a.index - b.index);\n        if (numMeta > numData) {\n            for(let i = numData; i < numMeta; ++i){\n                this._destroyDatasetMeta(i);\n            }\n            metasets.splice(numData, numMeta - numData);\n        }\n        this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n    }\n _removeUnreferencedMetasets() {\n        const { _metasets: metasets , data: { datasets  }  } = this;\n        if (metasets.length > datasets.length) {\n            delete this._stacks;\n        }\n        metasets.forEach((meta, index)=>{\n            if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n                this._destroyDatasetMeta(index);\n            }\n        });\n    }\n    buildOrUpdateControllers() {\n        const newControllers = [];\n        const datasets = this.data.datasets;\n        let i, ilen;\n        this._removeUnreferencedMetasets();\n        for(i = 0, ilen = datasets.length; i < ilen; i++){\n            const dataset = datasets[i];\n            let meta = this.getDatasetMeta(i);\n            const type = dataset.type || this.config.type;\n            if (meta.type && meta.type !== type) {\n                this._destroyDatasetMeta(i);\n                meta = this.getDatasetMeta(i);\n            }\n            meta.type = type;\n            meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n            meta.order = dataset.order || 0;\n            meta.index = i;\n            meta.label = '' + dataset.label;\n            meta.visible = this.isDatasetVisible(i);\n            if (meta.controller) {\n                meta.controller.updateIndex(i);\n                meta.controller.linkScales();\n            } else {\n                const ControllerClass = registry.getController(type);\n                const { datasetElementType , dataElementType  } = defaults.datasets[type];\n                Object.assign(ControllerClass, {\n                    dataElementType: registry.getElement(dataElementType),\n                    datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n                });\n                meta.controller = new ControllerClass(this, i);\n                newControllers.push(meta.controller);\n            }\n        }\n        this._updateMetasets();\n        return newControllers;\n    }\n _resetElements() {\n        each(this.data.datasets, (dataset, datasetIndex)=>{\n            this.getDatasetMeta(datasetIndex).controller.reset();\n        }, this);\n    }\n reset() {\n        this._resetElements();\n        this.notifyPlugins('reset');\n    }\n    update(mode) {\n        const config = this.config;\n        config.update();\n        const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        const animsDisabled = this._animationsDisabled = !options.animation;\n        this._updateScales();\n        this._checkEventBindings();\n        this._updateHiddenIndices();\n        this._plugins.invalidate();\n        if (this.notifyPlugins('beforeUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const newControllers = this.buildOrUpdateControllers();\n        this.notifyPlugins('beforeElementsUpdate');\n        let minPadding = 0;\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n            const { controller  } = this.getDatasetMeta(i);\n            const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n            controller.buildOrUpdateElements(reset);\n            minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n        }\n        minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n        this._updateLayout(minPadding);\n        if (!animsDisabled) {\n            each(newControllers, (controller)=>{\n                controller.reset();\n            });\n        }\n        this._updateDatasets(mode);\n        this.notifyPlugins('afterUpdate', {\n            mode\n        });\n        this._layers.sort(compare2Level('z', '_idx'));\n        const { _active , _lastEvent  } = this;\n        if (_lastEvent) {\n            this._eventHandler(_lastEvent, true);\n        } else if (_active.length) {\n            this._updateHoverStyles(_active, _active, true);\n        }\n        this.render();\n    }\n _updateScales() {\n        each(this.scales, (scale)=>{\n            layouts.removeBox(this, scale);\n        });\n        this.ensureScalesHaveIDs();\n        this.buildOrUpdateScales();\n    }\n _checkEventBindings() {\n        const options = this.options;\n        const existingEvents = new Set(Object.keys(this._listeners));\n        const newEvents = new Set(options.events);\n        if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n            this.unbindEvents();\n            this.bindEvents();\n        }\n    }\n _updateHiddenIndices() {\n        const { _hiddenIndices  } = this;\n        const changes = this._getUniformDataChanges() || [];\n        for (const { method , start , count  } of changes){\n            const move = method === '_removeElements' ? -count : count;\n            moveNumericKeys(_hiddenIndices, start, move);\n        }\n    }\n _getUniformDataChanges() {\n        const _dataChanges = this._dataChanges;\n        if (!_dataChanges || !_dataChanges.length) {\n            return;\n        }\n        this._dataChanges = [];\n        const datasetCount = this.data.datasets.length;\n        const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n        const changeSet = makeSet(0);\n        for(let i = 1; i < datasetCount; i++){\n            if (!setsEqual(changeSet, makeSet(i))) {\n                return;\n            }\n        }\n        return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n                method: a[1],\n                start: +a[2],\n                count: +a[3]\n            }));\n    }\n _updateLayout(minPadding) {\n        if (this.notifyPlugins('beforeLayout', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        layouts.update(this, this.width, this.height, minPadding);\n        const area = this.chartArea;\n        const noArea = area.width <= 0 || area.height <= 0;\n        this._layers = [];\n        each(this.boxes, (box)=>{\n            if (noArea && box.position === 'chartArea') {\n                return;\n            }\n            if (box.configure) {\n                box.configure();\n            }\n            this._layers.push(...box._layers());\n        }, this);\n        this._layers.forEach((item, index)=>{\n            item._idx = index;\n        });\n        this.notifyPlugins('afterLayout');\n    }\n _updateDatasets(mode) {\n        if (this.notifyPlugins('beforeDatasetsUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this.getDatasetMeta(i).controller.configure();\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._updateDataset(i, isFunction(mode) ? mode({\n                datasetIndex: i\n            }) : mode);\n        }\n        this.notifyPlugins('afterDatasetsUpdate', {\n            mode\n        });\n    }\n _updateDataset(index, mode) {\n        const meta = this.getDatasetMeta(index);\n        const args = {\n            meta,\n            index,\n            mode,\n            cancelable: true\n        };\n        if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n            return;\n        }\n        meta.controller._update(mode);\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetUpdate', args);\n    }\n    render() {\n        if (this.notifyPlugins('beforeRender', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        if (animator.has(this)) {\n            if (this.attached && !animator.running(this)) {\n                animator.start(this);\n            }\n        } else {\n            this.draw();\n            onAnimationsComplete({\n                chart: this\n            });\n        }\n    }\n    draw() {\n        let i;\n        if (this._resizeBeforeDraw) {\n            const { width , height  } = this._resizeBeforeDraw;\n            this._resizeBeforeDraw = null;\n            this._resize(width, height);\n        }\n        this.clear();\n        if (this.width <= 0 || this.height <= 0) {\n            return;\n        }\n        if (this.notifyPlugins('beforeDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const layers = this._layers;\n        for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this._drawDatasets();\n        for(; i < layers.length; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this.notifyPlugins('afterDraw');\n    }\n _getSortedDatasetMetas(filterVisible) {\n        const metasets = this._sortedMetasets;\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metasets.length; i < ilen; ++i){\n            const meta = metasets[i];\n            if (!filterVisible || meta.visible) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n getSortedVisibleDatasetMetas() {\n        return this._getSortedDatasetMetas(true);\n    }\n _drawDatasets() {\n        if (this.notifyPlugins('beforeDatasetsDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const metasets = this.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            this._drawDataset(metasets[i]);\n        }\n        this.notifyPlugins('afterDatasetsDraw');\n    }\n _drawDataset(meta) {\n        const ctx = this.ctx;\n        const args = {\n            meta,\n            index: meta.index,\n            cancelable: true\n        };\n        const clip = getDatasetClipArea(this, meta);\n        if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n            return;\n        }\n        if (clip) {\n            clipArea(ctx, clip);\n        }\n        meta.controller.draw();\n        if (clip) {\n            unclipArea(ctx);\n        }\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetDraw', args);\n    }\n isPointInArea(point) {\n        return _isPointInArea(point, this.chartArea, this._minPadding);\n    }\n    getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n        const method = Interaction.modes[mode];\n        if (typeof method === 'function') {\n            return method(this, e, options, useFinalPosition);\n        }\n        return [];\n    }\n    getDatasetMeta(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        const metasets = this._metasets;\n        let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n        if (!meta) {\n            meta = {\n                type: null,\n                data: [],\n                dataset: null,\n                controller: null,\n                hidden: null,\n                xAxisID: null,\n                yAxisID: null,\n                order: dataset && dataset.order || 0,\n                index: datasetIndex,\n                _dataset: dataset,\n                _parsed: [],\n                _sorted: false\n            };\n            metasets.push(meta);\n        }\n        return meta;\n    }\n    getContext() {\n        return this.$context || (this.$context = createContext(null, {\n            chart: this,\n            type: 'chart'\n        }));\n    }\n    getVisibleDatasetCount() {\n        return this.getSortedVisibleDatasetMetas().length;\n    }\n    isDatasetVisible(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        if (!dataset) {\n            return false;\n        }\n        const meta = this.getDatasetMeta(datasetIndex);\n        return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n    }\n    setDatasetVisibility(datasetIndex, visible) {\n        const meta = this.getDatasetMeta(datasetIndex);\n        meta.hidden = !visible;\n    }\n    toggleDataVisibility(index) {\n        this._hiddenIndices[index] = !this._hiddenIndices[index];\n    }\n    getDataVisibility(index) {\n        return !this._hiddenIndices[index];\n    }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n        const mode = visible ? 'show' : 'hide';\n        const meta = this.getDatasetMeta(datasetIndex);\n        const anims = meta.controller._resolveAnimations(undefined, mode);\n        if (defined(dataIndex)) {\n            meta.data[dataIndex].hidden = !visible;\n            this.update();\n        } else {\n            this.setDatasetVisibility(datasetIndex, visible);\n            anims.update(meta, {\n                visible\n            });\n            this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n        }\n    }\n    hide(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, false);\n    }\n    show(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, true);\n    }\n _destroyDatasetMeta(datasetIndex) {\n        const meta = this._metasets[datasetIndex];\n        if (meta && meta.controller) {\n            meta.controller._destroy();\n        }\n        delete this._metasets[datasetIndex];\n    }\n    _stop() {\n        let i, ilen;\n        this.stop();\n        animator.remove(this);\n        for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._destroyDatasetMeta(i);\n        }\n    }\n    destroy() {\n        this.notifyPlugins('beforeDestroy');\n        const { canvas , ctx  } = this;\n        this._stop();\n        this.config.clearCache();\n        if (canvas) {\n            this.unbindEvents();\n            clearCanvas(canvas, ctx);\n            this.platform.releaseContext(ctx);\n            this.canvas = null;\n            this.ctx = null;\n        }\n        delete instances[this.id];\n        this.notifyPlugins('afterDestroy');\n    }\n    toBase64Image(...args) {\n        return this.canvas.toDataURL(...args);\n    }\n bindEvents() {\n        this.bindUserEvents();\n        if (this.options.responsive) {\n            this.bindResponsiveEvents();\n        } else {\n            this.attached = true;\n        }\n    }\n bindUserEvents() {\n        const listeners = this._listeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const listener = (e, x, y)=>{\n            e.offsetX = x;\n            e.offsetY = y;\n            this._eventHandler(e);\n        };\n        each(this.options.events, (type)=>_add(type, listener));\n    }\n bindResponsiveEvents() {\n        if (!this._responsiveListeners) {\n            this._responsiveListeners = {};\n        }\n        const listeners = this._responsiveListeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const _remove = (type, listener)=>{\n            if (listeners[type]) {\n                platform.removeEventListener(this, type, listener);\n                delete listeners[type];\n            }\n        };\n        const listener = (width, height)=>{\n            if (this.canvas) {\n                this.resize(width, height);\n            }\n        };\n        let detached;\n        const attached = ()=>{\n            _remove('attach', attached);\n            this.attached = true;\n            this.resize();\n            _add('resize', listener);\n            _add('detach', detached);\n        };\n        detached = ()=>{\n            this.attached = false;\n            _remove('resize', listener);\n            this._stop();\n            this._resize(0, 0);\n            _add('attach', attached);\n        };\n        if (platform.isAttached(this.canvas)) {\n            attached();\n        } else {\n            detached();\n        }\n    }\n unbindEvents() {\n        each(this._listeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._listeners = {};\n        each(this._responsiveListeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._responsiveListeners = undefined;\n    }\n    updateHoverStyle(items, mode, enabled) {\n        const prefix = enabled ? 'set' : 'remove';\n        let meta, item, i, ilen;\n        if (mode === 'dataset') {\n            meta = this.getDatasetMeta(items[0].datasetIndex);\n            meta.controller['_' + prefix + 'DatasetHoverStyle']();\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            item = items[i];\n            const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n            if (controller) {\n                controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n            }\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements) {\n        const lastActive = this._active || [];\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('No dataset found at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !_elementsEqual(active, lastActive);\n        if (changed) {\n            this._active = active;\n            this._lastEvent = null;\n            this._updateHoverStyles(active, lastActive);\n        }\n    }\n notifyPlugins(hook, args, filter) {\n        return this._plugins.notify(this, hook, args, filter);\n    }\n isPluginEnabled(pluginId) {\n        return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n    }\n _updateHoverStyles(active, lastActive, replay) {\n        const hoverOptions = this.options.hover;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n        const deactivated = diff(lastActive, active);\n        const activated = replay ? active : diff(active, lastActive);\n        if (deactivated.length) {\n            this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n        }\n        if (activated.length && hoverOptions.mode) {\n            this.updateHoverStyle(activated, hoverOptions.mode, true);\n        }\n    }\n _eventHandler(e, replay) {\n        const args = {\n            event: e,\n            replay,\n            cancelable: true,\n            inChartArea: this.isPointInArea(e)\n        };\n        const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n        if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n            return;\n        }\n        const changed = this._handleEvent(e, replay, args.inChartArea);\n        args.cancelable = false;\n        this.notifyPlugins('afterEvent', args, eventFilter);\n        if (changed || args.changed) {\n            this.render();\n        }\n        return this;\n    }\n _handleEvent(e, replay, inChartArea) {\n        const { _active: lastActive = [] , options  } = this;\n        const useFinalPosition = replay;\n        const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n        const isClick = _isClickEvent(e);\n        const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n        if (inChartArea) {\n            this._lastEvent = null;\n            callback(options.onHover, [\n                e,\n                active,\n                this\n            ], this);\n            if (isClick) {\n                callback(options.onClick, [\n                    e,\n                    active,\n                    this\n                ], this);\n            }\n        }\n        const changed = !_elementsEqual(active, lastActive);\n        if (changed || replay) {\n            this._active = active;\n            this._updateHoverStyles(active, lastActive, replay);\n        }\n        this._lastEvent = lastEvent;\n        return changed;\n    }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive;\n        }\n        const hoverOptions = this.options.hover;\n        return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n    }\n}\nfunction invalidatePlugins() {\n    return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n    const { startAngle , pixelMargin , x , y , outerRadius , innerRadius  } = element;\n    let angleMargin = pixelMargin / outerRadius;\n    // Draw an inner border by clipping the arc and drawing a double-width border\n    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n    ctx.beginPath();\n    ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n    if (innerRadius > pixelMargin) {\n        angleMargin = pixelMargin / innerRadius;\n        ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n    } else {\n        ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n    }\n    ctx.closePath();\n    ctx.clip();\n}\nfunction toRadiusCorners(value) {\n    return _readValueToProps(value, [\n        'outerStart',\n        'outerEnd',\n        'innerStart',\n        'innerEnd'\n    ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n    const o = toRadiusCorners(arc.options.borderRadius);\n    const halfThickness = (outerRadius - innerRadius) / 2;\n    const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n    // Outer limits are complicated. We want to compute the available angular distance at\n    // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n    // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n    //\n    // If the borderRadius is large, that value can become negative.\n    // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n    // we know that the thickness term will dominate and compute the limits at that point\n    const computeOuterLimit = (val)=>{\n        const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n        return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n    };\n    return {\n        outerStart: computeOuterLimit(o.outerStart),\n        outerEnd: computeOuterLimit(o.outerEnd),\n        innerStart: _limitValue(o.innerStart, 0, innerLimit),\n        innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n    };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n    return {\n        x: x + r * Math.cos(theta),\n        y: y + r * Math.sin(theta)\n    };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n    const { x , y , startAngle: start , pixelMargin , innerRadius: innerR  } = element;\n    const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n    const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n    let spacingOffset = 0;\n    const alpha = end - start;\n    if (spacing) {\n        // When spacing is present, it is the same for all items\n        // So we adjust the start and end angle of the arc such that\n        // the distance is the same as it would be without the spacing\n        const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n        const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n        const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n        const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n        spacingOffset = (alpha - adjustedAngle) / 2;\n    }\n    const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n    const angleOffset = (alpha - beta) / 2;\n    const startAngle = start + angleOffset + spacingOffset;\n    const endAngle = end - angleOffset - spacingOffset;\n    const { outerStart , outerEnd , innerStart , innerEnd  } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n    const outerStartAdjustedRadius = outerRadius - outerStart;\n    const outerEndAdjustedRadius = outerRadius - outerEnd;\n    const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n    const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n    const innerStartAdjustedRadius = innerRadius + innerStart;\n    const innerEndAdjustedRadius = innerRadius + innerEnd;\n    const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n    const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n    ctx.beginPath();\n    if (circular) {\n        // The first arc segments from point 1 to point a to point 2\n        const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n        ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n        ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n        // The corner segment from point 2 to point 3\n        if (outerEnd > 0) {\n            const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n        }\n        // The line from point 3 to point 4\n        const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n        ctx.lineTo(p4.x, p4.y);\n        // The corner segment from point 4 to point 5\n        if (innerEnd > 0) {\n            const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n        }\n        // The inner arc from point 5 to point b to point 6\n        const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n        ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n        ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n        // The corner segment from point 6 to point 7\n        if (innerStart > 0) {\n            const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n        }\n        // The line from point 7 to point 8\n        const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n        ctx.lineTo(p8.x, p8.y);\n        // The corner segment from point 8 to point 1\n        if (outerStart > 0) {\n            const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n        }\n    } else {\n        ctx.moveTo(x, y);\n        const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n        const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerStartX, outerStartY);\n        const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n        const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerEndX, outerEndY);\n    }\n    ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference  } = element;\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.fill();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % TAU || TAU);\n        }\n    }\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.fill();\n    return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference , options  } = element;\n    const { borderWidth , borderJoinStyle , borderDash , borderDashOffset  } = options;\n    const inner = options.borderAlign === 'inner';\n    if (!borderWidth) {\n        return;\n    }\n    ctx.setLineDash(borderDash || []);\n    ctx.lineDashOffset = borderDashOffset;\n    if (inner) {\n        ctx.lineWidth = borderWidth * 2;\n        ctx.lineJoin = borderJoinStyle || 'round';\n    } else {\n        ctx.lineWidth = borderWidth;\n        ctx.lineJoin = borderJoinStyle || 'bevel';\n    }\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.stroke();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % TAU || TAU);\n        }\n    }\n    if (inner) {\n        clipArc(ctx, element, endAngle);\n    }\n    if (!fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        ctx.stroke();\n    }\n}\nclass ArcElement extends Element {\n    static id = 'arc';\n    static defaults = {\n        borderAlign: 'center',\n        borderColor: '#fff',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: undefined,\n        borderRadius: 0,\n        borderWidth: 2,\n        offset: 0,\n        spacing: 0,\n        angle: undefined,\n        circular: true\n    };\n    static defaultRoutes = {\n        backgroundColor: 'backgroundColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash'\n    };\n    circumference;\n    endAngle;\n    fullCircles;\n    innerRadius;\n    outerRadius;\n    pixelMargin;\n    startAngle;\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.circumference = undefined;\n        this.startAngle = undefined;\n        this.endAngle = undefined;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.pixelMargin = 0;\n        this.fullCircles = 0;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(chartX, chartY, useFinalPosition) {\n        const point = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        const { angle , distance  } = getAngleFromPoint(point, {\n            x: chartX,\n            y: chartY\n        });\n        const { startAngle , endAngle , innerRadius , outerRadius , circumference  } = this.getProps([\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius',\n            'circumference'\n        ], useFinalPosition);\n        const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n        const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n        const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n        const betweenAngles = _circumference >= TAU || nonZeroBetween;\n        const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n        return betweenAngles && withinRadius;\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , startAngle , endAngle , innerRadius , outerRadius  } = this.getProps([\n            'x',\n            'y',\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius'\n        ], useFinalPosition);\n        const { offset , spacing  } = this.options;\n        const halfAngle = (startAngle + endAngle) / 2;\n        const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n        return {\n            x: x + Math.cos(halfAngle) * halfRadius,\n            y: y + Math.sin(halfAngle) * halfRadius\n        };\n    }\n    tooltipPosition(useFinalPosition) {\n        return this.getCenterPoint(useFinalPosition);\n    }\n    draw(ctx) {\n        const { options , circumference  } = this;\n        const offset = (options.offset || 0) / 4;\n        const spacing = (options.spacing || 0) / 2;\n        const circular = options.circular;\n        this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n        this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n        if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n            return;\n        }\n        ctx.save();\n        const halfAngle = (this.startAngle + this.endAngle) / 2;\n        ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n        const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n        const radiusOffset = offset * fix;\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        drawArc(ctx, this, radiusOffset, spacing, circular);\n        drawBorder(ctx, this, radiusOffset, spacing, circular);\n        ctx.restore();\n    }\n}\n\nfunction setStyle(ctx, options, style = options) {\n    ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n    ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n    ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n    ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n    ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n    ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n    ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n    if (options.stepped) {\n        return _steppedLineTo;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return _bezierCurveTo;\n    }\n    return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n    const count = points.length;\n    const { start: paramsStart = 0 , end: paramsEnd = count - 1  } = params;\n    const { start: segmentStart , end: segmentEnd  } = segment;\n    const start = Math.max(paramsStart, segmentStart);\n    const end = Math.min(paramsEnd, segmentEnd);\n    const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n    return {\n        count,\n        start,\n        loop: segment.loop,\n        ilen: end < start && !outside ? count + end - start : end - start\n    };\n}\n function pathSegment(ctx, line, segment, params) {\n    const { points , options  } = line;\n    const { count , start , loop , ilen  } = pathVars(points, segment, params);\n    const lineMethod = getLineMethod(options);\n    let { move =true , reverse  } = params || {};\n    let i, point, prev;\n    for(i = 0; i <= ilen; ++i){\n        point = points[(start + (reverse ? ilen - i : i)) % count];\n        if (point.skip) {\n            continue;\n        } else if (move) {\n            ctx.moveTo(point.x, point.y);\n            move = false;\n        } else {\n            lineMethod(ctx, prev, point, reverse, options.stepped);\n        }\n        prev = point;\n    }\n    if (loop) {\n        point = points[(start + (reverse ? ilen : 0)) % count];\n        lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n    const points = line.points;\n    const { count , start , ilen  } = pathVars(points, segment, params);\n    const { move =true , reverse  } = params || {};\n    let avgX = 0;\n    let countX = 0;\n    let i, point, prevX, minY, maxY, lastY;\n    const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n    const drawX = ()=>{\n        if (minY !== maxY) {\n            ctx.lineTo(avgX, maxY);\n            ctx.lineTo(avgX, minY);\n            ctx.lineTo(avgX, lastY);\n        }\n    };\n    if (move) {\n        point = points[pointIndex(0)];\n        ctx.moveTo(point.x, point.y);\n    }\n    for(i = 0; i <= ilen; ++i){\n        point = points[pointIndex(i)];\n        if (point.skip) {\n            continue;\n        }\n        const x = point.x;\n        const y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n            } else if (y > maxY) {\n                maxY = y;\n            }\n            avgX = (countX * avgX + x) / ++countX;\n        } else {\n            drawX();\n            ctx.lineTo(x, y);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n        }\n        lastY = y;\n    }\n    drawX();\n}\n function _getSegmentMethod(line) {\n    const opts = line.options;\n    const borderDash = opts.borderDash && opts.borderDash.length;\n    const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n    return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n    if (options.stepped) {\n        return _steppedInterpolation;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return _bezierInterpolation;\n    }\n    return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n    let path = line._path;\n    if (!path) {\n        path = line._path = new Path2D();\n        if (line.path(path, start, count)) {\n            path.closePath();\n        }\n    }\n    setStyle(ctx, line.options);\n    ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n    const { segments , options  } = line;\n    const segmentMethod = _getSegmentMethod(line);\n    for (const segment of segments){\n        setStyle(ctx, options, segment.style);\n        ctx.beginPath();\n        if (segmentMethod(ctx, line, segment, {\n            start,\n            end: start + count - 1\n        })) {\n            ctx.closePath();\n        }\n        ctx.stroke();\n    }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n    if (usePath2D && !line.options.segment) {\n        strokePathWithCache(ctx, line, start, count);\n    } else {\n        strokePathDirect(ctx, line, start, count);\n    }\n}\nclass LineElement extends Element {\n    static id = 'line';\n static defaults = {\n        borderCapStyle: 'butt',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: 'miter',\n        borderWidth: 3,\n        capBezierPoints: true,\n        cubicInterpolationMode: 'default',\n        fill: false,\n        spanGaps: false,\n        stepped: false,\n        tension: 0\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n    };\n    constructor(cfg){\n        super();\n        this.animated = true;\n        this.options = undefined;\n        this._chart = undefined;\n        this._loop = undefined;\n        this._fullLoop = undefined;\n        this._path = undefined;\n        this._points = undefined;\n        this._segments = undefined;\n        this._decimated = false;\n        this._pointsUpdated = false;\n        this._datasetIndex = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    updateControlPoints(chartArea, indexAxis) {\n        const options = this.options;\n        if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n            const loop = options.spanGaps ? this._loop : this._fullLoop;\n            _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n            this._pointsUpdated = true;\n        }\n    }\n    set points(points) {\n        this._points = points;\n        delete this._segments;\n        delete this._path;\n        this._pointsUpdated = false;\n    }\n    get points() {\n        return this._points;\n    }\n    get segments() {\n        return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n    }\n first() {\n        const segments = this.segments;\n        const points = this.points;\n        return segments.length && points[segments[0].start];\n    }\n last() {\n        const segments = this.segments;\n        const points = this.points;\n        const count = segments.length;\n        return count && points[segments[count - 1].end];\n    }\n interpolate(point, property) {\n        const options = this.options;\n        const value = point[property];\n        const points = this.points;\n        const segments = _boundSegments(this, {\n            property,\n            start: value,\n            end: value\n        });\n        if (!segments.length) {\n            return;\n        }\n        const result = [];\n        const _interpolate = _getInterpolationMethod(options);\n        let i, ilen;\n        for(i = 0, ilen = segments.length; i < ilen; ++i){\n            const { start , end  } = segments[i];\n            const p1 = points[start];\n            const p2 = points[end];\n            if (p1 === p2) {\n                result.push(p1);\n                continue;\n            }\n            const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n            const interpolated = _interpolate(p1, p2, t, options.stepped);\n            interpolated[property] = point[property];\n            result.push(interpolated);\n        }\n        return result.length === 1 ? result[0] : result;\n    }\n pathSegment(ctx, segment, params) {\n        const segmentMethod = _getSegmentMethod(this);\n        return segmentMethod(ctx, this, segment, params);\n    }\n path(ctx, start, count) {\n        const segments = this.segments;\n        const segmentMethod = _getSegmentMethod(this);\n        let loop = this._loop;\n        start = start || 0;\n        count = count || this.points.length - start;\n        for (const segment of segments){\n            loop &= segmentMethod(ctx, this, segment, {\n                start,\n                end: start + count - 1\n            });\n        }\n        return !!loop;\n    }\n draw(ctx, chartArea, start, count) {\n        const options = this.options || {};\n        const points = this.points || [];\n        if (points.length && options.borderWidth) {\n            ctx.save();\n            draw(ctx, this, start, count);\n            ctx.restore();\n        }\n        if (this.animated) {\n            this._pointsUpdated = false;\n            this._path = undefined;\n        }\n    }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n    const options = el.options;\n    const { [axis]: value  } = el.getProps([\n        axis\n    ], useFinalPosition);\n    return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n    static id = 'point';\n    parsed;\n    skip;\n    stop;\n    /**\n   * @type {any}\n   */ static defaults = {\n        borderWidth: 1,\n        hitRadius: 1,\n        hoverBorderWidth: 1,\n        hoverRadius: 4,\n        pointStyle: 'circle',\n        radius: 3,\n        rotation: 0\n    };\n    /**\n   * @type {any}\n   */ static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.parsed = undefined;\n        this.skip = undefined;\n        this.stop = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        const options = this.options;\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange$1(this, mouseX, 'x', useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange$1(this, mouseY, 'y', useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    size(options) {\n        options = options || this.options || {};\n        let radius = options.radius || 0;\n        radius = Math.max(radius, radius && options.hoverRadius || 0);\n        const borderWidth = radius && options.borderWidth || 0;\n        return (radius + borderWidth) * 2;\n    }\n    draw(ctx, area) {\n        const options = this.options;\n        if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n            return;\n        }\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.fillStyle = options.backgroundColor;\n        drawPoint(ctx, options, this.x, this.y);\n    }\n    getRange() {\n        const options = this.options || {};\n        // @ts-expect-error Fallbacks should never be hit in practice\n        return options.radius + options.hitRadius;\n    }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n    const { x , y , base , width , height  } =  bar.getProps([\n        'x',\n        'y',\n        'base',\n        'width',\n        'height'\n    ], useFinalPosition);\n    let left, right, top, bottom, half;\n    if (bar.horizontal) {\n        half = height / 2;\n        left = Math.min(x, base);\n        right = Math.max(x, base);\n        top = y - half;\n        bottom = y + half;\n    } else {\n        half = width / 2;\n        left = x - half;\n        right = x + half;\n        top = Math.min(y, base);\n        bottom = Math.max(y, base);\n    }\n    return {\n        left,\n        top,\n        right,\n        bottom\n    };\n}\nfunction skipOrLimit(skip, value, min, max) {\n    return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n    const value = bar.options.borderWidth;\n    const skip = bar.borderSkipped;\n    const o = toTRBL(value);\n    return {\n        t: skipOrLimit(skip.top, o.top, 0, maxH),\n        r: skipOrLimit(skip.right, o.right, 0, maxW),\n        b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n        l: skipOrLimit(skip.left, o.left, 0, maxW)\n    };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n    const { enableBorderRadius  } = bar.getProps([\n        'enableBorderRadius'\n    ]);\n    const value = bar.options.borderRadius;\n    const o = toTRBLCorners(value);\n    const maxR = Math.min(maxW, maxH);\n    const skip = bar.borderSkipped;\n    const enableBorder = enableBorderRadius || isObject(value);\n    return {\n        topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n        topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n        bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n        bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n    };\n}\nfunction boundingRects(bar) {\n    const bounds = getBarBounds(bar);\n    const width = bounds.right - bounds.left;\n    const height = bounds.bottom - bounds.top;\n    const border = parseBorderWidth(bar, width / 2, height / 2);\n    const radius = parseBorderRadius(bar, width / 2, height / 2);\n    return {\n        outer: {\n            x: bounds.left,\n            y: bounds.top,\n            w: width,\n            h: height,\n            radius\n        },\n        inner: {\n            x: bounds.left + border.l,\n            y: bounds.top + border.t,\n            w: width - border.l - border.r,\n            h: height - border.t - border.b,\n            radius: {\n                topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n                topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n                bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n                bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n            }\n        }\n    };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n    const skipX = x === null;\n    const skipY = y === null;\n    const skipBoth = skipX && skipY;\n    const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n    return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n    return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n    ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n    const x = rect.x !== refRect.x ? -amount : 0;\n    const y = rect.y !== refRect.y ? -amount : 0;\n    const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n    const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n    return {\n        x: rect.x + x,\n        y: rect.y + y,\n        w: rect.w + w,\n        h: rect.h + h,\n        radius: rect.radius\n    };\n}\nclass BarElement extends Element {\n    static id = 'bar';\n static defaults = {\n        borderSkipped: 'start',\n        borderWidth: 0,\n        borderRadius: 0,\n        inflateAmount: 'auto',\n        pointStyle: undefined\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.horizontal = undefined;\n        this.base = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.inflateAmount = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    draw(ctx) {\n        const { inflateAmount , options: { borderColor , backgroundColor  }  } = this;\n        const { inner , outer  } = boundingRects(this);\n        const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n        ctx.save();\n        if (outer.w !== inner.w || outer.h !== inner.h) {\n            ctx.beginPath();\n            addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n            ctx.clip();\n            addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n            ctx.fillStyle = borderColor;\n            ctx.fill('evenodd');\n        }\n        ctx.beginPath();\n        addRectPath(ctx, inflateRect(inner, inflateAmount));\n        ctx.fillStyle = backgroundColor;\n        ctx.fill();\n        ctx.restore();\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        return inRange(this, mouseX, mouseY, useFinalPosition);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange(this, mouseX, null, useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange(this, null, mouseY, useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , base , horizontal  } =  this.getProps([\n            'x',\n            'y',\n            'base',\n            'horizontal'\n        ], useFinalPosition);\n        return {\n            x: horizontal ? (x + base) / 2 : x,\n            y: horizontal ? y : (y + base) / 2\n        };\n    }\n    getRange(axis) {\n        return axis === 'x' ? this.width / 2 : this.height / 2;\n    }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n    'rgb(54, 162, 235)',\n    'rgb(255, 99, 132)',\n    'rgb(255, 159, 64)',\n    'rgb(255, 205, 86)',\n    'rgb(75, 192, 192)',\n    'rgb(153, 102, 255)',\n    'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n    return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n    return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n    dataset.borderColor = getBorderColor(i);\n    dataset.backgroundColor = getBackgroundColor(i);\n    return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n    return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n    return i;\n}\nfunction getColorizer(chart) {\n    let i = 0;\n    return (dataset, datasetIndex)=>{\n        const controller = chart.getDatasetMeta(datasetIndex).controller;\n        if (controller instanceof DoughnutController) {\n            i = colorizeDoughnutDataset(dataset, i);\n        } else if (controller instanceof PolarAreaController) {\n            i = colorizePolarAreaDataset(dataset, i);\n        } else if (controller) {\n            i = colorizeDefaultDataset(dataset, i);\n        }\n    };\n}\nfunction containsColorsDefinitions(descriptors) {\n    let k;\n    for(k in descriptors){\n        if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction containsColorsDefinition(descriptor) {\n    return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n    return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n    id: 'colors',\n    defaults: {\n        enabled: true,\n        forceOverride: false\n    },\n    beforeLayout (chart, _args, options) {\n        if (!options.enabled) {\n            return;\n        }\n        const { data: { datasets  } , options: chartOptions  } = chart.config;\n        const { elements  } = chartOptions;\n        const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n        if (!options.forceOverride && containsColorDefenition) {\n            return;\n        }\n        const colorizer = getColorizer(chart);\n        datasets.forEach(colorizer);\n    }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n    if (samples >= count) {\n        return data.slice(start, start + count);\n    }\n    const decimated = [];\n    const bucketWidth = (count - 2) / (samples - 2);\n    let sampledIndex = 0;\n    const endIndex = start + count - 1;\n    let a = start;\n    let i, maxAreaPoint, maxArea, area, nextA;\n    decimated[sampledIndex++] = data[a];\n    for(i = 0; i < samples - 2; i++){\n        let avgX = 0;\n        let avgY = 0;\n        let j;\n        const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n        const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n        const avgRangeLength = avgRangeEnd - avgRangeStart;\n        for(j = avgRangeStart; j < avgRangeEnd; j++){\n            avgX += data[j].x;\n            avgY += data[j].y;\n        }\n        avgX /= avgRangeLength;\n        avgY /= avgRangeLength;\n        const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n        const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n        const { x: pointAx , y: pointAy  } = data[a];\n        maxArea = area = -1;\n        for(j = rangeOffs; j < rangeTo; j++){\n            area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n            if (area > maxArea) {\n                maxArea = area;\n                maxAreaPoint = data[j];\n                nextA = j;\n            }\n        }\n        decimated[sampledIndex++] = maxAreaPoint;\n        a = nextA;\n    }\n    decimated[sampledIndex++] = data[endIndex];\n    return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n    let avgX = 0;\n    let countX = 0;\n    let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n    const decimated = [];\n    const endIndex = start + count - 1;\n    const xMin = data[start].x;\n    const xMax = data[endIndex].x;\n    const dx = xMax - xMin;\n    for(i = start; i < start + count; ++i){\n        point = data[i];\n        x = (point.x - xMin) / dx * availableWidth;\n        y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n                minIndex = i;\n            } else if (y > maxY) {\n                maxY = y;\n                maxIndex = i;\n            }\n            avgX = (countX * avgX + point.x) / ++countX;\n        } else {\n            const lastIndex = i - 1;\n            if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n                const intermediateIndex1 = Math.min(minIndex, maxIndex);\n                const intermediateIndex2 = Math.max(minIndex, maxIndex);\n                if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex1],\n                        x: avgX\n                    });\n                }\n                if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex2],\n                        x: avgX\n                    });\n                }\n            }\n            if (i > 0 && lastIndex !== startIndex) {\n                decimated.push(data[lastIndex]);\n            }\n            decimated.push(point);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n            minIndex = maxIndex = startIndex = i;\n        }\n    }\n    return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n    if (dataset._decimated) {\n        const data = dataset._data;\n        delete dataset._decimated;\n        delete dataset._data;\n        Object.defineProperty(dataset, 'data', {\n            configurable: true,\n            enumerable: true,\n            writable: true,\n            value: data\n        });\n    }\n}\nfunction cleanDecimatedData(chart) {\n    chart.data.datasets.forEach((dataset)=>{\n        cleanDecimatedDataset(dataset);\n    });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n    const pointCount = points.length;\n    let start = 0;\n    let count;\n    const { iScale  } = meta;\n    const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n    if (minDefined) {\n        start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n        count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n    } else {\n        count = pointCount - start;\n    }\n    return {\n        start,\n        count\n    };\n}\nvar plugin_decimation = {\n    id: 'decimation',\n    defaults: {\n        algorithm: 'min-max',\n        enabled: false\n    },\n    beforeElementsUpdate: (chart, args, options)=>{\n        if (!options.enabled) {\n            cleanDecimatedData(chart);\n            return;\n        }\n        const availableWidth = chart.width;\n        chart.data.datasets.forEach((dataset, datasetIndex)=>{\n            const { _data , indexAxis  } = dataset;\n            const meta = chart.getDatasetMeta(datasetIndex);\n            const data = _data || dataset.data;\n            if (resolve([\n                indexAxis,\n                chart.options.indexAxis\n            ]) === 'y') {\n                return;\n            }\n            if (!meta.controller.supportsDecimation) {\n                return;\n            }\n            const xAxis = chart.scales[meta.xAxisID];\n            if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n                return;\n            }\n            if (chart.options.parsing) {\n                return;\n            }\n            let { start , count  } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n            const threshold = options.threshold || 4 * availableWidth;\n            if (count <= threshold) {\n                cleanDecimatedDataset(dataset);\n                return;\n            }\n            if (isNullOrUndef(_data)) {\n                dataset._data = data;\n                delete dataset.data;\n                Object.defineProperty(dataset, 'data', {\n                    configurable: true,\n                    enumerable: true,\n                    get: function() {\n                        return this._decimated;\n                    },\n                    set: function(d) {\n                        this._data = d;\n                    }\n                });\n            }\n            let decimated;\n            switch(options.algorithm){\n                case 'lttb':\n                    decimated = lttbDecimation(data, start, count, availableWidth, options);\n                    break;\n                case 'min-max':\n                    decimated = minMaxDecimation(data, start, count, availableWidth);\n                    break;\n                default:\n                    throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n            }\n            dataset._decimated = decimated;\n        });\n    },\n    destroy (chart) {\n        cleanDecimatedData(chart);\n    }\n};\n\nfunction _segments(line, target, property) {\n    const segments = line.segments;\n    const points = line.points;\n    const tpoints = target.points;\n    const parts = [];\n    for (const segment of segments){\n        let { start , end  } = segment;\n        end = _findSegmentEnd(start, end, points);\n        const bounds = _getBounds(property, points[start], points[end], segment.loop);\n        if (!target.segments) {\n            parts.push({\n                source: segment,\n                target: bounds,\n                start: points[start],\n                end: points[end]\n            });\n            continue;\n        }\n        const targetSegments = _boundSegments(target, bounds);\n        for (const tgt of targetSegments){\n            const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n            const fillSources = _boundSegment(segment, points, subBounds);\n            for (const fillSource of fillSources){\n                parts.push({\n                    source: fillSource,\n                    target: tgt,\n                    start: {\n                        [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n                    },\n                    end: {\n                        [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n                    }\n                });\n            }\n        }\n    }\n    return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n    if (loop) {\n        return;\n    }\n    let start = first[property];\n    let end = last[property];\n    if (property === 'angle') {\n        start = _normalizeAngle(start);\n        end = _normalizeAngle(end);\n    }\n    return {\n        property,\n        start,\n        end\n    };\n}\nfunction _pointsFromSegments(boundary, line) {\n    const { x =null , y =null  } = boundary || {};\n    const linePoints = line.points;\n    const points = [];\n    line.segments.forEach(({ start , end  })=>{\n        end = _findSegmentEnd(start, end, linePoints);\n        const first = linePoints[start];\n        const last = linePoints[end];\n        if (y !== null) {\n            points.push({\n                x: first.x,\n                y\n            });\n            points.push({\n                x: last.x,\n                y\n            });\n        } else if (x !== null) {\n            points.push({\n                x,\n                y: first.y\n            });\n            points.push({\n                x,\n                y: last.y\n            });\n        }\n    });\n    return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n    for(; end > start; end--){\n        const point = points[end];\n        if (!isNaN(point.x) && !isNaN(point.y)) {\n            break;\n        }\n    }\n    return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n    if (a && b) {\n        return fn(a[prop], b[prop]);\n    }\n    return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n    let points = [];\n    let _loop = false;\n    if (isArray(boundary)) {\n        _loop = true;\n        points = boundary;\n    } else {\n        points = _pointsFromSegments(boundary, line);\n    }\n    return points.length ? new LineElement({\n        points,\n        options: {\n            tension: 0\n        },\n        _loop,\n        _fullLoop: _loop\n    }) : null;\n}\nfunction _shouldApplyFill(source) {\n    return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n    const source = sources[index];\n    let fill = source.fill;\n    const visited = [\n        index\n    ];\n    let target;\n    if (!propagate) {\n        return fill;\n    }\n    while(fill !== false && visited.indexOf(fill) === -1){\n        if (!isNumberFinite(fill)) {\n            return fill;\n        }\n        target = sources[fill];\n        if (!target) {\n            return false;\n        }\n        if (target.visible) {\n            return fill;\n        }\n        visited.push(fill);\n        fill = target.fill;\n    }\n    return false;\n}\n function _decodeFill(line, index, count) {\n     const fill = parseFillOption(line);\n    if (isObject(fill)) {\n        return isNaN(fill.value) ? false : fill;\n    }\n    let target = parseFloat(fill);\n    if (isNumberFinite(target) && Math.floor(target) === target) {\n        return decodeTargetIndex(fill[0], index, target, count);\n    }\n    return [\n        'origin',\n        'start',\n        'end',\n        'stack',\n        'shape'\n    ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n    if (firstCh === '-' || firstCh === '+') {\n        target = index + target;\n    }\n    if (target === index || target < 0 || target >= count) {\n        return false;\n    }\n    return target;\n}\n function _getTargetPixel(fill, scale) {\n    let pixel = null;\n    if (fill === 'start') {\n        pixel = scale.bottom;\n    } else if (fill === 'end') {\n        pixel = scale.top;\n    } else if (isObject(fill)) {\n        pixel = scale.getPixelForValue(fill.value);\n    } else if (scale.getBasePixel) {\n        pixel = scale.getBasePixel();\n    }\n    return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n    let value;\n    if (fill === 'start') {\n        value = startValue;\n    } else if (fill === 'end') {\n        value = scale.options.reverse ? scale.min : scale.max;\n    } else if (isObject(fill)) {\n        value = fill.value;\n    } else {\n        value = scale.getBaseValue();\n    }\n    return value;\n}\n function parseFillOption(line) {\n    const options = line.options;\n    const fillOption = options.fill;\n    let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n    if (fill === undefined) {\n        fill = !!options.backgroundColor;\n    }\n    if (fill === false || fill === null) {\n        return false;\n    }\n    if (fill === true) {\n        return 'origin';\n    }\n    return fill;\n}\n\nfunction _buildStackLine(source) {\n    const { scale , index , line  } = source;\n    const points = [];\n    const segments = line.segments;\n    const sourcePoints = line.points;\n    const linesBelow = getLinesBelow(scale, index);\n    linesBelow.push(_createBoundaryLine({\n        x: null,\n        y: scale.bottom\n    }, line));\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        for(let j = segment.start; j <= segment.end; j++){\n            addPointsBelow(points, sourcePoints[j], linesBelow);\n        }\n    }\n    return new LineElement({\n        points,\n        options: {}\n    });\n}\n function getLinesBelow(scale, index) {\n    const below = [];\n    const metas = scale.getMatchingVisibleMetas('line');\n    for(let i = 0; i < metas.length; i++){\n        const meta = metas[i];\n        if (meta.index === index) {\n            break;\n        }\n        if (!meta.hidden) {\n            below.unshift(meta.dataset);\n        }\n    }\n    return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n    const postponed = [];\n    for(let j = 0; j < linesBelow.length; j++){\n        const line = linesBelow[j];\n        const { first , last , point  } = findPoint(line, sourcePoint, 'x');\n        if (!point || first && last) {\n            continue;\n        }\n        if (first) {\n            postponed.unshift(point);\n        } else {\n            points.push(point);\n            if (!last) {\n                break;\n            }\n        }\n    }\n    points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n    const point = line.interpolate(sourcePoint, property);\n    if (!point) {\n        return {};\n    }\n    const pointValue = point[property];\n    const segments = line.segments;\n    const linePoints = line.points;\n    let first = false;\n    let last = false;\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        const firstValue = linePoints[segment.start][property];\n        const lastValue = linePoints[segment.end][property];\n        if (_isBetween(pointValue, firstValue, lastValue)) {\n            first = pointValue === firstValue;\n            last = pointValue === lastValue;\n            break;\n        }\n    }\n    return {\n        first,\n        last,\n        point\n    };\n}\n\nclass simpleArc {\n    constructor(opts){\n        this.x = opts.x;\n        this.y = opts.y;\n        this.radius = opts.radius;\n    }\n    pathSegment(ctx, bounds, opts) {\n        const { x , y , radius  } = this;\n        bounds = bounds || {\n            start: 0,\n            end: TAU\n        };\n        ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n        return !opts.bounds;\n    }\n    interpolate(point) {\n        const { x , y , radius  } = this;\n        const angle = point.angle;\n        return {\n            x: x + Math.cos(angle) * radius,\n            y: y + Math.sin(angle) * radius,\n            angle\n        };\n    }\n}\n\nfunction _getTarget(source) {\n    const { chart , fill , line  } = source;\n    if (isNumberFinite(fill)) {\n        return getLineByIndex(chart, fill);\n    }\n    if (fill === 'stack') {\n        return _buildStackLine(source);\n    }\n    if (fill === 'shape') {\n        return true;\n    }\n    const boundary = computeBoundary(source);\n    if (boundary instanceof simpleArc) {\n        return boundary;\n    }\n    return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n    const meta = chart.getDatasetMeta(index);\n    const visible = meta && chart.isDatasetVisible(index);\n    return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n    const scale = source.scale || {};\n    if (scale.getPointPositionForValue) {\n        return computeCircularBoundary(source);\n    }\n    return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n    const { scale ={} , fill  } = source;\n    const pixel = _getTargetPixel(fill, scale);\n    if (isNumberFinite(pixel)) {\n        const horizontal = scale.isHorizontal();\n        return {\n            x: horizontal ? pixel : null,\n            y: horizontal ? null : pixel\n        };\n    }\n    return null;\n}\nfunction computeCircularBoundary(source) {\n    const { scale , fill  } = source;\n    const options = scale.options;\n    const length = scale.getLabels().length;\n    const start = options.reverse ? scale.max : scale.min;\n    const value = _getTargetValue(fill, scale, start);\n    const target = [];\n    if (options.grid.circular) {\n        const center = scale.getPointPositionForValue(0, start);\n        return new simpleArc({\n            x: center.x,\n            y: center.y,\n            radius: scale.getDistanceFromCenterForValue(value)\n        });\n    }\n    for(let i = 0; i < length; ++i){\n        target.push(scale.getPointPositionForValue(i, value));\n    }\n    return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n    const target = _getTarget(source);\n    const { chart , index , line , scale , axis  } = source;\n    const lineOpts = line.options;\n    const fillOption = lineOpts.fill;\n    const color = lineOpts.backgroundColor;\n    const { above =color , below =color  } = fillOption || {};\n    const meta = chart.getDatasetMeta(index);\n    const clip = getDatasetClipArea(chart, meta);\n    if (target && line.points.length) {\n        clipArea(ctx, area);\n        doFill(ctx, {\n            line,\n            target,\n            above,\n            below,\n            area,\n            scale,\n            axis,\n            clip\n        });\n        unclipArea(ctx);\n    }\n}\nfunction doFill(ctx, cfg) {\n    const { line , target , above , below , area , scale , clip  } = cfg;\n    const property = line._loop ? 'angle' : cfg.axis;\n    ctx.save();\n    if (property === 'x' && below !== above) {\n        clipVertical(ctx, target, area.top);\n        fill(ctx, {\n            line,\n            target,\n            color: above,\n            scale,\n            property,\n            clip\n        });\n        ctx.restore();\n        ctx.save();\n        clipVertical(ctx, target, area.bottom);\n    }\n    fill(ctx, {\n        line,\n        target,\n        color: below,\n        scale,\n        property,\n        clip\n    });\n    ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n    const { segments , points  } = target;\n    let first = true;\n    let lineLoop = false;\n    ctx.beginPath();\n    for (const segment of segments){\n        const { start , end  } = segment;\n        const firstPoint = points[start];\n        const lastPoint = points[_findSegmentEnd(start, end, points)];\n        if (first) {\n            ctx.moveTo(firstPoint.x, firstPoint.y);\n            first = false;\n        } else {\n            ctx.lineTo(firstPoint.x, clipY);\n            ctx.lineTo(firstPoint.x, firstPoint.y);\n        }\n        lineLoop = !!target.pathSegment(ctx, segment, {\n            move: lineLoop\n        });\n        if (lineLoop) {\n            ctx.closePath();\n        } else {\n            ctx.lineTo(lastPoint.x, clipY);\n        }\n    }\n    ctx.lineTo(target.first().x, clipY);\n    ctx.closePath();\n    ctx.clip();\n}\nfunction fill(ctx, cfg) {\n    const { line , target , property , color , scale , clip  } = cfg;\n    const segments = _segments(line, target, property);\n    for (const { source: src , target: tgt , start , end  } of segments){\n        const { style: { backgroundColor =color  } = {}  } = src;\n        const notShape = target !== true;\n        ctx.save();\n        ctx.fillStyle = backgroundColor;\n        clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n        ctx.beginPath();\n        const lineLoop = !!line.pathSegment(ctx, src);\n        let loop;\n        if (notShape) {\n            if (lineLoop) {\n                ctx.closePath();\n            } else {\n                interpolatedLineTo(ctx, target, end, property);\n            }\n            const targetLoop = !!target.pathSegment(ctx, tgt, {\n                move: lineLoop,\n                reverse: true\n            });\n            loop = lineLoop && targetLoop;\n            if (!loop) {\n                interpolatedLineTo(ctx, target, start, property);\n            }\n        }\n        ctx.closePath();\n        ctx.fill(loop ? 'evenodd' : 'nonzero');\n        ctx.restore();\n    }\n}\nfunction clipBounds(ctx, scale, clip, bounds) {\n    const chartArea = scale.chart.chartArea;\n    const { property , start , end  } = bounds || {};\n    if (property === 'x' || property === 'y') {\n        let left, top, right, bottom;\n        if (property === 'x') {\n            left = start;\n            top = chartArea.top;\n            right = end;\n            bottom = chartArea.bottom;\n        } else {\n            left = chartArea.left;\n            top = start;\n            right = chartArea.right;\n            bottom = end;\n        }\n        ctx.beginPath();\n        if (clip) {\n            left = Math.max(left, clip.left);\n            right = Math.min(right, clip.right);\n            top = Math.max(top, clip.top);\n            bottom = Math.min(bottom, clip.bottom);\n        }\n        ctx.rect(left, top, right - left, bottom - top);\n        ctx.clip();\n    }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n    const interpolatedPoint = target.interpolate(point, property);\n    if (interpolatedPoint) {\n        ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n    }\n}\n\nvar index = {\n    id: 'filler',\n    afterDatasetsUpdate (chart, _args, options) {\n        const count = (chart.data.datasets || []).length;\n        const sources = [];\n        let meta, i, line, source;\n        for(i = 0; i < count; ++i){\n            meta = chart.getDatasetMeta(i);\n            line = meta.dataset;\n            source = null;\n            if (line && line.options && line instanceof LineElement) {\n                source = {\n                    visible: chart.isDatasetVisible(i),\n                    index: i,\n                    fill: _decodeFill(line, i, count),\n                    chart,\n                    axis: meta.controller.options.indexAxis,\n                    scale: meta.vScale,\n                    line\n                };\n            }\n            meta.$filler = source;\n            sources.push(source);\n        }\n        for(i = 0; i < count; ++i){\n            source = sources[i];\n            if (!source || source.fill === false) {\n                continue;\n            }\n            source.fill = _resolveTarget(sources, i, options.propagate);\n        }\n    },\n    beforeDraw (chart, _args, options) {\n        const draw = options.drawTime === 'beforeDraw';\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        const area = chart.chartArea;\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (!source) {\n                continue;\n            }\n            source.line.updateControlPoints(area, source.axis);\n            if (draw && source.fill) {\n                _drawfill(chart.ctx, source, area);\n            }\n        }\n    },\n    beforeDatasetsDraw (chart, _args, options) {\n        if (options.drawTime !== 'beforeDatasetsDraw') {\n            return;\n        }\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (_shouldApplyFill(source)) {\n                _drawfill(chart.ctx, source, chart.chartArea);\n            }\n        }\n    },\n    beforeDatasetDraw (chart, args, options) {\n        const source = args.meta.$filler;\n        if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n            return;\n        }\n        _drawfill(chart.ctx, source, chart.chartArea);\n    },\n    defaults: {\n        propagate: true,\n        drawTime: 'beforeDatasetDraw'\n    }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n    let { boxHeight =fontSize , boxWidth =fontSize  } = labelOpts;\n    if (labelOpts.usePointStyle) {\n        boxHeight = Math.min(boxHeight, fontSize);\n        boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n    }\n    return {\n        boxWidth,\n        boxHeight,\n        itemHeight: Math.max(fontSize, boxHeight)\n    };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n        super();\n        this._added = false;\n        this.legendHitBoxes = [];\n this._hoveredItem = null;\n        this.doughnutMode = false;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this.legendItems = undefined;\n        this.columnSizes = undefined;\n        this.lineWidths = undefined;\n        this.maxHeight = undefined;\n        this.maxWidth = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this._margins = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight, margins) {\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins;\n        this.setDimensions();\n        this.buildLabels();\n        this.fit();\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = this._margins.left;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = this._margins.top;\n            this.bottom = this.height;\n        }\n    }\n    buildLabels() {\n        const labelOpts = this.options.labels || {};\n        let legendItems = callback(labelOpts.generateLabels, [\n            this.chart\n        ], this) || [];\n        if (labelOpts.filter) {\n            legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n        }\n        if (labelOpts.sort) {\n            legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n        }\n        if (this.options.reverse) {\n            legendItems.reverse();\n        }\n        this.legendItems = legendItems;\n    }\n    fit() {\n        const { options , ctx  } = this;\n        if (!options.display) {\n            this.width = this.height = 0;\n            return;\n        }\n        const labelOpts = options.labels;\n        const labelFont = toFont(labelOpts.font);\n        const fontSize = labelFont.size;\n        const titleHeight = this._computeTitleHeight();\n        const { boxWidth , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        let width, height;\n        ctx.font = labelFont.string;\n        if (this.isHorizontal()) {\n            width = this.maxWidth;\n            height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n        } else {\n            height = this.maxHeight;\n            width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n        }\n        this.width = Math.min(width, options.maxWidth || this.maxWidth);\n        this.height = Math.min(height, options.maxHeight || this.maxHeight);\n    }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n        const { ctx , maxWidth , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const lineWidths = this.lineWidths = [\n            0\n        ];\n        const lineHeight = itemHeight + padding;\n        let totalHeight = titleHeight;\n        ctx.textAlign = 'left';\n        ctx.textBaseline = 'middle';\n        let row = -1;\n        let top = -lineHeight;\n        this.legendItems.forEach((legendItem, i)=>{\n            const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n            if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n                totalHeight += lineHeight;\n                lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n                top += lineHeight;\n                row++;\n            }\n            hitboxes[i] = {\n                left: 0,\n                top,\n                row,\n                width: itemWidth,\n                height: itemHeight\n            };\n            lineWidths[lineWidths.length - 1] += itemWidth + padding;\n        });\n        return totalHeight;\n    }\n    _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n        const { ctx , maxHeight , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const columnSizes = this.columnSizes = [];\n        const heightLimit = maxHeight - titleHeight;\n        let totalWidth = padding;\n        let currentColWidth = 0;\n        let currentColHeight = 0;\n        let left = 0;\n        let col = 0;\n        this.legendItems.forEach((legendItem, i)=>{\n            const { itemWidth , itemHeight  } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n            if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n                totalWidth += currentColWidth + padding;\n                columnSizes.push({\n                    width: currentColWidth,\n                    height: currentColHeight\n                });\n                left += currentColWidth + padding;\n                col++;\n                currentColWidth = currentColHeight = 0;\n            }\n            hitboxes[i] = {\n                left,\n                top: currentColHeight,\n                col,\n                width: itemWidth,\n                height: itemHeight\n            };\n            currentColWidth = Math.max(currentColWidth, itemWidth);\n            currentColHeight += itemHeight + padding;\n        });\n        totalWidth += currentColWidth;\n        columnSizes.push({\n            width: currentColWidth,\n            height: currentColHeight\n        });\n        return totalWidth;\n    }\n    adjustHitBoxes() {\n        if (!this.options.display) {\n            return;\n        }\n        const titleHeight = this._computeTitleHeight();\n        const { legendHitBoxes: hitboxes , options: { align , labels: { padding  } , rtl  }  } = this;\n        const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n        if (this.isHorizontal()) {\n            let row = 0;\n            let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n            for (const hitbox of hitboxes){\n                if (row !== hitbox.row) {\n                    row = hitbox.row;\n                    left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n                }\n                hitbox.top += this.top + titleHeight + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n                left += hitbox.width + padding;\n            }\n        } else {\n            let col = 0;\n            let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n            for (const hitbox of hitboxes){\n                if (hitbox.col !== col) {\n                    col = hitbox.col;\n                    top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n                }\n                hitbox.top = top;\n                hitbox.left += this.left + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n                top += hitbox.height + padding;\n            }\n        }\n    }\n    isHorizontal() {\n        return this.options.position === 'top' || this.options.position === 'bottom';\n    }\n    draw() {\n        if (this.options.display) {\n            const ctx = this.ctx;\n            clipArea(ctx, this);\n            this._draw();\n            unclipArea(ctx);\n        }\n    }\n _draw() {\n        const { options: opts , columnSizes , lineWidths , ctx  } = this;\n        const { align , labels: labelOpts  } = opts;\n        const defaultColor = defaults.color;\n        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n        const labelFont = toFont(labelOpts.font);\n        const { padding  } = labelOpts;\n        const fontSize = labelFont.size;\n        const halfFontSize = fontSize / 2;\n        let cursor;\n        this.drawTitle();\n        ctx.textAlign = rtlHelper.textAlign('left');\n        ctx.textBaseline = 'middle';\n        ctx.lineWidth = 0.5;\n        ctx.font = labelFont.string;\n        const { boxWidth , boxHeight , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        const drawLegendBox = function(x, y, legendItem) {\n            if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n                return;\n            }\n            ctx.save();\n            const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n            ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n            ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n            ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n            ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n            ctx.lineWidth = lineWidth;\n            ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n            ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n            if (labelOpts.usePointStyle) {\n                const drawOptions = {\n                    radius: boxHeight * Math.SQRT2 / 2,\n                    pointStyle: legendItem.pointStyle,\n                    rotation: legendItem.rotation,\n                    borderWidth: lineWidth\n                };\n                const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n                const centerY = y + halfFontSize;\n                drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n            } else {\n                const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n                const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n                const borderRadius = toTRBLCorners(legendItem.borderRadius);\n                ctx.beginPath();\n                if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                    addRoundedRectPath(ctx, {\n                        x: xBoxLeft,\n                        y: yBoxTop,\n                        w: boxWidth,\n                        h: boxHeight,\n                        radius: borderRadius\n                    });\n                } else {\n                    ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n                }\n                ctx.fill();\n                if (lineWidth !== 0) {\n                    ctx.stroke();\n                }\n            }\n            ctx.restore();\n        };\n        const fillText = function(x, y, legendItem) {\n            renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n                strikethrough: legendItem.hidden,\n                textAlign: rtlHelper.textAlign(legendItem.textAlign)\n            });\n        };\n        const isHorizontal = this.isHorizontal();\n        const titleHeight = this._computeTitleHeight();\n        if (isHorizontal) {\n            cursor = {\n                x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n                y: this.top + padding + titleHeight,\n                line: 0\n            };\n        } else {\n            cursor = {\n                x: this.left + padding,\n                y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n                line: 0\n            };\n        }\n        overrideTextDirection(this.ctx, opts.textDirection);\n        const lineHeight = itemHeight + padding;\n        this.legendItems.forEach((legendItem, i)=>{\n            ctx.strokeStyle = legendItem.fontColor;\n            ctx.fillStyle = legendItem.fontColor;\n            const textWidth = ctx.measureText(legendItem.text).width;\n            const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n            const width = boxWidth + halfFontSize + textWidth;\n            let x = cursor.x;\n            let y = cursor.y;\n            rtlHelper.setWidth(this.width);\n            if (isHorizontal) {\n                if (i > 0 && x + width + padding > this.right) {\n                    y = cursor.y += lineHeight;\n                    cursor.line++;\n                    x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n                }\n            } else if (i > 0 && y + lineHeight > this.bottom) {\n                x = cursor.x = x + columnSizes[cursor.line].width + padding;\n                cursor.line++;\n                y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n            }\n            const realX = rtlHelper.x(x);\n            drawLegendBox(realX, y, legendItem);\n            x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n            fillText(rtlHelper.x(x), y, legendItem);\n            if (isHorizontal) {\n                cursor.x += width + padding;\n            } else if (typeof legendItem.text !== 'string') {\n                const fontLineHeight = labelFont.lineHeight;\n                cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n            } else {\n                cursor.y += lineHeight;\n            }\n        });\n        restoreTextDirection(this.ctx, opts.textDirection);\n    }\n drawTitle() {\n        const opts = this.options;\n        const titleOpts = opts.title;\n        const titleFont = toFont(titleOpts.font);\n        const titlePadding = toPadding(titleOpts.padding);\n        if (!titleOpts.display) {\n            return;\n        }\n        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n        const ctx = this.ctx;\n        const position = titleOpts.position;\n        const halfFontSize = titleFont.size / 2;\n        const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n        let y;\n        let left = this.left;\n        let maxWidth = this.width;\n        if (this.isHorizontal()) {\n            maxWidth = Math.max(...this.lineWidths);\n            y = this.top + topPaddingPlusHalfFontSize;\n            left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n        } else {\n            const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n            y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n        }\n        const x = _alignStartEnd(position, left, left + maxWidth);\n        ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n        ctx.textBaseline = 'middle';\n        ctx.strokeStyle = titleOpts.color;\n        ctx.fillStyle = titleOpts.color;\n        ctx.font = titleFont.string;\n        renderText(ctx, titleOpts.text, x, y, titleFont);\n    }\n _computeTitleHeight() {\n        const titleOpts = this.options.title;\n        const titleFont = toFont(titleOpts.font);\n        const titlePadding = toPadding(titleOpts.padding);\n        return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n    }\n _getLegendItemAt(x, y) {\n        let i, hitBox, lh;\n        if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n            lh = this.legendHitBoxes;\n            for(i = 0; i < lh.length; ++i){\n                hitBox = lh[i];\n                if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n                    return this.legendItems[i];\n                }\n            }\n        }\n        return null;\n    }\n handleEvent(e) {\n        const opts = this.options;\n        if (!isListened(e.type, opts)) {\n            return;\n        }\n        const hoveredItem = this._getLegendItemAt(e.x, e.y);\n        if (e.type === 'mousemove' || e.type === 'mouseout') {\n            const previous = this._hoveredItem;\n            const sameItem = itemsEqual(previous, hoveredItem);\n            if (previous && !sameItem) {\n                callback(opts.onLeave, [\n                    e,\n                    previous,\n                    this\n                ], this);\n            }\n            this._hoveredItem = hoveredItem;\n            if (hoveredItem && !sameItem) {\n                callback(opts.onHover, [\n                    e,\n                    hoveredItem,\n                    this\n                ], this);\n            }\n        } else if (hoveredItem) {\n            callback(opts.onClick, [\n                e,\n                hoveredItem,\n                this\n            ], this);\n        }\n    }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n    const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n    const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n    return {\n        itemWidth,\n        itemHeight\n    };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n    let legendItemText = legendItem.text;\n    if (legendItemText && typeof legendItemText !== 'string') {\n        legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n    }\n    return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n    let itemHeight = _itemHeight;\n    if (typeof legendItem.text !== 'string') {\n        itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n    }\n    return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n    const labelHeight = legendItem.text ? legendItem.text.length : 0;\n    return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n    if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n        return true;\n    }\n    if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n        return true;\n    }\n    return false;\n}\nvar plugin_legend = {\n    id: 'legend',\n _element: Legend,\n    start (chart, _args, options) {\n        const legend = chart.legend = new Legend({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, legend, options);\n        layouts.addBox(chart, legend);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, chart.legend);\n        delete chart.legend;\n    },\n    beforeUpdate (chart, _args, options) {\n        const legend = chart.legend;\n        layouts.configure(chart, legend, options);\n        legend.options = options;\n    },\n    afterUpdate (chart) {\n        const legend = chart.legend;\n        legend.buildLabels();\n        legend.adjustHitBoxes();\n    },\n    afterEvent (chart, args) {\n        if (!args.replay) {\n            chart.legend.handleEvent(args.event);\n        }\n    },\n    defaults: {\n        display: true,\n        position: 'top',\n        align: 'center',\n        fullSize: true,\n        reverse: false,\n        weight: 1000,\n        onClick (e, legendItem, legend) {\n            const index = legendItem.datasetIndex;\n            const ci = legend.chart;\n            if (ci.isDatasetVisible(index)) {\n                ci.hide(index);\n                legendItem.hidden = true;\n            } else {\n                ci.show(index);\n                legendItem.hidden = false;\n            }\n        },\n        onHover: null,\n        onLeave: null,\n        labels: {\n            color: (ctx)=>ctx.chart.options.color,\n            boxWidth: 40,\n            padding: 10,\n            generateLabels (chart) {\n                const datasets = chart.data.datasets;\n                const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n                return chart._getSortedDatasetMetas().map((meta)=>{\n                    const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n                    const borderWidth = toPadding(style.borderWidth);\n                    return {\n                        text: datasets[meta.index].label,\n                        fillStyle: style.backgroundColor,\n                        fontColor: color,\n                        hidden: !meta.visible,\n                        lineCap: style.borderCapStyle,\n                        lineDash: style.borderDash,\n                        lineDashOffset: style.borderDashOffset,\n                        lineJoin: style.borderJoinStyle,\n                        lineWidth: (borderWidth.width + borderWidth.height) / 4,\n                        strokeStyle: style.borderColor,\n                        pointStyle: pointStyle || style.pointStyle,\n                        rotation: style.rotation,\n                        textAlign: textAlign || style.textAlign,\n                        borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                        datasetIndex: meta.index\n                    };\n                }, this);\n            }\n        },\n        title: {\n            color: (ctx)=>ctx.chart.options.color,\n            display: false,\n            position: 'center',\n            text: ''\n        }\n    },\n    descriptors: {\n        _scriptable: (name)=>!name.startsWith('on'),\n        labels: {\n            _scriptable: (name)=>![\n                    'generateLabels',\n                    'filter',\n                    'sort'\n                ].includes(name)\n        }\n    }\n};\n\nclass Title extends Element {\n constructor(config){\n        super();\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this._padding = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight) {\n        const opts = this.options;\n        this.left = 0;\n        this.top = 0;\n        if (!opts.display) {\n            this.width = this.height = this.right = this.bottom = 0;\n            return;\n        }\n        this.width = this.right = maxWidth;\n        this.height = this.bottom = maxHeight;\n        const lineCount = isArray(opts.text) ? opts.text.length : 1;\n        this._padding = toPadding(opts.padding);\n        const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n        if (this.isHorizontal()) {\n            this.height = textSize;\n        } else {\n            this.width = textSize;\n        }\n    }\n    isHorizontal() {\n        const pos = this.options.position;\n        return pos === 'top' || pos === 'bottom';\n    }\n    _drawArgs(offset) {\n        const { top , left , bottom , right , options  } = this;\n        const align = options.align;\n        let rotation = 0;\n        let maxWidth, titleX, titleY;\n        if (this.isHorizontal()) {\n            titleX = _alignStartEnd(align, left, right);\n            titleY = top + offset;\n            maxWidth = right - left;\n        } else {\n            if (options.position === 'left') {\n                titleX = left + offset;\n                titleY = _alignStartEnd(align, bottom, top);\n                rotation = PI * -0.5;\n            } else {\n                titleX = right - offset;\n                titleY = _alignStartEnd(align, top, bottom);\n                rotation = PI * 0.5;\n            }\n            maxWidth = bottom - top;\n        }\n        return {\n            titleX,\n            titleY,\n            maxWidth,\n            rotation\n        };\n    }\n    draw() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        if (!opts.display) {\n            return;\n        }\n        const fontOpts = toFont(opts.font);\n        const lineHeight = fontOpts.lineHeight;\n        const offset = lineHeight / 2 + this._padding.top;\n        const { titleX , titleY , maxWidth , rotation  } = this._drawArgs(offset);\n        renderText(ctx, opts.text, 0, 0, fontOpts, {\n            color: opts.color,\n            maxWidth,\n            rotation,\n            textAlign: _toLeftRightCenter(opts.align),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n}\nfunction createTitle(chart, titleOpts) {\n    const title = new Title({\n        ctx: chart.ctx,\n        options: titleOpts,\n        chart\n    });\n    layouts.configure(chart, title, titleOpts);\n    layouts.addBox(chart, title);\n    chart.titleBlock = title;\n}\nvar plugin_title = {\n    id: 'title',\n _element: Title,\n    start (chart, _args, options) {\n        createTitle(chart, options);\n    },\n    stop (chart) {\n        const titleBlock = chart.titleBlock;\n        layouts.removeBox(chart, titleBlock);\n        delete chart.titleBlock;\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = chart.titleBlock;\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'bold'\n        },\n        fullSize: true,\n        padding: 10,\n        position: 'top',\n        text: '',\n        weight: 2000\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n    id: 'subtitle',\n    start (chart, _args, options) {\n        const title = new Title({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, title, options);\n        layouts.addBox(chart, title);\n        map.set(chart, title);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, map.get(chart));\n        map.delete(chart);\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = map.get(chart);\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'normal'\n        },\n        fullSize: true,\n        padding: 0,\n        position: 'top',\n        text: '',\n        weight: 1500\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst positioners = {\n average (items) {\n        if (!items.length) {\n            return false;\n        }\n        let i, len;\n        let xSet = new Set();\n        let y = 0;\n        let count = 0;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const pos = el.tooltipPosition();\n                xSet.add(pos.x);\n                y += pos.y;\n                ++count;\n            }\n        }\n        if (count === 0 || xSet.size === 0) {\n            return false;\n        }\n        const xAverage = [\n            ...xSet\n        ].reduce((a, b)=>a + b) / xSet.size;\n        return {\n            x: xAverage,\n            y: y / count\n        };\n    },\n nearest (items, eventPosition) {\n        if (!items.length) {\n            return false;\n        }\n        let x = eventPosition.x;\n        let y = eventPosition.y;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let i, len, nearestElement;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const center = el.getCenterPoint();\n                const d = distanceBetweenPoints(eventPosition, center);\n                if (d < minDistance) {\n                    minDistance = d;\n                    nearestElement = el;\n                }\n            }\n        }\n        if (nearestElement) {\n            const tp = nearestElement.tooltipPosition();\n            x = tp.x;\n            y = tp.y;\n        }\n        return {\n            x,\n            y\n        };\n    }\n};\nfunction pushOrConcat(base, toPush) {\n    if (toPush) {\n        if (isArray(toPush)) {\n            Array.prototype.push.apply(base, toPush);\n        } else {\n            base.push(toPush);\n        }\n    }\n    return base;\n}\n function splitNewlines(str) {\n    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n        return str.split('\\n');\n    }\n    return str;\n}\n function createTooltipItem(chart, item) {\n    const { element , datasetIndex , index  } = item;\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n    const { label , value  } = controller.getLabelAndValue(index);\n    return {\n        chart,\n        label,\n        parsed: controller.getParsed(index),\n        raw: chart.data.datasets[datasetIndex].data[index],\n        formattedValue: value,\n        dataset: controller.getDataset(),\n        dataIndex: index,\n        datasetIndex,\n        element\n    };\n}\n function getTooltipSize(tooltip, options) {\n    const ctx = tooltip.chart.ctx;\n    const { body , footer , title  } = tooltip;\n    const { boxWidth , boxHeight  } = options;\n    const bodyFont = toFont(options.bodyFont);\n    const titleFont = toFont(options.titleFont);\n    const footerFont = toFont(options.footerFont);\n    const titleLineCount = title.length;\n    const footerLineCount = footer.length;\n    const bodyLineItemCount = body.length;\n    const padding = toPadding(options.padding);\n    let height = padding.height;\n    let width = 0;\n    let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n    combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n    if (titleLineCount) {\n        height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n    }\n    if (combinedBodyLength) {\n        const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n        height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n    }\n    if (footerLineCount) {\n        height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n    }\n    let widthPadding = 0;\n    const maxLineWidth = function(line) {\n        width = Math.max(width, ctx.measureText(line).width + widthPadding);\n    };\n    ctx.save();\n    ctx.font = titleFont.string;\n    each(tooltip.title, maxLineWidth);\n    ctx.font = bodyFont.string;\n    each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n    widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n    each(body, (bodyItem)=>{\n        each(bodyItem.before, maxLineWidth);\n        each(bodyItem.lines, maxLineWidth);\n        each(bodyItem.after, maxLineWidth);\n    });\n    widthPadding = 0;\n    ctx.font = footerFont.string;\n    each(tooltip.footer, maxLineWidth);\n    ctx.restore();\n    width += padding.width;\n    return {\n        width,\n        height\n    };\n}\nfunction determineYAlign(chart, size) {\n    const { y , height  } = size;\n    if (y < height / 2) {\n        return 'top';\n    } else if (y > chart.height - height / 2) {\n        return 'bottom';\n    }\n    return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n    const { x , width  } = size;\n    const caret = options.caretSize + options.caretPadding;\n    if (xAlign === 'left' && x + width + caret > chart.width) {\n        return true;\n    }\n    if (xAlign === 'right' && x - width - caret < 0) {\n        return true;\n    }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n    const { x , width  } = size;\n    const { width: chartWidth , chartArea: { left , right  }  } = chart;\n    let xAlign = 'center';\n    if (yAlign === 'center') {\n        xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n    } else if (x <= width / 2) {\n        xAlign = 'left';\n    } else if (x >= chartWidth - width / 2) {\n        xAlign = 'right';\n    }\n    if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n        xAlign = 'center';\n    }\n    return xAlign;\n}\n function determineAlignment(chart, options, size) {\n    const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n    return {\n        xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n        yAlign\n    };\n}\nfunction alignX(size, xAlign) {\n    let { x , width  } = size;\n    if (xAlign === 'right') {\n        x -= width;\n    } else if (xAlign === 'center') {\n        x -= width / 2;\n    }\n    return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n    let { y , height  } = size;\n    if (yAlign === 'top') {\n        y += paddingAndSize;\n    } else if (yAlign === 'bottom') {\n        y -= height + paddingAndSize;\n    } else {\n        y -= height / 2;\n    }\n    return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n    const { caretSize , caretPadding , cornerRadius  } = options;\n    const { xAlign , yAlign  } = alignment;\n    const paddingAndSize = caretSize + caretPadding;\n    const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);\n    let x = alignX(size, xAlign);\n    const y = alignY(size, yAlign, paddingAndSize);\n    if (yAlign === 'center') {\n        if (xAlign === 'left') {\n            x += paddingAndSize;\n        } else if (xAlign === 'right') {\n            x -= paddingAndSize;\n        }\n    } else if (xAlign === 'left') {\n        x -= Math.max(topLeft, bottomLeft) + caretSize;\n    } else if (xAlign === 'right') {\n        x += Math.max(topRight, bottomRight) + caretSize;\n    }\n    return {\n        x: _limitValue(x, 0, chart.width - size.width),\n        y: _limitValue(y, 0, chart.height - size.height)\n    };\n}\nfunction getAlignedX(tooltip, align, options) {\n    const padding = toPadding(options.padding);\n    return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n    return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n    return createContext(parent, {\n        tooltip,\n        tooltipItems,\n        type: 'tooltip'\n    });\n}\nfunction overrideCallbacks(callbacks, context) {\n    const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n    return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n    beforeTitle: noop,\n    title (tooltipItems) {\n        if (tooltipItems.length > 0) {\n            const item = tooltipItems[0];\n            const labels = item.chart.data.labels;\n            const labelCount = labels ? labels.length : 0;\n            if (this && this.options && this.options.mode === 'dataset') {\n                return item.dataset.label || '';\n            } else if (item.label) {\n                return item.label;\n            } else if (labelCount > 0 && item.dataIndex < labelCount) {\n                return labels[item.dataIndex];\n            }\n        }\n        return '';\n    },\n    afterTitle: noop,\n    beforeBody: noop,\n    beforeLabel: noop,\n    label (tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n            return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n            label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n            label += value;\n        }\n        return label;\n    },\n    labelColor (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            borderColor: options.borderColor,\n            backgroundColor: options.backgroundColor,\n            borderWidth: options.borderWidth,\n            borderDash: options.borderDash,\n            borderDashOffset: options.borderDashOffset,\n            borderRadius: 0\n        };\n    },\n    labelTextColor () {\n        return this.options.bodyColor;\n    },\n    labelPointStyle (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            pointStyle: options.pointStyle,\n            rotation: options.rotation\n        };\n    },\n    afterLabel: noop,\n    afterBody: noop,\n    beforeFooter: noop,\n    footer: noop,\n    afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n    const result = callbacks[name].call(ctx, arg);\n    if (typeof result === 'undefined') {\n        return defaultCallbacks[name].call(ctx, arg);\n    }\n    return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n    constructor(config){\n        super();\n        this.opacity = 0;\n        this._active = [];\n        this._eventPosition = undefined;\n        this._size = undefined;\n        this._cachedAnimations = undefined;\n        this._tooltipItems = [];\n        this.$animations = undefined;\n        this.$context = undefined;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.dataPoints = undefined;\n        this.title = undefined;\n        this.beforeBody = undefined;\n        this.body = undefined;\n        this.afterBody = undefined;\n        this.footer = undefined;\n        this.xAlign = undefined;\n        this.yAlign = undefined;\n        this.x = undefined;\n        this.y = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this.caretX = undefined;\n        this.caretY = undefined;\n        this.labelColors = undefined;\n        this.labelPointStyles = undefined;\n        this.labelTextColors = undefined;\n    }\n    initialize(options) {\n        this.options = options;\n        this._cachedAnimations = undefined;\n        this.$context = undefined;\n    }\n _resolveAnimations() {\n        const cached = this._cachedAnimations;\n        if (cached) {\n            return cached;\n        }\n        const chart = this.chart;\n        const options = this.options.setContext(this.getContext());\n        const opts = options.enabled && chart.options.animation && options.animations;\n        const animations = new Animations(this.chart, opts);\n        if (opts._cacheable) {\n            this._cachedAnimations = Object.freeze(animations);\n        }\n        return animations;\n    }\n getContext() {\n        return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n    }\n    getTitle(context, options) {\n        const { callbacks  } = options;\n        const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n        const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n        const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n        lines = pushOrConcat(lines, splitNewlines(title));\n        lines = pushOrConcat(lines, splitNewlines(afterTitle));\n        return lines;\n    }\n    getBeforeBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n    }\n    getBody(tooltipItems, options) {\n        const { callbacks  } = options;\n        const bodyItems = [];\n        each(tooltipItems, (context)=>{\n            const bodyItem = {\n                before: [],\n                lines: [],\n                after: []\n            };\n            const scoped = overrideCallbacks(callbacks, context);\n            pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n            pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n            pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n            bodyItems.push(bodyItem);\n        });\n        return bodyItems;\n    }\n    getAfterBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n    }\n    getFooter(tooltipItems, options) {\n        const { callbacks  } = options;\n        const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n        const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n        const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n        lines = pushOrConcat(lines, splitNewlines(footer));\n        lines = pushOrConcat(lines, splitNewlines(afterFooter));\n        return lines;\n    }\n _createItems(options) {\n        const active = this._active;\n        const data = this.chart.data;\n        const labelColors = [];\n        const labelPointStyles = [];\n        const labelTextColors = [];\n        let tooltipItems = [];\n        let i, len;\n        for(i = 0, len = active.length; i < len; ++i){\n            tooltipItems.push(createTooltipItem(this.chart, active[i]));\n        }\n        if (options.filter) {\n            tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n        }\n        if (options.itemSort) {\n            tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n        }\n        each(tooltipItems, (context)=>{\n            const scoped = overrideCallbacks(options.callbacks, context);\n            labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n            labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n            labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n        });\n        this.labelColors = labelColors;\n        this.labelPointStyles = labelPointStyles;\n        this.labelTextColors = labelTextColors;\n        this.dataPoints = tooltipItems;\n        return tooltipItems;\n    }\n    update(changed, replay) {\n        const options = this.options.setContext(this.getContext());\n        const active = this._active;\n        let properties;\n        let tooltipItems = [];\n        if (!active.length) {\n            if (this.opacity !== 0) {\n                properties = {\n                    opacity: 0\n                };\n            }\n        } else {\n            const position = positioners[options.position].call(this, active, this._eventPosition);\n            tooltipItems = this._createItems(options);\n            this.title = this.getTitle(tooltipItems, options);\n            this.beforeBody = this.getBeforeBody(tooltipItems, options);\n            this.body = this.getBody(tooltipItems, options);\n            this.afterBody = this.getAfterBody(tooltipItems, options);\n            this.footer = this.getFooter(tooltipItems, options);\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, size);\n            const alignment = determineAlignment(this.chart, options, positionAndSize);\n            const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n            this.xAlign = alignment.xAlign;\n            this.yAlign = alignment.yAlign;\n            properties = {\n                opacity: 1,\n                x: backgroundPoint.x,\n                y: backgroundPoint.y,\n                width: size.width,\n                height: size.height,\n                caretX: position.x,\n                caretY: position.y\n            };\n        }\n        this._tooltipItems = tooltipItems;\n        this.$context = undefined;\n        if (properties) {\n            this._resolveAnimations().update(this, properties);\n        }\n        if (changed && options.external) {\n            options.external.call(this, {\n                chart: this.chart,\n                tooltip: this,\n                replay\n            });\n        }\n    }\n    drawCaret(tooltipPoint, ctx, size, options) {\n        const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n        ctx.lineTo(caretPosition.x1, caretPosition.y1);\n        ctx.lineTo(caretPosition.x2, caretPosition.y2);\n        ctx.lineTo(caretPosition.x3, caretPosition.y3);\n    }\n    getCaretPosition(tooltipPoint, size, options) {\n        const { xAlign , yAlign  } = this;\n        const { caretSize , cornerRadius  } = options;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);\n        const { x: ptX , y: ptY  } = tooltipPoint;\n        const { width , height  } = size;\n        let x1, x2, x3, y1, y2, y3;\n        if (yAlign === 'center') {\n            y2 = ptY + height / 2;\n            if (xAlign === 'left') {\n                x1 = ptX;\n                x2 = x1 - caretSize;\n                y1 = y2 + caretSize;\n                y3 = y2 - caretSize;\n            } else {\n                x1 = ptX + width;\n                x2 = x1 + caretSize;\n                y1 = y2 - caretSize;\n                y3 = y2 + caretSize;\n            }\n            x3 = x1;\n        } else {\n            if (xAlign === 'left') {\n                x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n            } else if (xAlign === 'right') {\n                x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n            } else {\n                x2 = this.caretX;\n            }\n            if (yAlign === 'top') {\n                y1 = ptY;\n                y2 = y1 - caretSize;\n                x1 = x2 - caretSize;\n                x3 = x2 + caretSize;\n            } else {\n                y1 = ptY + height;\n                y2 = y1 + caretSize;\n                x1 = x2 + caretSize;\n                x3 = x2 - caretSize;\n            }\n            y3 = y1;\n        }\n        return {\n            x1,\n            x2,\n            x3,\n            y1,\n            y2,\n            y3\n        };\n    }\n    drawTitle(pt, ctx, options) {\n        const title = this.title;\n        const length = title.length;\n        let titleFont, titleSpacing, i;\n        if (length) {\n            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.titleAlign, options);\n            ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n            ctx.textBaseline = 'middle';\n            titleFont = toFont(options.titleFont);\n            titleSpacing = options.titleSpacing;\n            ctx.fillStyle = options.titleColor;\n            ctx.font = titleFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n                pt.y += titleFont.lineHeight + titleSpacing;\n                if (i + 1 === length) {\n                    pt.y += options.titleMarginBottom - titleSpacing;\n                }\n            }\n        }\n    }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n        const labelColor = this.labelColors[i];\n        const labelPointStyle = this.labelPointStyles[i];\n        const { boxHeight , boxWidth  } = options;\n        const bodyFont = toFont(options.bodyFont);\n        const colorX = getAlignedX(this, 'left', options);\n        const rtlColorX = rtlHelper.x(colorX);\n        const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n        const colorY = pt.y + yOffSet;\n        if (options.usePointStyle) {\n            const drawOptions = {\n                radius: Math.min(boxWidth, boxHeight) / 2,\n                pointStyle: labelPointStyle.pointStyle,\n                rotation: labelPointStyle.rotation,\n                borderWidth: 1\n            };\n            const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n            const centerY = colorY + boxHeight / 2;\n            ctx.strokeStyle = options.multiKeyBackground;\n            ctx.fillStyle = options.multiKeyBackground;\n            drawPoint(ctx, drawOptions, centerX, centerY);\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.fillStyle = labelColor.backgroundColor;\n            drawPoint(ctx, drawOptions, centerX, centerY);\n        } else {\n            ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.setLineDash(labelColor.borderDash || []);\n            ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n            const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n            const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n            const borderRadius = toTRBLCorners(labelColor.borderRadius);\n            if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                ctx.beginPath();\n                ctx.fillStyle = options.multiKeyBackground;\n                addRoundedRectPath(ctx, {\n                    x: outerX,\n                    y: colorY,\n                    w: boxWidth,\n                    h: boxHeight,\n                    radius: borderRadius\n                });\n                ctx.fill();\n                ctx.stroke();\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.beginPath();\n                addRoundedRectPath(ctx, {\n                    x: innerX,\n                    y: colorY + 1,\n                    w: boxWidth - 2,\n                    h: boxHeight - 2,\n                    radius: borderRadius\n                });\n                ctx.fill();\n            } else {\n                ctx.fillStyle = options.multiKeyBackground;\n                ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n            }\n        }\n        ctx.fillStyle = this.labelTextColors[i];\n    }\n    drawBody(pt, ctx, options) {\n        const { body  } = this;\n        const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding  } = options;\n        const bodyFont = toFont(options.bodyFont);\n        let bodyLineHeight = bodyFont.lineHeight;\n        let xLinePadding = 0;\n        const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n        const fillLineOfText = function(line) {\n            ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n            pt.y += bodyLineHeight + bodySpacing;\n        };\n        const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n        let bodyItem, textColor, lines, i, j, ilen, jlen;\n        ctx.textAlign = bodyAlign;\n        ctx.textBaseline = 'middle';\n        ctx.font = bodyFont.string;\n        pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n        ctx.fillStyle = options.bodyColor;\n        each(this.beforeBody, fillLineOfText);\n        xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n        for(i = 0, ilen = body.length; i < ilen; ++i){\n            bodyItem = body[i];\n            textColor = this.labelTextColors[i];\n            ctx.fillStyle = textColor;\n            each(bodyItem.before, fillLineOfText);\n            lines = bodyItem.lines;\n            if (displayColors && lines.length) {\n                this._drawColorBox(ctx, pt, i, rtlHelper, options);\n                bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n            }\n            for(j = 0, jlen = lines.length; j < jlen; ++j){\n                fillLineOfText(lines[j]);\n                bodyLineHeight = bodyFont.lineHeight;\n            }\n            each(bodyItem.after, fillLineOfText);\n        }\n        xLinePadding = 0;\n        bodyLineHeight = bodyFont.lineHeight;\n        each(this.afterBody, fillLineOfText);\n        pt.y -= bodySpacing;\n    }\n    drawFooter(pt, ctx, options) {\n        const footer = this.footer;\n        const length = footer.length;\n        let footerFont, i;\n        if (length) {\n            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.footerAlign, options);\n            pt.y += options.footerMarginTop;\n            ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n            ctx.textBaseline = 'middle';\n            footerFont = toFont(options.footerFont);\n            ctx.fillStyle = options.footerColor;\n            ctx.font = footerFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n                pt.y += footerFont.lineHeight + options.footerSpacing;\n            }\n        }\n    }\n    drawBackground(pt, ctx, tooltipSize, options) {\n        const { xAlign , yAlign  } = this;\n        const { x , y  } = pt;\n        const { width , height  } = tooltipSize;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(options.cornerRadius);\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.beginPath();\n        ctx.moveTo(x + topLeft, y);\n        if (yAlign === 'top') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width - topRight, y);\n        ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n        if (yAlign === 'center' && xAlign === 'right') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width, y + height - bottomRight);\n        ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n        if (yAlign === 'bottom') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + bottomLeft, y + height);\n        ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n        if (yAlign === 'center' && xAlign === 'left') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x, y + topLeft);\n        ctx.quadraticCurveTo(x, y, x + topLeft, y);\n        ctx.closePath();\n        ctx.fill();\n        if (options.borderWidth > 0) {\n            ctx.stroke();\n        }\n    }\n _updateAnimationTarget(options) {\n        const chart = this.chart;\n        const anims = this.$animations;\n        const animX = anims && anims.x;\n        const animY = anims && anims.y;\n        if (animX || animY) {\n            const position = positioners[options.position].call(this, this._active, this._eventPosition);\n            if (!position) {\n                return;\n            }\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, this._size);\n            const alignment = determineAlignment(chart, options, positionAndSize);\n            const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n            if (animX._to !== point.x || animY._to !== point.y) {\n                this.xAlign = alignment.xAlign;\n                this.yAlign = alignment.yAlign;\n                this.width = size.width;\n                this.height = size.height;\n                this.caretX = position.x;\n                this.caretY = position.y;\n                this._resolveAnimations().update(this, point);\n            }\n        }\n    }\n _willRender() {\n        return !!this.opacity;\n    }\n    draw(ctx) {\n        const options = this.options.setContext(this.getContext());\n        let opacity = this.opacity;\n        if (!opacity) {\n            return;\n        }\n        this._updateAnimationTarget(options);\n        const tooltipSize = {\n            width: this.width,\n            height: this.height\n        };\n        const pt = {\n            x: this.x,\n            y: this.y\n        };\n        opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n        const padding = toPadding(options.padding);\n        const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n        if (options.enabled && hasTooltipContent) {\n            ctx.save();\n            ctx.globalAlpha = opacity;\n            this.drawBackground(pt, ctx, tooltipSize, options);\n            overrideTextDirection(ctx, options.textDirection);\n            pt.y += padding.top;\n            this.drawTitle(pt, ctx, options);\n            this.drawBody(pt, ctx, options);\n            this.drawFooter(pt, ctx, options);\n            restoreTextDirection(ctx, options.textDirection);\n            ctx.restore();\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements, eventPosition) {\n        const lastActive = this._active;\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.chart.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('Cannot find a dataset at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !_elementsEqual(lastActive, active);\n        const positionChanged = this._positionChanged(active, eventPosition);\n        if (changed || positionChanged) {\n            this._active = active;\n            this._eventPosition = eventPosition;\n            this._ignoreReplayEvents = true;\n            this.update(true);\n        }\n    }\n handleEvent(e, replay, inChartArea = true) {\n        if (replay && this._ignoreReplayEvents) {\n            return false;\n        }\n        this._ignoreReplayEvents = false;\n        const options = this.options;\n        const lastActive = this._active || [];\n        const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n        const positionChanged = this._positionChanged(active, e);\n        const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n        if (changed) {\n            this._active = active;\n            if (options.enabled || options.external) {\n                this._eventPosition = {\n                    x: e.x,\n                    y: e.y\n                };\n                this.update(true, replay);\n            }\n        }\n        return changed;\n    }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n        const options = this.options;\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n        }\n        const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n        if (options.reverse) {\n            active.reverse();\n        }\n        return active;\n    }\n _positionChanged(active, e) {\n        const { caretX , caretY , options  } = this;\n        const position = positioners[options.position].call(this, active, e);\n        return position !== false && (caretX !== position.x || caretY !== position.y);\n    }\n}\nvar plugin_tooltip = {\n    id: 'tooltip',\n    _element: Tooltip,\n    positioners,\n    afterInit (chart, _args, options) {\n        if (options) {\n            chart.tooltip = new Tooltip({\n                chart,\n                options\n            });\n        }\n    },\n    beforeUpdate (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    reset (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    afterDraw (chart) {\n        const tooltip = chart.tooltip;\n        if (tooltip && tooltip._willRender()) {\n            const args = {\n                tooltip\n            };\n            if (chart.notifyPlugins('beforeTooltipDraw', {\n                ...args,\n                cancelable: true\n            }) === false) {\n                return;\n            }\n            tooltip.draw(chart.ctx);\n            chart.notifyPlugins('afterTooltipDraw', args);\n        }\n    },\n    afterEvent (chart, args) {\n        if (chart.tooltip) {\n            const useFinalPosition = args.replay;\n            if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n                args.changed = true;\n            }\n        }\n    },\n    defaults: {\n        enabled: true,\n        external: null,\n        position: 'average',\n        backgroundColor: 'rgba(0,0,0,0.8)',\n        titleColor: '#fff',\n        titleFont: {\n            weight: 'bold'\n        },\n        titleSpacing: 2,\n        titleMarginBottom: 6,\n        titleAlign: 'left',\n        bodyColor: '#fff',\n        bodySpacing: 2,\n        bodyFont: {},\n        bodyAlign: 'left',\n        footerColor: '#fff',\n        footerSpacing: 2,\n        footerMarginTop: 6,\n        footerFont: {\n            weight: 'bold'\n        },\n        footerAlign: 'left',\n        padding: 6,\n        caretPadding: 2,\n        caretSize: 5,\n        cornerRadius: 6,\n        boxHeight: (ctx, opts)=>opts.bodyFont.size,\n        boxWidth: (ctx, opts)=>opts.bodyFont.size,\n        multiKeyBackground: '#fff',\n        displayColors: true,\n        boxPadding: 0,\n        borderColor: 'rgba(0,0,0,0)',\n        borderWidth: 0,\n        animation: {\n            duration: 400,\n            easing: 'easeOutQuart'\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'width',\n                    'height',\n                    'caretX',\n                    'caretY'\n                ]\n            },\n            opacity: {\n                easing: 'linear',\n                duration: 200\n            }\n        },\n        callbacks: defaultCallbacks\n    },\n    defaultRoutes: {\n        bodyFont: 'font',\n        footerFont: 'font',\n        titleFont: 'font'\n    },\n    descriptors: {\n        _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n        _indexable: false,\n        callbacks: {\n            _scriptable: false,\n            _indexable: false\n        },\n        animation: {\n            _fallback: false\n        },\n        animations: {\n            _fallback: 'animation'\n        }\n    },\n    additionalOptionScopes: [\n        'interaction'\n    ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n    if (typeof raw === 'string') {\n        index = labels.push(raw) - 1;\n        addedLabels.unshift({\n            index,\n            label: raw\n        });\n    } else if (isNaN(raw)) {\n        index = null;\n    }\n    return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n    const first = labels.indexOf(raw);\n    if (first === -1) {\n        return addIfString(labels, raw, index, addedLabels);\n    }\n    const last = labels.lastIndexOf(raw);\n    return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n        return labels[value];\n    }\n    return value;\n}\nclass CategoryScale extends Scale {\n    static id = 'category';\n static defaults = {\n        ticks: {\n            callback: _getLabelForValue\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this._startValue = undefined;\n        this._valueRange = 0;\n        this._addedLabels = [];\n    }\n    init(scaleOptions) {\n        const added = this._addedLabels;\n        if (added.length) {\n            const labels = this.getLabels();\n            for (const { index , label  } of added){\n                if (labels[index] === label) {\n                    labels.splice(index, 1);\n                }\n            }\n            this._addedLabels = [];\n        }\n        super.init(scaleOptions);\n    }\n    parse(raw, index) {\n        if (isNullOrUndef(raw)) {\n            return null;\n        }\n        const labels = this.getLabels();\n        index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n        return validIndex(index, labels.length - 1);\n    }\n    determineDataLimits() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this.getMinMax(true);\n        if (this.options.bounds === 'ticks') {\n            if (!minDefined) {\n                min = 0;\n            }\n            if (!maxDefined) {\n                max = this.getLabels().length - 1;\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const min = this.min;\n        const max = this.max;\n        const offset = this.options.offset;\n        const ticks = [];\n        let labels = this.getLabels();\n        labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n        this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n        this._startValue = this.min - (offset ? 0.5 : 0);\n        for(let value = min; value <= max; value++){\n            ticks.push({\n                value\n            });\n        }\n        return ticks;\n    }\n    getLabelForValue(value) {\n        return _getLabelForValue.call(this, value);\n    }\n configure() {\n        super.configure();\n        if (!this.isHorizontal()) {\n            this._reversePixels = !this._reversePixels;\n        }\n    }\n    getPixelForValue(value) {\n        if (typeof value !== 'number') {\n            value = this.parse(value);\n        }\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n    getValueForPixel(pixel) {\n        return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n    }\n    getBasePixel() {\n        return this.bottom;\n    }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n    const ticks = [];\n    const MIN_SPACING = 1e-14;\n    const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds  } = generationOptions;\n    const unit = step || 1;\n    const maxSpaces = maxTicks - 1;\n    const { min: rmin , max: rmax  } = dataRange;\n    const minDefined = !isNullOrUndef(min);\n    const maxDefined = !isNullOrUndef(max);\n    const countDefined = !isNullOrUndef(count);\n    const minSpacing = (rmax - rmin) / (maxDigits + 1);\n    let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n    let factor, niceMin, niceMax, numSpaces;\n    if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n        return [\n            {\n                value: rmin\n            },\n            {\n                value: rmax\n            }\n        ];\n    }\n    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n    if (numSpaces > maxSpaces) {\n        spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n    }\n    if (!isNullOrUndef(precision)) {\n        factor = Math.pow(10, precision);\n        spacing = Math.ceil(spacing * factor) / factor;\n    }\n    if (bounds === 'ticks') {\n        niceMin = Math.floor(rmin / spacing) * spacing;\n        niceMax = Math.ceil(rmax / spacing) * spacing;\n    } else {\n        niceMin = rmin;\n        niceMax = rmax;\n    }\n    if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n        numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n        spacing = (max - min) / numSpaces;\n        niceMin = min;\n        niceMax = max;\n    } else if (countDefined) {\n        niceMin = minDefined ? min : niceMin;\n        niceMax = maxDefined ? max : niceMax;\n        numSpaces = count - 1;\n        spacing = (niceMax - niceMin) / numSpaces;\n    } else {\n        numSpaces = (niceMax - niceMin) / spacing;\n        if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n            numSpaces = Math.round(numSpaces);\n        } else {\n            numSpaces = Math.ceil(numSpaces);\n        }\n    }\n    const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n    factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n    niceMin = Math.round(niceMin * factor) / factor;\n    niceMax = Math.round(niceMax * factor) / factor;\n    let j = 0;\n    if (minDefined) {\n        if (includeBounds && niceMin !== min) {\n            ticks.push({\n                value: min\n            });\n            if (niceMin < min) {\n                j++;\n            }\n            if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n                j++;\n            }\n        } else if (niceMin < min) {\n            j++;\n        }\n    }\n    for(; j < numSpaces; ++j){\n        const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n        if (maxDefined && tickValue > max) {\n            break;\n        }\n        ticks.push({\n            value: tickValue\n        });\n    }\n    if (maxDefined && includeBounds && niceMax !== max) {\n        if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n            ticks[ticks.length - 1].value = max;\n        } else {\n            ticks.push({\n                value: max\n            });\n        }\n    } else if (!maxDefined || niceMax === max) {\n        ticks.push({\n            value: niceMax\n        });\n    }\n    return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation  }) {\n    const rad = toRadians(minRotation);\n    const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n    const length = 0.75 * minSpacing * ('' + value).length;\n    return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n         this._endValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        if (isNullOrUndef(raw)) {\n            return null;\n        }\n        if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n            return null;\n        }\n        return +raw;\n    }\n    handleTickRangeOptions() {\n        const { beginAtZero  } = this.options;\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (beginAtZero) {\n            const minSign = sign(min);\n            const maxSign = sign(max);\n            if (minSign < 0 && maxSign < 0) {\n                setMax(0);\n            } else if (minSign > 0 && maxSign > 0) {\n                setMin(0);\n            }\n        }\n        if (min === max) {\n            let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n            setMax(max + offset);\n            if (!beginAtZero) {\n                setMin(min - offset);\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    getTickLimit() {\n        const tickOpts = this.options.ticks;\n        let { maxTicksLimit , stepSize  } = tickOpts;\n        let maxTicks;\n        if (stepSize) {\n            maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n            if (maxTicks > 1000) {\n                console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n                maxTicks = 1000;\n            }\n        } else {\n            maxTicks = this.computeTickLimit();\n            maxTicksLimit = maxTicksLimit || 11;\n        }\n        if (maxTicksLimit) {\n            maxTicks = Math.min(maxTicksLimit, maxTicks);\n        }\n        return maxTicks;\n    }\n computeTickLimit() {\n        return Number.POSITIVE_INFINITY;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        let maxTicks = this.getTickLimit();\n        maxTicks = Math.max(2, maxTicks);\n        const numericGeneratorOptions = {\n            maxTicks,\n            bounds: opts.bounds,\n            min: opts.min,\n            max: opts.max,\n            precision: tickOpts.precision,\n            step: tickOpts.stepSize,\n            count: tickOpts.count,\n            maxDigits: this._maxDigits(),\n            horizontal: this.isHorizontal(),\n            minRotation: tickOpts.minRotation || 0,\n            includeBounds: tickOpts.includeBounds !== false\n        };\n        const dataRange = this._range || this;\n        const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n        if (opts.bounds === 'ticks') {\n            _setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n configure() {\n        const ticks = this.ticks;\n        let start = this.min;\n        let end = this.max;\n        super.configure();\n        if (this.options.offset && ticks.length) {\n            const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n            start -= offset;\n            end += offset;\n        }\n        this._startValue = start;\n        this._endValue = end;\n        this._valueRange = end - start;\n    }\n    getLabelForValue(value) {\n        return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n}\n\nclass LinearScale extends LinearScaleBase {\n    static id = 'linear';\n static defaults = {\n        ticks: {\n            callback: Ticks.formatters.numeric\n        }\n    };\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = isNumberFinite(min) ? min : 0;\n        this.max = isNumberFinite(max) ? max : 1;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        const horizontal = this.isHorizontal();\n        const length = horizontal ? this.width : this.height;\n        const minRotation = toRadians(this.options.ticks.minRotation);\n        const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n        const tickFont = this._resolveTickFontOptions(0);\n        return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n    }\n    getPixelForValue(value) {\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n    }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n    const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n    return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n    const rangeStep = Math.pow(10, rangeExp);\n    const start = Math.floor(min / rangeStep);\n    const end = Math.ceil(max / rangeStep);\n    return end - start;\n}\nfunction startExp(min, max) {\n    const range = max - min;\n    let rangeExp = log10Floor(range);\n    while(steps(min, max, rangeExp) > 10){\n        rangeExp++;\n    }\n    while(steps(min, max, rangeExp) < 10){\n        rangeExp--;\n    }\n    return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max  }) {\n    min = finiteOrDefault(generationOptions.min, min);\n    const ticks = [];\n    const minExp = log10Floor(min);\n    let exp = startExp(min, max);\n    let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n    const stepSize = Math.pow(10, exp);\n    const base = minExp > exp ? Math.pow(10, minExp) : 0;\n    const start = Math.round((min - base) * precision) / precision;\n    const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n    let significand = Math.floor((start - offset) / Math.pow(10, exp));\n    let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n    while(value < max){\n        ticks.push({\n            value,\n            major: isMajor(value),\n            significand\n        });\n        if (significand >= 10) {\n            significand = significand < 15 ? 15 : 20;\n        } else {\n            significand++;\n        }\n        if (significand >= 20) {\n            exp++;\n            significand = 2;\n            precision = exp >= 0 ? 1 : precision;\n        }\n        value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n    }\n    const lastTick = finiteOrDefault(generationOptions.max, value);\n    ticks.push({\n        value: lastTick,\n        major: isMajor(lastTick),\n        significand\n    });\n    return ticks;\n}\nclass LogarithmicScale extends Scale {\n    static id = 'logarithmic';\n static defaults = {\n        ticks: {\n            callback: Ticks.formatters.logarithmic,\n            major: {\n                enabled: true\n            }\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        const value = LinearScaleBase.prototype.parse.apply(this, [\n            raw,\n            index\n        ]);\n        if (value === 0) {\n            this._zero = true;\n            return undefined;\n        }\n        return isNumberFinite(value) && value > 0 ? value : null;\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n        this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n        if (this.options.beginAtZero) {\n            this._zero = true;\n        }\n        if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n            this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n        }\n        this.handleTickRangeOptions();\n    }\n    handleTickRangeOptions() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let min = this.min;\n        let max = this.max;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (min === max) {\n            if (min <= 0) {\n                setMin(1);\n                setMax(10);\n            } else {\n                setMin(changeExponent(min, -1));\n                setMax(changeExponent(max, +1));\n            }\n        }\n        if (min <= 0) {\n            setMin(changeExponent(max, -1));\n        }\n        if (max <= 0) {\n            setMax(changeExponent(min, +1));\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const generationOptions = {\n            min: this._userMin,\n            max: this._userMax\n        };\n        const ticks = generateTicks(generationOptions, this);\n        if (opts.bounds === 'ticks') {\n            _setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n getLabelForValue(value) {\n        return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n configure() {\n        const start = this.min;\n        super.configure();\n        this._startValue = log10(start);\n        this._valueRange = log10(this.max) - log10(start);\n    }\n    getPixelForValue(value) {\n        if (value === undefined || value === 0) {\n            value = this.min;\n        }\n        if (value === null || isNaN(value)) {\n            return NaN;\n        }\n        return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        const decimal = this.getDecimalForPixel(pixel);\n        return Math.pow(10, this._startValue + decimal * this._valueRange);\n    }\n}\n\nfunction getTickBackdropHeight(opts) {\n    const tickOpts = opts.ticks;\n    if (tickOpts.display && opts.display) {\n        const padding = toPadding(tickOpts.backdropPadding);\n        return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n    }\n    return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n    label = isArray(label) ? label : [\n        label\n    ];\n    return {\n        w: _longestText(ctx, font.string, label),\n        h: label.length * font.lineHeight\n    };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n    if (angle === min || angle === max) {\n        return {\n            start: pos - size / 2,\n            end: pos + size / 2\n        };\n    } else if (angle < min || angle > max) {\n        return {\n            start: pos - size,\n            end: pos\n        };\n    }\n    return {\n        start: pos,\n        end: pos + size\n    };\n}\n function fitWithPointLabels(scale) {\n    const orig = {\n        l: scale.left + scale._padding.left,\n        r: scale.right - scale._padding.right,\n        t: scale.top + scale._padding.top,\n        b: scale.bottom - scale._padding.bottom\n    };\n    const limits = Object.assign({}, orig);\n    const labelSizes = [];\n    const padding = [];\n    const valueCount = scale._pointLabels.length;\n    const pointLabelOpts = scale.options.pointLabels;\n    const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n    for(let i = 0; i < valueCount; i++){\n        const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n        padding[i] = opts.padding;\n        const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n        const plFont = toFont(opts.font);\n        const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n        labelSizes[i] = textSize;\n        const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n        const angle = Math.round(toDegrees(angleRadians));\n        const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n        const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n        updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n    }\n    scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n    scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n    const sin = Math.abs(Math.sin(angle));\n    const cos = Math.abs(Math.cos(angle));\n    let x = 0;\n    let y = 0;\n    if (hLimits.start < orig.l) {\n        x = (orig.l - hLimits.start) / sin;\n        limits.l = Math.min(limits.l, orig.l - x);\n    } else if (hLimits.end > orig.r) {\n        x = (hLimits.end - orig.r) / sin;\n        limits.r = Math.max(limits.r, orig.r + x);\n    }\n    if (vLimits.start < orig.t) {\n        y = (orig.t - vLimits.start) / cos;\n        limits.t = Math.min(limits.t, orig.t - y);\n    } else if (vLimits.end > orig.b) {\n        y = (vLimits.end - orig.b) / cos;\n        limits.b = Math.max(limits.b, orig.b + y);\n    }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n    const outerDistance = scale.drawingArea;\n    const { extra , additionalAngle , padding , size  } = itemOpts;\n    const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    return {\n        visible: true,\n        x: pointLabelPosition.x,\n        y,\n        textAlign,\n        left,\n        top: y,\n        right: left + size.w,\n        bottom: y + size.h\n    };\n}\nfunction isNotOverlapped(item, area) {\n    if (!area) {\n        return true;\n    }\n    const { left , top , right , bottom  } = item;\n    const apexesInArea = _isPointInArea({\n        x: left,\n        y: top\n    }, area) || _isPointInArea({\n        x: left,\n        y: bottom\n    }, area) || _isPointInArea({\n        x: right,\n        y: top\n    }, area) || _isPointInArea({\n        x: right,\n        y: bottom\n    }, area);\n    return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n    const items = [];\n    const valueCount = scale._pointLabels.length;\n    const opts = scale.options;\n    const { centerPointLabels , display  } = opts.pointLabels;\n    const itemOpts = {\n        extra: getTickBackdropHeight(opts) / 2,\n        additionalAngle: centerPointLabels ? PI / valueCount : 0\n    };\n    let area;\n    for(let i = 0; i < valueCount; i++){\n        itemOpts.padding = padding[i];\n        itemOpts.size = labelSizes[i];\n        const item = createPointLabelItem(scale, i, itemOpts);\n        items.push(item);\n        if (display === 'auto') {\n            item.visible = isNotOverlapped(item, area);\n            if (item.visible) {\n                area = item;\n            }\n        }\n    }\n    return items;\n}\nfunction getTextAlignForAngle(angle) {\n    if (angle === 0 || angle === 180) {\n        return 'center';\n    } else if (angle < 180) {\n        return 'left';\n    }\n    return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n    if (align === 'right') {\n        x -= w;\n    } else if (align === 'center') {\n        x -= w / 2;\n    }\n    return x;\n}\nfunction yForAngle(y, h, angle) {\n    if (angle === 90 || angle === 270) {\n        y -= h / 2;\n    } else if (angle > 270 || angle < 90) {\n        y -= h;\n    }\n    return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n    const { left , top , right , bottom  } = item;\n    const { backdropColor  } = opts;\n    if (!isNullOrUndef(backdropColor)) {\n        const borderRadius = toTRBLCorners(opts.borderRadius);\n        const padding = toPadding(opts.backdropPadding);\n        ctx.fillStyle = backdropColor;\n        const backdropLeft = left - padding.left;\n        const backdropTop = top - padding.top;\n        const backdropWidth = right - left + padding.width;\n        const backdropHeight = bottom - top + padding.height;\n        if (Object.values(borderRadius).some((v)=>v !== 0)) {\n            ctx.beginPath();\n            addRoundedRectPath(ctx, {\n                x: backdropLeft,\n                y: backdropTop,\n                w: backdropWidth,\n                h: backdropHeight,\n                radius: borderRadius\n            });\n            ctx.fill();\n        } else {\n            ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n        }\n    }\n}\nfunction drawPointLabels(scale, labelCount) {\n    const { ctx , options: { pointLabels  }  } = scale;\n    for(let i = labelCount - 1; i >= 0; i--){\n        const item = scale._pointLabelItems[i];\n        if (!item.visible) {\n            continue;\n        }\n        const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n        drawPointLabelBox(ctx, optsAtIndex, item);\n        const plFont = toFont(optsAtIndex.font);\n        const { x , y , textAlign  } = item;\n        renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n            color: optsAtIndex.color,\n            textAlign: textAlign,\n            textBaseline: 'middle'\n        });\n    }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n    const { ctx  } = scale;\n    if (circular) {\n        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n    } else {\n        let pointPosition = scale.getPointPosition(0, radius);\n        ctx.moveTo(pointPosition.x, pointPosition.y);\n        for(let i = 1; i < labelCount; i++){\n            pointPosition = scale.getPointPosition(i, radius);\n            ctx.lineTo(pointPosition.x, pointPosition.y);\n        }\n    }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n    const ctx = scale.ctx;\n    const circular = gridLineOpts.circular;\n    const { color , lineWidth  } = gridLineOpts;\n    if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n        return;\n    }\n    ctx.save();\n    ctx.strokeStyle = color;\n    ctx.lineWidth = lineWidth;\n    ctx.setLineDash(borderOpts.dash || []);\n    ctx.lineDashOffset = borderOpts.dashOffset;\n    ctx.beginPath();\n    pathRadiusLine(scale, radius, circular, labelCount);\n    ctx.closePath();\n    ctx.stroke();\n    ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n    return createContext(parent, {\n        label,\n        index,\n        type: 'pointLabel'\n    });\n}\nclass RadialLinearScale extends LinearScaleBase {\n    static id = 'radialLinear';\n static defaults = {\n        display: true,\n        animate: true,\n        position: 'chartArea',\n        angleLines: {\n            display: true,\n            lineWidth: 1,\n            borderDash: [],\n            borderDashOffset: 0.0\n        },\n        grid: {\n            circular: false\n        },\n        startAngle: 0,\n        ticks: {\n            showLabelBackdrop: true,\n            callback: Ticks.formatters.numeric\n        },\n        pointLabels: {\n            backdropColor: undefined,\n            backdropPadding: 2,\n            display: true,\n            font: {\n                size: 10\n            },\n            callback (label) {\n                return label;\n            },\n            padding: 5,\n            centerPointLabels: false\n        }\n    };\n    static defaultRoutes = {\n        'angleLines.color': 'borderColor',\n        'pointLabels.color': 'color',\n        'ticks.color': 'color'\n    };\n    static descriptors = {\n        angleLines: {\n            _fallback: 'grid'\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.xCenter = undefined;\n         this.yCenter = undefined;\n         this.drawingArea = undefined;\n         this._pointLabels = [];\n        this._pointLabelItems = [];\n    }\n    setDimensions() {\n        const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n        const w = this.width = this.maxWidth - padding.width;\n        const h = this.height = this.maxHeight - padding.height;\n        this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n        this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n        this.drawingArea = Math.floor(Math.min(w, h) / 2);\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(false);\n        this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n        this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n    }\n    generateTickLabels(ticks) {\n        LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n        this._pointLabels = this.getLabels().map((value, index)=>{\n            const label = callback(this.options.pointLabels.callback, [\n                value,\n                index\n            ], this);\n            return label || label === 0 ? label : '';\n        }).filter((v, i)=>this.chart.getDataVisibility(i));\n    }\n    fit() {\n        const opts = this.options;\n        if (opts.display && opts.pointLabels.display) {\n            fitWithPointLabels(this);\n        } else {\n            this.setCenterPoint(0, 0, 0, 0);\n        }\n    }\n    setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n        this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n        this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n        this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n    }\n    getIndexAngle(index) {\n        const angleMultiplier = TAU / (this._pointLabels.length || 1);\n        const startAngle = this.options.startAngle || 0;\n        return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n    }\n    getDistanceFromCenterForValue(value) {\n        if (isNullOrUndef(value)) {\n            return NaN;\n        }\n        const scalingFactor = this.drawingArea / (this.max - this.min);\n        if (this.options.reverse) {\n            return (this.max - value) * scalingFactor;\n        }\n        return (value - this.min) * scalingFactor;\n    }\n    getValueForDistanceFromCenter(distance) {\n        if (isNullOrUndef(distance)) {\n            return NaN;\n        }\n        const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n        return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n    }\n    getPointLabelContext(index) {\n        const pointLabels = this._pointLabels || [];\n        if (index >= 0 && index < pointLabels.length) {\n            const pointLabel = pointLabels[index];\n            return createPointLabelContext(this.getContext(), index, pointLabel);\n        }\n    }\n    getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n        const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n        return {\n            x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n            y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n            angle\n        };\n    }\n    getPointPositionForValue(index, value) {\n        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n    }\n    getBasePosition(index) {\n        return this.getPointPositionForValue(index || 0, this.getBaseValue());\n    }\n    getPointLabelPosition(index) {\n        const { left , top , right , bottom  } = this._pointLabelItems[index];\n        return {\n            left,\n            top,\n            right,\n            bottom\n        };\n    }\n drawBackground() {\n        const { backgroundColor , grid: { circular  }  } = this.options;\n        if (backgroundColor) {\n            const ctx = this.ctx;\n            ctx.save();\n            ctx.beginPath();\n            pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n            ctx.closePath();\n            ctx.fillStyle = backgroundColor;\n            ctx.fill();\n            ctx.restore();\n        }\n    }\n drawGrid() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const { angleLines , grid , border  } = opts;\n        const labelCount = this._pointLabels.length;\n        let i, offset, position;\n        if (opts.pointLabels.display) {\n            drawPointLabels(this, labelCount);\n        }\n        if (grid.display) {\n            this.ticks.forEach((tick, index)=>{\n                if (index !== 0 || index === 0 && this.min < 0) {\n                    offset = this.getDistanceFromCenterForValue(tick.value);\n                    const context = this.getContext(index);\n                    const optsAtIndex = grid.setContext(context);\n                    const optsAtIndexBorder = border.setContext(context);\n                    drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n                }\n            });\n        }\n        if (angleLines.display) {\n            ctx.save();\n            for(i = labelCount - 1; i >= 0; i--){\n                const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n                const { color , lineWidth  } = optsAtIndex;\n                if (!lineWidth || !color) {\n                    continue;\n                }\n                ctx.lineWidth = lineWidth;\n                ctx.strokeStyle = color;\n                ctx.setLineDash(optsAtIndex.borderDash);\n                ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n                offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n                position = this.getPointPosition(i, offset);\n                ctx.beginPath();\n                ctx.moveTo(this.xCenter, this.yCenter);\n                ctx.lineTo(position.x, position.y);\n                ctx.stroke();\n            }\n            ctx.restore();\n        }\n    }\n drawBorder() {}\n drawLabels() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        if (!tickOpts.display) {\n            return;\n        }\n        const startAngle = this.getIndexAngle(0);\n        let offset, width;\n        ctx.save();\n        ctx.translate(this.xCenter, this.yCenter);\n        ctx.rotate(startAngle);\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'middle';\n        this.ticks.forEach((tick, index)=>{\n            if (index === 0 && this.min >= 0 && !opts.reverse) {\n                return;\n            }\n            const optsAtIndex = tickOpts.setContext(this.getContext(index));\n            const tickFont = toFont(optsAtIndex.font);\n            offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n            if (optsAtIndex.showLabelBackdrop) {\n                ctx.font = tickFont.string;\n                width = ctx.measureText(tick.label).width;\n                ctx.fillStyle = optsAtIndex.backdropColor;\n                const padding = toPadding(optsAtIndex.backdropPadding);\n                ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n            }\n            renderText(ctx, tick.label, 0, -offset, tickFont, {\n                color: optsAtIndex.color,\n                strokeColor: optsAtIndex.textStrokeColor,\n                strokeWidth: optsAtIndex.textStrokeWidth\n            });\n        });\n        ctx.restore();\n    }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n    millisecond: {\n        common: true,\n        size: 1,\n        steps: 1000\n    },\n    second: {\n        common: true,\n        size: 1000,\n        steps: 60\n    },\n    minute: {\n        common: true,\n        size: 60000,\n        steps: 60\n    },\n    hour: {\n        common: true,\n        size: 3600000,\n        steps: 24\n    },\n    day: {\n        common: true,\n        size: 86400000,\n        steps: 30\n    },\n    week: {\n        common: false,\n        size: 604800000,\n        steps: 4\n    },\n    month: {\n        common: true,\n        size: 2.628e9,\n        steps: 12\n    },\n    quarter: {\n        common: false,\n        size: 7.884e9,\n        steps: 4\n    },\n    year: {\n        common: true,\n        size: 3.154e10\n    }\n};\n const UNITS =  /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n    return a - b;\n}\n function parse(scale, input) {\n    if (isNullOrUndef(input)) {\n        return null;\n    }\n    const adapter = scale._adapter;\n    const { parser , round , isoWeekday  } = scale._parseOpts;\n    let value = input;\n    if (typeof parser === 'function') {\n        value = parser(value);\n    }\n    if (!isNumberFinite(value)) {\n        value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n    }\n    if (value === null) {\n        return null;\n    }\n    if (round) {\n        value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n    }\n    return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n    const ilen = UNITS.length;\n    for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n        const interval = INTERVALS[UNITS[i]];\n        const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n        if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n            return UNITS[i];\n        }\n    }\n    return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n    for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n        const unit = UNITS[i];\n        if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n            return unit;\n        }\n    }\n    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n    for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n        if (INTERVALS[UNITS[i]].common) {\n            return UNITS[i];\n        }\n    }\n}\n function addTick(ticks, time, timestamps) {\n    if (!timestamps) {\n        ticks[time] = true;\n    } else if (timestamps.length) {\n        const { lo , hi  } = _lookup(timestamps, time);\n        const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n        ticks[timestamp] = true;\n    }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n    const adapter = scale._adapter;\n    const first = +adapter.startOf(ticks[0].value, majorUnit);\n    const last = ticks[ticks.length - 1].value;\n    let major, index;\n    for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n        index = map[major];\n        if (index >= 0) {\n            ticks[index].major = true;\n        }\n    }\n    return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n    const ticks = [];\n     const map = {};\n    const ilen = values.length;\n    let i, value;\n    for(i = 0; i < ilen; ++i){\n        value = values[i];\n        map[value] = i;\n        ticks.push({\n            value,\n            major: false\n        });\n    }\n    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n    static id = 'time';\n static defaults = {\n bounds: 'data',\n        adapters: {},\n        time: {\n            parser: false,\n            unit: false,\n            round: false,\n            isoWeekday: false,\n            minUnit: 'millisecond',\n            displayFormats: {}\n        },\n        ticks: {\n source: 'auto',\n            callback: false,\n            major: {\n                enabled: false\n            }\n        }\n    };\n constructor(props){\n        super(props);\n         this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n         this._unit = 'day';\n         this._majorUnit = undefined;\n        this._offsets = {};\n        this._normalized = false;\n        this._parseOpts = undefined;\n    }\n    init(scaleOpts, opts = {}) {\n        const time = scaleOpts.time || (scaleOpts.time = {});\n         const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n        adapter.init(opts);\n        mergeIf(time.displayFormats, adapter.formats());\n        this._parseOpts = {\n            parser: time.parser,\n            round: time.round,\n            isoWeekday: time.isoWeekday\n        };\n        super.init(scaleOpts);\n        this._normalized = opts.normalized;\n    }\n parse(raw, index) {\n        if (raw === undefined) {\n            return null;\n        }\n        return parse(this, raw);\n    }\n    beforeLayout() {\n        super.beforeLayout();\n        this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n    }\n    determineDataLimits() {\n        const options = this.options;\n        const adapter = this._adapter;\n        const unit = options.time.unit || 'day';\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n function _applyBounds(bounds) {\n            if (!minDefined && !isNaN(bounds.min)) {\n                min = Math.min(min, bounds.min);\n            }\n            if (!maxDefined && !isNaN(bounds.max)) {\n                max = Math.max(max, bounds.max);\n            }\n        }\n        if (!minDefined || !maxDefined) {\n            _applyBounds(this._getLabelBounds());\n            if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n                _applyBounds(this.getMinMax(false));\n            }\n        }\n        min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n        max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n        this.min = Math.min(min, max - 1);\n        this.max = Math.max(min + 1, max);\n    }\n _getLabelBounds() {\n        const arr = this.getLabelTimestamps();\n        let min = Number.POSITIVE_INFINITY;\n        let max = Number.NEGATIVE_INFINITY;\n        if (arr.length) {\n            min = arr[0];\n            max = arr[arr.length - 1];\n        }\n        return {\n            min,\n            max\n        };\n    }\n buildTicks() {\n        const options = this.options;\n        const timeOpts = options.time;\n        const tickOpts = options.ticks;\n        const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n        if (options.bounds === 'ticks' && timestamps.length) {\n            this.min = this._userMin || timestamps[0];\n            this.max = this._userMax || timestamps[timestamps.length - 1];\n        }\n        const min = this.min;\n        const max = this.max;\n        const ticks = _filterBetween(timestamps, min, max);\n        this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n        this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n        this.initOffsets(timestamps);\n        if (options.reverse) {\n            ticks.reverse();\n        }\n        return ticksFromTimestamps(this, ticks, this._majorUnit);\n    }\n    afterAutoSkip() {\n        if (this.options.offsetAfterAutoskip) {\n            this.initOffsets(this.ticks.map((tick)=>+tick.value));\n        }\n    }\n initOffsets(timestamps = []) {\n        let start = 0;\n        let end = 0;\n        let first, last;\n        if (this.options.offset && timestamps.length) {\n            first = this.getDecimalForValue(timestamps[0]);\n            if (timestamps.length === 1) {\n                start = 1 - first;\n            } else {\n                start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n            }\n            last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n            if (timestamps.length === 1) {\n                end = last;\n            } else {\n                end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n            }\n        }\n        const limit = timestamps.length < 3 ? 0.5 : 0.25;\n        start = _limitValue(start, 0, limit);\n        end = _limitValue(end, 0, limit);\n        this._offsets = {\n            start,\n            end,\n            factor: 1 / (start + 1 + end)\n        };\n    }\n _generate() {\n        const adapter = this._adapter;\n        const min = this.min;\n        const max = this.max;\n        const options = this.options;\n        const timeOpts = options.time;\n        const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n        const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n        const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n        const hasWeekday = isNumber(weekday) || weekday === true;\n        const ticks = {};\n        let first = min;\n        let time, count;\n        if (hasWeekday) {\n            first = +adapter.startOf(first, 'isoWeek', weekday);\n        }\n        first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n        if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n            throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n        }\n        const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n        for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n            addTick(ticks, time, timestamps);\n        }\n        if (time === max || options.bounds === 'ticks' || count === 1) {\n            addTick(ticks, time, timestamps);\n        }\n        return Object.keys(ticks).sort(sorter).map((x)=>+x);\n    }\n getLabelForValue(value) {\n        const adapter = this._adapter;\n        const timeOpts = this.options.time;\n        if (timeOpts.tooltipFormat) {\n            return adapter.format(value, timeOpts.tooltipFormat);\n        }\n        return adapter.format(value, timeOpts.displayFormats.datetime);\n    }\n format(value, format) {\n        const options = this.options;\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const fmt = format || formats[unit];\n        return this._adapter.format(value, fmt);\n    }\n _tickFormatFunction(time, index, ticks, format) {\n        const options = this.options;\n        const formatter = options.ticks.callback;\n        if (formatter) {\n            return callback(formatter, [\n                time,\n                index,\n                ticks\n            ], this);\n        }\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const majorUnit = this._majorUnit;\n        const minorFormat = unit && formats[unit];\n        const majorFormat = majorUnit && formats[majorUnit];\n        const tick = ticks[index];\n        const major = majorUnit && majorFormat && tick && tick.major;\n        return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    }\n generateTickLabels(ticks) {\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            tick.label = this._tickFormatFunction(tick.value, i, ticks);\n        }\n    }\n getDecimalForValue(value) {\n        return value === null ? NaN : (value - this.min) / (this.max - this.min);\n    }\n getPixelForValue(value) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForValue(value);\n        return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return this.min + pos * (this.max - this.min);\n    }\n _getLabelSize(label) {\n        const ticksOpts = this.options.ticks;\n        const tickLabelWidth = this.ctx.measureText(label).width;\n        const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n        const cosRotation = Math.cos(angle);\n        const sinRotation = Math.sin(angle);\n        const tickFontSize = this._resolveTickFontOptions(0).size;\n        return {\n            w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n            h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n        };\n    }\n _getLabelCapacity(exampleTime) {\n        const timeOpts = this.options.time;\n        const displayFormats = timeOpts.displayFormats;\n        const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n        const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n            exampleTime\n        ], this._majorUnit), format);\n        const size = this._getLabelSize(exampleLabel);\n        const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n        return capacity > 0 ? capacity : 1;\n    }\n getDataTimestamps() {\n        let timestamps = this._cache.data || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const metas = this.getMatchingVisibleMetas();\n        if (this._normalized && metas.length) {\n            return this._cache.data = metas[0].controller.getAllParsedValues(this);\n        }\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n        }\n        return this._cache.data = this.normalize(timestamps);\n    }\n getLabelTimestamps() {\n        const timestamps = this._cache.labels || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const labels = this.getLabels();\n        for(i = 0, ilen = labels.length; i < ilen; ++i){\n            timestamps.push(parse(this, labels[i]));\n        }\n        return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n    }\n normalize(values) {\n        return _arrayUnique(values.sort(sorter));\n    }\n}\n\nfunction interpolate(table, val, reverse) {\n    let lo = 0;\n    let hi = table.length - 1;\n    let prevSource, nextSource, prevTarget, nextTarget;\n    if (reverse) {\n        if (val >= table[lo].pos && val <= table[hi].pos) {\n            ({ lo , hi  } = _lookupByKey(table, 'pos', val));\n        }\n        ({ pos: prevSource , time: prevTarget  } = table[lo]);\n        ({ pos: nextSource , time: nextTarget  } = table[hi]);\n    } else {\n        if (val >= table[lo].time && val <= table[hi].time) {\n            ({ lo , hi  } = _lookupByKey(table, 'time', val));\n        }\n        ({ time: prevSource , pos: prevTarget  } = table[lo]);\n        ({ time: nextSource , pos: nextTarget  } = table[hi]);\n    }\n    const span = nextSource - prevSource;\n    return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n    static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n        super(props);\n         this._table = [];\n         this._minPos = undefined;\n         this._tableRange = undefined;\n    }\n initOffsets() {\n        const timestamps = this._getTimestampsForTable();\n        const table = this._table = this.buildLookupTable(timestamps);\n        this._minPos = interpolate(table, this.min);\n        this._tableRange = interpolate(table, this.max) - this._minPos;\n        super.initOffsets(timestamps);\n    }\n buildLookupTable(timestamps) {\n        const { min , max  } = this;\n        const items = [];\n        const table = [];\n        let i, ilen, prev, curr, next;\n        for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n            curr = timestamps[i];\n            if (curr >= min && curr <= max) {\n                items.push(curr);\n            }\n        }\n        if (items.length < 2) {\n            return [\n                {\n                    time: min,\n                    pos: 0\n                },\n                {\n                    time: max,\n                    pos: 1\n                }\n            ];\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            next = items[i + 1];\n            prev = items[i - 1];\n            curr = items[i];\n            if (Math.round((next + prev) / 2) !== curr) {\n                table.push({\n                    time: curr,\n                    pos: i / (ilen - 1)\n                });\n            }\n        }\n        return table;\n    }\n _generate() {\n        const min = this.min;\n        const max = this.max;\n        let timestamps = super.getDataTimestamps();\n        if (!timestamps.includes(min) || !timestamps.length) {\n            timestamps.splice(0, 0, min);\n        }\n        if (!timestamps.includes(max) || timestamps.length === 1) {\n            timestamps.push(max);\n        }\n        return timestamps.sort((a, b)=>a - b);\n    }\n _getTimestampsForTable() {\n        let timestamps = this._cache.all || [];\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const data = this.getDataTimestamps();\n        const label = this.getLabelTimestamps();\n        if (data.length && label.length) {\n            timestamps = this.normalize(data.concat(label));\n        } else {\n            timestamps = data.length ? data : label;\n        }\n        timestamps = this._cache.all = timestamps;\n        return timestamps;\n    }\n getDecimalForValue(value) {\n        return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n    }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n    controllers,\n    elements,\n    plugins,\n    scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import React from \"react\";\nimport { Row } from \"antd\";\nimport {\n  CategoryScale,\n  Chart as ChartJS,\n  ChartOptions,\n  Legend,\n  LinearScale,\n  LineElement,\n  PointElement,\n  BarElement,\n  BarController,\n  LineController,\n  Title,\n  Tooltip,\n} from \"chart.js\";\nimport moment from \"moment\";\nimport { Chart } from \"react-chartjs-2\";\n\nimport { LoadingOutlined } from \"@ant-design/icons\";\nimport { PriceHistoryHistoricalItem } from \"../../../types/PriceHistoryHistoricalItem\";\n\ninterface Props {\n  historicalItems: PriceHistoryHistoricalItem[];\n  isChartDataFetching?: boolean;\n}\n\nChartJS.register(\n  CategoryScale,\n  LinearScale,\n  PointElement,\n  LineElement,\n  BarElement,\n  BarController,\n  LineController,\n  Title,\n  Tooltip,\n  Legend\n);\n\nfunction HistoricalSalePriceChart({\n  historicalItems,\n  isChartDataFetching,\n}: Props) {\n  const options: ChartOptions<\"bar\" | \"line\"> = {\n    responsive: true,\n    maintainAspectRatio: false,\n\n    plugins: {\n      legend: {\n        display: false,\n      },\n      title: {\n        display: false,\n      },\n      tooltip: {\n        bodyFont: {\n          size: 12,\n          weight: \"bold\",\n        },\n        boxWidth: 100,\n        titleAlign: \"center\",\n        bodyAlign: \"center\",\n        padding: 15,\n        displayColors: false,\n        callbacks: {\n          title: (tooltipItems) => {\n            return moment(\n              historicalItems[tooltipItems[0].parsed.x].date\n            ).format(\"MMM DD, yyyy\");\n          },\n          afterBody(this, tooltipItems) {\n            return `Sales: ${\n              historicalItems[tooltipItems[0].parsed.x].totalSales\n            }`;\n          },\n          label(this, tooltipItem) {\n            return `Average price: ${historicalItems[\n              tooltipItem.parsed.x\n            ].averagePrice.toFixed(2)} WAXP`;\n          },\n        },\n      },\n    },\n    scales: {\n      x: {\n        display: true,\n      },\n      y: {\n        display: true,\n        stacked: false,\n        ticks: {\n          align: \"end\",\n        },\n      },\n      y1: {\n        type: \"linear\",\n        display: false,\n        position: \"right\",\n        grid: {\n          drawOnChartArea: false,\n        },\n      },\n    },\n    elements: {\n      point: {\n        radius: 0,\n      },\n    },\n  };\n\n  const data = {\n    labels: historicalItems.map((item) => moment(item.date).format(\"MM/DD\")),\n    datasets: [\n      {\n        type: \"bar\" as const,\n        label: \"Total Sales\",\n        data: historicalItems.map((item) => item.totalSales.toFixed(2)),\n        borderColor: \"#E3E3FF\",\n        backgroundColor: \"#E3E3FF\",\n        barThickness: 6,\n        stack: \"combined\",\n        yAxisID: \"y1\",\n        order: 2,\n      },\n      {\n        type: \"line\" as const,\n        label: \"Average Price\",\n        data: historicalItems.map((item) => item.averagePrice.toFixed(2)),\n        borderColor: \"#7D70F6\",\n        backgroundColor: \"#7D70F6\",\n        lineTension: 0.2,\n        borderWidth: 2,\n        stack: \"combined\",\n        yAxisID: \"y\",\n        order: 1,\n      },\n    ],\n  };\n\n  if (isChartDataFetching) {\n    return (\n      <div>\n        <LoadingOutlined\n          onPointerEnterCapture={() => {}}\n          onPointerLeaveCapture={() => {}}\n        />\n      </div>\n    );\n  }\n\n  if (historicalItems.length === 0) {\n    return (\n      <div>\n        <Row align=\"middle\" justify=\"center\">\n          <div>\n            <img src=\"/static/img/asset-detail-price-history.svg\" alt=\"\" />\n            <p>No Item Activity Yet</p>\n          </div>\n        </Row>\n      </div>\n    );\n  }\n\n  return (\n    <div>\n      <div>\n        <Chart type=\"bar\" data={data} options={options} />\n      </div>\n    </div>\n  );\n}\n\nexport default React.memo(HistoricalSalePriceChart);\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\nimport WaxCurrencyIcon from \"../../../icon/wax-currency\";\ninterface Props {\n  title: string;\n  value: string;\n}\n\nexport default function StatisticItem({ value, title }: Props) {\n  return (\n    <Row>\n      <Col xs={24}>\n        <p className='font-sm fw1'>{title}</p>\n      </Col>\n      <Col xs={24}>\n        <Row gutter={8} align={'middle'}>\n          <Col >\n            <WaxCurrencyIcon height={16} width={16}/>\n          </Col>\n          <Col>\n            <p className='font-md fw4'>{value}</p>\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n","import { Col, Row, Select } from \"antd\";\nimport moment from \"moment\";\nimport React from \"react\";\nimport HistoricalSalePriceChart from \"./component/HistoricalSalePriceChart\";\nimport StatisticPriceItem from \"./component/StatisticPriceItem\";\nimport UsePriceHistory from \"./usePriceHistory\";\nimport \"./index.css\";\nconst { Option } = Select;\n\ninterface Props {\n  collectionName: string;\n  templateId: number;\n}\n\nexport const options = [\n  {\n    value: -7,\n    label: \"Last 7 days\",\n    time: \"7 days\",\n  },\n  {\n    value: -14,\n    label: \"Last 14 days\",\n    time: \"14 days\",\n  },\n  {\n    value: -30,\n    label: \"Last 30 days\",\n    time: \"30 days\",\n  },\n  {\n    value: -60,\n    label: \"Last 60 days\",\n    time: \"60 days\",\n  },\n  {\n    value: -90,\n    label: \"Last 90 days\",\n    time: \"90 days\",\n  },\n  {\n    value: -365,\n    label: \"Last year\",\n    time: \"1 year\",\n  },\n  // {\n  // \tvalue: \"all\",\n  // \tlabel: \"All time\",\n  // \ttime: \"All time\",\n  // },\n];\n\nexport default function TemplateHistoricalPriceChart(props: Props) {\n  const {\n    filter,\n    historicalItems,\n    averagePrice,\n    totalVolume,\n    setFilterPriceHistory,\n  } = UsePriceHistory({\n    ...props,\n  });\n\n  const SelectDaysFilter = () => {\n    return (\n      <Select\n        size=\"large\"\n        defaultValue={filter.filterBackDays}\n        value={filter.filterBackDays}\n        style={{ width: \"100%\" }}\n        onChange={(filterBackDays) => setFilterPriceHistory({ filterBackDays })}\n      >\n        {options.map((item, index) => (\n          <Option value={item.value}>{item.label}</Option>\n        ))}\n      </Select>\n    );\n  };\n\n  return (\n    <Row gutter={[0,16]} className=\"historical-price-chart-wrapper\">\n      <Col xs={24}>\n        <Row gutter={[40,16]}>\n          <Col xs={24} lg={8}>\n            <SelectDaysFilter />\n          </Col>\n          <Col xs={24} lg={16}>\n            <Row>\n              <Col xs={12}>\n                <StatisticPriceItem\n                  title={`${-filter.filterBackDays} days avg. price`}\n                  value={`${(averagePrice || 0).toFixed(2)} WAXP`}\n                />\n              </Col>\n              <Col xs={12}>\n                <StatisticPriceItem\n                  title={`${-filter.filterBackDays} days volume`}\n                  value={`${(totalVolume || 0).toString()}`}\n                />\n              </Col>\n            </Row>\n          </Col>\n        </Row>\n      </Col>\n      <Col xs={24}>\n        <HistoricalSalePriceChart\n          isChartDataFetching={false}\n          historicalItems={historicalItems}\n        />\n      </Col>\n    </Row>\n  );\n}\n","import { filter } from \"lodash\";\nimport moment from \"moment\";\nimport { useEffect, useState } from \"react\";\nimport { templateController } from \"../../controller\";\nimport { FilterPriceHistoryProps } from \"../../controller/templateController\";\nimport { PriceHistoryHistoricalItem } from \"../../types/PriceHistoryHistoricalItem\";\n\ninterface Props {\n  collectionName: string;\n  templateId: number;\n}\n\ninterface PriceHistoryFilter extends FilterPriceHistoryProps {\n  filterBackDays: number;\n}\n\nexport default function UsePriceHistory(props: Props) {\n  const [state, setState] = useState<State>({\n    filter: {\n      filterBackDays: -365,\n      ...props,\n    },\n    historicalItems: [],\n  });\n\n  useEffect(() => {\n    getHistoricalPrice();\n  }, [JSON.stringify(state.filter)]);\n\n  useEffect(() => {\n    setState((prev) => ({\n      ...prev,\n      filter: {\n        filterBackDays: -365,\n        collectionName: props.collectionName,\n        templateId: props.templateId,\n      },\n    }));\n  }, [props.collectionName, props.templateId]);\n\n  const getHistoricalPrice = async () => {\n    var today = moment(new Date()).endOf(\"day\").toDate();\n    var historicalItems = await templateController.getPriceHistory({\n      from: moment(today)\n        .add(state.filter.filterBackDays, \"d\")\n        .startOf(\"day\")\n        .toDate(),\n      to: today,\n      collectionName: state.filter.collectionName,\n      templateId: state.filter.templateId,\n    });\n    setState((prev) => ({ ...prev, historicalItems }));\n  };\n\n  const calcTotalVolume = () =>\n    state.historicalItems\n      .map((i) => i.totalSales)\n      .reduce((volume, totalVolume) => (totalVolume += volume), 0);\n\n  const calcAveragePrice = () => {\n    var totalPrice = state.historicalItems\n      .map((i) => i.averagePrice * i.totalSales)\n      .reduce((price, totalPrice) => (totalPrice += price), 0);\n\n    return totalPrice / calcTotalVolume();\n  };\n\n  return {\n    ...state,\n    setFilterPriceHistory: (filter: Partial<PriceHistoryFilter>) =>\n      setState((prev) => ({ ...prev, filter: { ...prev.filter, ...filter } })),\n    totalVolume: calcTotalVolume(),\n    averagePrice: calcAveragePrice(),\n  };\n}\n\ninterface State {\n  filter: PriceHistoryFilter;\n  historicalItems: PriceHistoryHistoricalItem[];\n}\n","import React from 'react'\nimport { BaseAsset } from '../../types/Asset';\nimport TemplateHistoricalPriceChart from '../TemplateHistoricalPriceChart';\n\ninterface Props {\n  asset: BaseAsset;\n}\n\n\nexport default function AssetSalePriceHistory({asset}: Props) {\n  return (\n    <div><TemplateHistoricalPriceChart collectionName={asset.collection_name} templateId={asset.template_id}/></div>\n  )\n}\n","import React from \"react\";\n\nexport default function ConnectWalletIcon() {\n  return (\n    <svg\n      width=\"20\"\n      height=\"20\"\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M4.9694 12.0218C3.84436 10.8978 3.84436 9.07649 4.9694 7.95445L7.96346 4.96302C9.0885 3.83897 10.9114 3.83897 12.0344 4.96302L13.0893 6.01693L16.0051 3.10364L14.9503 2.04972C12.2149 -0.683241 7.78097 -0.683241 5.0456 2.04972L2.05153 5.04116C-0.683843 7.77413 -0.683843 12.2042 2.05153 14.9371L3.10236 15.987L6.01822 13.0738L4.96739 12.0238L4.9694 12.0218Z\"\n        fill=\"white\"\n      />\n      <path\n        d=\"M17.9459 5.04122L16.891 3.9873L13.9752 6.9006L15.03 7.95451C16.155 9.07855 16.155 10.8999 15.03 12.0219L11.4243 8.41936C10.6181 7.61389 9.31258 7.61389 8.50841 8.41936C7.70224 9.22482 7.70224 10.5292 8.50841 11.3327L12.1141 14.9352L12.0359 15.0133C10.9109 16.1374 9.08798 16.1374 7.96495 15.0133L6.9061 13.9554L3.99023 16.8687L5.04909 17.9266C7.78446 20.6596 12.2184 20.6596 14.9538 17.9266L15.032 17.8485L17.9479 14.9352C20.6832 12.2022 20.6832 7.77218 17.9479 5.03922L17.9459 5.04122Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n}\n","import { Row, Col } from \"antd\";\nimport React, { useContext } from \"react\";\nimport { WaxAuthenContext } from \"../../../../hook/useWaxAuthen\";\nimport ConnectWalletIcon from \"../../../../icon/connect-wallet\";\n\nexport default function RequestLogin() {\n  const { openLoginPopup } = useContext(WaxAuthenContext);\n\n  return (\n    <button style={{ borderRadius: 100 }} className=\"btn btn-primary-active\" onClick={() => openLoginPopup()}>\n      <Row gutter={8} align={\"middle\"}>\n        <Col>\n          <ConnectWalletIcon />\n        </Col>\n        <Col>Connect My Cloud Wallet</Col>\n      </Row>\n    </button>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { accountController } from \"../controller\";\nimport { getBalance } from \"../services/RpcService\";\nimport { Account } from \"../types/Account\";\nimport { Balance } from \"../types/Balance\";\nimport UseWaxAuthen from \"./useWaxAuthen\";\n\nexport default function UseAccount() {\n  const { authen } = UseWaxAuthen();\n  const [state, setState] = useState<State>({});\n  useEffect(() => {\n    authen.userAccount && fetchAccount();\n  }, [authen.userAccount]);\n\n  const fetchAccount = async () => {\n    const account = await accountController.get(authen.userAccount);\n    const balance = await getBalance(authen.userAccount);\n    setState({ account, balance });\n  };\n\n  return { ...state };\n}\ninterface State {\n  account?: Account;\n  balance?: Balance;\n}\n\nexport const AccountContext = React.createContext<\n\tReturnType<typeof UseAccount>\n>({} as any);\n","import React from \"react\";\n\nexport default function DownOutlinedIcon() {\n  return (\n    <svg\n      width=\"20\"\n      height=\"20\"\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M13.3337 8.33301L10.0003 11.6663L6.66699 8.33301\"\n        stroke=\"#7D70F6\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  );\n}\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport { Dropdown, Row, Col, MenuProps } from \"antd\";\nimport React, { useContext } from \"react\";\nimport { appConfig } from \"../../../../config/AppConfig\";\nimport { AccountContext } from \"../../../../hook/useAccount\";\nimport { NavigatorContext } from \"../../../../hook/useNavigator\";\nimport { WaxAuthenContext } from \"../../../../hook/useWaxAuthen\";\nimport ConnectWalletIcon from \"../../../../icon/connect-wallet\";\nimport DownOutlinedIcon from \"../../../../icon/down-outlined\";\nimport WaxCurrencyIcon from \"../../../../icon/wax-currency\";\nimport { AssetDetailContext } from \"../../../marketplace/context/useAssetDetail\";\nimport \"./index.css\";\n\nexport default function UserInfo() {\n  const { logout, authen } = useContext(WaxAuthenContext);\n  const { goToUserInventory, goToUserOffers } = useContext(NavigatorContext);\n  const { setAssetDetail } = useContext(AssetDetailContext);\n  const { balance } = useContext(AccountContext);\n\n  const items: MenuProps[\"items\"] = [\n    // {\n    //   label: (\n    //     <div\n    //       style={{ width: \"100%\" }}\n    //       className=\"fw3\"\n    //       onClick={() => {\n    //         setAssetDetail(null);\n    //         goToUserInventory();\n    //       }}\n    //     >\n    //       My Inventory\n    //     </div>\n    //   ),\n    //   key: \"0\",\n    // },\n    // {\n    //   label: (\n    //     <div\n    //       style={{ width: \"100%\" }}\n    //       className=\"fw3\"\n    //       onClick={() => {\n    //         setAssetDetail(null);\n    //         goToUserOffers();\n    //       }}\n    //     >\n    //       My Offers\n    //     </div>\n    //   ),\n    //   key: \"1\",\n    // },\n    {\n      label: (\n        <a\n          rel=\"noreferrer\"\n          target={\"_blank\"}\n          href={appConfig.wallet.wax.signingUrl}\n        >\n          <Row style={{ minWidth: 220 }} justify={\"space-between\"}>\n            <Col>\n              <p className=\"fw3\">My Wallet</p>\n            </Col>\n            <Col>\n              <Row align={\"middle\"} gutter={4}>\n                <Col style={{ height: 16 }}>\n                  <WaxCurrencyIcon width={16} height={16} />\n                </Col>\n                <Col>\n                  <p className=\"fw3\">{balance?.number} WAXP</p>\n                </Col>\n              </Row>\n            </Col>\n          </Row>\n        </a>\n      ),\n      key: \"2\",\n    },\n    {\n      label: (\n        <div\n          className=\"fw3\"\n          onClick={() => {\n            logout();\n          }}\n        >\n          Sign Out\n        </div>\n      ),\n      key: \"3\",\n    },\n  ];\n\n  return (\n    <Dropdown className=\"user-info\" menu={{ items }} trigger={[\"click\"]}>\n      <a onClick={(e) => e.preventDefault()}>\n        <button className=\"btn btn-primary btn-info\">\n          <Row gutter={8} align={\"middle\"}>\n            <Col>\n              <ConnectWalletIcon />\n            </Col>\n            <Col>{authen.userAccount || \" ---------- \"}</Col>\n            <Col>\n              <DownOutlinedIcon />\n            </Col>\n          </Row>\n        </button>\n      </a>\n    </Dropdown>\n  );\n}\n","import { useContext } from \"react\";\nimport { WaxAuthenContext } from \"../../hook/useWaxAuthen\";\nimport RequestLogin from \"./component/RequestLogin\";\nimport UserInfo from \"./component/UserInfo\";\n\nexport default function LoginMenu() {\n  const { authen } = useContext(WaxAuthenContext);\n\n  return authen.isAuthen? <UserInfo/> : <RequestLogin/>\n}\n","import { ArrowLeftOutlined } from \"@ant-design/icons\";\nimport { Col, Row } from \"antd\";\nimport React from \"react\";\nimport LoginMenu from \"../LoginMenu\";\n\ninterface Props {\n  currentPageTitle?: string;\n  canBackToPreviousPage?: boolean;\n  onBack?: () => void;\n}\n\nexport default function Navigator({\n  currentPageTitle,\n  canBackToPreviousPage = false,\n  onBack,\n}: Props) {\n  return (\n    <Row gutter={[0, 16]} justify={\"space-between\"} align=\"middle\">\n      <Col>\n        {canBackToPreviousPage && (\n          <Row\n            onClick={onBack}\n            style={{ cursor: \"pointer\" }}\n            gutter={16}\n            align=\"middle\"\n          >\n            <Col>\n              <ArrowLeftOutlined\n                style={{ fontSize: 24 }}\n                onPointerEnterCapture={() => {}}\n                onPointerLeaveCapture={() => {}}\n              />\n            </Col>\n            <Col>\n              <p style={{ fontSize: 28 }} className=\"fw3\">\n                {currentPageTitle}\n              </p>\n            </Col>\n          </Row>\n        )}\n      </Col>\n      <Col>\n        <LoginMenu />\n      </Col>\n    </Row>\n  );\n}\n","import { BidHistory } from \"./BidHistory\";\nimport { BaseSale } from \"./Sale\";\n\nexport enum AuctionState {\n  WAITING = 0,\n  LISTED = 1,\n  CANCELED = 2,\n  SOLD = 3,\n  INVALID = 4,\n  ADMIN_REMOVED = 5, // sale removed by admin\n}\n\nexport interface Auction extends BaseSale<AuctionState> {\n  auction_id: string;\n  bid_count: number;\n  buyer: string;\n  claimed_by_buyer: boolean;\n  claimed_by_seller: boolean;\n  end_time: number;\n  token_symbol: string;\n\tbuyout_price: number;\n  bidHistory: BidHistory[];\n}\n","// Sale States\nexport const WAITING = 0; // initialize value when create sale\nexport const LISTED = 1; // sale is on market\nexport const CANCELLED = 2; // sale is cancel - use in BE\nexport const SOLD = 3; // sale is sold   - use in BE\nexport const INVALID = 4; // invalid sale\nexport const DEFERRED_SALE_END = 4; // seller send nft to buyer\nexport const ADMIN_REMOVED = 5; // sale removed by admin\nexport const ON_SALE_STATUSES = [WAITING, LISTED];\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React from \"react\";\nimport { Asset } from \"../../../types/Asset\";\n\ninterface Props {\n  asset: Asset;\n}\n\nexport function BlackListAsset(props: Props) {\n  return (\n    <span style={{ color: \"#ddd\" }} aria-hidden>\n      Blacklisted\n    </span>\n  );\n}\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React from \"react\";\nimport { Asset } from \"../../../types/Asset\";\n\ninterface Props {\n  asset: Asset;\n}\n\nexport function DeListedAsset(props: Props) {\n  return (\n    <span style={{ color: \"#ddd\" }} aria-hidden>\n      Delisted\n    </span>\n  );\n}\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React from \"react\";\nimport { Asset } from \"../../../types/Asset\";\n\ninterface Props {\n  asset: Asset;\n}\n\nexport function NotOnSale(props: Props) {\n  return <span style={{ color: \"#ddd\" }} aria-hidden>\n    Not On Sale\n  </span>;\n}\n","import { Col, Row } from \"antd\";\nimport { BaseAsset } from \"../../../../types/Asset\";\nimport AssetCardPreview from \"./AssetCardPreview\";\n\ninterface Props {\n  asset: BaseAsset;\n}\nexport default function AssetCardPreviewWithDefaultContent({ asset }: Props) {\n  return (\n    <Row gutter={16} align={\"middle\"}>\n      <Col style={{ width: 80, borderRadius: 16 }}>\n        <AssetCardPreview asset={asset} />\n      </Col>\n      <Col>\n        <Row>\n          <Col xs={24}>\n            <p className=\"font-md fw3\">{asset.name}</p>\n          </Col>\n          <Col xs={24}>\n            <p className=\"font-sm color-text-secondary\">\n              {asset.collection_name}\n            </p>\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n","import {\n  FieldTimeOutlined,\n  DollarCircleOutlined,\n  HourglassOutlined,\n} from \"@ant-design/icons\";\nimport { Row, Col, theme, Form } from \"antd\";\nimport React from \"react\";\nimport { SaleType } from \"../../../../types/Sale\";\nimport { WithLabel } from \"../../../../types/WithLabel\";\nimport \"./index.css\";\ninterface SellType extends WithLabel<SaleType> {\n  icon: JSX.Element;\n  desc?: string;\n}\n\nconst sellTypes: SellType[] = [\n  {\n    label: \"Rapid Sale\",\n    value: \"rapid-sale\",\n    icon: (\n      <FieldTimeOutlined\n        style={{ fontSize: 24 }}\n        onPointerEnterCapture={() => {}}\n        onPointerLeaveCapture={() => {}}\n      />\n    ),\n  },\n  {\n    label: \"P2O\",\n    value: \"p2o\",\n    icon: (\n      <DollarCircleOutlined\n        style={{ fontSize: 24 }}\n        onPointerEnterCapture={() => {}}\n        onPointerLeaveCapture={() => {}}\n      />\n    ),\n    desc: \"List your item so it can be borrowed by a potential buyer.\",\n  },\n  {\n    label: \"Auction\",\n    value: \"auction\",\n    icon: (\n      <HourglassOutlined\n        style={{ fontSize: 24 }}\n        onPointerEnterCapture={() => {}}\n        onPointerLeaveCapture={() => {}}\n      />\n    ),\n  },\n];\n\ninterface Props {\n  selectedSaleType: SaleType;\n  onSelectSaleType(selectedSaleType: SaleType): void;\n}\n\nexport default function SellTypes({\n  selectedSaleType,\n  onSelectSaleType,\n}: Props) {\n  return (\n    <Row gutter={[24, 24]}>\n      <Form.Item name=\"saleType\" hidden></Form.Item>\n      {sellTypes.map((type) => (\n        <Col xs={8}>\n          <div\n            className={`sale-type-option ${\n              type.value === selectedSaleType && `active`\n            }`}\n            onClick={() => onSelectSaleType(type.value)}\n          >\n            {type.icon}\n            {type.label}\n          </div>\n        </Col>\n      ))}\n    </Row>\n  );\n}\n","import { SaleType } from \"./Sale\";\nimport { WithLabel } from \"./WithLabel\";\n\nexport type SupportCurrency = \"wax\" | \"usd\";\nexport const supportCurrencyOptions: WithLabel<SupportCurrency>[] = [\n  {\n    label: \"WAXP\",\n    value: \"wax\",\n  },\n  {\n    label: \"USD\",\n    value: \"usd\",\n  },\n];\n","import { Col, Form, FormInstance, Input, Row, Select, SelectProps } from \"antd\";\nimport { StartSellProps } from \"..\";\nimport { Asset } from \"../../../../types/Asset\";\nimport {\n  SupportCurrency,\n  supportCurrencyOptions,\n} from \"../../../../types/Currency\";\n\ninterface Props {\n  form: FormInstance<StartSellProps>;\n  sameCollectionAssets: Asset[];\n  isEnableBundleSale: boolean;\n}\nexport default function RapidSaleForm({\n  form,\n  sameCollectionAssets,\n  isEnableBundleSale,\n}: Props) {\n  return (\n    <Row gutter={[16, 16]}>\n      <Col xs={24}>\n        <Form.Item\n          name=\"currency\"\n          label={<p className=\"font-md fw2\">Currency</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          initialValue=\"usd\"\n          rules={[{ required: true }]}\n        >\n          <Select\n            size=\"large\"\n            options={supportCurrencyOptions.filter((o) => o.value === \"usd\")}\n            onChange={(currency) =>\n              form.setFieldsValue({ currency: currency as SupportCurrency })\n            }\n          />\n        </Form.Item>\n      </Col>\n      <Col xs={24}>\n        <Form.Item\n          name=\"price\"\n          label={<p className=\"font-md fw2\">Price</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          rules={[{ required: true }]}\n        >\n          <Input size=\"large\" type=\"number\" placeholder=\"Amount of currency\" />\n        </Form.Item>\n      </Col>\n      {isEnableBundleSale && (\n        <Col xs={24}>\n          <Form.Item\n            name=\"bundleItems\"\n            label={<p className=\"font-md fw2\">Bundle</p>}\n            colon={false}\n            labelCol={{ xs: 24 }}\n            labelAlign={\"left\"}\n            rules={[\n              {\n                required: sameCollectionAssets.length > 0,\n                message: \"Please select bundle items\",\n              },\n            ]}\n          >\n            <Select\n              mode=\"multiple\"\n              style={{ width: \"100%\" }}\n              size=\"large\"\n              placeholder=\"Please select\"\n              // onChange={handleChange}\n              options={\n                sameCollectionAssets.map((a) => ({\n                  label: a.name,\n                  value: a.asset_id,\n                })) as SelectProps[\"options\"]\n              }\n            />\n          </Form.Item>\n        </Col>\n      )}\n    </Row>\n  );\n}\n","import { Col, Form, FormInstance, Input, Row, Select } from \"antd\";\nimport { StartSellProps } from \"..\";\nimport {\n  SupportCurrency,\n  supportCurrencyOptions,\n} from \"../../../../types/Currency\";\n\ninterface Props {\n  form: FormInstance<StartSellProps>;\n}\nexport default function P2OSaleForm({ form }: Props) {\n  return (\n    <Row gutter={[16, 16]}>\n      <Col xs={24}>\n        <Form.Item\n          name=\"currency\"\n          label={<p className=\"font-md fw2\">Currency</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          initialValue=\"usd\"\n          rules={[{ required: true }]}\n        >\n          <Select\n            size=\"large\"\n            options={supportCurrencyOptions.filter((o) => o.value === \"usd\")}\n            onChange={(currency) =>\n              form.setFieldsValue({ currency: currency as SupportCurrency })\n            }\n          />\n        </Form.Item>\n      </Col>\n      <Col xs={24}>\n        <Form.Item\n          name=\"price\"\n          label={<p className=\"font-md fw2\">Price</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          rules={[{ required: true }]}\n        >\n          <Input size=\"large\" type=\"number\" />\n        </Form.Item>\n      </Col>\n    </Row>\n  );\n}\n","import { Col, Form, FormInstance, Input, Row, Select } from \"antd\";\nimport { StartSellProps } from \"..\";\nimport {\n  SupportCurrency,\n  supportCurrencyOptions,\n} from \"../../../../types/Currency\";\n\ninterface Props {\n  form: FormInstance<StartSellProps>;\n}\nexport default function AuctionSaleForm({ form }: Props) {\n  return (\n    <Row gutter={[16, 16]}>\n      <Col xs={24}>\n        <Form.Item\n          name=\"currency\"\n          label={<p className=\"font-md fw2\">Currency</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          initialValue='wax'\n          rules={[{ required: true }]}\n        >\n          <Select\n            size=\"large\"\n            options={supportCurrencyOptions.filter((o) => o.value === \"wax\")}\n            onChange={(currency) =>\n              form.setFieldsValue({ currency: currency as SupportCurrency })\n            }\n          />\n        </Form.Item>\n      </Col>\n\n      <Col xs={12}>\n        <Form.Item\n          name=\"price\"\n          label={<p className=\"font-md fw2\">Price</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          rules={[{ required: true }]}\n        >\n          <Input size=\"large\" type=\"number\" />\n        </Form.Item>\n      </Col>\n\n\n      <Col xs={12}>\n        <Form.Item\n          name=\"buy_now_price\"\n          label={<p className=\"font-md fw2\">Buy now price</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          rules={[{ required: true }]}\n        >\n          <Input size=\"large\" type=\"number\" />\n        </Form.Item>\n      </Col>\n\n      <Col xs={12}>\n        <Form.Item\n          name=\"days\"\n          label={<p className=\"font-md fw2\">Days</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          rules={[{ required: true }]}\n        >\n          <Input size=\"large\" type=\"number\" />\n        </Form.Item>\n      </Col>\n\n      <Col xs={12}>\n        <Form.Item\n          name=\"hours\"\n          label={<p className=\"font-md fw2\">Hours</p>}\n          colon={false}\n          labelCol={{ xs: 24 }}\n          labelAlign={\"left\"}\n          rules={[{ required: true }]}\n        >\n          <Input size=\"large\" type=\"number\" />\n        </Form.Item>\n      </Col>\n    </Row>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\nimport { SaleType } from \"../../../../types/Sale\";\nimport { WithLabelAndDesc } from \"../../../../types/WithLabel\";\nimport \"./index.css\";\n\ninterface Props {\n  saleType: SaleType;\n}\nexport default function SellFee({ saleType }: Props) {\n  const fees: WithLabelAndDesc<string>[] = [\n    {\n      label: \"Creator Earnings\",\n      value: \"15%\",\n    },\n    {\n      label: \"Marketplace Fee\",\n      value: \"2%\",\n    },\n    {\n      label: \"Tokenomics Fee\",\n      value: \"2%\",\n    },\n  ];\n\n  if (saleType === \"p2o\") fees.push({ label: \"P2O Fee\", value: \"10%\" });\n\n  return (\n    <Row className=\"sale-fee-wrapper\">\n      {fees.map((fee) => (\n        <Col xs={24 / fees.length}>\n          <Row>\n            <Col xs={24}>\n              <p className=\"font-sm color-text-secondary\">{fee.label}</p>\n            </Col>\n            <Col xs={24}>\n              <p className=\"font-md color-text-primary fw3\">{fee.value}</p>\n            </Col>\n          </Row>\n        </Col>\n      ))}\n    </Row>\n  );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Col, Form, Modal, Row, Switch } from \"antd\";\nimport { Asset, BaseAsset } from \"../../../types/Asset\";\nimport { SupportCurrency } from \"../../../types/Currency\";\nimport { SaleType } from \"../../../types/Sale\";\nimport AssetCardPreviewWithDefaultContent from \"../../AssetCard/components/AssetCard/AssetCardPreviewWithDefaultContent\";\nimport SellTypes from \"./TypeOfSale\";\nimport RapidSaleForm from \"./SellForm/RapidSaleForm\";\nimport FooterAcceptPolicy from \"../../ModalWithAcceptPolicy/Footer\";\nimport { useContext, useEffect, useState } from \"react\";\nimport P2OSaleForm from \"./SellForm/P2OSaleForm\";\nimport AuctionSaleForm from \"./SellForm/AuctionSaleForm\";\nimport SellFee from \"./Fee\";\nimport \"./index.css\";\nimport { assetController } from \"../../../controller\";\nimport { WaxAuthenContext } from \"../../../hook/useWaxAuthen\";\n\nexport interface StartSellProps {\n  saleType: SaleType;\n  currency: SupportCurrency;\n  price: number;\n  buy_now_price: number;\n  isEnableBundleSale: boolean;\n  bundleItems: string[];\n  days: number;\n  hours: number;\n}\n\nexport interface SellFormFields extends StartSellProps {\n  isAcceptPolicy: boolean;\n}\n\ninterface Props {\n  isOpen: boolean;\n  onCancel(): void;\n  asset: BaseAsset;\n  startSell(props: StartSellProps): void;\n}\n\nexport default function SellAsset({\n  isOpen,\n  onCancel,\n  asset,\n  startSell,\n}: Props) {\n  const [form] = Form.useForm<SellFormFields>();\n  const { authen } = useContext(WaxAuthenContext);\n  const saleType = Form.useWatch(\"saleType\", form);\n  const isAcceptPolicy = Form.useWatch(\"isAcceptPolicy\", form);\n  const isEnableBundleSale = Form.useWatch(\"isEnableBundleSale\", form);\n  const bundleItems = Form.useWatch(\"bundleItems\", form);\n  const price = Form.useWatch(\"price\", form);\n  const [state, setState] = useState<State>({ sameCollectionAssets: [] });\n\n  console.log({ saleType, isAcceptPolicy, price, isEnableBundleSale, bundleItems });\n\n  useEffect(() => {\n    form.setFieldsValue({ saleType: \"rapid-sale\", isAcceptPolicy: true });\n  }, [JSON.stringify(asset), isOpen]);\n\n  useEffect(() => {\n    assetController\n      .list({\n        collection_name: asset.collection_name,\n        page: 1,\n        limit: 48,\n        owner: authen.userAccount,\n      })\n      .then((resp) => {\n        setState({\n          sameCollectionAssets: resp.items.filter(\n            (a) => a.asset_id !== asset.asset_id\n          ),\n        });\n      });\n  }, []);\n\n  console.log(state.sameCollectionAssets);\n\n  return (\n    <Modal\n      className=\"modal-without-footer\"\n      width={640}\n      open={isOpen}\n      onCancel={() => {\n        form.resetFields();\n        onCancel();\n      }}\n      footer={<div />}\n    >\n      <Form\n        onFinish={(values) => {\n          console.log({ values });\n          startSell(values);\n        }}\n        form={form}\n        layout=\"vertical\"\n      >\n        <Row gutter={[0, 24]}>\n          <Col xs={24}>\n            <Row className=\"sale-asset-wrapper\" gutter={[24, 24]}>\n              <Col style={{ marginTop: 24 }} xs={24}>\n                <h1 style={{ textAlign: \"center\" }}>List NFT for sale</h1>\n              </Col>\n              <Col xs={24} md={24}>\n                <Row\n                  className=\"preview-wrapper\"\n                  align={\"middle\"}\n                  justify={\"space-between\"}\n                  gutter={[16, 16]}\n                >\n                  <Col xs={16}>\n                    <AssetCardPreviewWithDefaultContent asset={asset} />\n                  </Col>\n                  {saleType === \"rapid-sale\" && (\n                    <Col xs={8}>\n                      <Row align={\"middle\"} gutter={8}>\n                        <Col>\n                          <p className=\"font-md fw2\">Sell as a bundle</p>\n                        </Col>\n                        <Col>\n                          <Form.Item\n                            style={{ marginBottom: 0 }}\n                            className=\"space-between\"\n                            colon={false}\n                            hidden={saleType !== \"rapid-sale\"}\n                            name=\"isEnableBundleSale\"\n                          >\n                            <Switch />\n                          </Form.Item>\n                        </Col>\n                      </Row>\n                    </Col>\n                  )}\n                </Row>\n              </Col>\n              <Col xs={24} md={24}>\n                {/* type */}\n                <Row gutter={[24, 24]}>\n                  <Col xs={24}>\n                    <h4 className=\"mb1\">Type of listing</h4>\n                    <SellTypes\n                      selectedSaleType={saleType}\n                      onSelectSaleType={(saleType) => {\n                        form.setFieldsValue({\n                          saleType,\n                          currency: saleType === \"auction\" ? \"wax\" : \"usd\",\n                        });\n                      }}\n                    />\n                  </Col>\n                  <Col xs={24}>\n                    {/* detail */}\n                    {saleType === \"rapid-sale\" && (\n                      <RapidSaleForm\n                        isEnableBundleSale={isEnableBundleSale}\n                        form={form}\n                        sameCollectionAssets={state.sameCollectionAssets}\n                      />\n                    )}\n                    {saleType === \"p2o\" && <P2OSaleForm form={form} />}\n                    {saleType === \"auction\" && <AuctionSaleForm form={form} />}\n                  </Col>\n\n                  {/* fee */}\n                  <Col xs={24}>\n                    <SellFee saleType={saleType} />\n                  </Col>\n                </Row>\n              </Col>\n            </Row>\n          </Col>\n          <Col xs={24}>\n            <FooterAcceptPolicy\n              isAcceptPolicy={isAcceptPolicy}\n              onAcceptPolicy={(isAcceptPolicy) => {\n                console.log({ isAcceptPolicy });\n                form.setFieldsValue({\n                  isAcceptPolicy: true,\n                  saleType: \"rapid-sale\",\n                });\n              }}\n              actions={\n                <Form.Item>\n                  <button type=\"submit\" className=\"btn btn-primary-active\">\n                    List NFT\n                  </button>\n                </Form.Item>\n              }\n            />\n          </Col>\n        </Row>\n      </Form>\n    </Modal>\n  );\n}\n\ninterface State {\n  sameCollectionAssets: Asset[];\n}\n","import { Modal, Row, Col } from \"antd\";\nimport styled from \"styled-components\";\nimport { BaseAsset } from \"../../../../../types/Asset\";\nimport AwaitProgressTimeLine, {\n  AwaitProgressItemProps,\n} from \"../../../../AwaitProgressTimeline\";\nimport AssetCardPreviewWithDefaultContent from \"../../AssetCard/AssetCardPreviewWithDefaultContent\";\n\nexport const ContentWrapper = styled(Row)`\n  .preview {\n    width: 180px;\n    margin-right: 48px;\n  }\n  .progress {\n  }\n\n  .progress > .title {\n    font-weight: 700;\n    margin-bottom: 24px;\n  }\n\n  .finish {\n    margin-top: 40px;\n  }\n\n  @media (max-width: 768px) {\n    justify-content: center;\n\n    .content {\n      justify-content: center;\n    }\n\n    .preview {\n      width: 300px;\n      margin-right: 0px;\n    }\n    .progress {\n      margin-top: 24px;\n    }\n\n    .finish {\n      margin-top: 24px;\n    }\n\n    .finish > p {\n      text-align: center;\n    }\n  }\n`;\n\ninterface Props {\n  visible: boolean;\n  asset: BaseAsset;\n  hasFinish: boolean;\n  finishDescription?: JSX.Element;\n  onCancel: () => void;\n  onFinish: () => void;\n  steps: AwaitProgressItemProps[];\n}\nexport function SellProgressingModal({\n  asset,\n  visible,\n  onCancel,\n  onFinish,\n  hasFinish,\n  steps,\n  finishDescription,\n}: Props) {\n  return (\n    <Modal\n      className=\"with-policy-modal\"\n      centered\n      open={visible}\n      title={<span className=\"font-lg\">Sale asset</span>}\n      onCancel={onCancel}\n      footer={[\n        <Row align=\"middle\" justify=\"space-between\" key={\"footer\"}>\n          <Col xs={24}>\n            <button\n              style={{ width: \"100%\", borderRadius: 100 }}\n              className=\"btn btn-primary-active list-nft-btn\"\n              key=\"submit\"\n              disabled={!hasFinish}\n              onClick={onFinish}\n            >\n              Close\n            </button>\n          </Col>\n        </Row>,\n      ]}\n      width={560}\n    >\n      <ContentWrapper>\n        <Row gutter={[0, 40]} className=\"content\">\n          <Col\n            style={{\n              background: \"rgba(229, 226, 253, 0.16)\",\n              boxShadow: \"inset 16px 16px 40px rgba(125, 112, 246, 0.12)\",\n              borderRadius: 16,\n              padding: '16px',\n            }}\n            xs={24}\n            className=\"preview\"\n          >\n            <AssetCardPreviewWithDefaultContent asset={asset} />\n          </Col>\n          <Col xs={24} className=\"progress\">\n            <AwaitProgressTimeLine items={steps} />\n          </Col>\n        </Row>\n        {hasFinish && <div className=\"finish\">{finishDescription}</div>}\n      </ContentWrapper>\n    </Modal>\n  );\n}\n","import BigNumber from \"bignumber.js\";\nimport { useContext, useState } from \"react\";\nimport { getMedianValue } from \"../../../../hook/useMedian\";\nimport UseTransactionProgress from \"../../../../hook/useTransactionProgress\";\nimport useUal from \"../../../../hook/useUal\";\nimport { WaxAuthenContext } from \"../../../../hook/useWaxAuthen\";\nimport { getAcceptBcbrawlers } from \"../../../../services/RpcService\";\nimport { Asset } from \"../../../../types/Asset\";\nimport { SupportCurrency } from \"../../../../types/Currency\";\nimport {\n  convertToSeconds,\n  convertToWaxp,\n  isSupportAutoRetrive,\n} from \"../../../../utils/helpers\";\n\nexport enum AssetQueryType {\n  Sales = \"sales\",\n  Deferred = \"deferred\",\n  Auctions = \"auctions\",\n  Lending = \"lending\",\n  Activity = \"activity\",\n}\n\ninterface Props {\n  asset: Asset;\n}\n\nexport interface DoRapidSaleParams {\n  newPrice: number;\n  bundleItems: string[];\n  currency: SupportCurrency;\n}\nexport interface DoP2OParams {\n  newPrice: number;\n  currency: SupportCurrency;\n}\n\nexport interface DoLendingParams {\n  loan_initial_fee: number;\n  loan_fee: number;\n  period_in_hour: number;\n  duration: number;\n  listing_duration: number;\n  currency: SupportCurrency;\n}\n\nexport interface DoAuctionParams {\n  days: number;\n  hours: number;\n  price: number;\n  buy_now_price: number;\n  currency: SupportCurrency;\n}\n\nexport default function useSellableAsset({ asset }: Props) {\n  const UseUal = useUal();\n  const { sell, checkTransaction, createAuction } = UseUal;\n  const { acceptBcbrawlersTerm, deferSupportAutoRetrive, defer } = UseUal;\n  const { authen } = useContext(WaxAuthenContext);\n  const transactionProgress = UseTransactionProgress({});\n  const { onError, progress } = transactionProgress;\n  const [state, setState] = useState<State>({ asset });\n\n  const setPartialState = (partial: Partial<State>) =>\n    setState((prev) => ({ ...prev, ...partial }));\n\n  const onStart = (\n    type: AssetQueryType,\n    price: number,\n    currency: SupportCurrency\n  ) => {\n    transactionProgress.onStart();\n    setPartialState({ sell: { type, price, currency } });\n  };\n\n  const onFinish = () =>\n    transactionProgress.onFinish(\n      \"Transaction finished\",\n      \"The asset was successfully placed on the market!\"\n    );\n\n  const processingTransaction = async (tx: any) => {\n    progress.startStep(2);\n    await checkTransaction(tx);\n    progress.startStep(3);\n    onFinish();\n  };\n\n  const roundPrice = (price: number, precision = 2) => {\n    return (\n      Math.trunc(price * Math.pow(10, precision)) / Math.pow(10, precision)\n    );\n  };\n\n  const convertPrice = (price: number, currency: SupportCurrency) =>\n    currency === \"wax\"\n      ? `${new BigNumber(price).toFixed(8)} WAX`\n      : `${new BigNumber(price).toFixed(2)} USD`;\n\n  const doRapidSale = async (params: DoRapidSaleParams) => {\n    const { bundleItems, currency } = params;\n    const newPrice = roundPrice(params.newPrice);\n    onStart(AssetQueryType.Sales, newPrice, currency);\n    try {\n      const convertedPrice = convertPrice(newPrice, currency);\n      const assetIds = [asset.asset_id].concat(bundleItems || []);\n      const tx = await sell(convertedPrice, authen.userAccount, assetIds);\n      await processingTransaction(tx);\n    } catch (error) {\n      onError(\"Error placing on sale\", error.message);\n    }\n  };\n\n  const doAuction = async (params: DoAuctionParams) => {\n    const { currency, days, hours } = params;\n    console.log(\"Do Auction\", params);\n    const price = roundPrice(params.price, 8);\n    const buyNowPrice = roundPrice(params.buy_now_price, 8);\n    onStart(AssetQueryType.Auctions, price, currency);\n\n    try {\n      const duration = convertToSeconds(days, hours);\n      const tx = await createAuction(\n        authen.userAccount,\n        asset.asset_id,\n        price,\n        duration,\n        buyNowPrice\n      );\n      processingTransaction(tx);\n    } catch (error) {\n      onError(\"Error creating Auction\", error.message);\n    }\n  };\n\n  const doLending = (params: DoLendingParams) => {\n    console.log(params);\n  };\n\n  const doP2O = async (params: DoP2OParams) => {\n    const { currency } = params;\n    const newPrice = roundPrice(params.newPrice);\n    const { asset_id, collection_name, schema_name } = asset;\n\n    onStart(AssetQueryType.Deferred, newPrice, currency);\n    try {\n      const medianValue = await getMedianValue();\n      const depositFee = `${convertToWaxp(newPrice * 10, medianValue)} WAX`;\n\n      const assets = [asset_id];\n      const convertedPrice = convertPrice(newPrice, currency);\n      let tx = null;\n\n      if (isSupportAutoRetrive(collection_name, schema_name)) {\n        const isAcceptBc = await getAcceptBcbrawlers(authen.userAccount);\n        if (!isAcceptBc?.rows?.length) {\n          const acceptBc = await acceptBcbrawlersTerm(authen.userAccount);\n          await checkTransaction(acceptBc);\n        }\n        tx = await deferSupportAutoRetrive(\n          authen.userAccount,\n          assets,\n          convertedPrice\n        );\n      } else {\n        tx = await defer(\n          authen.userAccount,\n          assets,\n          convertedPrice,\n          medianValue,\n          depositFee\n        );\n      }\n      processingTransaction(tx);\n    } catch (error) {\n      onError(\"Error placing on sale\", error.message);\n    }\n  };\n\n  return {\n    ...state,\n    ...transactionProgress,\n    doRapidSale,\n    doAuction,\n    doLending,\n    doP2O,\n    setSellableAssetCardState: setPartialState,\n  };\n}\n\ninterface State {\n  asset: Asset;\n  sell?: {\n    type: AssetQueryType;\n    currency: SupportCurrency;\n    price: number;\n  };\n}\n","import { useContext } from \"react\";\nimport { Asset } from \"../../../types/Asset\";\nimport SellAsset from \"../../AssetAction/SellAsset\";\nimport AssetCard from \"../../AssetCard\";\nimport { AssetCardProps } from \"../../AssetCard/components/AssetCard\";\nimport { SellProgressingModal } from \"../../AssetCard/components/AssetCardSellable/components/SellProgressingModal\";\nimport useSellableAsset from \"../../AssetCard/components/AssetCardSellable/useSellableAsset\";\n\nexport interface SellableAssetCardProps extends AssetCardProps {\n  asset: Asset;\n}\n\nexport default function SellableAsset(props: SellableAssetCardProps) {\n  const { asset } = props;\n\n  const {\n    sell,\n    isConfirming,\n    isProgressing,\n    progress,\n    setTransactionProgressState,\n    doAuction,\n    doRapidSale,\n    doP2O,\n  } = useSellableAsset({ asset });\n\n\n  const onViewAfterSale = () => {\n    setTransactionProgressState({ isProgressing: false });\n  };\n\n  return (\n    <div>\n      <span\n        className=\"fw3\"\n        aria-hidden=\"true\"\n        onClick={() => setTransactionProgressState({ isConfirming: true })}\n      >\n        Sell Now\n      </span>\n\n      {isConfirming && <SellAsset\n        asset={asset}\n        isOpen={isConfirming}\n        onCancel={() =>\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          })\n        }\n        startSell={(props) => {\n          const { currency, price, buy_now_price, days, hours,bundleItems } = props;\n          console.log({ props });\n          switch (props.saleType) {\n            case \"rapid-sale\":\n              doRapidSale({ currency, newPrice: props.price, bundleItems: bundleItems });\n              break;\n            case \"p2o\":\n              doP2O({ currency, newPrice: props.price });\n              break;\n            case \"auction\":\n              doAuction({ currency, price, buy_now_price, days, hours });\n              break;\n          }\n        }}\n      />}\n      {isProgressing && <SellProgressingModal\n        {...progress}\n        asset={asset}\n        hasFinish={progress.hasFinish}\n        visible={isProgressing}\n        onFinish={() => {\n          setTransactionProgressState({\n            isProgressing: false,\n            isConfirming: false,\n          });\n          window.location.reload();\n        }}\n        onCancel={() => {\n          setTransactionProgressState({\n            isProgressing: false,\n            isConfirming: false,\n          });\n          window.location.reload();\n        }}\n      />}\n    </div>\n  );\n}\n","import { Col, Form, InputNumber, Modal, Row, Select } from \"antd\";\nimport { useEffect, useState } from \"react\";\nimport useUal from \"../../../hook/useUal\";\nimport { Auction } from \"../../../types/Auction\";\nimport { supportCurrencyOptions } from \"../../../types/Currency\";\nimport AssetCardPreviewWithDefaultContent from \"../../AssetCard/components/AssetCard/AssetCardPreviewWithDefaultContent\";\nimport { DoBidParams } from \"../../AssetCard/instances/Auction/biddable/component/ConfirmBidModal\";\nimport FooterAcceptPolicy from \"../../ModalWithAcceptPolicy/Footer\";\nimport SalePreview from \"../SalePreview\";\n\ninterface Props {\n  isOpen: boolean;\n  onCancel: () => void;\n  onConfirmed: (params: DoBidParams) => void;\n  sale: Auction;\n}\n\nconst PRICE_STEP = 0.00000001;\nexport default function BidTheAuction({\n  isOpen,\n  onCancel,\n  onConfirmed,\n  sale,\n}: Props) {\n  const { getAtomicConfig } = useUal();\n  const [form] = Form.useForm();\n  const price = Form.useWatch(\"price\", form);\n\n  const [state, setState] = useState<State>({\n    isAcceptPolicy: true,\n    minimumBidIncrease: 0,\n  });\n\n  useEffect(() => {\n    getAtomicConfig().then((value) => {\n      setState((prev) => ({\n        ...prev,\n        minimumBidIncrease: Number(value.minimum_bid_increase) || 0,\n      }));\n\n      form.setFieldsValue({\n        price: calcMinimumAmount(Number(value.minimum_bid_increase || 0)),\n      });\n    });\n  }, []);\n\n  const calcMinimumAmount = (minimumBidIncrease: number) =>\n    sale.price && sale?.bid_count === 0\n      ? sale.price / 100000000\n      : sale.price / 100000000 +\n        (sale.price / 100000000) * minimumBidIncrease +\n        PRICE_STEP;\n\n  const minimumAmount = calcMinimumAmount(state.minimumBidIncrease);\n\n  return (\n    <Modal\n      className=\"with-policy-modal\"\n      width={560}\n      open={isOpen}\n      onCancel={onCancel}\n      footer={\n        <FooterAcceptPolicy\n          isAcceptPolicy={state.isAcceptPolicy}\n          onAcceptPolicy={(isAcceptPolicy) =>\n            setState((prev) => ({ ...prev, isAcceptPolicy }))\n          }\n          actions={\n            <button\n              className=\"btn btn-primary-active\"\n              type=\"submit\"\n              disabled={!state.isAcceptPolicy}\n              onClick={(e) => onConfirmed({ bid: price, currency: \"wax\" })}\n            >\n              Bid NFT\n            </button>\n          }\n        />\n      }\n    >\n      <Row gutter={[24, 24]}>\n      <Col style={{ marginTop: 24 }} xs={24}>\n            <h1 style={{ textAlign: \"center\", marginTop: 24 }}>Bid NFT</h1>\n          </Col>\n        <Col xs={24} md={24}>\n          <SalePreview sale={sale} />\n        </Col>\n        <Col xs={24} md={24}>\n          <Form form={form} layout=\"vertical\">\n            <Row gutter={[16, 16]}>\n              <Col xs={24}>\n                <Row gutter={[16, 16]}>\n                  <Col xs={12}>\n                    <Form.Item name=\"currency\" label={<span className=\"fw2\">Currency</span>}>\n                      <Select\n                        style={{ width: \"100%\" }}\n                        defaultValue={\"wax\"}\n                        size=\"large\"\n                        onChange={(value, option) => {}}\n                        options={supportCurrencyOptions.filter(\n                          (o) => o.value === \"wax\"\n                        )}\n                      />\n                    </Form.Item>\n                  </Col>\n                  <Col xs={12}>\n                    <Form.Item\n                      style={{ width: \"100%\" }}\n                      name=\"price\"\n                      rules={[\n                        {\n                          validator: async (_, values) => {\n                            if (Number(values) < minimumAmount) {\n                              return Promise.reject(\n                                new Error(\n                                  `Minimum bid should not be less than ${minimumAmount.toFixed(\n                                    8\n                                  )} WAX`\n                                )\n                              );\n                            }\n                          },\n                        },\n                      ]}\n                      label={<span className=\"fw2\">Price</span>}\n                    >\n                      <InputNumber\n                        style={{ width: \"100%\" }}\n                        name=\"price\"\n                        placeholder=\"Price\"\n                        defaultValue={minimumAmount}\n                        size=\"large\"\n                        step={PRICE_STEP}\n                        onChange={(price) => {\n                          form.setFieldsValue({\n                            price,\n                          });\n                        }}\n                      />\n                    </Form.Item>\n                  </Col>\n                </Row>\n              </Col>\n            </Row>\n          </Form>\n        </Col>\n      </Row>\n    </Modal>\n  );\n}\n\ninterface State {\n  isAcceptPolicy: boolean;\n  minimumBidIncrease: number;\n}\n","import { useContext, useState } from \"react\";\nimport { NavigatorContext } from \"../../../hook/useNavigator\";\nimport UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport UseWaxAuthen from \"../../../hook/useWaxAuthen\";\nimport { Auction } from \"../../../types/Auction\";\nimport { SupportCurrency } from \"../../../types/Currency\";\nimport BidTheAuction from \"../../AssetAction/BidTheAuction\";\nimport { ProcessingBuyModal } from \"../../AssetCard/components/ProcessingBuyModal\";\nimport { DoBidParams } from \"../../AssetCard/instances/Auction/biddable/component/ConfirmBidModal\";\nimport { AssetDetailContext } from \"../../marketplace/context/useAssetDetail\";\n\ninterface Props {\n  sale: Auction;\n}\n\nexport default function AuctionBiddable(props: Props) {\n  const { goToUserInventory } = useContext(NavigatorContext);\n  const { setAssetDetail } = useContext(AssetDetailContext);\n\n  const [state, setState] = useState<State>({\n    bid: 0,\n    currency: \"wax\",\n  });\n  const { sale } = props;\n  const {\n    progress,\n    isConfirming,\n    isProgressing,\n    setTransactionProgressState,\n    onError,\n    onFinish,\n    onStart,\n    onReset,\n  } = UseTransactionProgress({});\n\n  const { auctionBid, checkTransaction } = useUal();\n  const { authen } = UseWaxAuthen();\n\n  const doBid = async (params: DoBidParams) => {\n    const { bid } = params;\n    console.log({ params });\n    setState(params);\n\n    onStart();\n    try {\n      const tx: any = await auctionBid(bid, sale.id, sale.market_contract);\n      progress.startStep(2);\n      await checkTransaction(tx);\n      progress.startStep(3);\n      onFinish(\"Transaction finished\", \"The bid was successfully sent!\");\n    } catch (error) {\n      onError(\"Error on placing a bid\", error.message);\n    }\n  };\n  return (\n    <div>\n      <span\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        Bid Now\n      </span>\n      <BidTheAuction\n        isOpen={isConfirming}\n        onCancel={() => setTransactionProgressState({ isConfirming: false })}\n        onConfirmed={doBid}\n        sale={props.sale}\n      />\n\n      <ProcessingBuyModal\n        hasFinish={progress.hasFinish}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        finishDescription={\n          <p className=\"font-lg fw4\">\n            Congrats! You just placed a bid on{\" \"}\n            <span className=\"font-lg color-primary\">\n              {sale.assets?.[0]?.name}\n            </span>{\" \"}\n            for {state.bid} {state.currency.toLocaleUpperCase()}. Please view\n            your NFTs in the{\" \"}\n            <span\n              style={{  cursor: \"pointer\" }}\n              className=\"font-lg color-primary\"\n              onClick={() => {\n                setAssetDetail(null);\n                goToUserInventory();\n                onReset();\n              }}\n            >\n              Marketplace Inventory\n            </span>\n            !\n          </p>\n        }\n        sale={props.sale}\n        steps={progress.steps}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}\n\ninterface State {\n  currency: SupportCurrency;\n  bid: number;\n}\n","import { wait } from \"../../../helpers/TimeoutHelper\";\nimport UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport { Auction, AuctionState } from \"../../../types/Auction\";\nimport CancellingSaleModal from \"../../AssetCard/components/CancellingSaleModal\";\nimport CancelSaleModal from \"../../AssetCard/components/CancelSaleModal\";\n\ninterface Props {\n  sale: Auction;\n}\n\nexport default function AuctionCancellable(props: Props) {\n  const { sale } = props;\n  const {\n    isConfirming,\n    isProgressing,\n    onError,\n    onFinish,\n    onStart,\n    progress,\n    setTransactionProgressState,\n  } = UseTransactionProgress({});\n  const { cancelAuction } = useUal();\n\n  const checkAuctionCancelled = (auctionId: string) =>\n    new Promise<boolean>((resolve) => {\n      wait(2000);\n      resolve(true);\n    });\n\n  const doCancelAuction = async (auction: Auction) => {\n    onStart();\n    try {\n      await cancelAuction(auction.id, auction.market_contract);\n      progress.startStep(2);\n      const isCancelled = await checkAuctionCancelled(auction.id);\n      progress.startStep(3);\n      if (isCancelled)\n        onFinish(\n          \"Transaction finished\",\n          \"The asset sale was cancelled, and the offer was removed from the market!\"\n        );\n    } catch (error) {\n      onError(\"Transaction failed!\", error.message);\n    }\n  };\n\n  return (\n    <div>\n      <span\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        {sale.state === AuctionState.ADMIN_REMOVED\n          ? \"Withdraw\"\n          : \"Cancel Auction\"}\n      </span>\n\n      <CancelSaleModal\n        onCancel={() => setTransactionProgressState({ isConfirming: false })}\n        onSubmit={() => doCancelAuction(sale)}\n        sale={sale}\n        visible={isConfirming}\n      />\n\n      <CancellingSaleModal\n        hasFinish={progress.hasFinish}\n        steps={progress.steps}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        sale={sale}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}\n","import { Modal } from \"antd\";\nimport { BaseSale } from \"../../../types/Sale\";\nimport AwaitProgressTimeLine, {\n  AwaitProgressItemProps,\n} from \"../../AwaitProgressTimeline\";\n\ninterface Props {\n  visible: boolean;\n  sale: BaseSale;\n  hasFinish: boolean;\n  onCancel: () => void;\n  onFinish: () => void;\n  steps: AwaitProgressItemProps[];\n  title: string;\n}\nexport function ProcessingModal({\n  visible,\n  onCancel,\n  onFinish,\n  hasFinish,\n  steps,\n  title,\n}: Props) {\n  return (\n    <Modal\n      centered\n      visible={visible}\n      title={title}\n      onCancel={onCancel}\n      footer={[\n        <button\n          className=\"btn btn-primary list-nft-btn\"\n          key=\"submit\"\n          disabled={!hasFinish}\n          onClick={onFinish}\n        >\n          Close\n        </button>,\n      ]}\n      width={400}\n    >\n      <AwaitProgressTimeLine items={steps} />\n    </Modal>\n  );\n}\n","import { Button, Modal } from \"antd\";\nimport React from \"react\";\nimport { Typography } from \"antd\";\nimport { Auction } from \"../../../../../../types/Auction\";\n\nconst { Text } = Typography;\n\ninterface Props {\n\tvisible: boolean;\n\tonCancel: () => void;\n\tonConfirmed: (sale: Auction) => void;\n\tsale: Auction;\n}\n\nexport default function ConfirmClaimModal({\n\tvisible,\n\tonCancel,\n\tonConfirmed,\n\tsale,\n}: Props) {\n\treturn (\n\t\t<Modal\n\t\t\tcentered\n\t\t\tvisible={visible}\n\t\t\ttitle={`Claim Auction #${sale.auction_id}`}\n\t\t\tonCancel={onCancel}\n\t\t\tfooter={[\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"btn btn-primary list-nft-btn-no\"\n\t\t\t\t\tkey=\"reset\"\n\t\t\t\t\tonClick={onCancel}\n\t\t\t\t>\n\t\t\t\t\tNo\n\t\t\t\t</button>,\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"btn btn-primary list-nft-btn\"\n\t\t\t\t\tkey=\"submit\"\n\t\t\t\t\tonClick={() => onConfirmed(sale)}\n\t\t\t\t>\n\t\t\t\t\tYes\n\t\t\t\t</button>,\n\t\t\t]}\n\t\t\twidth={400}\n\t\t>\n\t\t\t<Text strong>\n\t\t\t\tAre you sure you want to claim this auction #{sale.auction_id}?\n\t\t\t</Text>\n\t\t</Modal>\n\t);\n}\n","import UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport { Auction } from \"../../../types/Auction\";\nimport { ProcessingModal } from \"../../AssetCard/components/ProcessingModal\";\nimport ConfirmClaimModal from \"../../AssetCard/instances/Auction/claimable/component/ConfirmClaimModal\";\n\ninterface Props {\n  sale: Auction;\n  claimType: \"item\" | \"amount\";\n}\n\nexport default function AuctionClaimable(props: Props) {\n  const {\n    progress,\n    isConfirming,\n    isProgressing,\n    setTransactionProgressState,\n    onError,\n    onFinish,\n    onStart,\n  } = UseTransactionProgress({});\n\n  const { claimAuction, claimAuctionSell, checkTransaction } = useUal();\n\n  const doClaim = async (auction: Auction) => {\n    onStart();\n    try {\n      const tx: any =\n        props.claimType === \"item\"\n          ? await claimAuction(auction.id, auction.market_contract)\n          : await claimAuctionSell(auction.auction_id, auction.market_contract);\n      progress.startStep(2);\n      await checkTransaction(tx);\n      progress.startStep(3);\n      onFinish(\"Transaction finished\", \"The bid was successfully sent!\");\n    } catch (error) {\n      onError(\"Error on placing a bid\", error.message);\n    }\n  };\n\n  return (\n    <div>\n      <span\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        {props.claimType === \"item\" ? \"Claim\" : \"Claim Amount\"}\n      </span>\n      <ConfirmClaimModal\n        visible={isConfirming}\n        onCancel={() => setTransactionProgressState({ isConfirming: false })}\n        onConfirmed={doClaim}\n        sale={props.sale}\n      />\n\n      <ProcessingModal\n        title={`Claiming auction #${props.sale.auction_id}`}\n        hasFinish={progress.hasFinish}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        sale={props.sale}\n        steps={progress.steps}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}\n","import React from \"react\";\nimport { Auction } from \"../../../types/Auction\";\n\ninterface Props {\n  sale: Auction;\n}\n\nexport default function AuctionNotCancellable(props: Props) {\n  return (\n    <span style={{ color: \"#ddd\" }} aria-hidden>\n      In Bidding Progress\n    </span>\n  );\n}\n","import { Auction } from \"../../../types/Auction\";\n\ninterface Props {\n  sale: Auction;\n}\nexport default function OnAuction(props: Props) {\n  return <span aria-hidden>On Auction</span>;\n}\n","import { useContext } from \"react\";\nimport { WaxAuthenContext } from \"../../../hook/useWaxAuthen\";\nimport { Auction } from \"../../../types/Auction\";\n\ninterface Props {\n  sale: Auction;\n}\n\nexport default function RequireLoginAuction(props: Props) {\n  const { openLoginPopup } = useContext(WaxAuthenContext);\n\n  return (\n    <div>\n    <span aria-hidden onClick={openLoginPopup}>\n      Buy Now\n    </span>\n    </div>\n  );\n}\n","import { Sale } from \"../../../types/Sale\";\nimport RapidSaleBuyable from \"../RapidSale/RapidSaleBuyable\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function P2OBuyable(props: Props) {\n  return <RapidSaleBuyable {...props} />;\n}\n","import { wait } from \"../../../helpers/TimeoutHelper\";\nimport UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport { Sale, SaleState } from \"../../../types/Sale\";\nimport CancellingSaleModal from \"../../AssetCard/components/CancellingSaleModal\";\nimport CancelSaleModal from \"../../AssetCard/components/CancelSaleModal\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function P2OCancellable(props: Props) {\n  const { sale } = props;\n  const {\n    isConfirming,\n    isProgressing,\n    onError,\n    onFinish,\n    onStart,\n    progress,\n    setTransactionProgressState,\n  } = UseTransactionProgress({});\n  const { cancelSale } = useUal();\n\n  const checkSaleCancelled = (saleId: string) =>\n    new Promise<boolean>((resolve) => {\n      wait(2000);\n      resolve(true);\n      //   const isCancelled = () =>\n      //     getSaleAsset(saleId, sale.market_contract).then((resp) => {\n      //       const sale: Sale = resp.data;\n      //       return [SaleState.CANCELED, SaleState.ADMIN_REMOVED].includes(sale.state);\n      //     });\n\n      //   tryToCheckHelper(isCancelled).then((isCancelled) => resolve(isCancelled));\n    });\n\n  const doCancelSale = async (sale: Sale) => {\n    onStart();\n    try {\n      const { offer_id, sale_id, market_contract } = sale;\n\n      await Promise.all([\n        await cancelSale(offer_id, sale_id, market_contract, true),\n      ]);\n      progress.startStep(2);\n      const isCancelled = await checkSaleCancelled(sale_id);\n      progress.startStep(3);\n      if (isCancelled)\n        onFinish(\n          \"Transaction finished\",\n          \"The asset sale was cancelled, and the offer was removed from the market!\"\n        );\n      else throw new Error(\"The asset sale wasn't cancelled!\");\n    } catch (error) {\n      onError(\"Transaction failed!\", error.message);\n    }\n  };\n  return (\n    <div>\n      <span\n        className=\"fw3\"\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        {sale.state === SaleState.ADMIN_REMOVED ? \"Withdraw\" : \"Cancel Sale\"}\n      </span>\n\n      <CancelSaleModal\n        onCancel={() =>\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          })\n        }\n        onSubmit={() => doCancelSale(sale)}\n        sale={sale}\n        visible={isConfirming}\n      />\n\n      <CancellingSaleModal\n        hasFinish={progress.hasFinish}\n        steps={progress.steps}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        sale={sale}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}\n","import { Button, Modal } from \"antd\";\nimport { Typography } from \"antd\";\n\nconst { Text } = Typography;\n\ninterface Props {\n\tvisible: boolean;\n\tonCancel: () => void;\n\tonConfirmed: () => void;\n\ttitle: string;\n\tcontent: string | JSX.Element;\n}\n\nexport default function ConfirmModal({\n\tvisible,\n\tonCancel,\n\tonConfirmed,\n\ttitle,\n\tcontent,\n}: Props) {\n\treturn (\n\t\t<Modal\n\t\t\tcentered\n\t\t\tvisible={visible}\n\t\t\ttitle={title}\n\t\t\tonCancel={onCancel}\n\t\t\tfooter={[\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"list-nft-btn-no\"\n\t\t\t\t\tsize=\"middle\"\n\t\t\t\t\tkey=\"reset\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\tonClick={onCancel}\n\t\t\t\t>\n\t\t\t\t\tNo\n\t\t\t\t</Button>,\n\t\t\t\t<Button\n\t\t\t\t\tclassName=\"list-nft-btn\"\n\t\t\t\t\tsize=\"middle\"\n\t\t\t\t\tkey=\"submit\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\tonClick={onConfirmed}\n\t\t\t\t>\n\t\t\t\t\tYes\n\t\t\t\t</Button>,\n\t\t\t]}\n\t\t\twidth={400}\n\t\t>\n\t\t\t{typeof content === \"string\" ? <Text strong>{content}</Text> : content}\n\t\t</Modal>\n\t);\n}\n","import UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport { Sale } from \"../../../types/Sale\";\nimport ConfirmModal from \"../../AssetCard/components/ConfirmModal\";\nimport { ProcessingModal } from \"../../AssetCard/components/ProcessingModal\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function P2OClaimable(props: Props) {\n  const {\n    progress,\n    isConfirming,\n    isProgressing,\n    setTransactionProgressState,\n    onError,\n    onFinish,\n    onStart,\n  } = UseTransactionProgress({});\n\n  const { claimDefer, checkTransaction } = useUal();\n\n  const doClaim = async () => {\n    onStart();\n    try {\n      const tx: any = claimDefer(Number(props.sale.sale_id));\n      progress.startStep(2);\n      await checkTransaction(tx);\n      progress.startStep(3);\n      onFinish(\"Transaction finished\", \"The bid was successfully sent!\");\n    } catch (error) {\n      onError(\"Error on claim amount\", error.message);\n    }\n  };\n\n  return (\n    <div>\n      <span\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        Claim Amount\n      </span>\n      <ConfirmModal\n        visible={isConfirming}\n        onCancel={() => setTransactionProgressState({ isConfirming: false })}\n        onConfirmed={doClaim}\n        title=\"Claim Item\"\n        content=\"Are you sure you want to claim this item?\"\n      />\n\n      <ProcessingModal\n        title={`Claiming sale #${props.sale.sale_id}`}\n        hasFinish={progress.hasFinish}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        sale={props.sale}\n        steps={progress.steps}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}\n","import { Sale } from \"../../../types/Sale\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function P2OPendingTransfer(props: Props) {\n  return (\n    <div>\n    <span style={{ color: \"#ddd\" }} aria-hidden>\n      Pending Transfer\n    </span>\n    </div>\n  );\n}\n","import { Sale } from \"../../../types/Sale\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function P2OInprogress(props: Props) {\n  return (\n    <div>\n      <span style={{ color: \"#ddd\" }} aria-hidden>\n        Processing\n      </span>\n    </div>\n  );\n}\n","import { Sale } from \"../../../types/Sale\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function P2OSold(props: Props) {\n  return (\n    <div>\n      <span style={{ color: \"#ddd\" }} aria-hidden>\n        Sold\n      </span>\n    </div>\n  );\n}\n","import { Button, Modal } from \"antd\";\nimport React from \"react\";\nimport { Typography } from \"antd\";\nimport { Sale } from \"../../../../../../types/Sale\";\n\nconst { Text } = Typography;\n\ninterface Props {\n  visible: boolean;\n  onCancel: () => void;\n  onConfirmed: (sale: Sale) => void;\n  sale: Sale;\n}\n\nexport default function ConfirmTransferModal({\n  visible,\n  onCancel,\n  onConfirmed,\n  sale,\n}: Props) {\n  return (\n    <Modal\n      centered\n      visible={visible}\n      title={\"Transfer Item\"}\n      onCancel={onCancel}\n      footer={[\n        <button\n          className=\"btn btn-primary list-nft-btn\"\n          key=\"reset\"\n          onClick={onCancel}\n        >\n          No\n        </button>,\n        <button\n          className=\"btn btn-primary list-nft-btn\"\n          key=\"submit\"\n          onClick={() => onConfirmed(sale)}\n        >\n          Yes\n        </button>,\n      ]}\n      width={400}\n    >\n      <Text strong>Are you sure you want to transfer this item to buyer?</Text>\n    </Modal>\n  );\n}\n","import { get } from \"lodash\";\nimport UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport UseWaxAuthen from \"../../../hook/useWaxAuthen\";\nimport { Sale } from \"../../../types/Sale\";\nimport { ProcessingModal } from \"../../AssetCard/components/ProcessingModal\";\nimport ConfirmTransferModal from \"../../AssetCard/instances/P2O/transferable/component/ConfirmTransferModal\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function P2OTransferable(props: Props) {\n  const { sale } = props;\n  const {\n    isConfirming,\n    isProgressing,\n    onError,\n    onFinish,\n    onStart,\n    progress,\n    setTransactionProgressState,\n  } = UseTransactionProgress({});\n  const { transferDeferred } = useUal();\n  const {authen} = UseWaxAuthen();\n\n  const checkTransferred = (previousOwner: string, assetId: string) =>\n    new Promise<boolean>((resolve) => {\n      return Promise.resolve(true);\n      // const isTransferred = () =>\n      // \tgetBuyAsset(assetId, sale.market_contract).then((resp) => {\n      // \t\tconst asset: Asset = resp.data;\n      // \t\treturn asset.owner !== previousOwner;\n      // \t});\n\n      // tryToCheckHelper(isTransferred).then((isTransferred) =>\n      // \tresolve(isTransferred),\n      // );\n    });\n\n  const doTransfer = async (sale: Sale) => {\n    onStart();\n    const assetId = sale?.assets[0]?.asset_id;\n    try {\n      await transferDeferred(\n        authen.userAccount,\n        get(sale, [\"assets\", 0, \"asset_id\"], \"\"),\n        sale?.sale_id\n      );\n      progress.startStep(2);\n      // const isTransferred = await checkTransferred(sale.seller, assetId);\n      const isTransferred = true;\n      progress.startStep(3);\n      if (isTransferred)\n        onFinish(\n          \"Transaction finished\",\n          \"The asset sale was cancelled, and the offer was removed from the market!\"\n        );\n    } catch (error) {\n      onError(\"Transaction failed!\", error.message);\n    }\n  };\n\n  return (\n    <div>\n      <span\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        Transfer\n      </span>\n\n      <ConfirmTransferModal\n        onCancel={() =>\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          })\n        }\n        onConfirmed={() => doTransfer(sale)}\n        sale={sale}\n        visible={isConfirming}\n      />\n\n      <ProcessingModal\n        title=\"Transfer Item\"\n        hasFinish={progress.hasFinish}\n        steps={progress.steps}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        sale={sale}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}\n","import { useContext } from \"react\";\nimport { WaxAuthenContext } from \"../../../hook/useWaxAuthen\";\nimport { Sale } from \"../../../types/Sale\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function RequireLoginP2O(props: Props) {\n  const { openLoginPopup } = useContext(WaxAuthenContext);\n\n  return (\n    <div>\n      <span aria-hidden onClick={openLoginPopup}>\n        Buy Now\n      </span>\n    </div>\n  );\n}\n","import React from \"react\";\nimport { Sale } from \"../../../types/Sale\";\n\ninterface Props {\n  sale: Sale;\n}\nexport default function DeListedSale(props: Props) {\n  return (\n    <div>\n      <span style={{ color: \"#ddd\" }} aria-hidden>\n        Delisted\n      </span>\n    </div>\n  );\n}\n","import { useContext } from \"react\";\nimport { WaxAuthenContext } from \"../../../hook/useWaxAuthen\";\nimport { Sale } from \"../../../types/Sale\";\n\ninterface Props {\n  sale: Sale;\n}\n\nexport default function RequireLoginSale(props: Props) {\n  const { openLoginPopup } = useContext(WaxAuthenContext);\n\n  return (\n    <div>\n      <span aria-hidden onClick={openLoginPopup}>\n        Buy Now\n      </span>\n    </div>\n  );\n}\n","import { useContext, useCallback } from \"react\";\nimport { ON_SALE_STATUSES } from \"../../constant/SaleStateConst\";\nimport { normalizeAsset, normalizeAuction, normalizeSale } from \"../../helpers/NormalizeHelper\";\nimport { WaxAuthenContext } from \"../../hook/useWaxAuthen\";\nimport { Asset } from \"../../types/Asset\";\nimport { AuctionState } from \"../../types/Auction\";\nimport { CollectionStatus } from \"../../types/Collection\";\nimport { SaleType, BaseSale, SaleState, Sale } from \"../../types/Sale\";\nimport { checkEndTime } from \"../../utils/helpers\";\nimport { BlackListAsset } from \"./AssetCard/BlackListAsset\";\nimport { DeListedAsset } from \"./AssetCard/DeListedAsset\";\nimport { NotOnSale } from \"./AssetCard/NotOnSale\";\nimport SellableAsset from \"./AssetCard/SellableAsset\";\nimport AuctionBiddable from \"./Auction/AuctionBiddable\";\nimport AuctionCancellable from \"./Auction/AuctionCancellable\";\nimport AuctionClaimable from \"./Auction/AuctionClaimable\";\nimport AuctionNotCancellable from \"./Auction/AuctionNotCancellable\";\nimport OnAuction from \"./Auction/OnAuction\";\nimport RequireLoginAuction from \"./Auction/RequireLoginAuction\";\nimport P2OBuyable from \"./P2O/P2OBuyable\";\nimport P2OCancellable from \"./P2O/P2OCancellable\";\nimport P2OClaimable from \"./P2O/P2OClaimable\";\nimport P2OPendingTransfer from \"./P2O/P2OPendingTransfer\";\nimport P2OInprogress from \"./P2O/P2OProgressing\";\nimport P2OSold from \"./P2O/P2OSold\";\nimport P2OTransferable from \"./P2O/P2OTransferable\";\nimport RequireLoginP2O from \"./P2O/RequireLoginP2O\";\nimport RapidSaleBuyable from \"./RapidSale/RapidSaleBuyable\";\nimport RapidSaleCancelable from \"./RapidSale/RapidSaleCancellable\";\nimport DeListedSale from \"./SaleCard/DeListedSale\";\nimport RequireLoginSale from \"./SaleCard/RequireLoginSale\";\n\ninterface Props {\n  item: any;\n}\nexport default function CompositeAssetAction({ item }: Props) {\n  const { authen } = useContext(WaxAuthenContext);\n\n  const type =\n    item.asset_id != null\n      ? \"asset\"\n      : (item.sale_id || item.auction_id)?.length > 0\n      ? \"sale\"\n      : undefined;\n\n  const getSaleType = (item: any): SaleType =>\n    item.auction_id ? \"auction\" : item.deferred_listing ? \"p2o\" : \"rapid-sale\";\n\n  const isNotSale = (item: any) =>\n    (item.sales?.length || 0) === 0 && (item.auctions?.length || 0) === 0;\n\n  const isOnAuction = (item: any) => (item.auctions?.length || 0) > 0;\n\n  const selectComponent = useCallback(() => {\n    // return <AssetCard asset={item} />;\n    const isBlackList =\n      item && item.collection_status === CollectionStatus.BLACKLIST;\n\n    if (type === \"asset\") {\n      item = normalizeAsset(item);\n      const isMyAsset = (item as Asset).owner === authen.userAccount;\n      const notOnSale = isNotSale(item);\n\n\n      if (isBlackList) {\n        if (notOnSale) return <BlackListAsset asset={item} />;\n        else return <DeListedAsset asset={item} />;\n      }\n\n      if (notOnSale) {\n        if (isMyAsset) return <SellableAsset asset={item} />;\n        else return <NotOnSale asset={item} />;\n      }\n      if (isOnAuction(item)) {\n        const auction = item.auctions?.[0];\n        return <OnAuction sale={normalizeAuction(auction)} />;\n      } else {\n        const sale = item.sales[0];\n        return selectSaleComponent(sale);\n      }\n    }\n\n    if (type === \"sale\") {\n      return selectSaleComponent(item);\n    }\n\n    return (\n      <div\n        style={{\n          width: \"100%\",\n          height: \"100%\",\n          aspectRatio: \"1/1\",\n          backgroundColor: \"#ddd\",\n        }}\n      />\n    );\n  }, [authen.userAccount, authen.isAuthen, item]);\n\n  const selectSaleComponent = useCallback(\n    (sale: any) => {\n      const saleType = getSaleType(sale);\n      const isMySale = authen.userAccount === (sale as BaseSale).seller;\n      const isBlackList =\n        sale &&\n        (sale as BaseSale).collection_status === CollectionStatus.BLACKLIST;\n\n      const isAdminRemoved =\n        sale && (sale as BaseSale).state === SaleState.ADMIN_REMOVED;\n\n      if (isBlackList || isAdminRemoved)\n        return <DeListedSale sale={normalizeSale(sale)} />;\n      switch (saleType) {\n        case \"auction\": {\n          const auction = normalizeAuction(sale);\n          const isAuctionEnded =\n\t\t\t\t\t\tcheckEndTime(auction.end_time) ||\n\t\t\t\t\t\tauction.state === AuctionState.SOLD;\n          const isBided = auction.bid_count > 0;\n          const canClaimable =\n            authen.userAccount === auction.buyer && !auction.claimed_by_buyer;\n\n          if (!authen.isAuthen)\n            return <RequireLoginAuction sale={auction} />;\n\n          if (isMySale) {\n            if (!isBided) return <AuctionCancellable sale={auction} />;\n\n            if (isAuctionEnded)\n              return <AuctionClaimable claimType=\"amount\" sale={auction} />;\n            else return <AuctionNotCancellable sale={auction} />;\n          } else {\n            if (!isAuctionEnded) return <AuctionBiddable sale={auction} />;\n            else if (canClaimable)\n              return <AuctionClaimable claimType=\"item\" sale={auction} />;\n            return <div />;\n          }\n        }\n        case \"p2o\": {\n          const isOnSale = ON_SALE_STATUSES.includes(sale?.state);\n          const isExpired =\n            sale.end_at > 0 && sale.end_at - new Date().getTime() / 1000 <= 0;\n          const isMyBuy = authen.userAccount === (sale as Sale).buyer;\n\n          if (!authen.isAuthen)\n            return <RequireLoginP2O sale={normalizeSale(sale)} />;\n\n          if (isExpired)\n            if (isMyBuy) return <P2OClaimable sale={normalizeSale(sale)} />;\n            else return <P2OInprogress sale={normalizeSale(sale)} />;\n\n          if (isMySale)\n            if (isOnSale)\n              return <P2OCancellable sale={normalizeSale(sale)} />;\n            else return <P2OTransferable sale={normalizeSale(sale)} />;\n          else {\n            if (isOnSale) return <P2OBuyable sale={normalizeSale(sale)} />;\n            else {\n              if (isMyBuy)\n                return <P2OPendingTransfer sale={normalizeSale(sale)} />;\n              else return <P2OSold sale={normalizeSale(sale)} />;\n            }\n          }\n        }\n        case \"rapid-sale\":\n          if (!authen.isAuthen)\n            return <RequireLoginSale sale={normalizeSale(sale)} />;\n\n          if (isMySale)\n            return <RapidSaleCancelable sale={normalizeSale(sale)} />;\n          return <RapidSaleBuyable sale={normalizeSale(sale)} />;\n        default:\n          return <RapidSaleBuyable sale={normalizeSale(sale)} />;\n      }\n    },\n    [item, authen.isAuthen, authen.userAccount]\n  );\n\n  return selectComponent();\n}\n","import { formatPrice } from \"../../../helpers/CurrencyHelper\";\nimport UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport UseWaxAuthen from \"../../../hook/useWaxAuthen\";\nimport { Auction } from \"../../../types/Auction\";\nimport BuyTheSale from \"../../AssetAction/BuyTheSale\";\nimport { ConfirmBuyModal } from \"../../AssetCard/components/ConfirmBuyModal\";\nimport { ProcessingBuyModal } from \"../../AssetCard/components/ProcessingBuyModal\";\n\ninterface Props {\n  sale: Auction;\n}\n\nexport default function AuctionBuyNow(props: Props) {\n  const { sale } = props;\n  const {\n    progress,\n    isConfirming,\n    isProgressing,\n    setTransactionProgressState,\n    onError,\n    onFinish,\n    onStart,\n  } = UseTransactionProgress({});\n\n  const { auctionBuyOut, checkTransaction } = useUal();\n  const { authen } = UseWaxAuthen();\n\n  const doBuyOut = async () => {\n    onStart();\n    try {\n      const tx: any = await auctionBuyOut(\n        authen.userAccount,\n        sale.auction_id,\n        sale.buyout_price / Math.pow(10, 8)\n      );\n      progress.startStep(2);\n      await checkTransaction(tx);\n      progress.startStep(3);\n      onFinish(\"Transaction finished\", \"Buy successfully!\");\n    } catch (error) {\n      onError(\"Error when buy the auction item\", error.message);\n    }\n  };\n  return (\n    <div>\n      <button\n       style={{ width: \"100%\", borderRadius: \"100px\" }}\n       className=\"btn btn-primary\"\n        aria-hidden\n        onClick={() =>\n          setTransactionProgressState({\n            isConfirming: true,\n          })\n        }\n      >\n        Buy now (\n        {`${formatPrice(\n          sale.price_symbol,\n          sale.buyout_price,\n          sale.token_precision\n        )} WAXP`}\n        )\n      </button>\n      <BuyTheSale\n        isOpen={isConfirming}\n        onCancel={() => setTransactionProgressState({ isConfirming: false })}\n        onConfirmed={doBuyOut}\n        sale={props.sale}\n      />\n\n      <ProcessingBuyModal\n        hasFinish={progress.hasFinish}\n        onCancel={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        onFinish={() => {\n          setTransactionProgressState({\n            isConfirming: false,\n            isProgressing: false,\n          });\n          window.location.reload();\n        }}\n        finishDescription={\n          <p style={{ fontWeight: 700, fontSize: 18 }}>\n            Congrats! You just purchased{\" \"}\n            <span style={{ color: \"#7D70F6\" }}>{sale.assets?.[0]?.name}</span>{\" \"}\n            for{\" \"}\n            {formatPrice(\n              sale.price_symbol,\n              sale.buyout_price,\n              sale.token_precision\n            )} {\" \"} WAXP\n          </p>\n        }\n        sale={props.sale}\n        steps={progress.steps}\n        visible={isProgressing}\n      />\n    </div>\n  );\n}","import React from \"react\";\n\ninterface Props {\n  label: string;\n  colorLabel: string;\n  backgroundLabel: string;\n}\nexport default function BaseLabel({\n  backgroundLabel,\n  colorLabel,\n  label,\n}: Props) {\n  return (\n    <div\n      style={{\n        fontWeight: 600,\n        fontSize: 12,\n        color: colorLabel,\n        backgroundColor: backgroundLabel,\n        borderRadius: 16,\n        padding: \"2px 10px\",\n        width: 'fit-content'\n      }}\n    >\n      {label}\n    </div>\n  );\n}\n","import { Col, Row, Statistic } from \"antd\";\nimport styled from \"styled-components\";\nimport BaseLabel from \"./BaseLabel\";\n\ninterface Props {\n  endTime: number;\n}\n\n\nexport const CountdownStyled = styled(Statistic.Countdown)`\n  .ant-statistic-content{\n    font-size: var(--wax-font-size);\n    font-weight: 500;\n    line-height: 24px;\n    \n    span{\n      color: var(--wax-text-color-secondary);\n    }\n  }\n`;\n\n\nexport default function AuctionSaleLabel({ endTime }: Props) {\n  return (\n    <Row align={\"middle\"} gutter={4}>\n      <Col>\n        <BaseLabel\n          label=\"Auction\"\n          colorLabel=\"#3F753C\"\n          backgroundLabel=\"#EDF7EC\"\n        />\n      </Col>\n      <Col>\n          <CountdownStyled className=\"font-md fw2 color-text-secondary\" value={endTime} />\n      </Col>\n    </Row>\n  );\n}\n","import React, { useState } from \"react\";\nimport {\n  Row,\n  Col,\n  FormInstance,\n  DatePicker,\n  Form,\n  Select,\n  Input,\n} from \"antd\";\nimport dayjs from \"dayjs\";\n\n\ninterface OfferFormContentProps {\n  form: FormInstance;\n  onFormFinish: (values: any) => void;\n}\n\nconst CurrencyOptions = [{ value: \"wax\", label: \"WAXP\" }];\n\nconst DurationOptions = [\n  { value: \"12hours\", label: \"12 hours\", dateValue: 12 },\n  { value: \"1days\", label: \"1 day\", dateValue: 1 },\n  { value: \"3days\", label: \"3 days\", dateValue: 3 },\n  { value: \"7days\", label: \"7 days\", dateValue: 7 },\n  { value: \"30days\", label: \"1 month\", dateValue: 30 },\n  { value: \"custom\", label: \"Custom date\", dateValue: 1 },\n];\n\nconst dateFormat = \"MMMM Do, YYYY.  HH:mm\";\n\nconst OfferForm: React.FC<OfferFormContentProps> = ({\n  form,\n  onFormFinish,\n}) => {\n  const [duration, setDuration] = useState(DurationOptions[2].value);\n  const datePickerDefaultVal = dayjs().add(\n    DurationOptions[2].dateValue,\n    \"d\"\n  );\n\n  const handleDurationChange = (value: string) => {\n    setDuration(value);\n    const dateValueMapping = DurationOptions.find(\n      (item) => item.value === value\n    );\n\n    form.setFieldsValue({\n      durationPicker: dayjs().add(\n        dateValueMapping?.dateValue,\n        value === \"12hours\" ? \"hour\" : \"day\"\n      ),\n    });\n  };\n\n  return (\n    <Form\n      form={form}\n      onFinish={onFormFinish}\n      layout=\"vertical\"\n      initialValues={{\n        amount: 0,\n        currency: \"wax\",\n        durationSelect: duration,\n        durationPicker: datePickerDefaultVal,\n      }}\n    >\n      <Row justify=\"center\" gutter={[12, 12]}>\n        <Col span={12}>\n          <Form.Item\n            className=\"no-margin-bottom\"\n            label=\"Amount\"\n            name=\"amount\"\n            rules={[\n              {\n                required: true,\n                message: \"You cannot leave price empty\",\n                pattern: new RegExp(/\\d|\\./g),\n              },\n              {\n                validator: async (_, values) => {\n                  if (values <= 0) {\n                    return Promise.reject(\n                      new Error(\"Price should be greater than 0\")\n                    );\n                  }\n                },\n              },\n            ]}\n          >\n            <Input\n              style={{ width: \"100%\" }}\n              min={0}\n              type=\"number\"\n              step={0.01}\n              placeholder=\"0.0\"\n            />\n          </Form.Item>\n        </Col>\n        <Col span={12}>\n          <Form.Item\n            label=\"Currency Type\"\n            name=\"currency\"\n            className=\"no-margin-bottom\"\n          >\n            <Select\n              style={{ width: \"100%\" }}\n              options={CurrencyOptions}\n              defaultValue=\"wax\"\n              optionFilterProp=\"value\"\n              filterOption={(input, option) =>\n                option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n              }\n            />\n          </Form.Item>\n        </Col>\n        <Col span={8}>\n          <Form.Item\n            label=\"Offer Duration\"\n            name=\"durationSelect\"\n            className=\"no-margin-bottom\"\n          >\n            <Select\n              style={{ width: \"100%\" }}\n              options={DurationOptions}\n              defaultValue={DurationOptions[0].value}\n              optionFilterProp=\"value\"\n              value={duration}\n              onChange={handleDurationChange}\n              filterOption={(input, option) =>\n                option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n              }\n            />\n          </Form.Item>\n        </Col>\n        <Col span={16} style={{ marginTop: \"30px\" }}>\n          <Form.Item\n            label=\"\"\n            name=\"durationPicker\"\n            className=\"no-margin-bottom\"\n          >\n            <DatePicker\n              style={{ width: \"100%\" }}\n              disabledDate={(current) => {\n                return current.toDate().getTime() < new Date().getTime();\n              }}\n              defaultValue={dayjs()}\n              format={dateFormat}\n              showTime={{ format: \"HH:mm\" }}\n            />\n          </Form.Item>\n        </Col>\n      </Row>\n    </Form>\n  );\n};\n\nexport default OfferForm;\n","import React, { useState, useEffect } from \"react\";\nimport { Col, Row, FormInstance, Form } from \"antd\";\nimport { isEmpty } from \"lodash\";\n\nimport OfferForm from \"./OfferForm\";\nimport { getSellingFee } from \"../../../../../services/RpcService\";\nimport { Asset } from \"../../../../../types/Asset\";\nimport AssetsPreview from \"../../../../BaseComponent/AssetsPreview\";\nimport HighlightContainer from \"../../../../BaseComponent/HighlightContainer\";\nimport { priceWithCurrencyToString } from \"../../../../../helpers/CurrencyHelper\";\n\ninterface OfferContentProps {\n  form: FormInstance;\n  assets: Asset[];\n  onFormFinish: (values: any) => void;\n}\n\nconst OfferModalBody: React.FC<OfferContentProps> = ({\n  form,\n  assets,\n  onFormFinish,\n}) => {\n  const [nftItemFees, setFees] = useState([]);\n  const amount = Form.useWatch(\"amount\", form);\n\n  const totalFeePercent = nftItemFees\n    .map((fee) => Number(fee.fee))\n    .reduce((total, fee) => (total += fee), 0);\n\n  useEffect(() => {\n    (async () => {\n      try {\n        const result = await getSellingFee();\n        const collectionFee = {\n          fee_recipient: \"collectfee.virl\",\n          // fee: item?.collection_fee || 0,\n          fee: 0,\n          fee_name: \"Creator Earnings\",\n        };\n        setFees([collectionFee, ...result.rows]);\n      } catch (error) {\n        console.log(error);\n      }\n    })();\n  }, []);\n\n  return (\n    <Row gutter={[16, 24]}>\n      <Col xs={24}>\n          <h1 style={{marginTop: 24, textAlign:'center'}}>Make an offer</h1>\n      </Col>\n      <Col xs={24}>\n        <AssetsPreview assets={assets} />\n      </Col>\n      <Col xs={24}>\n        <Row gutter={[16, 16]}>\n          <Col span={24}>\n            <OfferForm form={form} onFormFinish={onFormFinish} />\n          </Col>\n\n          {!isEmpty(nftItemFees) && (\n            <Col xs={24}>\n              <HighlightContainer>\n                <Row gutter={[0, 8]}>\n                  <Col xs={24}>\n                    {nftItemFees.map((item, index) => {\n                      return (\n                        <Col xs={24}>\n                          <Row justify=\"space-between\" key={index}>\n                            <Col className=\"font-sm color-text-secondary\">\n                              {item?.fee_name}\n                            </Col>\n                            <Col className=\"font-md fw3\">{item.fee * 100}%</Col>\n                          </Row>\n                        </Col>\n                      );\n                    })}\n                  </Col>\n                  <Col xs={24}>\n                    <hr />\n                  </Col>\n                  <Col xs={24}>\n                    <Row gutter={[0, 8]}>\n                      <Col xs={24}>\n                        <Row justify={\"space-between\"}>\n                          <Col>\n                            <p className=\"font-sm color-text-secondary\">\n                              Total\n                            </p>\n                          </Col>\n                          <Col>\n                            <p className=\"font-md fw3\">\n                              {priceWithCurrencyToString(\n                                \"wax\",\n                                amount * (1 + totalFeePercent),\n                                0\n                              )}\n                            </p>\n                          </Col>\n                        </Row>\n                      </Col>\n                      <Col xs={24}>\n                        <p className=\"font-sm fw3\">\n                          The fees will be automatically deducted if your offer\n                          is accepted.\n                        </p>\n                      </Col>\n                    </Row>\n                  </Col>\n                </Row>\n              </HighlightContainer>\n            </Col>\n          )}\n        </Row>\n      </Col>\n    </Row>\n  );\n};\n\nexport default OfferModalBody;\n","import { Modal, Form } from \"antd\";\n\nimport OfferModalBody from \"./OfferModalBody\";\nimport FooterAcceptPolicy from \"../../../../ModalWithAcceptPolicy/Footer\";\nimport { Asset } from \"../../../../../types/Asset\";\nimport { Dayjs } from \"dayjs\";\n\nexport interface DoOfferParams {\n  amount: number;\n  currency: string;\n  durationSelect: string;\n  durationPicker: Dayjs;\n}\n\ninterface Props {\n  visible: boolean;\n  onCancel?: () => void;\n  assets: Asset[];\n  doOffer: (values: DoOfferParams) => void;\n}\n\nexport default function MakeOfferModal(props: Props) {\n  const { visible, onCancel, assets, doOffer } = props;\n  const [form] = Form.useForm();\n\n  return (\n    <Modal\n      centered\n      visible={visible}\n      // title={<Title level={5}>Make an offer</Title>}\n      onCancel={() => {\n        form.resetFields();\n        onCancel?.();\n      }}\n      footer={\n        <FooterAcceptPolicy\n          isAcceptPolicy={true}\n          onAcceptPolicy={(isAcceptPolicy) => {}}\n          actions={\n            <button\n              className=\"btn btn-primary-active\"\n              onClick={() => {\n                form.validateFields().then(() => {\n                  form.submit();\n                });\n              }}\n            >\n              Make Offer\n            </button>\n          }\n        />\n      }\n      width={560}\n    >\n      <OfferModalBody\n        form={form}\n        assets={assets}\n        onFormFinish={(params) => {\n          doOffer(params);\n          form.resetFields();\n        }}\n      />\n    </Modal>\n  );\n}\n","import { Modal, Col, Row, Timeline } from \"antd\";\nimport Title from \"antd/lib/typography/Title\";\nimport BigNumber from \"bignumber.js\";\nimport { Asset } from \"../../../../../types/Asset\";\nimport AssetCardPreviewWithDefaultContent from \"../../../../AssetCard/components/AssetCard/AssetCardPreviewWithDefaultContent\";\nimport AssetPreviewMedia from \"../../../../AssetDetail/AssetPreviewMedia\";\nimport AwaitProgressTimeLine, {\n  AwaitProgressItemProps,\n} from \"../../../../AwaitProgressTimeline\";\n\ninterface Props {\n  hasFinish: boolean;\n  hasError: boolean;\n  steps: AwaitProgressItemProps[];\n\n  assets: Asset[];\n  visible: boolean;\n  offerState: any;\n  onClose: () => void;\n  onViewAfterOffer: () => void;\n}\n\nconst OfferProgressModal = (props: Props) => {\n  const { visible, assets, hasError, hasFinish, steps, offerState } = props;\n  const { onClose, onViewAfterOffer } = props;\n\n  const sellPrice = new BigNumber(offerState?.amount);\n\n  const convertedPrice = `${\n    Number(sellPrice).toString().includes(\".\")\n      ? Number(sellPrice).toFixed(8)\n      : Number(sellPrice).toFixed(2)\n  } WAX`;\n\n  return (\n    <Modal\n      centered\n      visible={visible}\n      title={<Title level={5}>Make an offer</Title>}\n      onCancel={hasFinish || hasError ? onClose : () => {}}\n      footer={\n        [\n          // <WrapFooter key={\"footer\"}>\n          // \t<WrapTem>\n          // \t\t<ImgTerm src={\"/static/img/footer-logo.svg\"} alt=\"logo\" />\n          // \t</WrapTem>\n          // \t<Col>\n          // \t\t<Button\n          // \t\t\tclassName=\"view-listing-btn\"\n          // \t\t\tsize=\"middle\"\n          // \t\t\tkey=\"submit\"\n          // \t\t\ttype=\"primary\"\n          // \t\t\tonClick={onViewAfterOffer}\n          // \t\t\tdisabled={!hasFinish}\n          // \t\t>\n          // \t\t\tVIEW OFFER\n          // \t\t</Button>\n          // \t</Col>\n          // </WrapFooter>,\n        ]\n      }\n      width={560}\n    >\n      <div>\n        <Row gutter={[0, 24]} className=\"content\">\n          <Col\n            style={{\n              background: \"rgba(229, 226, 253, 0.16)\",\n              boxShadow: \"inset 16px 16px 40px rgba(125, 112, 246, 0.12)\",\n              borderRadius: 16,\n              padding: 16,\n              paddingTop: 16,\n              paddingBottom: 16\n            }}\n            xs={24}\n            className=\"preview\"\n          >\n            <AssetCardPreviewWithDefaultContent asset={assets[0]} />\n          </Col>\n          <Col xs={24} className=\"progress\">\n            <AwaitProgressTimeLine items={steps} />\n          </Col>\n          <Col xs={24}>\n            {hasError && (\n              <p className=\"fw3 font-md\">\n                <span style={{ color: \"red\" }}>Error:</span> Offer confirmation\n                failed, please try your transaction again.\n              </p>\n            )}\n            {hasFinish && (\n              <p className=\"fw3 font-md\">\n                Congrats! You just place an offer on{\" \"}\n                <span style={{ color: \"#7D70F6\" }}>{assets?.[0].name}</span> for{\" \"}\n                {convertedPrice}\n              </p>\n            )}\n          </Col>\n        </Row>\n      </div>\n    </Modal>\n  );\n};\n\nexport default OfferProgressModal;\n","import React from \"react\";\nimport MakeOfferModal from \"./component/MakeOfferModal\";\nimport useOffer from \"./component/MakeOfferModal/useOffer\";\nimport OfferProgressModal from \"./component/OfferProgressModal\";\n\ninterface Props {\n  assets: any;\n}\nexport default function MakeableOffer({ assets }: Props) {\n  const {\n    progress,\n    isConfirming,\n    isProgressing,\n    offerState,\n    doOffer,\n    setTransactionProgressState,\n    onReset,\n  } = useOffer({ assets });\n\n  return (\n    <div>\n      <button\n        style={{ width: \"100%\", borderRadius: 100 }}\n        className=\"btn btn-primary\"\n        onClick={() => {\n          setTransactionProgressState({ isConfirming: true });\n        }}\n      >\n        Make Offer\n      </button>\n      <MakeOfferModal\n        visible={isConfirming}\n        onCancel={onReset}\n        assets={assets}\n        doOffer={(params) => {\n          console.log({ params });\n          doOffer(params);\n        }}\n      />\n\n      <OfferProgressModal\n        onClose={onReset}\n        onViewAfterOffer={() => {}}\n        {...progress}\n        offerState={offerState}\n        assets={assets}\n        visible={isProgressing}\n        steps={progress.steps}\n      />\n    </div>\n  );\n}\n","import { useContext, useState } from \"react\";\nimport BigNumber from \"bignumber.js\";\n\nimport { DoOfferParams } from \"./index\";\nimport UseTransactionProgress from \"../../../../../hook/useTransactionProgress\";\nimport useUal from \"../../../../../hook/useUal\";\nimport { WaxAuthenContext } from \"../../../../../hook/useWaxAuthen\";\nimport { Asset } from \"../../../../../types/Asset\";\n\ninterface Props {\n  assets: Asset[];\n}\n\nexport default function useOffer({ assets }: Props) {\n  const [offerState, setOfferState] = useState<Partial<DoOfferParams>>({});\n  const { checkTransaction, makeOffer } = useUal();\n  const transactionProgress = UseTransactionProgress({});\n  const { authen } = useContext(WaxAuthenContext);\n  const { onError, progress } = transactionProgress;\n  const firstAsset = assets?.[0];\n  const name = firstAsset?.name || \"\";\n  const onFinish = () =>\n    transactionProgress.onFinish(\n      \"Transaction finished\",\n      `Your offer was successfully placed on ${name}`\n    );\n\n  const roundPrice = (price: number, precision = 2) => {\n    return (\n      Math.trunc(price * Math.pow(10, precision)) / Math.pow(10, precision)\n    );\n  };\n\n  const convertPrice = (price: number, currency: string) =>\n    currency === \"wax\"\n      ? `${new BigNumber(price).toFixed(8)} WAX`\n      : `${new BigNumber(price).toFixed(2)} USD`;\n\n  const processingTransaction = async (tx: any) => {\n    progress.startStep(2);\n    await checkTransaction(tx);\n    progress.startStep(3);\n    onFinish();\n  };\n\n  const doOffer = async (params: DoOfferParams) => {\n    const { amount, currency, durationSelect, durationPicker } = params;\n    console.log(durationPicker.toDate(), durationSelect);\n    console.log({firstAsset});\n    \n    transactionProgress.onStart();\n    setOfferState((prev) => ({ ...prev, ...params }));\n\n    try {\n      const newPrice = roundPrice(amount, 3);\n      const convertedPrice = convertPrice(newPrice, currency);\n      const params = {\n        buyer: authen.userAccount,\n        marketContract: firstAsset?.asset_contract,\n        recipient: firstAsset?.owner,\n        price: convertedPrice,\n        expired_time_sec: Math.round(durationPicker.toDate().getTime() / 1000),\n        asset_ids: assets.map((a) => a.asset_id),\n      };\n      console.log({params});\n      const tx = await makeOffer(params);\n      processingTransaction(tx);\n    } catch (error) {\n      console.log(\"Offers error:\", error);\n      onError(\"Error offer the item\", error.message);\n    }\n  };\n\n  return {\n    ...transactionProgress,\n    offerState,\n    doOffer,\n  };\n}\n","import { Col, Row } from \"antd\";\nimport React, { useContext } from \"react\";\nimport { priceWithCurrencyToString } from \"../../../helpers/CurrencyHelper\";\nimport { WaxAuthenContext } from \"../../../hook/useWaxAuthen\";\nimport { Asset } from \"../../../types/Asset\";\nimport { AuctionState } from \"../../../types/Auction\";\nimport { Collection } from \"../../../types/Collection\";\nimport { Sale, SaleState } from \"../../../types/Sale\";\nimport CompositeAssetAction from \"../../AssetActions\";\nimport AuctionBuyNow from \"../../AssetActions/Auction/AuctionBuyNow\";\nimport { CountdownStyled } from \"../../AssetCard/components/SaleCard/components/AuctionSaleLabel\";\nimport MakeableOffer from \"../../Offer/MakeableOffer\";\nimport \"./index.css\";\ninterface Props {\n  item: any;\n  collection: Collection;\n}\n\nexport default function AssetPrice({ item, collection }: Props) {\n  const { authen } = useContext(WaxAuthenContext);\n  const isSold = item?.state === SaleState.SOLD;\n  const isOwner = item?.seller === authen.userAccount || item?.owner;\n  const isEnd = item?.end_time < new Date().getTime();\n  const isRapidSale =\n    item?.deferred_listing != null && item.deferred_listing === false;\n\n  const canBuyOut =\n    !isOwner &&\n    !isEnd &&\n    (item?.buyout_price || 0) > 0 &&\n    item.state === AuctionState.LISTED &&\n    item.buyout_price != null;\n\n  const isBundle = item?.assets?.length > 1;\n\n  console.log({ userAccount: authen.userAccount });\n\n  const canMakeOffer = !isOwner && !isSold && !isBundle && authen?.userAccount && isRapidSale;\n\n  const isAuction = !!item.auction_id;\n  return (\n    <Row className=\"asset-price-wrapper\" gutter={[0, 16]}>\n      {item.price && (\n        <Col xs={24}>\n          <Row gutter={[0, 4]}>\n            <Col xs={24}>\n              <p className=\"font-sm fw1\">{isAuction ? \"Bid\" : \"Buy\"} price</p>\n            </Col>\n            <Col xs={24}>\n              <Row align={\"middle\"} gutter={16}>\n                <Col>\n                  <p\n                    style={{ fontSize: 28, lineHeight: \"36px\" }}\n                    className=\"fw3\"\n                  >\n                    {`${priceWithCurrencyToString(\n                      item.price_symbol,\n                      item.price,\n                      item.token_precision\n                    )}`}\n                  </p>\n                </Col>\n                {item.end_time && (\n                  <Col>\n                    <Row gutter={4} align={\"middle\"}>\n                      <Col>\n                        <p style={{ lineHeight: \"24px\" }}>Ends In</p>\n                      </Col>\n                      <Col>\n                        <CountdownStyled value={Number(item?.end_time || 0)} />\n                      </Col>\n                    </Row>\n                  </Col>\n                )}\n              </Row>\n            </Col>\n          </Row>\n        </Col>\n      )}\n      <Col xs={24}>\n        <Row gutter={[16, 16]}>\n          <Col className=\"action\" xs={24} lg={12}>\n            <CompositeAssetAction item={item} />\n          </Col>\n          {canBuyOut && (\n            <Col xs={24} lg={12}>\n              <AuctionBuyNow sale={item} />\n            </Col>\n          )}\n          {canMakeOffer && (\n            <Col xs={24} lg={12}>\n              <MakeableOffer\n                assets={\n                  (item as Sale).assets.map(\n                    (asset) =>\n                      ({\n                        ...asset,\n                        owner: (item as Sale).seller,\n                        asset_contract: collection.contract,\n                      } as Asset)\n                  ) || [item]\n                }\n              />\n            </Col>\n          )}\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n","import styled from \"styled-components\";\n\nexport const CarouselSaleWrapper = styled.div`\n\twidth: 100%;\n\theight: 100%;\n\n\t& .ant-carousel {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t& .slick-slider {\n\t\tpadding-top: 0px !important;\n\t\twidth: 100%;\n\t\theight: 100%;\n\n\t\t& img {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tobject-fit: contain;\n\t\t\tborder-radius: 12px;\n\t\t}\n\n\t\t& .slick-list {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\n\t\t\t& .slick-track {\n\t\t\t\tmin-width: 100% !important;\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ant-carousel .slick-list .slick-slide.slick-active > div {\n\t\twidth: 100% !important;\n\t\theight: 100%;\n\t}\n\n\t& .ant-carousel .slick-list .slick-slide.slick-active {\n\t\tpadding-top: 0px;\n\t}\n\n\t& .slick-slide > div > div {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t& .slick-dots {\n\t\tbottom: 0px !important;\n\t\t& li {\n\t\t\tpadding: 4px 0px;\n\t\t\t& button {\n\t\t\t\tbackground: var(--wax-primary-color);\n\t\t\t}\n\t\t}\n\n\t\t& .slick-active {\n\t\t\t& button {\n\t\t\t\tbackground: var(--wax-primary-color) !important;\n\t\t\t}\n\t\t}\n\t}\n`;\nexport const ContentWrapper = styled.div`\n\t& .navigator-wrapper {\n\t\tposition: relative;\n\t\t& .navigator {\n\t\t\tposition: absolute;\n\t\t\ttop: -48px;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n\n\t& .content {\n\t\t& .title,\n\t\t.price {\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t\t& .title {\n\t\t\tdisplay: block;\n\t\t\tmax-width: 100%;\n\t\t\tmargin-top: 4px;\n\t\t}\n\t\t& .price {\n\t\t\tfont-weight: 700;\n\t\t\tfont-size: 12px;\n\t\t\tmax-width: 100%;\n\t\t}\n\t}\n`;\n","import { Carousel } from \"antd\";\nimport React, { useState } from \"react\";\nimport { BaseAsset } from \"../../../types/Asset\";\nimport AssetCardPreview from \"../../AssetCard/components/AssetCard/AssetCardPreview\";\nimport { CarouselSaleWrapper } from \"../../AssetCard/components/SaleCard/styled\";\nimport \"./index.css\";\n\ninterface Props {\n  assets: BaseAsset[];\n}\n\nexport default function AssetPreviewMedia({ assets }: Props) {\n  const [state, setState] = useState<State>({ currentAssetIndex: 0 });\n  return (\n    <CarouselSaleWrapper>\n      <div className=\"preview-wrapper\">\n        <Carousel\n          afterChange={(index) => {\n            setState((prev) => ({ ...prev, currentAssetIndex: index }));\n          }}\n        >\n          {assets.map((a) => (\n            <AssetCardPreview key={a.asset_id} asset={a} />\n          ))}\n        </Carousel>\n        {assets.length> 0 && (\n          <span className=\"index\">{`${state.currentAssetIndex + 1}/${\n            assets.length\n          }`}</span>\n        )}\n      </div>\n    </CarouselSaleWrapper>\n  );\n}\n\ninterface State {\n  currentAssetIndex: number;\n}\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\nimport { TitleWithValueProps } from \"../TitleWithValue\";\n\nexport interface AvatarWithNameProps extends TitleWithValueProps {\n  avatar?: string;\n}\n\nexport default function AvatarWithName({\n  avatar,\n  title,\n  value,\n}: AvatarWithNameProps) {\n  return (\n    <Row gutter={8}>\n      <Col>\n        <img\n          src={avatar}\n          alt={value}\n          style={{ height: 32, width: 32, borderRadius: \"50%\" }}\n        />\n      </Col>\n      <Col>\n        <Row gutter={[0, 4]}>\n          <Col xs={24}>\n            <p className=\"font-sm fw1 color-text-secondary\">\n              {title}\n            </p>\n          </Col>\n          <Col xs={24}>\n            <p style={{maxWidth: 48}} className=\"font-md fw3 color-primary\">{value}</p>\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\n\nexport interface TitleWithValueProps {\n  title: string;\n  value: string;\n}\nexport default function TitleWithValue({ title, value }: TitleWithValueProps) {\n  return (\n    <Row gutter={[0, 4]}>\n      <Col xs={24}>\n        <p className=\"font-sm fw1 color-text-secondary\">\n          {title}\n        </p>\n      </Col>\n      <Col xs={24}>\n        <p className=\"font-md fw3 \">{value}</p>\n      </Col>\n    </Row>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport { useEffect, useState } from \"react\";\nimport { getURL } from \"../../../helpers/HashHelper\";\nimport { Asset } from \"../../../types/Asset\";\nimport { Collection } from \"../../../types/Collection\";\nimport AvatarWithName, { AvatarWithNameProps } from \"./AvatarWithName\";\nimport TitleWithValue from \"./TitleWithValue\";\nimport \"./index.css\";\nimport _ from \"lodash\";\nimport { accountController } from \"../../../controller\";\n\ninterface Props {\n  asset: Asset;\n  collection: Collection;\n}\n\nexport default function AssetBaseInfo({ asset, collection }: Props) {\n  const [state, setState] = useState<State>({\n    infos: [],\n    creatorAvatar: \"\",\n    ownerAvatar: \"\",\n  });\n\n  const { infos } = state;\n  useEffect(() => {\n    initData();\n  }, [JSON.stringify(asset), collection]);\n\n  const initData = async () => {\n    const accountNames = Array.from(\n      new Set([asset.owner, asset.creator].filter((a) => a != null))\n    );\n    const accounts = await Promise.all(\n      accountNames.map((accountName) => accountController.get(accountName))\n    );\n    const ownerAccount = accounts.find((a) => a.accountName === asset.owner);\n    const creatorAccount = accounts.find((a) => a.accountName === asset.owner);\n\n    setState((prev) => ({\n      ...prev,\n      infos: [\n        {\n          avatar: getURL({\n            source:\n              ownerAccount?.avatarUrl !== \"none\" ? ownerAccount?.avatarUrl : \"\",\n          }),\n          title: \"Owned by\",\n          value: asset.owner,\n        },\n        {\n          avatar: getURL({\n            source:\n              creatorAccount?.avatarUrl !== \"none\"\n                ? creatorAccount?.avatarUrl\n                : \"\",\n          }),\n          title: \"Creator\",\n          value: collection.author,\n        },\n        {\n          avatar: getURL({ source: collection.img }),\n          title: \"Collection\",\n          value: collection?.collection_name,\n        },\n        { title: \"ID\", value: asset.asset_id },\n        { title: \"Schema Name\", value: asset.schema_name },\n        { title: \"Template ID\", value: asset.template_id.toString() },\n      ],\n    }));\n  };\n\n  return (\n    <Row className=\"base-info\" gutter={[8, 0]}>\n      {infos.map((info, index) => (\n        <Col\n          className=\"item\"\n          style={{\n            borderBottom: index >= infos.length - 2 && \"unset\",\n            padding: index >= infos.length - 2 && \"16px 0px 0px 0px\",\n          }}\n          key={info.title}\n          xs={12}\n        >\n          {info.avatar ? (\n            <AvatarWithName {...info} />\n          ) : (\n            <TitleWithValue {...info} />\n          )}\n        </Col>\n      ))}\n    </Row>\n  );\n}\n\ninterface State {\n  infos: AvatarWithNameProps[];\n  ownerAvatar: string;\n  creatorAvatar: string;\n}\n","import { Collapse } from \"antd\";\nimport \"./index.css\";\n\nconst { Panel } = Collapse;\n\ninterface Props {\n  title: string;\n  children: JSX.Element;\n  isExpand?: boolean;\n}\n\nexport default function CollapsibleSection({\n  children,\n  isExpand = true,\n  title,\n}: Props) {\n  return (\n    <Collapse defaultActiveKey={isExpand ? [\"1\"] : []} className=\"collapsible\">\n      <Panel\n        className=\"reverse\"\n        header={<span className=\"font-lg fw4\">{title}</span>}\n        key=\"1\"\n      >\n        {children}\n      </Panel>\n    </Collapse>\n  );\n}\n","import { Asset } from \"../../types/Asset\";\n\nexport const fakeAsset: Asset = {\n  asset_contract: \"atomicassets\",\n  asset_id: \"1099876027344\",\n  owner: \"bw4oo.c.wam\",\n  is_transferable: true,\n  is_burnable: true,\n  name: \"Standard Shovel\",\n  creator: \"federation\",\n  collection_name: \"alien.worlds\",\n  collection_data: {\n    img: \"QmZBpRKm5qigpfDdYgxtcefZ7Cn3GeWHCMBEsk6wYXP4gg\",\n    url: \"https://alienworlds.io\",\n    name: \"Alien Worlds\",\n    images:\n      '{\"banner_1920x500\":\"QmXkNxYHBYx8wJ9SmsEVLoFw4wUXKMD2PuG4xVxTeZrLZA\",\"logo_512x512\":\"QmZBpRKm5qigpfDdYgxtcefZ7Cn3GeWHCMBEsk6wYXP4gg\"}',\n    socials:\n      '{\"twitter\":\"\",\"medium\":\"\",\"facebook\":\"\",\"github\":\"\",\"discord\":\"\",\"youtube\":\"\",\"telegram\":\"\"}',\n    description:\n      \"Alien Worlds is a Digital Item Metaverse in Faraway Space. Own land on distant planets, explore and find strange artefacts, mine for Trilium with hyper-advanced tools or fight using alien weapons.\",\n    creator_info:\n      '{\"country\":\"\",\"address\":\"\",\"city\":\"\",\"zip\":\"\",\"company\":\"\",\"name\":\"\",\"registration_number\":\"\"}',\n  },\n  collection_fee: 0.01,\n  collection_status: 3,\n  template_id: 19552,\n  template_mint: 760445,\n  issued_supply: 0,\n  max_supply: 0,\n  schema_name: \"tool.worlds\",\n  img: \"QmYm1FG7LxhF3mFUaVmVEVqRztEmByVbHwL6ZWXwVY2dvb\",\n  img_back: \"QmaUNXHeeFvMGD4vPCC3vpGTr77tJvBHjh1ndUm4J7o4tP\",\n  properties: {\n    img: \"QmYm1FG7LxhF3mFUaVmVEVqRztEmByVbHwL6ZWXwVY2dvb\",\n  },\n  mutable_properties: {},\n  immutable_properties: {\n    img: \"QmYm1FG7LxhF3mFUaVmVEVqRztEmByVbHwL6ZWXwVY2dvb\",\n    ease: 10,\n    luck: 5,\n    name: \"Standard Shovel\",\n    type: \"Extractor\",\n    delay: 80,\n    shine: \"Stone\",\n    cardid: 1,\n    rarity: \"Abundant\",\n    backimg: \"QmaUNXHeeFvMGD4vPCC3vpGTr77tJvBHjh1ndUm4J7o4tP\",\n    difficulty: 0,\n  },\n  sales: [],\n  auctions: [],\n  schema: {\n    contract: \"atomicassets\",\n    schema_name: \"tool.worlds\",\n    format: [\n      {\n        name: \"cardid\",\n        type: \"uint16\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        name: \"img\",\n        type: \"image\",\n      },\n      {\n        name: \"backimg\",\n        type: \"image\",\n      },\n      {\n        name: \"rarity\",\n        type: \"string\",\n      },\n      {\n        name: \"shine\",\n        type: \"string\",\n      },\n      {\n        name: \"material_grade\",\n        type: \"uint64\",\n      },\n      {\n        name: \"type\",\n        type: \"string\",\n      },\n      {\n        name: \"delay\",\n        type: \"uint16\",\n      },\n      {\n        name: \"difficulty\",\n        type: \"uint8\",\n      },\n      {\n        name: \"ease\",\n        type: \"uint16\",\n      },\n      {\n        name: \"luck\",\n        type: \"uint16\",\n      },\n      {\n        name: \"last_mine\",\n        type: \"uint32\",\n      },\n    ],\n    created_at_time: \"1602238106500\",\n    created_at_block: \"81610774\",\n  },\n} as any as Asset;\n","import { Card } from \"antd\";\nimport styled from \"styled-components\";\n\nexport const CardWrapper = styled(Card)`\n  position: relative;\n  cursor: pointer;\n  // box-shadow: 0px 4px 15px rgba(0, 0, 0, 0.08);\n\n  & .ant-card-cover,\n  .content {\n    padding: 12px;\n  }\n\n  & .ant-card-cover {\n    width: 100%;\n    height: 100%;\n    aspect-ratio: 1 /1;\n\n    & .cover-wrapper {\n      height: 100%;\n      display: flex;\n      align-items: center;\n\n      & img {\n        width: 100%;\n        height: 100%;\n        object-fit: contain;\n        border-radius: 12px;\n      }\n    }\n  }\n\n  & .ant-card-body {\n    padding: 0px;\n    position: relative;\n  }\n\n  & .content {\n    padding-top: 0px;\n  }\n\n  * .action {\n\n    &:hover {\n      & * {\n      }\n    }\n\n    & * {\n      font-size: 12px;\n      font-weight: 700;\n      width: 100%;\n    }\n\n    & svg {\n      font-size: 14px;\n    }\n  }\n\n  & .title {\n    margin: 0px;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n  }\n\n  & .desc {\n    font-size: 10px;\n    font-weight: 400;\n    margin: 0px;\n\n    & * {\n      font-size: 10px;\n    }\n  }\n\n  & .id,\n  .index {\n    position: absolute;\n    right: 24px;\n    top: 24px;\n    font-weight: 700;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    background: rgba(34, 34, 34, 0.75);\n    border-radius: 8px;\n    font-size: 10px;\n    color: #fff;\n    z-index: 10;\n    padding: 0px 8px;\n  }\n\n  & .index {\n    left: 24px;\n    right: unset;\n  }\n\n  &.isScaling {\n    transform: scale(1.1);\n    transition: all 0.5s ease-in-out;\n    z-index: 1000;\n    box-shadow: 1px 2px 4px #aaa;\n    transform-origin: top;\n  }\n`;\n","import React from \"react\";\nimport { CardWrapper } from \"./styled\";\n\nexport interface CardProps {\n  preview?: string | JSX.Element;\n  id?: string;\n  isScaling?: boolean;\n  itemHref?: string;\n  children?: any;\n  onClick?: () => void;\n}\n\nexport default function Card({\n  preview,\n  id,\n  isScaling,\n  children,\n  itemHref,\n  onClick,\n}: CardProps) {\n  return (\n    <CardWrapper\n      onClick={onClick}\n      className={isScaling ? \"asset-card isScaling\" : \"asset-card\"}\n      cover={\n        <div className=\"cover-wrapper\">\n          {typeof preview === \"string\" ? (\n            <img src={preview} alt={preview} />\n          ) : (\n            preview\n          )}\n          {id && <span className=\"id\">{id}</span>}\n        </div>\n      }\n    >\n      {children}\n    </CardWrapper>\n  );\n}\n","import React from \"react\";\nimport BaseLabel from \"./BaseLabel\";\n\nexport default function NotOnSaleLabel() {\n  return (\n    <BaseLabel label=\"Not on sale\" colorLabel=\"#4E4E4E\" backgroundLabel=\"#F5F5F5\" />\n  );\n}\n","import { Col, Row, Tooltip } from \"antd\";\nimport { useState } from \"react\";\nimport { ThreeDotIcon } from \"../../../../icon\";\nimport { BaseAsset } from \"../../../../types/Asset\";\nimport UseHoverToPlay, {\n  HoverToPlayContext,\n} from \"../../../HoveToPlay/useHoverToPlay\";\nimport Card, { CardProps } from \"../BaseAssetCard\";\nimport CollectionWithStatus from \"../CollectionWithStatus\";\nimport NotOnSaleLabel from \"../SaleCard/components/NotOnSaleLabel\";\nimport AssetCardPreview from \"./AssetCardPreview\";\n\nexport interface AssetCardProps extends CardProps {\n  asset: BaseAsset;\n  renderAction?: JSX.Element;\n  renderMenu?: JSX.Element;\n  renderContent?: JSX.Element;\n}\n\nexport function AssetCard(props: AssetCardProps) {\n  const { asset, renderAction, renderContent, renderMenu } = props;\n  const itemHref = props.itemHref || `/asset/asset.a/${asset.asset_id}`;\n  const [state, setState] = useState<State>({\n    isEnableAction: false,\n    isShowDetail: false,\n  });\n  const useHoverToPlay = UseHoverToPlay({\n    onPlay: () => setPartialState({ isShowDetail: true }),\n    onPause: () => setPartialState({ isShowDetail: false }),\n  });\n\n  const setPartialState = (p: Partial<State>) =>\n    setState((prev) => ({ ...prev, ...p }));\n\n  const renderDefaultContent = () => {\n    return (\n      <div style={{ paddingBottom: 0 }} className=\"content\">\n        <div style={{ padding: \"12px 0\" }}>\n        <NotOnSaleLabel/>\n          <Tooltip title={props.asset.name}>\n            <span style={{marginTop: 4}} className=\"title\">{props.asset.name}</span>\n          </Tooltip>\n          <p style={{ marginTop: 4 }} className=\"desc\">\n            <CollectionWithStatus\n              name={props.asset.collection_name}\n              status={props.asset.collection_status}\n            />\n          </p>\n        </div>\n        <div className=\"hr\" />\n        <div style={{ padding: \"12px 0\" }}>\n          <Row justify={\"space-between\"}>\n            <Col></Col>\n            <Col>\n              <Row align={\"middle\"}>\n                <ThreeDotIcon />\n              </Row>\n            </Col>\n          </Row>\n        </div>\n      </div>\n    );\n  };\n\n  return (\n    <div onMouseLeave={useHoverToPlay.onMouseLeave}>\n      <Card\n        preview={\n          <HoverToPlayContext.Provider value={useHoverToPlay}>\n            <AssetCardPreview asset={asset} />\n          </HoverToPlayContext.Provider>\n        }\n        id={`#${asset.template_mint}`}\n        isScaling={state.isShowDetail}\n        itemHref={itemHref}\n        {...props}\n      >\n        {renderContent ? renderContent : renderDefaultContent()}\n        {\n          <Row\n            className=\"action\"\n            justify=\"space-between\"\n            onMouseOver={() =>\n              setState((prev) => ({ ...prev, isEnableAction: true }))\n            }\n            onMouseLeave={() =>\n              setState((prev) => ({ ...prev, isEnableAction: false }))\n            }\n          >\n            <div\n              onClick={(e) => {\n                e.stopPropagation();\n              }}\n            >\n              {renderAction}\n            </div>\n            {renderMenu && (\n              <div\n                style={{\n                  display:\n                    state.isEnableAction && renderMenu ? \"block\" : \"none\",\n                }}\n              >\n                {renderMenu}\n              </div>\n            )}\n          </Row>\n        }\n      </Card>\n    </div>\n  );\n}\n\nexport interface State {\n  isEnableAction: boolean;\n  isShowDetail: boolean;\n}\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React from \"react\";\nimport { AssetCard, AssetCardProps } from \".\";\n\nexport function BlackListAssetCard(props: AssetCardProps) {\n\treturn (\n\t\t<AssetCard\n\t\t\t{...props}\n\t\t\trenderAction={\n\t\t\t\t<span style={{ color: \"#ddd\" }} aria-hidden>\n\t\t\t\t\tBlacklisted\n\t\t\t\t</span>\n\t\t\t}\n\t\t/>\n\t);\n}\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React from \"react\";\nimport { AssetCard, AssetCardProps } from \".\";\n\nexport function DeListedAssetCard(props: AssetCardProps) {\n\treturn (\n\t\t<AssetCard\n\t\t\t{...props}\n\t\t\trenderAction={\n\t\t\t\t<span style={{ color: \"#ddd\" }} aria-hidden>\n\t\t\t\t\tDelisted\n\t\t\t\t</span>\n\t\t\t}\n\t\t/>\n\t);\n}\n","/* eslint-disable jsx-a11y/mouse-events-have-key-events */\nimport React from \"react\";\nimport { AssetCard, AssetCardProps } from \".\";\n\nexport function NotOnSaleCard(props: AssetCardProps) {\n\treturn (\n\t\t<AssetCard\n\t\t\t{...props}\n\t\t\trenderAction={\n\t\t\t\t<span style={{ color: \"#ddd\" }} aria-hidden>\n\t\t\t\t\tNot On Sale\n\t\t\t\t</span>\n\t\t\t}\n\t\t/>\n\t);\n}\n","import { useContext } from \"react\";\nimport { Asset } from \"../../../../types/Asset\";\nimport SellableAsset from \"../../../AssetActions/AssetCard/SellableAsset\";\nimport { AssetDetailContext } from \"../../../marketplace/context/useAssetDetail\";\nimport { AssetCard, AssetCardProps } from \"../AssetCard\";\n\nexport interface SellableAssetCardProps extends AssetCardProps {\n  asset: Asset;\n}\n\nexport default function SellableAssetCard(props: SellableAssetCardProps) {\n  const { setAssetDetail } = useContext(AssetDetailContext);\n\n\n  return (\n    <div>\n      <AssetCard\n      onClick={()=>setAssetDetail({...props.asset, assets: [props.asset]})}\n        {...props}\n        renderAction={\n          <SellableAsset {...props}/>\n        }\n      />\n    </div>\n  );\n}\n","import { Row, Col } from \"antd\";\nimport React from \"react\";\nimport { CountdownStyled } from \"./AuctionSaleLabel\";\nimport BaseLabel from \"./BaseLabel\";\n\ninterface Props {\n  endAt: number;\n}\nexport default function P2OLabel({ endAt }: Props) {\n  // endAt = (new Date().getTime() )/1000 + 180;\n  const isExpired =\n    endAt && endAt > 0 && endAt - new Date().getTime() / 1000 <= 0;\n\n  return (\n    <Row align={\"middle\"} gutter={4}>\n      <Col>\n        <BaseLabel label=\"P2O\" colorLabel=\"#986A00\" backgroundLabel=\"#F9F4E7\" />\n      </Col>\n      <Col>\n        {Number(endAt) > 0 && (\n          <div>\n            {!isExpired ? (\n              <div style={{ display: \"flex\", alignItems: \"center\" }}>\n                <Row align=\"middle\">\n                  <CountdownStyled value={endAt * 1000} />\n                </Row>\n              </div>\n            ) : (\n              <div style={{ display: \"flex\", alignItems: \"center\" }}>\n                <Row align=\"middle\">\n                  {/* <img\n                    height={12}\n                    src=\"/static/img/defer-expire.svg\"\n                    alt=\"timer\"\n                  /> */}\n                  <span className=\"font-sm color-text-secondary\">\n                    Settlement expired\n                  </span>\n                </Row>\n              </div>\n            )}\n          </div>\n        )}\n      </Col>\n    </Row>\n  );\n}\n","import React from \"react\";\nimport BaseLabel from \"./BaseLabel\";\n\nexport default function RapidSaleLabel() {\n  return (\n    <BaseLabel\n      label=\"Rapid Sale\"\n      colorLabel=\"#986A00\"\n      backgroundLabel=\"#F9F4E7\"\n    />\n  );\n}\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\nimport { formatPrice } from \"../../helpers/CurrencyHelper\";\nimport WaxCurrencyIcon from \"../../icon/wax-currency\";\n\ninterface Props {\n  price: number;\n  currency: string;\n  tokenPrecision: number;\n}\nexport default function PriceWithSymbol({\n  price,\n  currency,\n  tokenPrecision,\n}: Props) {\n\n  const renderCurrency = (currency: string) => {\n    switch (currency.toLowerCase()) {\n      case \"usd\":\n        return <p>$</p>;\n      case \"wax\":\n        return <WaxCurrencyIcon width={16} height={16}/>;\n\n      default:\n        return currency;\n    }\n  };\n  return (\n    <div style={{ display: \"flex\", justifyItems: \"center\", gap: 8 }}>\n      <div style={{ display:'flex', alignItems:'center' }}>{renderCurrency(currency)}</div>\n      <span className=\"fw3 font-md\">\n        {formatPrice(currency, price, tokenPrecision)}\n      </span>\n    </div>\n  );\n}\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { AssetCard, AssetCardProps } from \"../AssetCard\";\nimport { Carousel, Col, Row, Tooltip } from \"antd\";\nimport P2OLabel from \"./components/P2OLabel\";\nimport RapidSaleLabel from \"./components/RapidSaleLabel\";\nimport { CarouselSaleWrapper, ContentWrapper } from \"./styled\";\nimport AuctionSaleLabel from \"./components/AuctionSaleLabel\";\nimport AssetCardPreview from \"../AssetCard/AssetCardPreview\";\n\nimport CollectionWithStatus from \"../CollectionWithStatus\";\nimport UseHoverToPlay, {\n  HoverToPlayContext,\n} from \"../../../HoveToPlay/useHoverToPlay\";\nimport { BaseSale, Sale } from \"../../../../types/Sale\";\nimport PriceWithSymbol from \"../../../PriceWithSymbol\";\nimport { Auction, AuctionState } from \"../../../../types/Auction\";\nimport { AssetDetailContext } from \"../../../marketplace/context/useAssetDetail\";\nimport { auctionController, saleController } from \"../../../../controller\";\nimport {\n  normalizeAuction,\n  normalizeSale,\n} from \"../../../../helpers/NormalizeHelper\";\n\nexport interface SaleCardProps<S extends BaseSale = BaseSale>\n  extends Omit<Omit<AssetCardProps, \"preview\">, \"asset\"> {\n  sale: S;\n  focusedAssetIndex?: number;\n}\n\nexport default function SaleCard(props: SaleCardProps) {\n  const { sale, focusedAssetIndex = 0 } = props;\n  const itemHref = props.itemHref;\n  const [state, setState] = useState<State>({\n    currentAssetIndex: focusedAssetIndex,\n    isShowDetail: false,\n  });\n  const { setAssetDetail } = useContext(AssetDetailContext);\n\n  const { currentAssetIndex } = state;\n  const currentAsset = sale.assets[state.currentAssetIndex];\n\n  const useHoverToPlay = UseHoverToPlay({\n    onPlay: () => setPartialState({ isShowDetail: true }),\n    onPause: () => setPartialState({ isShowDetail: false }),\n  });\n\n  useEffect(() => {\n    setPartialState({ currentAssetIndex: focusedAssetIndex });\n  }, [focusedAssetIndex]);\n\n  const setPartialState = (p: Partial<State>) =>\n    setState((prev) => ({ ...prev, ...p }));\n\n  const renderSaleType = () => {\n    if (sale.saleType === \"auction\")\n      return (\n        <AuctionSaleLabel\n          endTime={\n            (sale as Auction).state === AuctionState.SOLD\n              ? 0\n              : (sale as Auction).end_time\n          }\n        />\n      );\n    if (sale.saleType === \"rapid-sale\") return <RapidSaleLabel />;\n    if (sale.saleType === \"p2o\")\n      return <P2OLabel endAt={(sale as Sale).end_at} />;\n    return <div />;\n  };\n\n  const renderPrice = (isShowFullNumber = false) => {\n    const SMALLEST_PRICE = 0.0001;\n    let price: any =\n      sale.price_symbol === \"USD\"\n        ? sale.price / Math.pow(10, 2)\n        : sale.price / Math.pow(10, sale.token_precision);\n\n    if (!isShowFullNumber) {\n      if (price < SMALLEST_PRICE)\n        return `< ${priceWithCurrency(sale.price_symbol, SMALLEST_PRICE)}`;\n      if (!Number.isInteger(price)) {\n        price =\n          price >= 0.01\n            ? price.toFixed(2)\n            : price > 0.001\n            ? price.toFixed(3)\n            : price.toFixed(4);\n      }\n    }\n    return priceWithCurrency(sale.price_symbol, price);\n  };\n\n  const priceWithCurrency = (price_symbol: string, price: number) => {\n    if (price_symbol === \"USD\") return `$${price}`;\n    if (price_symbol === \"WAX\") return `${price} WAXP`;\n    return `${price} ${price_symbol}`;\n  };\n\n  const goToSaleDetail = async () => {\n    var amountAssetIds = sale?.asset_ids?.split(\"-\").length || 0;\n    if (amountAssetIds > sale?.assets.length) {\n      var bundleSale = await saleController.get(sale.market_contract, sale.id);\n      setAssetDetail(normalizeSale(bundleSale));\n    } else if ((sale as Auction).auction_id) {\n      var auction = await auctionController.get(sale.market_contract, sale.id);\n      setAssetDetail(normalizeAuction(auction));\n    } else setAssetDetail(sale);\n  };\n\n  const isBundleSale = sale.assets.length > 1;\n  return (\n    <div onMouseLeave={useHoverToPlay.onMouseLeave}>\n      <AssetCard\n        asset={currentAsset}\n        isScaling={state.isShowDetail}\n        itemHref={itemHref}\n        onClick={() => goToSaleDetail()}\n        preview={\n          <HoverToPlayContext.Provider value={useHoverToPlay}>\n            <CarouselSaleWrapper>\n              <div\n                style={{ width: \"100%\", height: \"100%\" }}\n                onClick={(e) => {\n                  e.stopPropagation();\n                }}\n              >\n                <Carousel\n                  afterChange={(index) => {\n                    setState((prev) => ({ ...prev, currentAssetIndex: index }));\n                  }}\n                >\n                  {sale.assets.map((a) => (\n                    <div onClick={() => goToSaleDetail()}>\n                      <AssetCardPreview key={a.asset_id} asset={a} />\n                    </div>\n                  ))}\n                </Carousel>\n\n                {isBundleSale && (\n                  <span className=\"index\">{`${currentAssetIndex + 1}/${\n                    sale.assets.length\n                  }`}</span>\n                )}\n              </div>\n            </CarouselSaleWrapper>\n          </HoverToPlayContext.Provider>\n        }\n        renderContent={\n          <ContentWrapper>\n            {/* <div className=\"content\">\n              <Row justify=\"space-between\">\n                <Tooltip title={currentAsset.name}>\n                  <span className=\"title\">{currentAsset.name}</span>\n                </Tooltip>\n                <Tooltip title={renderPrice(true)}>\n                  <span className=\"price\">{renderPrice()}</span>\n                </Tooltip>\n              </Row>\n              <Row style={{ marginTop: 4 }} justify=\"space-between\">\n                <p className=\"desc\">\n                  <CollectionWithStatus\n                    name={currentAsset.collection_name}\n                    status={currentAsset.collection_status}\n                  />\n                </p>\n                {renderSaleType()}\n              </Row>\n            </div> */}\n            <div style={{ paddingBottom: 0 }} className=\"content\">\n              <div style={{ padding: \"12px 0\" }}>\n                {renderSaleType()}\n                <Tooltip title={currentAsset.name}>\n                  <span className=\"title\">{currentAsset.name}</span>\n                </Tooltip>\n                <p style={{ marginTop: 4 }} className=\"desc\">\n                  <CollectionWithStatus\n                    name={currentAsset.collection_name}\n                    status={currentAsset.collection_status}\n                  />\n                </p>\n              </div>\n              <div className=\"hr\" />\n              <div style={{ padding: \"12px 0\" }}>\n                <Row justify={\"space-between\"}>\n                  <Col>\n                    <PriceWithSymbol\n                      price={sale.price}\n                      currency={sale.price_symbol}\n                      tokenPrecision={sale.token_precision}\n                    />\n                  </Col>\n                  {/* <Col>{renderSaleType()}</Col> */}\n                </Row>\n              </div>\n            </div>\n          </ContentWrapper>\n        }\n        {...props}\n      />\n    </div>\n  );\n}\n\ninterface State {\n  currentAssetIndex: number;\n  isShowDetail: boolean;\n}\n","import React from \"react\";\nimport SaleCard, { SaleCardProps } from \".\";\nimport { Sale } from \"../../../../types/Sale\";\n\nexport default function DeListedSaleCard(props: SaleCardProps<Sale>) {\n\treturn (\n\t\t<SaleCard\n\t\t\t{...props}\n\t\t\trenderAction={\n\t\t\t\t<span style={{ color: \"#ddd\" }} aria-hidden>\n\t\t\t\t\tDelisted\n\t\t\t\t</span>\n\t\t\t}\n\t\t/>\n\t);\n}\n","import React, { useContext } from \"react\";\nimport SaleCard, { SaleCardProps } from \".\";\nimport { WaxAuthenContext } from \"../../../../hook/useWaxAuthen\";\nimport { Sale } from \"../../../../types/Sale\";\n\nexport default function RequireLoginSaleCard(props: SaleCardProps<Sale>) {\n  const { openLoginPopup } = useContext(WaxAuthenContext);\n\n  return (\n    <SaleCard\n      {...props}\n      renderAction={\n        <span aria-hidden onClick={openLoginPopup}>\n          Buy Now\n        </span>\n      }\n    />\n  );\n}\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\nimport { Auction } from \"../../../../types/Auction\";\nimport SaleCard, { SaleCardProps } from \"../../components/SaleCard\";\n\ninterface Props extends SaleCardProps<Auction> {}\n\nexport default function AuctionCard(props: Props) {\n  return (\n    <SaleCard\n    {...props}\n      sale={props.sale}\n      itemHref={\"\"}\n      renderAction={\n        <Col xs={24}>\n          <Row justify=\"space-between\">\n            {props.renderAction || <div />}\n            {/* <div>\n              <Row align=\"middle\">\n                <TimeIcon />\n                <CountdownStyled value={props.sale.end_time} />\n              </Row>\n            </div> */}\n          </Row>\n        </Col>\n      }\n    />\n  );\n}\n","import { Auction } from \"../../../../types/Auction\";\nimport AuctionCancellable from \"../../../AssetActions/Auction/AuctionCancellable\";\nimport { SaleCardProps } from \"../../components/SaleCard\";\nimport AuctionCard from \"./AuctionCard\";\n\nexport default function AuctionCancellableCard(props: SaleCardProps<Auction>) {\n\n  return (\n    <AuctionCard\n      {...props}\n      renderAction={<AuctionCancellable {...props} />}\n    />\n  );\n}\n","import { Auction } from \"../../../../types/Auction\";\nimport AuctionNotCancellable from \"../../../AssetActions/Auction/AuctionNotCancellable\";\nimport { SaleCardProps } from \"../../components/SaleCard\";\nimport AuctionCard from \"./AuctionCard\";\n\ninterface Props extends SaleCardProps<Auction> {}\n\nexport default function AuctionNotCancellableCard(props: Props) {\n\n  return (\n    <AuctionCard\n      {...props}\n      renderAction={<AuctionNotCancellable {...props} />}\n    />\n  );\n}\n","import { Auction } from \"../../../../../types/Auction\";\nimport AuctionBiddable from \"../../../../AssetActions/Auction/AuctionBiddable\";\nimport { SaleCardProps } from \"../../../components/SaleCard\";\nimport AuctionCard from \"../AuctionCard\";\n\ninterface Props extends SaleCardProps<Auction> {}\nexport default function AuctionBiddableCard(props: Props) {\n\n  return (\n    <div>\n      <AuctionCard\n        {...props}\n        renderAction={<AuctionBiddable sale={props.sale} />}\n      />\n    </div>\n  );\n}\n","import { Auction } from \"../../../../../types/Auction\";\nimport AuctionClaimable from \"../../../../AssetActions/Auction/AuctionClaimable\";\nimport { SaleCardProps } from \"../../../components/SaleCard\";\nimport AuctionCard from \"../AuctionCard\";\n\ninterface Props extends SaleCardProps<Auction> {\n  claimType: \"item\" | \"amount\";\n}\n\nexport default function AuctionClaimableCard(props: Props) {\n  return (\n    <div>\n      <AuctionCard\n        {...props}\n        renderAction={<AuctionClaimable {...props} />}\n      />\n    </div>\n  );\n}\n","import { Auction } from \"../../../../types/Auction\";\nimport OnAuction from \"../../../AssetActions/Auction/OnAuction\";\nimport SaleCard, { SaleCardProps } from \"../../components/SaleCard\";\n\ninterface Props extends SaleCardProps<Auction> {}\n\nexport default function OnAuctionCard(props: Props) {\n\n  const itemHref = \"\";\n  return (\n    <SaleCard\n      sale={props.sale}\n      itemHref={itemHref}\n      renderAction={<OnAuction {...props} />}\n    />\n  );\n}\n","import { Auction } from \"../../../../types/Auction\";\nimport RequireLoginAuction from \"../../../AssetActions/Auction/RequireLoginAuction\";\nimport { SaleCardProps } from \"../../components/SaleCard\";\nimport AuctionCard from \"./AuctionCard\";\n\nexport default function RequireLoginAuctionCard(props: SaleCardProps<Auction>) {\n\n  return (\n    <AuctionCard\n      {...props}\n      renderAction={\n        <RequireLoginAuction {...props}/>\n      }\n    />\n  );\n}\n","import { Sale } from \"../../../../types/Sale\";\nimport RapidSaleBuyable from \"../../../AssetActions/RapidSale/RapidSaleBuyable\";\nimport SaleCard, { SaleCardProps } from \"../../components/SaleCard\";\n\ninterface Props extends SaleCardProps<Sale> {}\n\nexport default function RapidSaleBuyableCard(props: Props) {\n\n  return (\n    <div>\n      <SaleCard\n        {...props}\n        renderAction={<RapidSaleBuyable sale={props.sale} />}\n      />\n    </div>\n  );\n}\n","import { Sale } from \"../../../../types/Sale\";\nimport { SaleCardProps } from \"../../components/SaleCard\";\nimport RapidSaleBuyableCard from \"../RapidSale/RapidSaleBuyableCard\";\n\nexport default function P2OBuyableCard(props: SaleCardProps<Sale>) {\n\n  return (\n    <RapidSaleBuyableCard\n      {...props}\n      itemHref={\"\"}\n      sale={{ ...props.sale, saleType: \"p2o\" }}\n    />\n  );\n}\n","import { Sale } from \"../../../../types/Sale\";\nimport P2OCancellable from \"../../../AssetActions/P2O/P2OCancellable\";\nimport SaleCard, { SaleCardProps } from \"../../components/SaleCard\";\n\nexport default function P2OCancellableCard(props: SaleCardProps<Sale>) {\n\n  return (\n    <div>\n      <SaleCard\n        {...props}\n        sale={{ ...props.sale, saleType: \"p2o\" }}\n        itemHref={\"\"}\n        renderAction={<P2OCancellable sale={props.sale} />}\n      />\n    </div>\n  );\n}\n","import { Sale } from \"../../../../types/Sale\";\nimport P2OClaimable from \"../../../AssetActions/P2O/P2OClaimable\";\nimport SaleCard, { SaleCardProps } from \"../../components/SaleCard\";\n\ninterface Props extends SaleCardProps<Sale> {}\n\nexport default function P2OClaimableCard(props: Props) {\n\n  return (\n    <div>\n      <SaleCard\n        {...props}\n        sale={{ ...props.sale, saleType: \"p2o\" }}\n        itemHref={\"\"}\n        renderAction={\n          <P2OClaimable sale={props.sale}/>\n        }\n      />\n    </div>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\nimport { Sale } from \"../../../../types/Sale\";\nimport SaleCard, { SaleCardProps } from \"../../components/SaleCard\";\n\nexport default function P2OCard(props: SaleCardProps<Sale>) {\n  return (\n    <SaleCard\n      sale={{ ...props.sale, saleType: \"p2o\" }}\n      itemHref={\"\"}\n      renderAction={\n        <Col xs={24}>\n          <Row justify=\"space-between\">{props.renderAction || <div />}</Row>\n        </Col>\n      }\n      {...props}\n    />\n  );\n}\n","import { Sale } from \"../../../../types/Sale\";\nimport P2OPendingTransfer from \"../../../AssetActions/P2O/P2OPendingTransfer\";\nimport {  } from \"../../../marketplace/context/useAssetDetail\";\nimport { SaleCardProps } from \"../../components/SaleCard\";\nimport P2OCard from \"./P2OCard\";\n\nexport default function P2OPendingTransferCard(props: SaleCardProps<Sale>) {\n\n  return (\n    <P2OCard\n      {...props}\n      renderAction={<P2OPendingTransfer sale={props.sale} />}\n    />\n  );\n}\n","import { Sale } from \"../../../../types/Sale\";\nimport P2OInprogress from \"../../../AssetActions/P2O/P2OProgressing\";\nimport { SaleCardProps } from \"../../components/SaleCard\";\nimport P2OCard from \"./P2OCard\";\n\nexport default function P2OInprogressCard(props: SaleCardProps<Sale>) {\n\n  return (\n    <P2OCard\n      {...props}\n      renderAction={<P2OInprogress sale={props.sale} />}\n    />\n  );\n}\n","import { Sale } from \"../../../../types/Sale\";\nimport P2OSold from \"../../../AssetActions/P2O/P2OSold\";\nimport { SaleCardProps } from \"../../components/SaleCard\";\nimport P2OCard from \"./P2OCard\";\n\nexport default function P2OSoldCard(props: SaleCardProps<Sale>) {\n\n  return (\n    <P2OCard\n      sale={{ ...props.sale, saleType: \"p2o\" }}\n      itemHref={``}\n      {...props}\n      renderAction={<P2OSold sale={props.sale} />}\n    />\n  );\n}\n","import React, { useContext } from \"react\";\nimport { WaxAuthenContext } from \"../../../../hook/useWaxAuthen\";\nimport { Sale } from \"../../../../types/Sale\";\nimport SaleCard, { SaleCardProps } from \"../../components/SaleCard\";\n\nexport default function RequireLoginP2OCard(props: SaleCardProps<Sale>) {\n  const { openLoginPopup } = useContext(WaxAuthenContext);\n\n  return (\n    <div>\n      <SaleCard\n        {...props}\n        renderAction={\n          <span aria-hidden onClick={openLoginPopup}>\n            Buy Now\n          </span>\n        }\n      />\n    </div>\n  );\n}\n","import { Sale } from \"../../../../../types/Sale\";\nimport P2OTransferable from \"../../../../AssetActions/P2O/P2OTransferable\";\nimport { SaleCardProps } from \"../../../components/SaleCard\";\nimport P2OCard from \"../P2OCard\";\n\nexport default function P2OTransferableCard(props: SaleCardProps<Sale>) {\n\n  return (\n    <div>\n      <P2OCard\n        {...props}\n        renderAction={<P2OTransferable {...props} />}\n      />\n    </div>\n  );\n}\n","import { Sale } from \"../../../../types/Sale\";\nimport SaleCard, { SaleCardProps } from \"../../components/SaleCard\";\nimport RapidSaleCancelable from \"../../../AssetActions/RapidSale/RapidSaleCancellable\";\n\nexport default function RapidSaleCancelableCard(props: SaleCardProps<Sale>) {\n\n  return (\n    <div>\n      <SaleCard\n        {...props}\n        renderAction={\n         <RapidSaleCancelable sale={props.sale}/>\n        }\n      />\n    </div>\n  );\n}\n","import React, { useCallback, useContext } from \"react\";\nimport { Asset } from \"../../types/Asset\";\nimport { BaseSale, Sale, SaleState, SaleType } from \"../../types/Sale\";\nimport { CollectionStatus } from \"../../types/Collection\";\nimport { BlackListAssetCard } from \"./components/AssetCard/BlackListAssetCard\";\nimport { DeListedAssetCard } from \"./components/AssetCard/DeListedAssetCard\";\nimport { NotOnSaleCard } from \"./components/AssetCard/NotOnSaleCard\";\n// import AssetCard from \"../shared/AssetCard/AssetCard\";\nimport SellableAssetCard from \"./components/AssetCardSellable\";\nimport DeListedSaleCard from \"./components/SaleCard/DeListedSaleCard\";\nimport RequireLoginSaleCard from \"./components/SaleCard/RequireLoginSaleCard\";\nimport AuctionCancellableCard from \"./instances/Auction/AuctionCancellableCard\";\nimport AuctionCard from \"./instances/Auction/AuctionCard\";\nimport AuctionNotCancellableCard from \"./instances/Auction/AuctionNotCancellableCard\";\nimport AuctionBiddableCard from \"./instances/Auction/biddable/AuctionBiddableCard\";\nimport AuctionClaimableCard from \"./instances/Auction/claimable/AuctionClaimableCard\";\nimport OnAuctionCard from \"./instances/Auction/OnAuctionCard\";\nimport RequireLoginAuctionCard from \"./instances/Auction/RequireLoginAuctionCard\";\nimport P2OBuyableCard from \"./instances/P2O/P2OBuyableCard\";\nimport P2OCancellableCard from \"./instances/P2O/P2OCancellableCard\";\nimport P2OClaimableCard from \"./instances/P2O/P2OClaimableCard\";\nimport P2OPendingTransferCard from \"./instances/P2O/P2OPendingTransferCard\";\nimport P2OInprogressCard from \"./instances/P2O/P2OProgressingCard\";\nimport P2OSoldCard from \"./instances/P2O/P2OSoldCard\";\nimport RequireLoginP2OCard from \"./instances/P2O/RequireLoginP2OCard\";\nimport P2OTransferableCard from \"./instances/P2O/transferable/P2OTransferableCard\";\nimport RapidSaleBuyableCard from \"./instances/RapidSale/RapidSaleBuyableCard\";\nimport RapidSaleCancelableCard from \"./instances/RapidSale/RapidSaleCancellableCard\";\nimport { checkEndTime } from \"../../utils/helpers\";\nimport { ON_SALE_STATUSES } from \"../../constant/SaleStateConst\";\nimport { WaxAuthenContext } from \"../../hook/useWaxAuthen\";\nimport {\n  normalizeAsset,\n  normalizeAuction,\n  normalizeSale,\n} from \"../../helpers/NormalizeHelper\";\nimport { AuctionState } from \"../../types/Auction\";\n\ninterface Props {\n  item: any;\n}\nexport default function CompositeAssetCard({ item }: Props) {\n  const { authen } = useContext(WaxAuthenContext);\n\n  const type =\n    item.asset_id != null\n      ? \"asset\"\n      : (item.sale_id || item.auction_id)?.length > 0\n      ? \"sale\"\n      : undefined;\n\n  const getSaleType = (item: any): SaleType =>\n    item.auction_id ? \"auction\" : item.deferred_listing ? \"p2o\" : \"rapid-sale\";\n\n  const isNotSale = (item: any) =>\n    (item.sales?.length || 0) === 0 && (item.auctions?.length || 0) === 0;\n\n  const isOnAuction = (item: any) => (item.auctions?.length || 0) > 0;\n\n  const selectComponent = useCallback(() => {\n    // return <AssetCard asset={item} />;\n    const isBlackList =\n      item && item.collection_status === CollectionStatus.BLACKLIST;\n\n    if (type === \"asset\") {\n      item = normalizeAsset(item);\n      const isMyAsset = (item as Asset).owner === authen.userAccount;\n      const notOnSale = isNotSale(item);\n\n      if (isBlackList) {\n        if (notOnSale) return <BlackListAssetCard asset={item} />;\n        else return <DeListedAssetCard asset={item} />;\n      }\n\n      if (notOnSale) {\n        if (isMyAsset) return <SellableAssetCard asset={item} />;\n        else return <NotOnSaleCard asset={item} />;\n      }\n      if (isOnAuction(item)) {\n        const auction = item.auctions?.[0];\n        return <OnAuctionCard sale={normalizeAuction(auction)} />;\n      } else {\n        const sale = item.sales[0];\n        return selectSaleComponent(sale);\n      }\n    }\n\n    if (type === \"sale\") {\n      return selectSaleComponent(item);\n    }\n\n    return (\n      <div\n        style={{\n          width: \"100%\",\n          height: \"100%\",\n          aspectRatio: \"1/1\",\n          backgroundColor: \"#ddd\",\n        }}\n      />\n    );\n  }, [authen.userAccount, authen.isAuthen, item]);\n\n  const selectSaleComponent = useCallback(\n    (sale: any) => {\n      const saleType = getSaleType(sale);\n      const isMySale = authen.userAccount === (sale as BaseSale).seller;\n      const isBlackList =\n        sale &&\n        (sale as BaseSale).collection_status === CollectionStatus.BLACKLIST;\n\n      const isAdminRemoved =\n        sale && (sale as BaseSale).state === SaleState.ADMIN_REMOVED;\n\n      if (isBlackList || isAdminRemoved)\n        return <DeListedSaleCard sale={normalizeSale(sale)} />;\n      switch (saleType) {\n        case \"auction\": {\n          const auction = normalizeAuction(sale);\n          const isAuctionEnded =\n\t\t\t\t\t\tcheckEndTime(auction.end_time) ||\n\t\t\t\t\t\tauction.state === AuctionState.SOLD;\n          const isBided = auction.bid_count > 0;\n          const canClaimable =\n            authen.userAccount === auction.buyer && !auction.claimed_by_buyer;\n\n          if (!authen.isAuthen)\n            return <RequireLoginAuctionCard sale={auction} />;\n\n          if (isMySale) {\n            if (!isBided) return <AuctionCancellableCard sale={auction} />;\n\n            if (isAuctionEnded)\n              return <AuctionClaimableCard claimType=\"amount\" sale={auction} />;\n            else return <AuctionNotCancellableCard sale={auction} />;\n          } else {\n            if (!isAuctionEnded) return <AuctionBiddableCard sale={auction} />;\n            else if (canClaimable)\n              return <AuctionClaimableCard claimType=\"item\" sale={auction} />;\n            return <AuctionCard sale={auction} />;\n          }\n        }\n        case \"p2o\": {\n          const isOnSale = ON_SALE_STATUSES.includes(sale?.state);\n          const isExpired =\n            sale.end_at > 0 && sale.end_at - new Date().getTime() / 1000 <= 0;\n          const isMyBuy = authen.userAccount === (sale as Sale).buyer;\n\n          if (!authen.isAuthen)\n            return <RequireLoginP2OCard sale={normalizeSale(sale)} />;\n\n          if (isExpired)\n            if (isMyBuy) return <P2OClaimableCard sale={normalizeSale(sale)} />;\n            else return <P2OInprogressCard sale={normalizeSale(sale)} />;\n\n          if (isMySale)\n            if (isOnSale)\n              return <P2OCancellableCard sale={normalizeSale(sale)} />;\n            else return <P2OTransferableCard sale={normalizeSale(sale)} />;\n          else {\n            if (isOnSale) return <P2OBuyableCard sale={normalizeSale(sale)} />;\n            else {\n              if (isMyBuy)\n                return <P2OPendingTransferCard sale={normalizeSale(sale)} />;\n              else return <P2OSoldCard sale={normalizeSale(sale)} />;\n            }\n          }\n        }\n        case \"rapid-sale\":\n          if (!authen.isAuthen)\n            return <RequireLoginSaleCard sale={normalizeSale(sale)} />;\n\n          if (isMySale)\n            return <RapidSaleCancelableCard sale={normalizeSale(sale)} />;\n          return <RapidSaleBuyableCard sale={normalizeSale(sale)} />;\n        default:\n          return <RapidSaleBuyableCard sale={normalizeSale(sale)} />;\n      }\n    },\n    [item, authen.isAuthen, authen.userAccount]\n  );\n\n  return selectComponent();\n}\n","import { Row, Col } from \"antd\";\nimport React from \"react\";\nimport CompositeAssetCard from \".\";\n\ninterface Props {\n  items: any[];\n  handleLoadMore?: (callback?: () => void) => void;\n  isFullScreen?: boolean\n}\n\nfunction AssetList({ items, isFullScreen = false }: Props) {\n  return (\n    <Row\n      align=\"top\"\n      gutter={[\n        { xs: 8, md: 8, lg: 16, xl: 16, xxl: 16 },\n        { xs: 8, md: 8, lg: 16, xl: 16, xxl: 16 },\n      ]}\n    >\n      {items.map((item) => {\n        return (\n          <Col key={item.id} xs={12} md={12} lg={8} xl={6} xxl={isFullScreen?4:6}>\n            <CompositeAssetCard item={item} />\n          </Col>\n        );\n      })}\n    </Row>\n  );\n}\n\nexport default React.memo(AssetList);\n","import { Col, Row, Skeleton } from 'antd'\nimport React from 'react'\n\nexport default function AssetCardSkeleton() {\n  return (\n    <Row gutter={[0,10]} style={{width: '100%'}}>\n      <Col xs={24}>\n      <Skeleton.Image className='skeleton-image' active={true} />\n\n      </Col>\n      <Col xs={24}>\n        <Skeleton.Input active={true} size={'large'} block={true} />\n      </Col>\n      <Col xs={24}>\n        <Skeleton.Input active={true} size={'default'} block={true} />\n      </Col>\n    </Row>\n  )\n}\n","import { Col, Row, Spin } from \"antd\";\nimport React from \"react\";\nimport { isArrayTypeNode } from \"typescript\";\nimport { PAGE_SIZE } from \"../../../types/Pagination\";\nimport CompositeAssetCard from \"../../AssetCard\";\nimport AssetCardSkeleton from \"../../AssetCard/AssetCardSkeleton\";\n\ninterface Props {\n  isFullScreen?: boolean;\n  pageSize?: number;\n}\nexport default function Loading({\n  pageSize = PAGE_SIZE,\n  isFullScreen = false,\n}: Props) {\n  return (\n    // <Row\n    //   style={{\n    //     padding: \"200px 0px\",\n    //     display: \"flex\",\n    //     flexDirection: \"column\",\n    //     justifyContent: \"center\",\n    //     alignItems: \"center\",\n    //   }}\n    // >\n    //   {/* <Spin /> */}\n    //   {Array.from(new Array(pageSize)).map(() => <AssetCardSkeleton /> )}\n    // </Row>\n    <Row\n      style={{ height: \"100%\" }}\n      align=\"top\"\n      gutter={[\n        { xs: 8, md: 8, lg: 16, xl: 16, xxl: 16 },\n        { xs: 8, md: 8, lg: 16, xl: 16, xxl: 16 },\n      ]}\n    >\n      {Array.from(new Array(pageSize)).map((item) => {\n        return (\n          <Col\n            key={item}\n            xs={12}\n            md={12}\n            lg={8}\n            xl={6}\n            xxl={isFullScreen ? 4 : 6}\n          >\n            <AssetCardSkeleton />\n          </Col>\n        );\n      })}\n    </Row>\n  );\n}\n","import { Row, Col } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { saleController } from \"../../../controller\";\nimport AssetList from \"../../AssetCard/AssetList\";\nimport Loading from \"../../marketplace/component/Loading\";\n\ninterface Props {\n  collectionName: string\n  schema: string;\n}\n\nexport default function MoreAssetsFromSchema({ collectionName, schema }: Props) {\n  const [state, setState] = useState<State>({ isFetching: false, items: [] });\n  useEffect(() => {\n    fetchAssets();\n  }, [schema]);\n\n  const fetchAssets = async () => {\n    setState({ isFetching: true, items: [] });\n    const pagination = await saleController.list({\n      collection_name: collectionName,\n      // schema_name: schema,\n      limit: 24,\n    });\n    setState({ isFetching: false, items: pagination.items });\n  };\n  return (\n    <Row gutter={[0, 16]}>\n      <Col xs={24}>\n        <h2>More from this collection</h2>\n      </Col>\n      <Col xs={24}>\n        {state.isFetching ? (\n          <Loading isFullScreen={true} pageSize={24}/>\n        ) : (\n          <AssetList items={state.items} isFullScreen={true} />\n        )}\n      </Col>\n    </Row>\n  );\n}\n\ninterface State {\n  items: any;\n  isFetching: boolean;\n}\n","import { Col, Row } from \"antd\";\nimport React from \"react\";\nimport { ShareIcon, WhiteListAndVerifyIcon, WhiteListOrVerifyIcon } from \"../../../icon\";\nimport ThreeDot from \"../../../icon/three-dot\";\nimport { Asset } from \"../../../types/Asset\";\nimport { CollectionStatus } from \"../../../types/Collection\";\n\ninterface Props {\n  asset: Asset;\n}\nexport default function NameAndCollection({ asset }: Props) {\n  return (\n    <Row gutter={[0, 8]}>\n      <Col xs={24}>\n        <Row align={\"middle\"} justify={\"space-between\"}>\n          <Col>\n            <Row align=\"middle\">\n              <span className=\"color-primary font-lg fw3\">{asset.collection_name}</span>\n              {asset.collection_status && (\n                <div style={{ marginLeft: 5 }}>\n                  {asset.collection_status === CollectionStatus.WHITELISTED && (\n                    <WhiteListOrVerifyIcon />\n                  )}\n                  {asset.collection_status === CollectionStatus.VERIFIED && (\n                    <WhiteListAndVerifyIcon />\n                  )}\n                </div>\n              )}\n            </Row>\n          </Col>\n          {/* <Col>\n            <Row gutter={32}>\n              <Col>\n                <ShareIcon />\n              </Col>\n              <Col>\n                <ThreeDot />\n              </Col>\n            </Row>\n          </Col> */}\n        </Row>\n      </Col>\n      <Col xs={24}>\n        <p style={{ fontSize: 28, lineHeight: \"36px\" }} className=\"fw3\">\n          {asset.name}\n        </p>\n      </Col>\n    </Row>\n  );\n}\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","export default function requiredArgs(required, args) {\n  if (args.length < required) {\n    throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n  }\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n  requiredArgs(1, arguments);\n  var argStr = Object.prototype.toString.call(argument);\n\n  // Clone the date\n  if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime());\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument);\n  } else {\n    if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n      // eslint-disable-next-line no-console\n      console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n      // eslint-disable-next-line no-console\n      console.warn(new Error().stack);\n    }\n    return new Date(NaN);\n  }\n}","var defaultOptions = {};\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n  utcDate.setUTCFullYear(date.getFullYear());\n  return date.getTime() - utcDate.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * //   Wed Feb 11 1987 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var diff = dateLeft.getTime() - dateRight.getTime();\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}","var roundingMap = {\n  ceil: Math.ceil,\n  round: Math.round,\n  floor: Math.floor,\n  trunc: function trunc(value) {\n    return value < 0 ? Math.ceil(value) : Math.floor(value);\n  } // Math.trunc is not supported by IE\n};\n\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n  return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'less than a second',\n    other: 'less than {{count}} seconds'\n  },\n  xSeconds: {\n    one: '1 second',\n    other: '{{count}} seconds'\n  },\n  halfAMinute: 'half a minute',\n  lessThanXMinutes: {\n    one: 'less than a minute',\n    other: 'less than {{count}} minutes'\n  },\n  xMinutes: {\n    one: '1 minute',\n    other: '{{count}} minutes'\n  },\n  aboutXHours: {\n    one: 'about 1 hour',\n    other: 'about {{count}} hours'\n  },\n  xHours: {\n    one: '1 hour',\n    other: '{{count}} hours'\n  },\n  xDays: {\n    one: '1 day',\n    other: '{{count}} days'\n  },\n  aboutXWeeks: {\n    one: 'about 1 week',\n    other: 'about {{count}} weeks'\n  },\n  xWeeks: {\n    one: '1 week',\n    other: '{{count}} weeks'\n  },\n  aboutXMonths: {\n    one: 'about 1 month',\n    other: 'about {{count}} months'\n  },\n  xMonths: {\n    one: '1 month',\n    other: '{{count}} months'\n  },\n  aboutXYears: {\n    one: 'about 1 year',\n    other: 'about {{count}} years'\n  },\n  xYears: {\n    one: '1 year',\n    other: '{{count}} years'\n  },\n  overXYears: {\n    one: 'over 1 year',\n    other: 'over {{count}} years'\n  },\n  almostXYears: {\n    one: 'almost 1 year',\n    other: 'almost {{count}} years'\n  }\n};\nvar formatDistance = function formatDistance(token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === 'string') {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace('{{count}}', count.toString());\n  }\n  if (options !== null && options !== void 0 && options.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return 'in ' + result;\n    } else {\n      return result + ' ago';\n    }\n  }\n  return result;\n};\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n  return function () {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // TODO: Remove String()\n    var width = options.width ? String(options.width) : args.defaultWidth;\n    var format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;","var formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: 'P'\n};\nvar formatRelative = function formatRelative(token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n  return function (dirtyIndex, options) {\n    var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';\n    var valuesArray;\n    if (context === 'formatting' && args.formattingValues) {\n      var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;\n      valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      var _defaultWidth = args.defaultWidth;\n      var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;\n      valuesArray = args.values[_width] || args.values[_defaultWidth];\n    }\n    var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;\n    // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['B', 'A'],\n  abbreviated: ['BC', 'AD'],\n  wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n  short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  }\n};\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  }\n};\nvar ordinalNumber = function ordinalNumber(dirtyNumber, _options) {\n  var number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  var rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'st';\n      case 2:\n        return number + 'nd';\n      case 3:\n        return number + 'rd';\n    }\n  }\n  return number + 'th';\n};\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function argumentCallback(quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;","export default function buildMatchFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var width = options.width;\n    var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n    var matchResult = string.match(matchPattern);\n    if (!matchResult) {\n      return null;\n    }\n    var matchedString = matchResult[0];\n    var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n    var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    }) : findKey(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    });\n    var value;\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}\nfunction findKey(object, predicate) {\n  for (var key in object) {\n    if (object.hasOwnProperty(key) && predicate(object[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\nfunction findIndex(array, predicate) {\n  for (var key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function valueCallback(value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function valueCallback(index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;","export default function buildMatchPatternFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    var matchedString = matchResult[0];\n    var parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n  code: 'en-US',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;","export default function assign(target, object) {\n  if (target == null) {\n    throw new TypeError('assign requires that input parameter not be null or undefined');\n  }\n  for (var property in object) {\n    if (Object.prototype.hasOwnProperty.call(object, property)) {\n      ;\n      target[property] = object[property];\n    }\n  }\n  return target;\n}","import { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport differenceInMonths from \"../differenceInMonths/index.js\";\nimport differenceInSeconds from \"../differenceInSeconds/index.js\";\nimport defaultLocale from \"../_lib/defaultLocale/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport cloneObject from \"../_lib/cloneObject/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MINUTES_IN_DAY = 1440;\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520;\nvar MINUTES_IN_MONTH = 43200;\nvar MINUTES_IN_TWO_MONTHS = 86400;\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates                                            | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result               |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs      | less than 5 seconds  |\n * | 5 secs ... 10 secs     | less than 10 seconds |\n * | 10 secs ... 20 secs    | less than 20 seconds |\n * | 20 secs ... 40 secs    | half a minute        |\n * | 40 secs ... 60 secs    | less than a minute   |\n * | 60 secs ... 90 secs    | 1 minute             |\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `baseDate` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * const result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * const result = formatDistance(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0),\n *   { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * const result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\n\nexport default function formatDistance(dirtyDate, dirtyBaseDate, options) {\n  var _ref, _options$locale;\n  requiredArgs(2, arguments);\n  var defaultOptions = getDefaultOptions();\n  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain formatDistance property');\n  }\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate);\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value');\n  }\n  var localizeOptions = assign(cloneObject(options), {\n    addSuffix: Boolean(options === null || options === void 0 ? void 0 : options.addSuffix),\n    comparison: comparison\n  });\n  var dateLeft;\n  var dateRight;\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate);\n    dateRight = toDate(dirtyDate);\n  } else {\n    dateLeft = toDate(dirtyDate);\n    dateRight = toDate(dirtyBaseDate);\n  }\n  var seconds = differenceInSeconds(dateRight, dateLeft);\n  var offsetInSeconds = (getTimezoneOffsetInMilliseconds(dateRight) - getTimezoneOffsetInMilliseconds(dateLeft)) / 1000;\n  var minutes = Math.round((seconds - offsetInSeconds) / 60);\n  var months;\n\n  // 0 up to 2 mins\n  if (minutes < 2) {\n    if (options !== null && options !== void 0 && options.includeSeconds) {\n      if (seconds < 5) {\n        return locale.formatDistance('lessThanXSeconds', 5, localizeOptions);\n      } else if (seconds < 10) {\n        return locale.formatDistance('lessThanXSeconds', 10, localizeOptions);\n      } else if (seconds < 20) {\n        return locale.formatDistance('lessThanXSeconds', 20, localizeOptions);\n      } else if (seconds < 40) {\n        return locale.formatDistance('halfAMinute', 0, localizeOptions);\n      } else if (seconds < 60) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n      } else {\n        return locale.formatDistance('xMinutes', 1, localizeOptions);\n      }\n    } else {\n      if (minutes === 0) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions);\n      } else {\n        return locale.formatDistance('xMinutes', minutes, localizeOptions);\n      }\n    }\n\n    // 2 mins up to 0.75 hrs\n  } else if (minutes < 45) {\n    return locale.formatDistance('xMinutes', minutes, localizeOptions);\n\n    // 0.75 hrs up to 1.5 hrs\n  } else if (minutes < 90) {\n    return locale.formatDistance('aboutXHours', 1, localizeOptions);\n\n    // 1.5 hrs up to 24 hrs\n  } else if (minutes < MINUTES_IN_DAY) {\n    var hours = Math.round(minutes / 60);\n    return locale.formatDistance('aboutXHours', hours, localizeOptions);\n\n    // 1 day up to 1.75 days\n  } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n    return locale.formatDistance('xDays', 1, localizeOptions);\n\n    // 1.75 days up to 30 days\n  } else if (minutes < MINUTES_IN_MONTH) {\n    var days = Math.round(minutes / MINUTES_IN_DAY);\n    return locale.formatDistance('xDays', days, localizeOptions);\n\n    // 1 month up to 2 months\n  } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n    months = Math.round(minutes / MINUTES_IN_MONTH);\n    return locale.formatDistance('aboutXMonths', months, localizeOptions);\n  }\n  months = differenceInMonths(dateRight, dateLeft);\n\n  // 2 months up to 12 months\n  if (months < 12) {\n    var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH);\n    return locale.formatDistance('xMonths', nearestMonth, localizeOptions);\n\n    // 1 year up to max Date\n  } else {\n    var monthsSinceStartOfYear = months % 12;\n    var years = Math.floor(months / 12);\n\n    // N years up to 1 years 3 months\n    if (monthsSinceStartOfYear < 3) {\n      return locale.formatDistance('aboutXYears', years, localizeOptions);\n\n      // N years 3 months up to N years 9 months\n    } else if (monthsSinceStartOfYear < 9) {\n      return locale.formatDistance('overXYears', years, localizeOptions);\n\n      // N years 9 months up to N year 12 months\n    } else {\n      return locale.formatDistance('almostXYears', years + 1, localizeOptions);\n    }\n  }\n}","import assign from \"../assign/index.js\";\nexport default function cloneObject(object) {\n  return assign({}, object);\n}","import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n *   new Date(2014, 6, 2, 12, 30, 20, 0),\n *   new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport default function differenceInSeconds(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n *   new Date(2014, 6, 2, 12, 30, 21, 700),\n *   new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n  requiredArgs(2, arguments);\n  return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n  var result;\n\n  // Check for the difference of less than month\n  if (difference < 1) {\n    result = 0;\n  } else {\n    if (dateLeft.getMonth() === 1 && dateLeft.getDate() > 27) {\n      // This will check if the date is end of Feb and assign a higher end of month date\n      // to compare it with Jan\n      dateLeft.setDate(30);\n    }\n    dateLeft.setMonth(dateLeft.getMonth() - sign * difference);\n\n    // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n    // If so, result must be decreased by 1 in absolute value\n    var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign;\n\n    // Check for cases of one full calendar month\n    if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n      isLastMonthNotFull = false;\n    }\n    result = sign * (difference - Number(isLastMonthNotFull));\n  }\n\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n  var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n  return yearDiff * 12 + monthDiff;\n}","import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport default function isLastDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport default function endOfDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  date.setFullYear(date.getFullYear(), month + 1, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}","export const isNotNullOrEmpty = (text: string) => {\n  return text != null && text.length > 0;\n};\n\n\nexport const capitalizeFirstLetter = (text: string) => {\n\tif (!text || text.length == 0) return text;\n\treturn text && text[0].toUpperCase() + text.slice(1);\n};\n\nexport const truncateString = (str: string, num: number) => {\n\tif (!str || str.length === 0) return \"\";\n\n\tif (str.length > num) {\n\t\treturn str.slice(0, num) + \"...\";\n\t} else {\n\t\treturn str;\n\t}\n};","import { Modal, Row, Col } from \"antd\";\nimport React from \"react\";\nimport { Typography } from \"antd\";\nimport { ConfirmingOfferModalProps } from \".\";\nimport styled from \"styled-components\";\nimport { formatDistance } from \"date-fns\";\nimport AssetCardPreviewWithDefaultContent from \"../../../../AssetCard/components/AssetCard/AssetCardPreviewWithDefaultContent\";\nimport { priceWithCurrencyToString } from \"../../../../../helpers/CurrencyHelper\";\nimport FooterAcceptPolicy from \"../../../../ModalWithAcceptPolicy/Footer\";\nimport AssetsPreview from \"../../../../BaseComponent/AssetsPreview\";\n\nexport const ContentWrapper = styled(Row)`\n  .title-section {\n    display: block;\n    font-weight: 700;\n    font-size: 18px;\n    margin-bottom: 16px;\n  }\n\n  .info {\n    font-size: 12px;\n    font-weight: 600;\n  }\n\n  .info > .title {\n    color: #a3a3a3;\n  }\n  .info > .value {\n    color: #222;\n  }\n\n  .fee-hint {\n    display: block;\n    margin-top: 16px;\n    padding: 16px;\n    color: #7d70f6;\n    background: #f8f8ff;\n    border-radius: 9px;\n  }\n\n  .divider {\n    border-top: 1px solid;\n    border-color: #e2e6eb;\n    margin-top: 42px;\n    margin-bottom: 16px;\n  }\n\n  .total-price {\n    font-weight: 700;\n    font-size: 18px;\n  }\n`;\n\nconst { Text } = Typography;\nexport default function ConfirmAcceptModal(props: ConfirmingOfferModalProps) {\n  const fee = 0.19; // 19%\n  const { onCancel, onSubmit, visible } = props;\n  const offerInfos = [\n    { title: \"From\", value: props.offer?.buyer },\n    {\n      title: \"Expiration\",\n      value: formatDistance(\n        new Date(props.offer?.expired_at * 1000 || 0),\n        new Date(),\n        {\n          addSuffix: true,\n        }\n      ),\n    },\n  ];\n\n  return (\n    <Modal\n      centered\n      visible={visible}\n      onCancel={onCancel}\n      footer={[\n        <FooterAcceptPolicy\n          isAcceptPolicy={true}\n          onAcceptPolicy={(isAcceptPolicy) => {}}\n          actions={\n            <button className=\"btn btn-primary-active\" onClick={onSubmit}>\n              Accept Offer\n            </button>\n          }\n        />,\n      ]}\n      width={560}\n    >\n      <ContentWrapper gutter={[16, 16]}>\n      <Col xs={24}>\n          <h1 style={{ textAlign: \"center\", marginTop: 24 }}>Accept offer</h1>\n        </Col>\n        <Col xs={24} md={24}>\n          <AssetsPreview\n            assets={props.offer?.assets}\n          />\n        </Col>\n        <Col xs={24} md={24}>\n          <div>\n            <Text className=\"title-section\">Offer details</Text>\n            <Row gutter={[6, 6]}>\n              {offerInfos.map((offerInfo) => (\n                <Col xs={24} key={offerInfo.title}>\n                  <Row className=\"info\" justify=\"space-between\">\n                    <Col className=\"title\">{offerInfo.title}</Col>\n                    <Col className=\"value\">{offerInfo.value}</Col>\n                  </Row>\n                </Col>\n              ))}\n            </Row>\n          </div>\n          <div className=\"divider\" />\n          <div>\n            <Text className=\"title-section\">Fees</Text>\n            <Row gutter={[6, 6]}>\n              <Col xs={24}>\n                <Row className=\"info\" justify=\"space-between\">\n                  <Col className=\"title\">Marketplace Fees</Col>\n                  <Col className=\"value\">{fee * 100}%</Col>\n                </Row>\n              </Col>\n              <Col xs={24}>\n                <Row className=\"info\" justify=\"space-between\">\n                  <Col className=\"title\">Token Fee</Col>\n                  <Col className=\"value\">\n                    {priceWithCurrencyToString(\n                      \"wax\",\n                      props.offer?.price * fee,\n                      8\n                    )}\n                  </Col>\n                </Row>\n              </Col>\n            </Row>\n            <Text className=\"fee-hint\">\n              The fees will be automatically deducted if you accept the offer.\n            </Text>\n          </div>\n          <div className=\"divider\" />\n          <Row justify=\"space-between\" className=\"total-price\">\n            <Col>Total</Col>\n            <Col>\n              {priceWithCurrencyToString(\n                \"wax\",\n                props.offer?.price * (1 - fee),\n                8\n              )}\n            </Col>\n          </Row>\n        </Col>\n      </ContentWrapper>\n    </Modal>\n  );\n}\n","import { Modal, Button, Row, Col } from \"antd\";\nimport React from \"react\";\nimport { Typography } from \"antd\";\nimport { upperFirst } from \"lodash\";\nimport styled from \"styled-components\";\nimport { ConfirmingOfferModalProps } from \".\";\nimport { formatDistance } from \"date-fns\";\nimport { priceWithCurrencyToString } from \"../../../../../helpers/CurrencyHelper\";\nimport HighlightContainer from \"../../../../BaseComponent/HighlightContainer\";\n\nexport const ContentWrapper = styled.div`\n  .content {\n    display: block;\n    font-weight: 700;\n    font-size: 18px;\n    margin-bottom: 40px;\n  }\n  .offer-info {\n    font-size: 12px;\n    font-weight: 600;\n  }\n  .offer-info > .title {\n    color: #a3a3a3;\n  }\n  .offer-info > .value {\n    color: #222;\n  }\n`;\n\nconst { Text } = Typography;\n\nexport default function ConfirmingCancelOrDeclineModal(\n  props: ConfirmingOfferModalProps\n) {\n  const { action, onCancel, onSubmit, visible } = props;\n  const offerInfos = [\n    { title: \"Item\", value: props.offer?.assets?.[0].name },\n    { title: \"Collection\", value: props.offer?.assets?.[0]?.collection_name },\n    {\n      title: \"Expiration\",\n      value: formatDistance(\n        new Date(props.offer?.expired_at * 1000 || 0),\n        new Date(),\n        {\n          addSuffix: true,\n        }\n      ),\n    },\n    {\n      title: \"Amount\",\n      value: priceWithCurrencyToString(\"wax\", props.offer?.price, 8),\n    },\n  ];\n  return (\n    <Modal\n      centered\n      visible={visible}\n      onCancel={onCancel}\n      footer={[\n        <button\n          style={{ width: \"100%\", borderRadius: 100 }}\n          className=\"btn btn-primary-active\"\n          key=\"submit\"\n          onClick={() => onSubmit()}\n        >\n          {upperFirst(action)} Offer\n        </button>,\n      ]}\n      width={480}\n    >\n      <Row gutter={[16, 16]}>\n        <Col xs={24}>\n          <h1 style={{ textAlign: \"center\", marginTop: 24 }}>{upperFirst(action)} offer</h1>\n        </Col>\n        <Col xs={24}>\n          <p className=\"font-sm\" style={{ textAlign: \"center\" }}>\n            Are you sure you want to {action} this offer?\n          </p>\n        </Col>\n        <Col xs={24}>\n          <HighlightContainer>\n            <Row gutter={[0, 8]}>\n              {offerInfos.map((offerInfo) => (\n                <Col xs={24} key={offerInfo.title}>\n                  <Row className=\"offer-info\" justify=\"space-between\">\n                    <Col className=\"font-sm\">{offerInfo.title}</Col>\n                    <Col className=\"font-md fw3\">{offerInfo.value}</Col>\n                  </Row>\n                </Col>\n              ))}\n            </Row>\n          </HighlightContainer>\n        </Col>\n      </Row>\n    </Modal>\n  );\n}\n","import { Offer } from \"../../../../../types/Offer\";\nimport { OfferAction } from \"../../useActionableOffer\";\nimport ConfirmAcceptModal from \"./ConfirmAcceptModal\";\nimport ConfirmingCancelOrDeclineModal from \"./ConfirmingCancelOrDeclineModal\";\n\nexport interface ConfirmingOfferModalProps {\n\taction: OfferAction;\n\tvisible: boolean;\n\toffer: Offer;\n\tonCancel: () => void;\n\tonSubmit: () => void;\n}\n\nexport default function ConfirmingOfferModal(props: ConfirmingOfferModalProps) {\n\tconst ConfirmingModal = [\"cancel\", \"decline\"].includes(props.action)\n\t\t? ConfirmingCancelOrDeclineModal\n\t\t: ConfirmAcceptModal;\n\n\treturn <ConfirmingModal {...props} />;\n}\n","import { Modal } from \"antd\";\nimport React from \"react\";\nimport AwaitProgressTimeLine, {\n  AwaitProgressItemProps,\n} from \"../../../AwaitProgressTimeline\";\n\ninterface Props {\n  title: string | JSX.Element;\n  visible: boolean;\n  hasFinish: boolean;\n  onCancel: () => void;\n  onFinish: () => void;\n  steps: AwaitProgressItemProps[];\n}\nexport default function ProcessingModal({\n  title,\n  visible,\n  onCancel,\n  onFinish,\n  hasFinish,\n  steps,\n}: Props) {\n  return (\n    <Modal\n      centered\n      visible={visible}\n      title={title}\n      onCancel={onCancel}\n      footer={[\n        <button\n          className=\"btn btn-primary-active\"\n          style={{ width: \"100%\", borderRadius: 100 }}\n          key=\"submit\"\n          disabled={!hasFinish}\n          onClick={onFinish}\n        >\n          Close\n        </button>,\n      ]}\n      width={400}\n    >\n      <AwaitProgressTimeLine items={steps} />\n    </Modal>\n  );\n}\n","import React, { useState } from \"react\";\nimport UseTransactionProgress from \"../../../hook/useTransactionProgress\";\nimport useUal from \"../../../hook/useUal\";\nimport UseWaxAuthen from \"../../../hook/useWaxAuthen\";\nimport { Offer } from \"../../../types/Offer\";\nimport { capitalizeFirstLetter } from \"../../../utils/StringUtils\";\n\ninterface Props {\n  offer: Offer;\n}\nexport default function UseActionableOffer({ offer }: Props) {\n  const { acceptOffer, declineOffer, cancelOffer } = useUal();\n  const [state, setState] = useState<State>({});\n  const { authen } = UseWaxAuthen();\n  const useTransactionProgress = UseTransactionProgress({});\n  const { onError, onFinish, onStart, progress, setTransactionProgressState } =\n    useTransactionProgress;\n\n  const startAction = (action: OfferAction) => {\n    console.log(\"start action\", { offer, action });\n\n    setTransactionProgressState({ isConfirming: true });\n    setState({ action });\n  };\n\n  const startProcessAction = async () => {\n    setTransactionProgressState({ isConfirming: false, isProgressing: true });\n    await processAction(state.action);\n  };\n\n  const processAction = async (action: OfferAction) => {\n    onStart();\n    try {\n      await doAction(action);\n      progress.startStep(2);\n      //TODO: need to check if the action executed\n      const isAccepted = true;\n      progress.startStep(3);\n      if (isAccepted)\n        onFinish(\n          \"Transaction finished\",\n          `${capitalizeFirstLetter(action)} offer is successfully!`\n        );\n      else throw new Error(`${action} offer has the error!`);\n    } catch (error) {\n      onError(\"Transaction failed!\", error.message);\n    }\n  };\n\n  const doAction = async (action: OfferAction) => {\n    const { buyoffer_id, asset_ids } = offer;\n\n    if (action === \"accept\")\n      await acceptOffer({ sender: authen.userAccount, asset_ids, buyoffer_id });\n\n    if (action === \"decline\") await declineOffer({ buyoffer_id });\n\n    if (action === \"cancel\") await cancelOffer({ buyoffer_id });\n  };\n\n  return {\n    startAction,\n    startProcessAction,\n    ...useTransactionProgress,\n    ...state,\n    offer,\n  };\n}\n\ninterface State {\n  action?: OfferAction;\n}\n\nexport type OfferAction = \"cancel\" | \"accept\" | \"decline\";\n\nexport const ActionableOfferContext = React.createContext<\n  ReturnType<typeof UseActionableOffer>\n>({} as any);\n","\nimport React, { useContext } from \"react\";\nimport { normalizeAsset } from \"../../../helpers/NormalizeHelper\";\nimport { Offer } from \"../../../types/Offer\";\nimport { capitalizeFirstLetter } from \"../../../utils/StringUtils\";\nimport ConfirmingOfferModal from \"./component/confirming\";\nimport ProcessingModal from \"./component/ProcessingModal\";\nimport { ActionableOfferContext } from \"./useActionableOffer\";\n\ninterface Props {\n\toffer: Offer;\n\tchildren?: any;\n}\n\nexport default function WrapperActionableOffer(props: Props) {\n\tconst {\n\t\taction,\n\t\tisConfirming,\n\t\tisProgressing,\n\t\tstartProcessAction,\n\t\tprogress,\n\t\tsetTransactionProgressState,\n\t} = useContext(ActionableOfferContext);\n\n\treturn (\n\t\t<div>\n\t\t\t{props?.children}\n\t\t\t<ConfirmingOfferModal\n\t\t\t\toffer={{...props.offer,assets: props.offer.assets?.map(a => normalizeAsset(a))}}\n\t\t\t\taction={action}\n\t\t\t\tonCancel={() =>\n\t\t\t\t\tsetTransactionProgressState({\n\t\t\t\t\t\tisConfirming: false,\n\t\t\t\t\t\tisProgressing: false,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tonSubmit={startProcessAction}\n\t\t\t\tvisible={isConfirming}\n\t\t\t/>\n\n\t\t\t<ProcessingModal\n\t\t\t\ttitle={`${capitalizeFirstLetter(action)} offer`}\n\t\t\t\thasFinish={progress.hasFinish}\n\t\t\t\tsteps={progress.steps}\n\t\t\t\tonCancel={() => {\n\t\t\t\t\tsetTransactionProgressState({\n\t\t\t\t\t\tisConfirming: false,\n\t\t\t\t\t\tisProgressing: false,\n\t\t\t\t\t});\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t}}\n\t\t\t\tonFinish={() => {\n\t\t\t\t\tsetTransactionProgressState({\n\t\t\t\t\t\tisConfirming: false,\n\t\t\t\t\t\tisProgressing: false,\n\t\t\t\t\t});\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t}}\n\t\t\t\tvisible={isProgressing}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { Col, Row } from \"antd\";\nimport { formatDistance } from \"date-fns\";\nimport React, { useContext } from \"react\";\nimport { priceWithCurrencyToString } from \"../../../../../helpers/CurrencyHelper\";\nimport { CurrencyContext } from \"../../../../../hook/useCurrency\";\nimport { WaxAuthenContext } from \"../../../../../hook/useWaxAuthen\";\nimport { Offer } from \"../../../../../types/Offer\";\nimport WrapperActionableOffer from \"../../../../Offer/WrapperActionableOffer\";\nimport UseActionableOffer, {\n  ActionableOfferContext,\n} from \"../../../../Offer/WrapperActionableOffer/useActionableOffer\";\nimport \"./index.css\";\n\ninterface Props {\n  offer: Offer;\n}\nexport default function OfferItem({ offer }: Props) {\n  const { getRate } = useContext(CurrencyContext);\n  const { authen } = useContext(WaxAuthenContext);\n  const useActionableOffer = UseActionableOffer({ offer });\n\n  return (\n    <ActionableOfferContext.Provider value={useActionableOffer}>\n      <Col xs={24}>\n        <Row align={\"middle\"} className=\"fw3 font-md\">\n          <Col xs={6} lg={4}>\n            <p>{priceWithCurrencyToString(\"wax\", offer.price, 8)}</p>\n          </Col>\n          <Col xs={0} lg={4}>\n            <p>\n              {priceWithCurrencyToString(\n                \"usd\",\n                offer.price * getRate(\"waxpusd\"),\n                8\n              )}\n            </p>\n          </Col>\n          <Col xs={6} lg={4}>\n            <p>{offer.buyer}</p>\n          </Col>\n          <Col xs={0} lg={4}>\n            <p>\n              In {formatDistance(new Date(), new Date(offer.expired_at * 1000))}\n            </p>\n          </Col>\n          <Col xs={12} lg={6}>\n            <WrapperActionableOffer offer={offer}>\n              {authen.userAccount === offer.buyer && (\n                <Row justify={\"end\"}>\n                  <Col>\n                    <button\n                      className=\"btn btn-primary btn-actionable-offer\"\n                      onClick={() => useActionableOffer.startAction(\"cancel\")}\n                    >\n                      Cancel\n                    </button>\n                  </Col>\n                </Row>\n              )}\n\n              {authen.userAccount === offer.seller && (\n                <Row justify={\"end\"} gutter={[8, 8]}>\n                  <Col>\n                    <button\n                      className=\"btn btn-primary btn-actionable-offer\"\n                      onClick={() => useActionableOffer.startAction(\"accept\")}\n                    >\n                      Accept\n                    </button>\n                  </Col>\n                  <Col>\n                    <button\n                      className=\"btn btn-primary btn-actionable-offer\"\n                      onClick={() => useActionableOffer.startAction(\"decline\")}\n                    >\n                      Decline\n                    </button>\n                  </Col>\n                </Row>\n              )}\n            </WrapperActionableOffer>\n          </Col>\n        </Row>\n      </Col>\n    </ActionableOfferContext.Provider>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport { useEffect, useState } from \"react\";\nimport { offerController } from \"../../../controller\";\nimport { Asset } from \"../../../types/Asset\";\nimport { Offer } from \"../../../types/Offer\";\nimport OfferItem from \"./component/OfferItem\";\nimport './index.css';\n\ninterface Props {\n  assets: Asset[];\n  seller: string;\n}\n\nexport default function Offers({ assets, seller }: Props) {\n  const [state, setState] = useState<State>({ offers: [] });\n\n  useEffect(() => {\n    getOffers();\n  }, [JSON.stringify(assets), seller]);\n\n  const getOffers = async () => {\n    const pagination = await offerController.list({\n      asset_ids: assets.map((a) => a.asset_id).join(\",\"),\n      seller: seller,\n      sort_by: \"price\",\n      sort_type: \"desc\",\n    });\n    setState({ offers: pagination.items });\n  };\n\n\n  return (\n    <Row className=\"offers\" gutter={[0, 24]}>\n      <Col xs={24}>\n        <Row>\n          <Col xs={6} lg={4}>\n            <p>Price</p>\n          </Col>\n          <Col xs={0} lg={4}>\n            <p>USD Price</p>\n          </Col>\n          <Col xs={6} lg={4}>\n            <p>From</p>\n          </Col>\n          <Col xs={0} lg={4}>\n            <p>Expiration</p>\n          </Col>\n          <Col xs={12} lg={8}></Col>\n        </Row>\n      </Col>\n      <Col xs={24}>\n        <Row gutter={[0, 16]}>\n          {state.offers.map((offer) => (\n            <OfferItem offer={offer} />\n          ))}\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n\ninterface State {\n  offers: Offer[];\n}\n","import { Col, Row, Tooltip } from \"antd\";\nimport _ from \"lodash\";\n\ninterface Props {\n  properties: Record<string, string>;\n}\n\nexport default function Properties({ properties }: Props) {\n  const withLabelProperties = Object.keys(properties).map((key) => ({\n    key,\n    value: properties[key],\n  }));\n  return withLabelProperties.length === 0 ? (\n    <Row justify={'center'} align=\"middle\" style={{padding: 24}}>\n      <p>No attribute</p>\n    </Row>\n  ) : (\n    <>\n      {withLabelProperties.map((p) => (\n        <Row align={\"middle\"} justify=\"space-between\">\n          <Col>\n            <p className=\"font-sm fw1 color-text-secondary\">{p.key}</p>\n          </Col>\n          <Col className=\"ellipsis\" style={{ maxWidth: \"80%\" }}>\n            <Tooltip title={p.value}>\n              <p className=\"font-md fw3\">{p.value}</p>\n            </Tooltip>\n          </Col>\n        </Row>\n      ))}\n    </>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { templateController } from \"../../../controller\";\nimport WaxCurrencyIcon from \"../../../icon/wax-currency\";\nimport { SupportCurrency } from \"../../../types/Currency\";\nimport \"./index.css\";\n\ninterface StatisticPriceItem {\n  title: string;\n  value: number;\n  currency?: SupportCurrency;\n}\n\ninterface Props {\n  collection: string;\n  templateId: number;\n}\n\nconst defaultItems: StatisticPriceItem[] = [\n  { title: \"Lowest listing price\", value: 0, currency: \"wax\" },\n  { title: \"Suggested Price\", value: 0, currency: \"wax\" },\n  { title: \"Highest Sale\", value: 0, currency: \"wax\" },\n  { title: \"Total Sales\", value: 0 },\n];\n\nexport default function StatisticPrice({ collection, templateId }: Props) {\n  const [state, setState] = useState<State>({ items: defaultItems });\n  const { items } = state;\n  useEffect(() => {\n    getStatisticPrice();\n  }, [collection, templateId]);\n\n  const getStatisticPrice = async () => {\n    var { lowestListingPrice, totalSales, highestPrice, suggestedPrice } =\n      await templateController.getStatisticPriceHistory({\n        collectionName: collection,\n        templateId,\n      });\n\n    setState({\n      items: [\n        {\n          title: \"Lowest listing price\",\n          value: lowestListingPrice,\n          currency: \"wax\",\n        },\n        {\n          title: \"Suggested Price\",\n          value: Number(suggestedPrice.toFixed(2)),\n          currency: \"wax\",\n        },\n        {\n          title: \"Highest Sale\",\n          value: Number(highestPrice.toFixed(2)),\n          currency: \"wax\",\n        },\n        { title: \"Total Sales\", value: totalSales },\n      ],\n    });\n  };\n\n  return (\n    <Row gutter={[0,24]} className=\"statistic-price-wrapper\">\n      {items.map((i, index) => (\n        <Col xs={12} lg={12} xl={6} className=\"item\">\n          <Row justify=\"center\" gutter={[0, 8]}>\n            <Col>\n              <Row gutter={8} align={\"middle\"}>\n                <Col className=\"font-lg\">\n                  <WaxCurrencyIcon width={16} height={16} />\n                </Col>\n                <Col>\n                  <p className=\"font-lg fw3\">{`${i.value} ${\n                    i.currency === \"wax\" ? \"WAXP\" : \"\"\n                  }`}</p>\n                </Col>\n              </Row>\n            </Col>\n            <Col xs={24}>\n              <p>{i.title}</p>\n            </Col>\n          </Row>\n        </Col>\n      ))}\n    </Row>\n  );\n}\n\ninterface State {\n  items: StatisticPriceItem[];\n}\n","import { Col, Row } from \"antd\";\nimport { useContext, useEffect, useRef, useState } from \"react\";\nimport { collectionController } from \"../../controller\";\nimport { normalizeAsset } from \"../../helpers/NormalizeHelper\";\nimport { Asset } from \"../../types/Asset\";\nimport { Collection } from \"../../types/Collection\";\nimport AssetListing from \"../AssetListing\";\nimport AssetSalePriceHistory from \"../AssetSalePriceHistory\";\nimport { AssetDetailContext } from \"../marketplace/context/useAssetDetail\";\nimport Navigator from \"../Navigator\";\nimport AssetPrice from \"./AsserPrice\";\nimport AssetPreviewMedia from \"./AssetPreviewMedia\";\nimport AssetBaseInfo from \"./BaseInfo\";\nimport CollapsibleSection from \"./CollasibleSection\";\nimport { fakeAsset } from \"./fakeAsset\";\nimport MoreAssetsFromSchema from \"./MoreAssetsFromSchema\";\nimport NameAndCollection from \"./NameAndCollection\";\nimport Offers from \"./Offers\";\nimport Properties from \"./Properties\";\nimport StatisticPrice from \"./StatisticPrice\";\n\nexport default function AssetDetail() {\n  const [state, setState] = useState<State>({\n    collection: null,\n    currentAsset: normalizeAsset(fakeAsset),\n  });\n\n  const { selectedItem } = useContext(AssetDetailContext);\n  const asset = selectedItem?.assets?.[0];\n  const refTop = useRef(null);\n  const { currentAsset, collection } = state;\n\n  useEffect(() => {\n    // window.scrollTo(0, 0);\n    refTop?.current?.scrollIntoView();\n    setState((prev) => ({\n      ...prev,\n      currentAsset: {\n        ...selectedItem?.assets?.[0],\n        owner: selectedItem?.assets?.[0]?.owner || selectedItem.seller,\n      },\n    }));\n    getCollection();\n  }, [JSON.stringify(selectedItem)]);\n\n  const getCollection = async () => {\n    var collection = await collectionController.get(\n      asset.asset_contract,\n      asset.collection_name\n    );\n    setState((prev) => ({ ...prev, collection }));\n  };\n  const { setAssetDetail } = useContext(AssetDetailContext);\n\n  return (\n    <div className=\"asset-detail\">\n      {currentAsset && collection && (\n        <Row ref={refTop} gutter={[0, 40]}>\n          <Col xs={24}>\n            <Navigator\n              currentPageTitle=\"Asset Detail\"\n              canBackToPreviousPage={true}\n              onBack={() => setAssetDetail(null)}\n            />\n          </Col>\n          <Col xs={24}>\n            <Row gutter={[24, 24]}>\n              <Col xs={24} md={12} xl={10}>\n                <Row gutter={[0, 24]}>\n                  <Col xs={24} lg={0}>\n                    <NameAndCollection asset={currentAsset} />\n                  </Col>\n                  <Col xs={24}>\n                    <Row justify={\"center\"}>\n                      <AssetPreviewMedia assets={selectedItem?.assets} />\n                    </Row>\n                  </Col>\n\n                  <Col xs={24} lg={0}>\n                    <AssetPrice\n                      item={selectedItem}\n                      collection={state.collection}\n                    />\n                  </Col>\n                  <Col xs={24}>\n                    <CollapsibleSection\n                      title=\"Info\"\n                      children={\n                        <AssetBaseInfo\n                          asset={currentAsset}\n                          collection={collection}\n                        />\n                      }\n                    ></CollapsibleSection>\n                  </Col>\n                  <Col xs={24}>\n                    <CollapsibleSection\n                      title=\"Properties\"\n                      isExpand={false}\n                      children={\n                        <Properties properties={currentAsset.properties} />\n                      }\n                    />\n                  </Col>\n                  <Col xs={24}>\n                    <CollapsibleSection\n                      isExpand={false}\n                      title=\"Immutable Properties\"\n                      children={\n                        <Properties\n                          properties={currentAsset.immutable_properties}\n                        />\n                      }\n                    />\n                  </Col>\n                  <Col xs={24}>\n                    <CollapsibleSection\n                      isExpand={false}\n                      title=\"Mutable Properties\"\n                      children={\n                        <Properties\n                          properties={currentAsset.mutable_properties}\n                        />\n                      }\n                    />\n                  </Col>\n                </Row>\n              </Col>\n              <Col xs={24} md={12} xl={14}>\n                <Row gutter={[0, 24]}>\n                  <Col xs={0} lg={24}>\n                    <NameAndCollection asset={currentAsset} />\n                  </Col>\n                  <Col xs={0} lg={24}>\n                    <AssetPrice\n                      item={selectedItem}\n                      collection={state.collection}\n                    />\n                  </Col>\n                  <Col xs={24}>\n                    <StatisticPrice\n                      collection={currentAsset.collection_name}\n                      templateId={currentAsset.template_id}\n                    />\n                  </Col>\n\n                  <Col xs={24}>\n                    <CollapsibleSection\n                      title=\"Sale price history\"\n                      children={<AssetSalePriceHistory asset={currentAsset} />}\n                    />\n                  </Col>\n                  <Col xs={24}>\n                    <CollapsibleSection\n                      title=\"Listings\"\n                      children={<AssetListing asset={currentAsset} />}\n                    />\n                  </Col>\n\n                  <Col xs={24}>\n                    <CollapsibleSection\n                      title=\"Offers\"\n                      children={\n                        <Offers\n                          assets={selectedItem?.assets}\n                          seller={selectedItem.seller}\n                        />\n                      }\n                    />\n                  </Col>\n                </Row>\n              </Col>\n            </Row>\n          </Col>\n\n          <Col xs={24}>\n            <Row>\n              <Col xs={24}>\n                <MoreAssetsFromSchema\n                  collectionName={currentAsset.collection_name}\n                  schema={currentAsset.schema_name}\n                />\n              </Col>\n            </Row>\n          </Col>\n        </Row>\n      )}\n    </div>\n  );\n}\n\ninterface State {\n  currentAsset: Asset;\n  collection?: Collection;\n}\n","import { Col, Row } from \"antd\";\nimport { FilterType } from \"..\";\nimport { WithLabel } from \"../../../types/WithLabel\";\n\ninterface Props {\n  filterTypes: WithLabel<FilterType>[]\n  selectedValue: FilterType;\n  onSelectValue: (value: FilterType) => void;\n}\n\nexport default function FilterByType({ filterTypes, selectedValue, onSelectValue }: Props) {\n  return (\n    <Row gutter={[8, 8]}>\n      {filterTypes.map((type) => (\n        <Col key={type.value} xs={12}>\n          <button\n            style={{ width: \"100%\" }}\n            className={\n              type.value === selectedValue\n                ? \"btn btn-primary-active\"\n                : \"btn btn-primary\"\n            }\n            onClick={() => onSelectValue(type.value)}\n          >\n            {type.label}\n          </button>\n        </Col>\n      ))}\n    </Row>\n  );\n}\n","import React from \"react\";\nimport {  Col, Row } from \"antd\";\nimport { ItemType } from \"../../../types/Sale\";\nimport { WithLabel } from \"../../../types/WithLabel\";\n\ninterface Props {\n  selectedValue?: ItemType;\n  onSelectValue: (value?: ItemType) => void;\n}\n\n\nexport default function FilterByBundle({\n  selectedValue,\n  onSelectValue,\n}: Props) {\n  var types: WithLabel<ItemType>[] = [\n    {\n      label: \"All\",\n      value: null,\n    },\n    {\n      label: \"Only Bundle\",\n      value: ItemType.BUNDLE,\n    },\n    {\n      label: \"No Bundle\",\n      value: ItemType.SINGLE,\n    },\n  ];\n  return (\n    <Row gutter={[8, 8]}>\n      {types.map((type) => (\n        <Col key={type.value} xs={12}>\n          <button\n            style={{ width: \"100%\" }}\n            className={\n              type.value === selectedValue\n                ? \"btn btn-primary-active\"\n                : \"btn btn-primary\"\n            }\n            onClick={(e) => onSelectValue(type.value)}\n          >\n            {type.label}\n          </button>\n        </Col>\n      ))}\n    </Row>\n  );\n}\n","import { UserOutlined } from \"@ant-design/icons\";\nimport { Col, Input, Row, Select } from \"antd\";\nimport { SupportCurrency } from \"../../../types/Currency\";\nimport { WithLabel } from \"../../../types/WithLabel\";\n\ninterface Props {\n  price_symbol: SupportCurrency;\n  min_price?: number;\n  max_price?: number;\n  supportCurrencyOptions: WithLabel<SupportCurrency>[];\n  onChange?: (\n    price_symbol: SupportCurrency,\n    min_price: number,\n    max_price: number\n  ) => void;\n}\n\nexport default function FilterByCurrency({\n  price_symbol,\n  min_price,\n  max_price,\n  supportCurrencyOptions,\n  onChange,\n}: Props) {\n\n  return (\n    <Row gutter={[8, 8]}>\n      <Col xs={24}>\n        <Select\n          style={{ width: \"100%\" }}\n          value={price_symbol}\n          size=\"large\"\n          onChange={(value, option) =>\n            onChange(value as SupportCurrency, min_price, max_price)\n          }\n          options={supportCurrencyOptions}\n        />\n      </Col>\n      <Col xs={24}>\n        <Row align={'middle'} gutter={8}>\n          <Col xs={11}>\n            <Input\n              placeholder=\"From\"\n              size=\"large\"\n              onChange={(e) => {\n                if (!isNaN(Number(e.target.value)))\n                  onChange(price_symbol, Number(e.target.value), max_price);\n              }}\n            />\n          </Col>\n          <Col xs={2}>\n            <p style={{textAlign:'center'}} className=\"font-md fw2\">to</p>\n          </Col>\n          <Col xs={11}>\n            <Input\n              placeholder=\"To\"\n              size=\"large\"\n              onChange={(e) => {\n                if (!isNaN(Number(e.target.value)))\n                  onChange(price_symbol, min_price, Number(e.target.value));\n              }}\n            />\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport { CheckIcon } from \"../../../../icon\";\nimport { Schema } from \"../../../../types/Schema\";\n\ninterface Props {\n  isSelected: boolean;\n  schema: Schema;\n}\nexport default function SchemaItem({ isSelected, schema }: Props) {\n  return (\n    <Row className=\"schema\" align={\"middle\"}>\n      <Col>\n        {!isSelected && (\n          <div\n            className=\"avatar-wrapper\"\n            style={{\n              backgroundColor: \"#ff774a\",\n            }}\n          >\n            <p className=\"font-lg fw3\" style={{ color: \"white\" }}>\n              {schema.schema_name.charAt(0).toUpperCase()}\n            </p>\n          </div>\n        )}\n        {isSelected && (\n          <div className=\"bg-primary avatar-wrapper\">\n            <CheckIcon />\n          </div>\n        )}\n      </Col>\n      <Col>\n        <p style={{ marginLeft: 8 }} className=\"font-sm fw4\">\n          {schema.schema_name}\n        </p>\n      </Col>\n    </Row>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport { useEffect, useState } from \"react\";\nimport { schemaController } from \"../../../controller\";\nimport { SchemaListProps } from \"../../../controller/schemaController\";\nimport { Schema } from \"../../../types/Schema\";\nimport SchemaItem from \"./components/SchemaItem\";\n\ninterface Props {\n  collection_name: string;\n  selectedSchema?: string;\n  onSelectSchema?: (schema: string) => void;\n}\n\nexport default function FilterBySchema({\n  collection_name,\n  selectedSchema,\n  onSelectSchema,\n}: Props) {\n  const [state, setState] = useState<State>({\n    schemas: [],\n    filter: {\n      collection_name,\n    },\n  });\n\n  useEffect(() => {\n    schemaController\n      .list(state.filter)\n      .then((schemas) => setState((prev) => ({ ...prev, schemas })));\n  }, [collection_name]);\n\n  return (\n    <Row gutter={[0, 16]}>\n      {state.schemas.map((schema) => (\n        <Col\n          style={{ cursor: \"pointer\" }}\n          xs={24}\n          key={schema.schema_name}\n          onClick={() => onSelectSchema(schema.schema_name)}\n        >\n          <SchemaItem isSelected={schema.schema_name === selectedSchema} schema={schema} />\n        </Col>\n      ))}\n    </Row>\n  );\n}\n\ninterface State {\n  filter: SchemaListProps;\n  schemas: Schema[];\n}\n","import { Col, Row } from \"antd\";\nimport { getURL } from \"../../../../helpers/HashHelper\";\nimport {\n  WhiteListOrVerifyIcon,\n  WhiteListAndVerifyIcon,\n  CheckIcon,\n} from \"../../../../icon\";\nimport { Collection, CollectionStatus } from \"../../../../types/Collection\";\n\ninterface Props {\n  isSelected: boolean;\n  collection: Collection;\n}\nexport default function CollectionItem({ isSelected, collection }: Props) {\n  return (\n    <Row className=\"collection\" gutter={8} align={\"middle\"}>\n      <Col>\n        {!isSelected && (\n          <img\n            height={32}\n            width={32}\n            className=\"avatar-wrapper\"\n            src={getURL({ source: collection.image, size: 32 })}\n            alt={collection.name}\n          />\n        )}\n        {isSelected && (\n          <div className=\"bg-primary avatar-wrapper\">\n            <CheckIcon />\n          </div>\n        )}\n      </Col>\n      <Col>\n        <p className=\"font-sm fw4\">{collection?.collection_name}</p>\n      </Col>\n      <Col>\n        {collection?.status === CollectionStatus.WHITELISTED && (\n          <WhiteListOrVerifyIcon />\n        )}\n        {collection?.status === CollectionStatus.VERIFIED && (\n          <WhiteListAndVerifyIcon />\n        )}\n      </Col>\n    </Row>\n  );\n}\n","import { SearchOutlined } from \"@ant-design/icons\";\nimport { Col, Input, Row, Skeleton } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { collectionController } from \"../../../controller\";\nimport { CollectionListProps } from \"../../../controller/collectionController\";\nimport { Collection } from \"../../../types/Collection\";\nimport FilterBySchema from \"../FilterBySchema\";\nimport CollectionItem from \"./components/CollectionItem\";\n\ninterface Props {\n  collection_verified: boolean;\n  collection_whitelisted: boolean;\n  scopedCollections?: string[];\n  selectedCollection?: string;\n  onSelectCollection?: (collection: string) => void;\n  selectedSchema?: string;\n  onSelectSchema?: (schema: string) => void;\n}\n\nexport default function FilterByCollection({\n  collection_verified = true,\n  collection_whitelisted = true,\n  scopedCollections = [],\n  selectedCollection,\n  onSelectCollection,\n  selectedSchema,\n  onSelectSchema,\n}: Props) {\n  const [state, setState] = useState<State>({\n    collections: [],\n    isFetching: false,\n    filter: {\n      // collection_verified,\n      // collection_whitelisted,\n    },\n  });\n\n  useEffect(() => {\n    fetchCollections();\n  }, [JSON.stringify(scopedCollections), JSON.stringify(state.filter)]);\n\n  const fetchCollections = async () => {\n    setState((prev) => ({ ...prev, isFetching: true }));\n    var collections = (\n      await Promise.all(\n        scopedCollections\n          ?.filter((c) => !state.filter.match || c.includes(state.filter.match))\n          .map((collection) =>\n            collectionController\n              .list({ ...state.filter, match: collection })\n              .then((collections) =>\n                collections.find((c) => c.collection_name === collection)\n              )\n          )\n      )\n    ).filter((c) => c != null);\n    setState((prev) => ({\n      ...prev,\n      collections,\n      isFetching: false,\n    }));\n  };\n\n  return (\n    <Row gutter={[0, 8]}>\n      <Col xs={24}>\n        <Input\n          size=\"large\"\n          placeholder=\"Search\"\n          prefix={\n            <SearchOutlined\n              onPointerEnterCapture={() => {}}\n              onPointerLeaveCapture={() => {}}\n            />\n          }\n          onChange={(e) =>\n            setState((prev) => ({\n              ...prev,\n              filter: { ...prev.filter, match: e.target.value },\n            }))\n          }\n        />\n      </Col>\n      {state.isFetching && (\n        <Row className=\"wax-filter-collections\" gutter={[0, 24]}>\n          {scopedCollections.map((c) => (\n            <Col key={c} xs={24}>\n              <Skeleton.Input active={true} size={\"default\"} block={true} />\n            </Col>\n          ))}\n        </Row>\n      )}\n      {!state.isFetching && (\n        <Col xs={24}>\n          <Row className=\"wax-filter-collections\" gutter={[0, 24]}>\n            {state.collections.map((collection) => {\n              var isSelected =\n                collection?.collection_name === selectedCollection;\n              return (\n                <Col\n                  style={{ cursor: \"pointer\" }}\n                  xs={24}\n                  key={collection?.collection_name}\n                >\n                  <Row gutter={[0, 16]}>\n                    <Col\n                      xs={24}\n                      onClick={() =>\n                        onSelectCollection(collection?.collection_name)\n                      }\n                    >\n                      <CollectionItem\n                        collection={collection}\n                        isSelected={isSelected}\n                      />\n                    </Col>\n                    {isSelected && (\n                      <Col style={{ marginLeft: 32 }} xs={24}>\n                        <FilterBySchema\n                          selectedSchema={selectedSchema}\n                          onSelectSchema={onSelectSchema}\n                          collection_name={collection?.collection_name}\n                        />\n                      </Col>\n                    )}\n                  </Row>\n                </Col>\n              );\n            })}\n          </Row>\n        </Col>\n      )}\n    </Row>\n  );\n}\n\ninterface State {\n  isFetching: boolean;\n  filter: CollectionListProps;\n  collections: Collection[];\n}\n","import { Collapse } from \"antd\";\nimport FilterByType from \"./FilterByType\";\nimport FilterByBundle from \"./FilterByBundle\";\nimport FilterByCurrency from \"./FilterByCurrency\";\nimport { ListSaleProps } from \"../../controller/saleController\";\nimport { SaleType, saleTypes } from \"../../types/Sale\";\nimport { SupportCurrency, supportCurrencyOptions } from \"../../types/Currency\";\nimport FilterByCollection from \"./FilterByCollection\";\nimport { WithLabel } from \"../../types/WithLabel\";\nimport FilterByStatus from \"./FilterByStatus\";\nconst { Panel } = Collapse;\n\nexport type FilterType = SaleType | \"assets\";\nexport interface FilterProps extends ListSaleProps {\n  saleType: FilterType;\n}\n\ninterface Props {\n  scopeFilterTypes?: WithLabel<FilterType>[];\n  scopedCollections?: string[];\n  filter: FilterProps;\n  onChange: (filter: FilterProps) => void;\n  isEnableFilterByCollectionStatus?: boolean;\n}\n\nexport default function Filters({\n  scopeFilterTypes,\n  scopedCollections,\n  filter,\n  isEnableFilterByCollectionStatus = false,\n  onChange,\n}: Props) {\n  return (\n    <Collapse defaultActiveKey={[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"]}>\n      {/* <Panel header={<span className=\"fw4\">Search</span>} key=\"1\">\n        <SearchByName\n          search={filter.search}\n          onChange={(search) =>\n            onChange({\n              ...filter,\n              search: isNotNullOrEmpty(search) ? search : undefined,\n            })\n          }\n        />\n      </Panel> */}\n      <Panel header={<span className=\"fw4\">Collections</span>} key=\"6\">\n        <FilterByCollection\n          scopedCollections={scopedCollections}\n          collection_verified={filter.collection_verified}\n          collection_whitelisted={filter.collection_whitelisted}\n          selectedCollection={filter.collection_name?.toString()}\n          onSelectCollection={(collection_name) =>\n            onChange({\n              ...filter,\n              collection_name:\n                filter.collection_name === collection_name\n                  ? null\n                  : collection_name,\n              schema_name: null,\n            })\n          }\n          selectedSchema={filter.schema_name?.toString()}\n          onSelectSchema={(schema_name) =>\n            onChange({\n              ...filter,\n              schema_name:\n                filter.schema_name === schema_name ? null : schema_name,\n            })\n          }\n        />\n      </Panel>\n\n      {/* <Panel header={<span className=\"fw4\">Sort</span>} key=\"2\">\n        <Sort\n          onChangeSort={(sort_by, sort_type) =>\n            onChange({ ...filter, sort_by, sort_type })\n          }\n        />\n      </Panel> */}\n      <Panel header={<span className=\"fw4\">Filter</span>} key=\"3\">\n        <FilterByType\n          filterTypes={scopeFilterTypes || saleTypes}\n          selectedValue={filter.saleType}\n          onSelectValue={(saleType) =>\n            onChange({\n              ...filter,\n              saleType,\n              price_symbol:\n                saleType === \"auction\" ? \"wax\" : filter.price_symbol,\n              deferred_listing: saleType === \"p2o\" ? true : false,\n              sort_by: null,\n              state: isEnableFilterByCollectionStatus\n                ? saleType === \"rapid-sale\"\n                  ? \"1,5\"\n                  :saleType==='p2o'\n                  ? \"1,3,5\"\n                  :'1,3,4,5'\n                : \"1\",\n            })\n          }\n        />\n      </Panel>\n      {filter.saleType !== \"assets\" && (\n        <Panel header={<span className=\"fw4\">Bundle</span>} key=\"4\">\n          <FilterByBundle\n            selectedValue={filter.type}\n            onSelectValue={(type) => onChange({ ...filter, type })}\n          />\n        </Panel>\n      )}\n      {filter.saleType !== \"assets\" && (\n        <Panel header={<span className=\"fw4\">Price</span>} key=\"5\">\n          <FilterByCurrency\n            price_symbol={(filter.price_symbol as SupportCurrency) || \"wax\"}\n            min_price={filter.min_price}\n            max_price={filter.max_price}\n            supportCurrencyOptions={\n              filter.saleType === \"auction\"\n                ? supportCurrencyOptions.filter((c) => c.value === \"wax\")\n                : supportCurrencyOptions\n            }\n            onChange={(price_symbol, min_price, max_price) =>\n              onChange({\n                ...filter,\n                price_symbol,\n                min_price,\n                max_price,\n              })\n            }\n          />\n        </Panel>\n      )}\n\n      {false && (\n        <Panel\n          header={<span className=\"fw4\">Whitelisted and Verified</span>}\n          key=\"7\"\n        >\n          <FilterByStatus\n            collection_verified={filter.collection_verified}\n            collection_whitelisted={filter.collection_whitelisted}\n            onChangeVerify={(collection_verified) =>\n              onChange({ ...filter, collection_verified })\n            }\n            onChangeWhiteList={(collection_whitelisted) =>\n              onChange({ ...filter, collection_whitelisted })\n            }\n          />\n        </Panel>\n      )}\n    </Collapse>\n  );\n}\n","import _ from \"lodash\";\nimport { useEffect, useState } from \"react\";\nimport {\n  assetController,\n  auctionController,\n  saleController,\n} from \"../../controller\";\nimport UseWaxAuthen from \"../../hook/useWaxAuthen\";\nimport {\n  defaultPagination,\n  Pagination,\n  PaginationWithData,\n} from \"../../types/Pagination\";\nimport { FilterProps } from \"../Filters\";\n\ninterface Props {\n  pagination?: Partial<Pagination>;\n  filter?: Partial<FilterProps>;\n}\nexport default function useMarketPlaceFilter({ pagination, filter }: Props) {\n  const { authen } = UseWaxAuthen();\n\n  const [state, setState] = useState<State>({\n    isFetching: false,\n    pagination: {\n      items: [],\n      pagination: { ...defaultPagination, ...(pagination || {}) },\n    },\n    filter: {\n      saleType: \"rapid-sale\",\n      deferred_listing: false,\n      page: 1,\n      limit: pagination.limit || defaultPagination.limit,\n      ...filter,\n    },\n  });\n\n  useEffect(() => {\n    setState((prev) => ({ ...prev, filter: { ...prev.filter, ...filter } }));\n  }, [JSON.stringify(filter)]);\n\n  useEffect(() => {\n    fetchData();\n  }, [authen.userAccount, JSON.stringify(state.filter)]);\n\n  const fetchData = async () => {\n    console.log({ filter: state.filter });\n\n    setState((prev) => ({ ...prev, isFetching: true }));\n    var filters = _.omit(state.filter, \"saleType\");\n    let pagination = state.pagination;\n    switch (state.filter.saleType) {\n      case \"p2o\":\n      case \"rapid-sale\":\n        pagination = await saleController.list(filters);\n        break;\n      case \"auction\":\n        filters = _.omit(filters, \"deferred_listing\");\n        pagination = await auctionController.list(filters);\n        break;\n      case \"assets\":\n        filters = _.omit(filters, \"deferred_listing\");\n        if (authen.userAccount)\n          pagination = await assetController.list({\n            ...filters,\n            owner: authen.userAccount,\n          });\n        break;\n    }\n\n    setState((prev) => ({ ...prev, pagination, isFetching: false }));\n  };\n\n  const onChangeFilter = (filter: Partial<FilterProps>) =>\n    setState((prev) => ({ ...prev, filter: { ...prev.filter, ...filter } }));\n\n  return { ...state, onChangeFilter };\n}\n\ninterface State {\n  pagination: PaginationWithData<any>;\n  filter: FilterProps;\n  isFetching: boolean;\n}\n","import { Row } from \"antd\";\nimport React from \"react\";\n\nexport default function NoData() {\n  return (\n    <Row\n      style={{\n        padding: \"200px 0px\",\n        display: \"flex\",\n        flexDirection: \"column\",\n        justifyContent: \"center\",\n        alignItems: \"center\",\n      }}\n    >\n      <p className=\"font-lg fw3\">No items found</p>\n      <p className=\"font-md\" style={{ marginTop: 8 }}>\n        There are currently no items related to your search results\n      </p>\n    </Row>\n  );\n}\n","import { Select } from \"antd\";\nimport React from \"react\";\nimport { WithLabel } from \"../../../types/WithLabel\";\n\ninterface Props {\n  sort_by?: string;\n  sory_type?: string;\n  onChangeSort(sort_by: string, sort_type: string): void;\n}\n\ninterface Sort {\n  sort_by: string;\n  sory_type: string;\n}\n\nconst supportedSortTypes: WithLabel<string>[] = [\n  {\n    label: \"Latest listing\",\n    // value: \"created_at\",\n    value: JSON.stringify({ sort_by: \"created\", sory_type: \"desc\" }),\n  },\n  {\n    label: \"Oldest listing\",\n    // value: \"created_at\",\n    value: JSON.stringify({ sort_by: \"created\", sory_type: \"asc\" }),\n  },\n  {\n    label: \"Highest mint\",\n    // value: \"template_mint\",\n    value: JSON.stringify({ sort_by: \"template_mint\", sory_type: \"desc\" }),\n  },\n  {\n    label: \"Lowest mint\",\n    // value: \"template_mint\",\n    value: JSON.stringify({ sort_by: \"template_mint\", sory_type: \"asc\" }),\n  },\n  {\n    label: \"Highest pice\",\n    // value: \"price\",\n    value: JSON.stringify({ sort_by: \"price\", sory_type: \"desc\" }),\n  },\n  {\n    label: \"Lowest price\",\n    // value: \"price\",\n    value: JSON.stringify({ sort_by: \"price\", sory_type: \"asc\" }),\n  },\n];\n\nexport default function Sort({ onChangeSort }: Props) {\n  return (\n    <Select\n      style={{ width: \"100%\" }}\n      size=\"large\"\n      defaultValue={[supportedSortTypes[0]]}\n      onChange={(value, option) => {\n        var selectedValue = JSON.parse(\n          (option as WithLabel<string>).value\n        ) as Sort;\n        onChangeSort(selectedValue.sort_by, selectedValue.sory_type);\n      }}\n      options={supportedSortTypes}\n    />\n  );\n}\n","import { Select } from \"antd\";\nimport React from \"react\";\nimport { WithLabel } from \"../../../types/WithLabel\";\n\ninterface Props {\n  sort_by?: string;\n  sory_type?: string;\n  onChangeSort(sort_by: string, sort_type: string): void;\n}\n\ninterface Sort {\n  sort_by: string;\n  sory_type: string;\n}\n\nconst supportedSortTypes: WithLabel<string>[] = [\n  {\n    label: \"Latest listing\",\n    // value: \"created\",\n    value: JSON.stringify({ sort_by: \"created\", sory_type: \"desc\" }),\n  },\n  {\n    label: \"Oldest listing\",\n    // value: \"created\",\n    value: JSON.stringify({ sort_by: \"created\", sory_type: \"asc\" }),\n  },\n  {\n    label: \"Highest mint\",\n    // value: \"template_mint\",\n    value: JSON.stringify({ sort_by: \"template_mint\", sory_type: \"desc\" }),\n  },\n  {\n    label: \"Lowest mint\",\n    // value: \"template_mint\",\n    value: JSON.stringify({ sort_by: \"template_mint\", sory_type: \"asc\" }),\n  }\n];\n\nexport default function SortForAsset({ onChangeSort }: Props) {\n  return (\n    <Select\n      style={{ width: \"100%\" }}\n      size=\"large\"\n      defaultValue={[supportedSortTypes[0]]}\n      onChange={(value, option) => {\n        var selectedValue = JSON.parse(\n          (option as WithLabel<string>).value\n        ) as Sort;\n        onChangeSort(selectedValue.sort_by, selectedValue.sory_type);\n      }}\n      options={supportedSortTypes}\n    />\n  );\n}\n","import { SearchOutlined } from \"@ant-design/icons\";\nimport { Row, Col, Input } from \"antd\";\nimport React from \"react\";\nimport { FilterProps, FilterType } from \"../../Filters\";\nimport Sort from \"../../Filters/Sort\";\nimport SortForAsset from \"../../Filters/SortAsset\";\n\ninterface Props {\n  filterType: FilterType;\n  onChange: (filter: Partial<FilterProps>) => void;\n}\n\nexport default function SearchAndSort({ filterType, onChange }: Props) {\n  return (\n    <Row align={\"middle\"} gutter={[16, 16]}>\n      <Col xs={24} md={12} lg={16} xl={18}>\n        <Input\n          placeholder={\"Search by name\"}\n          size=\"large\"\n          prefix={\n            <SearchOutlined\n              onPointerEnterCapture={() => {}}\n              onPointerLeaveCapture={() => {}}\n            />\n          }\n          // onChange={(e) => onChange({ search: e.target.value })}\n          onKeyDown={(e) => {\n            if (e.key === \"Enter\") {\n              onChange({ search: (e.target as HTMLInputElement).value });\n            }\n          }}\n        />\n      </Col>\n      <Col xs={24} md={12} lg={8} xl={6}>\n        {filterType === \"assets\" ? (\n          <SortForAsset\n            onChangeSort={(sort_by, sort_type) =>\n              onChange({ sort_by, sort_type })\n            }\n          />\n        ) : (\n          <Sort\n            onChangeSort={(sort_by, sort_type) =>\n              onChange({ sort_by, sort_type })\n            }\n          />\n        )}\n      </Col>\n    </Row>\n  );\n}\n","import { Row, Col, Pagination, Button } from \"antd\";\nimport React from \"react\";\nimport AssetList from \"../../../AssetCard/AssetList\";\nimport Filters from \"../../../Filters\";\nimport Navigator from \"../../../Navigator\";\nimport useMarketPlaceFilter from \"../../useMarketPlaceFilter\";\nimport Loading from \"../Loading\";\nimport NoData from \"../NoData\";\nimport SearchAndSort from \"../SearchAndSort\";\n\ninterface Props {\n  collections: string[];\n  isShowFilter?: boolean;\n  itemPerPage: number;\n}\nexport default function ListAssets({\n  collections,\n  itemPerPage,\n  isShowFilter,\n}: Props) {\n  const { isFetching, filter, onChangeFilter, pagination } =\n    useMarketPlaceFilter({\n      pagination: { limit: itemPerPage },\n      filter: {\n        scope_collections: collections,\n        collection_verified: true,\n        collection_whitelisted: true,\n      },\n    });\n  return (\n    <Row gutter={[0, 40]} className=\"bg-list-item\">\n      <Col xs={24}>\n        <Navigator />\n      </Col>\n      <Col\n        xs={24}\n        style={{ display: \"flex\", gap: 24, alignItems: \"flex-start\" }}\n      >\n        <div className=\"wax-filters\">\n          <Filters\n            scopedCollections={collections}\n            filter={filter}\n            onChange={(filter) => onChangeFilter(filter)}\n          />\n        </div>\n        <div className=\"wax-nft-items\">\n          <Col xs={24}>\n            <SearchAndSort\n              filterType={filter.saleType}\n              onChange={onChangeFilter}\n            />\n          </Col>\n          {isFetching && <Loading />}\n          {!isFetching && (\n            <div>\n              {pagination.items.length === 0 ? (\n                <NoData />\n              ) : (\n                <Row align={\"top\"} gutter={[0, 40]}>\n                  <Col xs={24}>\n                    <AssetList\n                      items={pagination.items}\n                      handleLoadMore={() => {\n                        onChangeFilter({ ...filter });\n                      }}\n                    />\n                  </Col>\n                  <Col xs={24}>\n                    <Row justify={\"center\"}>\n                      <Button\n                        disabled={pagination.pagination.current_page === 1}\n                        onClick={() =>\n                          onChangeFilter({\n                            page: pagination.pagination.current_page - 1,\n                          })\n                        }\n                      >\n                        Previous\n                      </Button>\n                      <Button\n                        style={{ marginLeft: 10 }}\n                        disabled={\n                          pagination.items.length < pagination.pagination.limit\n                        }\n                        onClick={() =>\n                          onChangeFilter({\n                            page: pagination.pagination.current_page + 1,\n                          })\n                        }\n                      >\n                        Next\n                      </Button>\n                    </Row>\n                  </Col>\n                </Row>\n              )}\n            </div>\n          )}\n        </div>\n      </Col>\n    </Row>\n  );\n}\n","import React from \"react\";\n\nexport default function AccountAvatarDefaultIcon() {\n  return (\n    <img\n      src=\"data:image/png;base64,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\n\"\n      alt=\"\"\n    />\n  );\n}\n","import React from \"react\";\n\nexport default function CopyIcon() {\n  return (\n    <svg\n      width=\"20\"\n      height=\"20\"\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M7 7V4.2002C7 3.08009 7 2.51962 7.21799 2.0918C7.40973 1.71547 7.71547 1.40973 8.0918 1.21799C8.51962 1 9.08009 1 10.2002 1H15.8002C16.9203 1 17.4801 1 17.9079 1.21799C18.2842 1.40973 18.5905 1.71547 18.7822 2.0918C19.0002 2.51962 19.0002 3.07967 19.0002 4.19978V9.7998C19.0002 10.9199 19.0002 11.48 18.7822 11.9078C18.5905 12.2841 18.2839 12.5905 17.9076 12.7822C17.4802 13 16.921 13 15.8031 13H13M7 7H4.2002C3.08009 7 2.51962 7 2.0918 7.21799C1.71547 7.40973 1.40973 7.71547 1.21799 8.0918C1 8.51962 1 9.08009 1 10.2002V15.8002C1 16.9203 1 17.4801 1.21799 17.9079C1.40973 18.2842 1.71547 18.5905 2.0918 18.7822C2.5192 19 3.07899 19 4.19691 19H9.80355C10.9215 19 11.4805 19 11.9079 18.7822C12.2842 18.5905 12.5905 18.2839 12.7822 17.9076C13 17.4802 13 16.921 13 15.8031V13M7 7H9.8002C10.9203 7 11.4801 7 11.9079 7.21799C12.2842 7.40973 12.5905 7.71547 12.7822 8.0918C13 8.51921 13 9.079 13 10.1969L13 13\"\n        stroke=\"#7D70F6\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n      />\n    </svg>\n  );\n}\n","import { Col, Row } from \"antd\";\nimport moment from \"moment\";\nimport { useContext } from \"react\";\nimport { getURL } from \"../../../../helpers/HashHelper\";\nimport { AccountContext } from \"../../../../hook/useAccount\";\nimport AccountAvatarDefaultIcon from \"../../../../icon/account-avatar-default\";\nimport CopyIcon from \"../../../../icon/copy\";\nimport './index.css';\n\nexport default function UserInfo() {\n  const { account } = useContext(AccountContext);\n\n  var avatarUrl = getURL({\n    source:\n    account?.avatarUrl === \"none\" ? undefined : account?.avatarUrl,\n  });\n\n  return (\n    <Row\n     className=\"user-info-wrapper\"\n      justify={\"space-between\"}\n    >\n      <Col>\n        <Row gutter={24} align='middle'> \n          <Col>\n          {!account?.avatarUrl || account?.avatarUrl ==='none' ? <AccountAvatarDefaultIcon/> : <div\n            style={{\n              width: 80,\n              height: 80,\n              borderRadius: \"50%\",\n              background: `url(${avatarUrl}) no-repeat center center/cover`,\n            }}\n          />}\n          </Col>\n\n          <Col>\n            <Row gutter={[0, 16]}>\n              <Col xs={24}>\n                <h1\n                  style={{ fontSize: 28, lineHeight: \"36px\", fontWeight: 600 }}\n                >\n                  {account?.accountName}\n                </h1>\n              </Col>\n              <Col xs={24}>\n                <Row gutter={[32, 8]}>\n                  <Col>\n                    <Row style={{cursor:'pointer'}} gutter={12}>\n                      <Col>\n                        <CopyIcon />\n                      </Col>\n                      <Col>\n                        <p className=\"font-lg color-primary fw3\">\n                          {account?.accountName}\n                        </p>\n                      </Col>\n                    </Row>\n                  </Col>\n                  <Col>\n                    <p className=\"font-lg color-text-secondary\">\n                      Joined {moment(account?.createdAt).format(\"MMMM yyyy\")}\n                    </p>\n                  </Col>\n                </Row>\n              </Col>\n            </Row>\n          </Col>\n        </Row>\n      </Col>\n      <Col></Col>\n    </Row>\n  );\n}\n","import { Col, Row, Pagination } from \"antd\";\nimport { useContext } from \"react\";\nimport { NavigatorContext } from \"../../hook/useNavigator\";\nimport { saleTypes } from \"../../types/Sale\";\nimport { WithLabel } from \"../../types/WithLabel\";\nimport AssetList from \"../AssetCard/AssetList\";\nimport Filters, { FilterType } from \"../Filters\";\nimport Loading from \"../marketplace/component/Loading\";\nimport NoData from \"../marketplace/component/NoData\";\nimport SearchAndSort from \"../marketplace/component/SearchAndSort\";\nimport useMarketPlaceFilter from \"../marketplace/useMarketPlaceFilter\";\nimport Navigator from \"../Navigator\";\nimport UserInfo from \"./components/UserInfo\";\nimport UseUserInventory from \"./useUserInventory\";\n\ninterface Props {\n  isShowFilter?: boolean;\n  itemPerPage: number;\n  userAccount: string;\n}\n\nvar filterTypes: WithLabel<FilterType>[] = [\n  {\n    label: \"All Assets\",\n    value: \"assets\",\n  },\n  ...saleTypes,\n];\n\nexport default function UserInventory({ itemPerPage, userAccount }: Props) {\n  const { isFetching, filter, onChangeFilter, pagination } =\n    useMarketPlaceFilter({\n      pagination: { limit: itemPerPage },\n      filter: {\n        collection_verified: false,\n        collection_whitelisted: false,\n        participant: userAccount,\n        saleType: \"assets\",\n        state: '1,5',\n      },\n    });\n  const { goToAssetList } = useContext(NavigatorContext);\n\n  const { accountCollections } = UseUserInventory({ userAccount });\n\n  // useEffect(() => {\n  //   onChangeFilter({state: filter.saleType==='rapid-sale' ? '1,5':'1,3,5'})\n  // }, [filter.saleType])\n  \n\n  return (\n    <div className=\"bg-list-item\">\n      <Row gutter={[0, 40]}>\n        <Col xs={24}>\n          <Navigator\n            currentPageTitle=\"My Inventory\"\n            canBackToPreviousPage={true}\n            onBack={goToAssetList}\n          />\n        </Col>\n        <Col xs={24}>\n          <UserInfo />\n        </Col>\n        <Col xs={24}>\n          <div style={{ display: \"flex\", gap: 24, alignItems: \"flex-start\" }}>\n            <div className=\"wax-filters\">\n              <Filters\n                scopeFilterTypes={filterTypes}\n                scopedCollections={accountCollections.map(\n                  (c) => c.collection_name\n                )}\n                filter={filter}\n                onChange={(filter) => onChangeFilter(filter)}\n                isEnableFilterByCollectionStatus={true}\n              />\n            </div>\n            <div className=\"wax-nft-items\">\n              <Col xs={24}>\n                <SearchAndSort\n                  filterType={filter.saleType}\n                  onChange={onChangeFilter}\n                />\n              </Col>\n              {isFetching && <Loading />}\n              {!isFetching && (\n                <div>\n                  {pagination.items.length === 0 ? (\n                    <NoData />\n                  ) : (\n                    <Row align={\"top\"} gutter={[0, 40]}>\n                      <Col xs={24}>\n                        <AssetList\n                          items={pagination.items}\n                          handleLoadMore={() => {\n                            onChangeFilter({ ...filter });\n                          }}\n                        />\n                      </Col>\n                      <Col xs={24}>\n                        <Row justify={\"center\"}>\n                          <Pagination\n                            current={pagination.pagination.current_page}\n                            total={pagination.pagination.total_items}\n                            pageSize={pagination.pagination.limit}\n                            showSizeChanger={false}\n                            hideOnSinglePage\n                            onChange={(page) => {\n                              onChangeFilter({ page });\n                            }}\n                          />\n                        </Row>\n                      </Col>\n                    </Row>\n                  )}\n                </div>\n              )}\n            </div>\n          </div>\n        </Col>\n      </Row>\n    </div>\n  );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { collectionController } from \"../../controller\";\nimport { Collection } from \"../../types/Collection\";\n\ninterface Props {\n  userAccount: string;\n}\nexport default function UseUserInventory({ userAccount }: Props) {\n  const [state, setState] = useState<State>({ accountCollections: [] });\n  useEffect(() => {\n    fetchAccountCollections();\n  }, [userAccount]);\n\n  const fetchAccountCollections = async () => {\n    var accountCollections = await collectionController.inventoryList(\n      userAccount,\n      { collection_verified: false, collection_whitelisted: false }\n    );\n    setState({ accountCollections });\n  };\n\n  return {\n    ...state,\n    setUserInventory: (values: Partial<State>) =>\n      setState((prev) => ({ ...prev, ...values })),\n  };\n}\n\ninterface State {\n  accountCollections: Collection[];\n}\n","import { Col, Row } from \"antd\";\nimport { formatDistance } from \"date-fns\";\nimport React, { useContext } from \"react\";\nimport { priceWithCurrencyToString } from \"../../../../helpers/CurrencyHelper\";\nimport { CurrencyContext } from \"../../../../hook/useCurrency\";\nimport { WaxAuthenContext } from \"../../../../hook/useWaxAuthen\";\nimport { Offer } from \"../../../../types/Offer\";\nimport AssetCardPreview from \"../../../AssetCard/components/AssetCard/AssetCardPreview\";\nimport WrapperActionableOffer from \"../../../Offer/WrapperActionableOffer\";\nimport UseActionableOffer from \"../../../Offer/WrapperActionableOffer/useActionableOffer\";\nimport {\n  ActionableOfferContext,\n} from \"../../../Offer/WrapperActionableOffer/useActionableOffer\";\n\ninterface Props {\n  offer: Offer;\n}\nexport default function OfferItem({ offer }: Props) {\n  const { getRate } = useContext(CurrencyContext);\n  const { authen } = useContext(WaxAuthenContext);\n  const useActionableOffer = UseActionableOffer({ offer });\n  return (\n    <ActionableOfferContext.Provider value={useActionableOffer}>\n        <Row align={'middle'}>\n          <Col xs={5}>\n            <Row align={\"middle\"} gutter={8}>\n              <Col style={{ height: 40 }}>\n                <AssetCardPreview asset={offer.assets?.[0]} />\n              </Col>\n              <Col>\n                <p className=\"fw3\">{offer.assets?.[0].name}</p>\n              </Col>\n            </Row>\n          </Col>\n          <Col xs={2}>{priceWithCurrencyToString(\"wax\", offer.price, 8)}</Col>\n          <Col xs={2}>\n            {priceWithCurrencyToString(\n              \"usd\",\n              offer.price * getRate(\"waxpusd\"),\n              8\n            )}\n          </Col>\n          <Col xs={3}>{offer.buyer}</Col>\n          <Col xs={3}>\n            In {formatDistance(new Date(), offer.expired_at * 1000)}\n          </Col>\n          <Col xs={3}>\n            {formatDistance(new Date(), offer.created_at_time)} ago\n          </Col>\n          <Col xs={5}>\n            <WrapperActionableOffer offer={offer}>\n              {authen.userAccount === offer.buyer && (\n                <Row justify={\"end\"}>\n                  <Col>\n                    <button\n                      className=\"btn btn-primary btn-actionable-offer\"\n                      onClick={() => useActionableOffer.startAction(\"cancel\")}\n                    >\n                      Cancel\n                    </button>\n                  </Col>\n                </Row>\n              )}\n\n              {authen.userAccount === offer.seller && (\n                <Row justify={\"end\"} gutter={[8, 8]}>\n                  <Col>\n                    <button\n                      className=\"btn btn-primary btn-actionable-offer\"\n                      onClick={() => useActionableOffer.startAction(\"accept\")}\n                    >\n                      Accept\n                    </button>\n                  </Col>\n                  <Col>\n                    <button\n                      className=\"btn btn-primary btn-actionable-offer\"\n                      onClick={() => useActionableOffer.startAction(\"decline\")}\n                    >\n                      Decline\n                    </button>\n                  </Col>\n                </Row>\n              )}\n            </WrapperActionableOffer>\n          </Col>\n        </Row>\n    </ActionableOfferContext.Provider>\n  );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { Col, Pagination, Row, Spin } from \"antd\";\nimport { useEffect, useState } from \"react\";\nimport { offerController } from \"../../../../controller\";\nimport { ListOfferParams } from \"../../../../controller/offerController\";\nimport { normalizeAsset } from \"../../../../helpers/NormalizeHelper\";\nimport { Offer } from \"../../../../types/Offer\";\nimport { PaginationWithData } from \"../../../../types/Pagination\";\nimport OfferItem from \"../OfferItem\";\nimport './index.css';\n\ninterface Props {\n  initialFilter: ListOfferParams;\n}\n\nexport default function Offers({ initialFilter }: Props) {\n  const [state, setState] = useState<State>({\n    filter: initialFilter,\n    isFetching: false,\n  });\n  const { pagination } = state;\n\n  useEffect(() => {\n    setState({ filter: initialFilter, isFetching: false });\n  }, [JSON.stringify(initialFilter)]);\n\n  useEffect(() => {\n    getOffers();\n  }, [JSON.stringify(state.filter)]);\n\n  const hasData = !state.isFetching && state?.pagination?.items?.length > 0;\n\n  const getOffers = async () => {\n    setState((prev) => ({ ...prev, isFetching: true }));\n    var pagination = await offerController.list(state.filter);\n    setState((prev) => ({ ...prev, pagination, isFetching: false }));\n  };\n\n  const renderFetching = () => (\n    <Row justify={\"center\"} align=\"middle\" style={{ padding: 48 }}>\n      <Spin />\n    </Row>\n  );\n\n  const renderNoData = () => (\n    <Row justify={\"center\"} align=\"middle\" style={{ padding: 48 }}>\n      <p>No data</p>\n    </Row>\n  );\n\n  return state.isFetching ? (\n    renderFetching()\n  ) : !hasData ? (\n    renderNoData()\n  ) : (\n    <Row className=\"offers\" style={{padding:'24px 0'}} gutter={[0, 24]}>\n      <Col className=\"font-md color-text-secondary\" xs={24}>\n        <Row>\n          <Col xs={5}>\n            <p>Offer</p>\n          </Col>\n          <Col xs={2}>\n            <p>Price</p>\n          </Col>\n          <Col xs={2}>\n            <p>USD Price</p>\n          </Col>\n          <Col xs={3}>\n            <p>From</p>\n          </Col>\n          <Col xs={3}>\n            <p>Expired</p>\n          </Col>\n          <Col xs={3}>\n            <p>Made</p>\n          </Col>\n          <Col xs={5}></Col>\n        </Row>\n      </Col>\n      <Col xs={24}>\n        <Row>\n          {pagination?.items\n            ?.map((offer) => ({\n              ...offer,\n              assets: offer.assets.map((a) => normalizeAsset(a)),\n            }))\n            .map((offer) => (\n              <Col className=\"item\" xs={24}>\n                <OfferItem offer={offer} />\n              </Col>\n            ))}\n        </Row>\n      </Col>\n      <Col xs={24}>\n        <Row justify={\"center\"}>\n          <Col>\n            <Pagination\n              current={pagination?.pagination?.current_page || 1}\n              total={pagination?.pagination?.total_items || 0}\n              pageSize={pagination?.pagination?.limit || 24}\n              showSizeChanger={false}\n              // hideOnSinglePage\n              onChange={(page) => {\n                setState((prev) => ({\n                  ...prev,\n                  filter: { ...prev.filter, page },\n                }));\n              }}\n            />\n          </Col>\n        </Row>\n      </Col>\n    </Row>\n  );\n}\n\ninterface State {\n  filter: ListOfferParams;\n  isFetching: boolean;\n  pagination?: PaginationWithData<Offer>;\n}\n","import React, { useContext } from \"react\";\nimport { WaxAuthenContext } from \"../../../../hook/useWaxAuthen\";\nimport Offers from \"../Offers\";\n\nexport default function OffersMade() {\n  const { authen } = useContext(WaxAuthenContext);\n  \n  return (\n    <Offers\n    initialFilter={{\n        sort_by: \"price\",\n        sort_type: \"desc\",\n        buyer: authen.userAccount,\n      }}\n    />\n  );\n}\n","import React, { useContext } from 'react'\nimport { WaxAuthenContext } from '../../../../hook/useWaxAuthen';\nimport Offers from '../Offers';\n\nexport default function OffersReceived() {\n  const { authen } = useContext(WaxAuthenContext);\n  \n  return (\n    <Offers\n      initialFilter={{\n        sort_by: \"price\",\n        sort_type: \"desc\",\n        seller: authen.userAccount,\n      }}\n    />\n  );\n}\n","import { Col, Row, Tabs, TabsProps } from \"antd\";\nimport React, { useContext, useState } from \"react\";\nimport OffersMade from \"./components/OffersMade\";\nimport OffersReceived from \"./components/OffersReceived\";\nimport Navigator from \"../Navigator\";\nimport { NavigatorContext } from \"../../hook/useNavigator\";\nimport UserInfo from \"../UserInventory/components/UserInfo\";\n\nexport default function UserOffers() {\n  const [state, setState] = useState<State>({ currentTab: \"offers-received\" });\n  const { goToAssetList } = useContext(NavigatorContext);\n\n  const items: TabsProps[\"items\"] = [\n    {\n      key: \"offers-received\",\n      label: `Offers Received`,\n    },\n    {\n      key: \"offers-made\",\n      label: `Offers Made`,\n    },\n  ];\n\n  return (\n    <div className=\"bg-list-item\">\n      <Row gutter={[0, 40]}>\n        <Col xs={24}>\n          <Navigator\n            currentPageTitle=\"My Offers\"\n            canBackToPreviousPage={true}\n            onBack={goToAssetList}\n          />\n        </Col>\n        <Col xs={24}>\n          <UserInfo />\n        </Col>\n        <Col xs={24}>\n          <Tabs\n            defaultActiveKey={state.currentTab}\n            items={items}\n            onChange={(key) => {\n              setState({ currentTab: key as OfferTabs });\n            }}\n          />\n          <Row>\n            <Col xs={24}>\n              {state.currentTab === \"offers-received\" ? (\n                <OffersReceived />\n              ) : (\n                <OffersMade />\n              )}\n            </Col>\n          </Row>\n        </Col>\n      </Row>\n    </div>\n  );\n}\n\ntype OfferTabs = \"offers-received\" | \"offers-made\";\n\ninterface State {\n  currentTab: OfferTabs;\n}\n","import UseWaxAuthen, { WaxAuthenContext } from \"../../hook/useWaxAuthen\";\nimport Login from \"../Login\";\nimport AssetDetail from \"../AssetDetail\";\nimport ListAssets from \"./component/ListAssets\";\nimport UseAssetDetail, { AssetDetailContext } from \"./context/useAssetDetail\";\nimport UseNavigator, { NavigatorContext } from \"../../hook/useNavigator\";\nimport UserInventory from \"../UserInventory\";\nimport UseAccount, { AccountContext } from \"../../hook/useAccount\";\nimport UseCurrency, { CurrencyContext } from \"../../hook/useCurrency\";\nimport UserOffers from \"../UserOffers\";\n\ninterface Props {\n  collections: string[];\n  isShowFilter?: boolean;\n  itemPerPage: number;\n}\n\nexport default function MarketPlace({\n  collections,\n  itemPerPage,\n  isShowFilter = true,\n}: Props) {\n  const useNavigator = UseNavigator();\n  const useWaxAuthen = UseWaxAuthen();\n  const useAccount = UseAccount();\n  const useCurrency = UseCurrency();\n  const { authen, closeLoginPopup } = useWaxAuthen;\n  const useAssetDetail = UseAssetDetail();\n\n  return (\n    <NavigatorContext.Provider value={useNavigator}>\n      <WaxAuthenContext.Provider value={{ ...useWaxAuthen }}>\n        <AccountContext.Provider value={useAccount}>\n          <CurrencyContext.Provider value={useCurrency}>\n            <Login\n              isOpen={!authen.isAuthen && authen.isOpenPopupLogin}\n              onClose={closeLoginPopup}\n            />\n            <AssetDetailContext.Provider value={useAssetDetail}>\n              {useAssetDetail.selectedItem && <AssetDetail />}\n              <div\n                style={{\n                  display:\n                    useAssetDetail.selectedItem ||\n                    useNavigator.currentRoute.name !== \"asset-list\"\n                      ? \"none\"\n                      : \"block\",\n                }}\n              >\n                <ListAssets\n                  collections={collections}\n                  itemPerPage={itemPerPage}\n                  isShowFilter={isShowFilter}\n                />\n              </div>\n              {!useAssetDetail.selectedItem && (\n                <div>\n                  {useNavigator.currentRoute.name === \"inventory\" && (\n                    <div>\n                      {useWaxAuthen.authen.userAccount && (\n                        <UserInventory\n                          userAccount={useWaxAuthen.authen.userAccount}\n                          itemPerPage={itemPerPage}\n                        />\n                      )}\n                    </div>\n                  )}\n                  {useNavigator.currentRoute.name === \"user-offers\" && (\n                    <div>\n                      {useWaxAuthen.authen.userAccount && <UserOffers />}\n                    </div>\n                  )}\n                </div>\n              )}\n            </AssetDetailContext.Provider>\n          </CurrencyContext.Provider>\n        </AccountContext.Provider>\n      </WaxAuthenContext.Provider>\n    </NavigatorContext.Provider>\n  );\n}\n","import { ConfigProvider } from \"antd\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { PAGE_SIZE } from \"../../types/Pagination\";\nimport MarketPlace from \"../marketplace\";\nimport reactToWebComponent from \"react-to-webcomponent\";\n\ninterface Props {\n  isshowfilter?: string;\n  collections?: string;\n  itemperpage?: string;\n}\n\nexport const WaxMarketPlace = (props: Props) => {\n  const isShowFilter = props.isshowfilter?.toLowerCase() !== \"false\";\n  const itemPerPage = Number(props.itemperpage || PAGE_SIZE);\n\n  return (\n    <ConfigProvider\n      theme={{\n        token: {\n          colorPrimary: \"#7d70f6\",\n          fontFamily:'Inter'\n        },\n      }}\n    >\n      <MarketPlace\n        isShowFilter={isShowFilter}\n        collections={props.collections?.toString().split(\",\")}\n        itemPerPage={itemPerPage}\n      />\n    </ConfigProvider>\n  );\n};\n\nconst WaxMarketPlacePropTypes = {\n  isshowfilter: String,\n  collections: String,\n  itemperpage: String,\n};\n\nexport const WaxMarketPlaceWebComponent = reactToWebComponent(\n  WaxMarketPlace,\n  React,\n  ReactDOM,\n  {\n    props: WaxMarketPlacePropTypes,\n  }\n);\n","import './index.css';\nimport { WaxMarketPlaceWebComponent } from \"./components/MarketplaceWebComponent\";\nimport WaxMarketPlace from './components/marketplace';\n\ncustomElements.define(\"wax-marketplace\", WaxMarketPlaceWebComponent);\n\nexport default WaxMarketPlace;"],"names":["defaultPagination","current_page","limit","total_items","total_page","appConfig","process","env","REACT_APP_NODE_ENV","service","media","ipfs","marketplace","marketplaceApi","chain","chainUrl","defaultTxOptions","blocksBehind","expireSeconds","broadcast","allowRetry","wallet","wax","autoSigningUrl","signingUrl","common","isEnableDualSignature","isDisableDualSale","undefined","waxJs","waxjs","WaxJS","_extends","rpcEndpoint","waxSigningURL","waxAutoSigningURL","UseWaxAuthen","authen","setAuthen","useState","publicKeys","isAuthen","isOpenPopupLogin","useEffect","async","isAutoLoginAvailable","userAccount","pubKeys","autoLogin","login","e","logout","prev","closeLoginPopup","openLoginPopup","WaxAuthenContext","React","createContext","Login","isOpen","onClose","useContext","_jsx","Modal","className","width","title","open","onCancel","footer","style","padding","children","_jsxs","textAlign","fontSize","fontWeight","paddingBottom","onClick","paddingTop","href","axiosClient","axios","create","baseURL","ItemType","SaleState","saleTypes","label","value","atomicAuctionController","constructor","client","this","_client","getAuctions","params","get","then","resp","data","atomicCollectionController","getMarketCollections","_params$page","_params$limit","url","page","body","post","atomicSaleController","getSales","state","String","saleController","list","props","_state$split","_props$scope_collecti","sort_by","sort_type","type","min_price","max_price","search","seller","seller_blacklist","collection_blacklist","schema_name","sale_id","result","collection_name","sort","order","max_assets","SINGLE","min_assets","BUNDLE","symbol","Number","split","collection_whitelist","scope_collections","join","console","log","pagination","length","items","map","sale","price_symbol","listing_symbol","price","listing_price","token_precision","settlement_symbol","token_symbol","assets","asset","image","img","video","audio","listByAssetIds","assetIds","contract","id","auctionController","min_asset","auction","bid_count","bids","amount","end_time","collectionController","match","results","item","name","volume","inventoryList","account","collectionName","schemaController","templateController","getPriceHistory","getStatisticPriceHistory","from","to","assetController","_","pick","accountController","Promise","resolve","accountName","templates","collections","avatarReferralAssetId","deletedAt","avatarUrl","createdAt","Date","toISOString","updatedAt","currencyController","getRate","target","waxpusd","usdwaxp","offerController","normalizeAsset","a","_a$properties","_a$properties2","_a$properties3","_a$properties4","_a$properties5","_a$sales","_a$auctions","asset_id","properties","previewImage","sales","s","collection_status","owner","a1","_a1$properties","_a1$properties2","_a1$properties3","_a1$properties4","_a1$properties5","auctions","normalizeSale","saleType","deferred_listing","normalizeAuction","_auction$assets","auction_id","priceWithCurrencyToString","currency","tokenPrecision","formattedPrice","formatPrice","toLocaleLowerCase","Math","pow","toFixed","CurrencyContext","WaxCurrencyIcon","height","viewBox","fill","xmlns","xmlnsXlink","cx","cy","r","patternContentUnits","xlinkHref","transform","DSL_PERMISSION","AUTO_RETRIVE_COLLECTION","AUTO_RETRIVE_SCHEMA","zero","buf","len","extra_lbits","Uint8Array","extra_dbits","extra_blbits","bl_order","static_ltree","Array","static_dtree","D_CODES","_dist_code","_length_code","MAX_MATCH","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","dist","put_short","w","pending_buf","pending","send_bits","bi_valid","bi_buf","send_code","c","tree","bi_reverse","code","res","gen_codes","bl_count","next_code","MAX_BITS","bits","n","init_block","LITERALS","dyn_ltree","dyn_dtree","bl_tree","END_BLOCK","opt_len","static_len","last_lit","matches","bi_windup","smaller","m","depth","_n2","_m2","pqdownheap","k","v","heap","j","heap_len","compress_block","ltree","dtree","lc","extra","lx","d_buf","l_buf","build_tree","desc","stree","node","heap_max","base","h","xbits","f","overflow","gen_bitlen","scan_tree","curlen","prevlen","nextlen","count","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","_tr_stored_block","stored_len","last","set","window","subarray","copy_block","LENGTH_CODES","L_CODES","tr_static_init","l_desc","d_desc","bl_desc","opt_lenb","static_lenb","max_blindex","level","strm","data_type","black_mask","detect_data_type","BL_CODES","build_bl_tree","strategy","lcodes","dcodes","blcodes","rank","send_all_trees","lit_bufsize","STATIC_TREES","bi_flush","adler32_1","adler","pos","s1","s2","crcTable","Uint32Array","table","makeTable","crc32_1","crc","t","end","i","messages","constants","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","_tr_init","_tr_flush_block","_tr_tally","_tr_align","require$$0","require$$1","MIN_LOOKAHEAD","HCRC_STATE","BUSY_STATE","FINISH_STATE","err","errorCode","msg","HASH","hash_shift","hash_mask","flush_pending","avail_out","output","pending_out","next_out","total_out","flush_block_only","block_start","strstart","put_byte","b","putShortMSB","read_buf","start","size","avail_in","input","next_in","wrap","adler32","crc32","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","p","more","str","window_size","hash_size","head","insert","ins_h","deflate_fast","flush","hash_head","bflush","match_length","max_lazy_match","MIN_MATCH","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","func","configuration_table","max_block_size","pending_buf_size","max_start","DeflateState","status","gzhead","gzindex","method","last_flush","w_bits","hash_bits","Uint16Array","HEAP_SIZE","beg","val","old_flush","text","hcrc","comment","time","os","header","level_flags","charCodeAt","bstate","deflate_huff","deflate_rle","_has","obj","key","Object","prototype","hasOwnProperty","call","sources","slice","arguments","source","shift","TypeError","chunks","l","chunk","STR_APPLY_UIA_OK","fromCharCode","apply","__","_utf8len","q","c2","m_pos","str_len","buf_len","max","out","utf16buf","c_len","buf2binstring","zstream","toString","Deflate","options","utils","chunkSize","windowBits","memLevel","opt","raw","gzip","ended","ZStream","ret","deflateResetKeep","lm_init","deflateReset","zlib_deflate","Error","dictionary","dict","strings","dictLength","tmpDict","avail","next","_dict_set","deflate","deflator","push","flush_mode","_flush_mode","onData","onEnd","inffast","_in","_out","dmax","wsize","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","op","from_source","lencode","distcode","lenbits","distbits","top","dolen","mode","sane","lbase","lext","dbase","dext","inftrees","lens","lens_index","codes","table_index","work","opts","incr","low","mask","sym","min","root","curr","drop","left","used","huff","base_index","MAXBITS","offs","here_bits","here_op","here_val","extra_index","TYPE","BAD","zswap32","InflateState","havedict","flags","check","total","wbits","offset","ncode","nlen","ndist","have","lendyn","distdyn","back","was","inflateReset","Int32Array","inflateResetKeep","lenfix","distfix","virgin","fixedtables","inflate_table","updatewindow","src","copy","put","last_bits","last_op","last_val","hbuf","inf_leave","done","xflags","extra_len","inflate_fast","dictid","gzheader","Inflate","inflateReset2","zlib_inflate","GZheader","inflate","inflator","last_avail_out","next_out_utf8","tail","utf8str","deflateRaw","inflateRaw","ungzip","minimalisticAssert","assert","equal","module","ctor","superCtor","super_","enumerable","writable","configurable","TempCtor","isSurrogatePair","htonl","zero2","word","zero8","inherits","enc","isArray","replace","parseInt","endian","d","ah","al","lo","bh","bl","ch","cl","dh","dl","carry","eh","el","num","BlockHash","pendingTotal","blockSize","outSize","hmacStrength","padLength","_delta8","_delta32","BlockHash_1","update","toArray","concat","join32","_update","digest","_pad","_digest","bytes","rotr32","ch32","x","y","z","maj32","rotl32","sum32","sum32_5","ft_1","p32","sha1_K","SHA1","W","_1","toHex32","split32","sum32_4","shaCommon","s0_256","s1_256","g0_256","sha256_K","SHA256","_256","SHA224","g","T1","T2","_224","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","SHA512","_512","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","SHA384","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","_384","require$$2","require$$3","require$$4","sum32_3","RIPEMD160","ripemd160","K","Kh","A","B","C","D","E","Ah","Bh","Ch","Dh","Eh","T","rh","sh","Hmac","hash","Hash","inner","outer","_init","hmac","exports","sha","ripemd","sha1","sha256","sha224","sha384","sha512","_createClass","defineProperties","descriptor","defineProperty","Constructor","protoProps","staticProps","instance","_classCallCheck","message_size","message","dividend","divisor","byteLength","n_pad","get_n_pad_bytes","_divmod$map2","arr","Symbol","iterator","_arr","_n","_d","_e","_s","_i","sliceIterator","_slicedToArray","floor","index","msg_bit_size_most","msg_bit_size_least","padded","data_view","DataView","buffer","setUint8","setUint32","reduce","pad","rP","sP","X","getUint32","AP","BP","CP","DP","EP","_T","add_modulo32","rol32","KP","ArrayBuffer","forEach","h_i","__read","o","ar","error","__spreadArray","il","__values","signatureToString","stringToSignature","privateKeyToString","privateKeyToLegacyString","stringToPrivateKey","convertLegacyPublicKeys","publicKeyToString","publicKeyToLegacyString","stringToPublicKey","signatureDataSize","privateKeyDataSize","publicKeyDataSize","base64ToBinary","binaryToBase58","base58ToBinary","signedBinaryToDecimal","binaryToDecimal","signedDecimalToBinary","negate","isNegative","KeyType","base58Chars","base58Map","base58M","create_base58_map","base64Map","base64M","base64Chars","create_base64_map","bignum","decimalToBinary","srcDigit","negative","substr","minDigits","reverse","e_1","_a","s_1","s_1_1","e_1_1","return","base58ToBinaryVarSize","e_2","e_3","_b","bignum_1","bignum_1_1","e_2_1","bignum_2","bignum_2_1","e_3_1","groups","group","digit0","digit1","digit2","digit3","digestSuffixRipemd160","suffix","stringToKey","whole","keyToString","prefix","k1","r1","wa","convertLegacyPublicKey","keys","whole_1","byte","hash_js_1","signature","__assign","assign","serializeQuery","deserializeAnyArray","serializeAnyArray","deserializeAnyObject","serializeAnyObject","deserializeAnyvar","serializeAnyvar","deserializeAction","deserializeActionData","serializeAction","serializeActionData","transactionHeader","getTypesFromAbi","createTransactionTypes","createTransactionExtensionTypes","createAbiTypes","createInitialTypes","hexToUint8Array","arrayToHex","symbolToString","stringToSymbol","dateToBlockTimestamp","timePointSecToDate","dateToTimePointSec","timePointToDate","supportedAbiVersion","SerialBuffer","SerializerState","skippedBinaryExtension","textEncoder","textDecoder","array","readPos","TextEncoder","TextDecoder","fatal","reserve","ceil","newArray","haveReadData","restartRead","asUint8Array","byteOffset","pushArray","pushUint8ArrayChecked","getUint8Array","skip","pushUint16","getUint16","pushUint32","pushNumberAsUint64","getUint64AsNumber","pushVaruint32","getVaruint32","bit","pushVarint32","getVarint32","pushFloat32","Float32Array","getFloat32","pushFloat64","Float64Array","getFloat64","pushName","RegExp","test","charToSymbol","getName","endsWith","pushBytes","getBytes","pushString","encode","getString","decode","pushSymbolCode","getSymbolCode","pushSymbol","precision","getSymbol","pushAsset","trim","foundDigit","numeric","getAsset","pushPublicKey","getPublicKey","begin","pushPrivateKey","getPrivateKey","pushSignature","getSignature","version","startsWith","checkDateParse","date","parse","isNaN","serializeUnknown","deserializeUnknown","serializeStruct","allowExtensions","JSON","stringify","serialize","fields","_c","field","extensionOf","deserializeStruct","deserialize","serializeVariant","findIndex","deserializeVariant","serializeArray","e_4","data_2","data_2_1","arrayOf","e_4_1","deserializeArray","serializeOptional","optionalOf","deserializeOptional","serializeExtension","deserializeExtension","serializeObject","e_5","entries","entries_1","entries_1_1","dataType","e_5_1","deserializeObject","serializePair","_this","deserializePair","dateToTimePoint","round","us","sec","blockTimestampToDate","slot","data_1","data_1_1","toUpperCase","hex","createType","attrs","aliasOfName","baseName","checkRange","orig","converted","Map","bool","uint8","int8","uint16","int16","uint32","uint64","int64","int32","varuint32","varint32","uint128","int128","float32","float64","float128","bytesAsUint8Array","string","time_point","time_point_sec","block_timestamp_type","symbol_code","checksum160","checksum256","checksum512","public_key","private_key","typeName","initialTypes","getType","types","abi","e_6","e_7","e_8","e_9","e_10","_f","_g","_h","new_type_name","e_6_1","structs","_j","_k","_l","name_1","e_7_1","variants","_m","_o","_p","name_2","e_8_1","types_1","types_1_1","_r","e_10_1","e_9_1","refBlock","timestamp","expiration","ref_block_num","block_num","ref_block_prefix","action","actions","authorization","anyvar","def","anyvarDefs","null_t","any_array","any_object","defIndex","anyvarDefsByIndex","useShortForm","deserializeAnyvarShort","e_11","entries_2","entries_2_1","e_11_1","e_12","arr_1","arr_1_1","e_12_1","additionalTypes","query","e_13","arg","filter","filter_1","filter_1_1","e_13_1","__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","step","rejected","__generator","sent","trys","ops","verb","throw","pop","ActionBuilder","TransactionBuilder","Api","args","contracts","cachedAbis","transactionExtensions","rpc","authorityProvider","abiProvider","signatureProvider","chainId","abiTypes","ser","transactionTypes","rawAbiToJson","rawAbi","jsonToRawAbi","jsonAbi","getCachedAbi","reload","cachedAbi","getRawAbi","getAbi","getTransactionAbis","transaction","accounts","uniqueAccounts","actionPromises","context_free_actions","Set","all","getContract","serializeTransaction","max_net_usage_words","max_cpu_usage_ms","delay_sec","transaction_extensions","serializeContextFreeData","contextFreeData","contextFreeData_1","contextFreeData_1_1","deserializeTransaction","serializeTransactionExtensions","resource_payer","extensionBuffer","deserializeTransactionExtensions","extensionData","transactionExtension","find","extension","deserializedObj","max_net_bytes","max_cpu_us","max_memory_bytes","deleteTransactionExtensionObjects","serializeActions","deserializeActions","deserializeTransactionWithActions","deserializedTransaction","deserializedCFActions","deserializedActions","deflateSerializedArray","serializedArray","pako_1","inflateSerializedArray","compressedSerializedArray","transact","sign","readOnlyTrx","returnFailureTraces","requiredKeys","compression","useLastIrreversible","info","abis","serializedTransaction","serializedContextFreeData","pushTransactionArgs","availableKeys","get_info","chain_id","generateTapos","hasRequiredTaposFields","context_free_data","signatures","getAvailableKeys","getRequiredKeys","pushCompressedSignedTransaction","pushSignedTransaction","short","queryBuffer","signResponse","response","returnBuffer","tryRefBlockFromGetInfo","send_transaction","processed","action_traces","return_value","push_ro_transaction","push_transaction","compressedSerializedTransaction","compressedSerializedContextFreeData","block","taposBlockNumber","head_block_num","last_irreversible_block_num","tryGetBlockInfo","tryGetBlockHeaderState","get_block_header_state","blockNumber","get_block_info","get_block","last_irreversible_block_id","last_irreversible_block_time","with","buildTransaction","cb","tx","api","contextFreeGroups","actionBuilder","associateContextFree","contextFreeGroup","send","config","contextFreeDataSet","contextFreeActions","serializedData","contextFreeCallback","contextFreeAction","cfd","cfa","as","actorName","ActionSerializer","actor","permission","parent","extendStatics","__extends","setPrototypeOf","__proto__","RpcError","_super","json","details","except","JsonRpc","endpoint","fetchBuiltin","fetch","global","path","eosjs_rpcerror_1","isFetchError","ok","abi_bin_to_json","binargs","abi_json_to_bin","get_abi","account_name","get_account","get_accounts_by_authorizers","get_activated_protocol_features","search_by_block_num","lower_bound","upper_bound","blockNumOrId","block_num_or_id","blockNum","get_code","code_as_wasm","get_code_hash","get_currency_balance","get_currency_stats","get_producer_schedule","get_producers","lowerBound","get_raw_code_and_abi","get_raw_abi","eosjs_numeric_1","get_scheduled_transactions","get_table_rows","scope","index_position","key_type","show_payer","get_kv_table_rows","index_name","encode_type","index_value","get_table_by_scope","available_keys","required_keys","packed_context_free_data","packed_trx","return_failure_traces","push_transactions","transactions","packedTrxs","db_size_get","trace_get_block","history_get_actions","history_get_transaction","blockNumHint","block_num_hint","history_get_key_accounts","publicKey","history_get_controlled_accounts","controllingAccount","controlling_account","jsonRpc","Serialize","Numeric","eosjs_api_1","ApiInterfaces","eosjs_jsonrpc_1","RpcInterfaces","getMedianValue","median","rows","datapoint","getMedian","NavigatorContext","defaultSubmitTransactionSteps","content","hasError","progress","UseTransactionProgress","steps","setState","some","hasFinish","every","resetProgress","startStep","numStep","onError","onFinish","useAwaitProgressTimeline","isConfirming","isProgressing","setPartialState","partial","onStart","description","notification","success","setTransactionProgressState","onReset","lookup","revLookup","Arr","encodeChunk","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","rt","abs","LN2","customInspectSymbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","encodingOrOffset","allocUnsafe","encoding","isEncoding","actual","write","fromString","isView","arrayView","isInstance","fromArrayBuffer","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","isBuffer","checked","numberIsNaN","fromObject","toPrimitive","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","indexOf","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","utf16leToBytes","tmp","extraBytes","parts","maxChunkLength","len2","base64","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","poolSize","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","toLocaleString","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","ieee754","writeDouble","newBuf","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","getMessage","Base","super","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","received","isInteger","INVALID_BASE64_RE","leadSurrogate","b64","validLen","getLens","placeHoldersLen","_byteLength","curByte","base64clean","dst","alphabet","i16","fn","BufferBigIntNotDefined","copyProps","SafeBuffer","MAX_BYTES","crypto","msCrypto","getRandomValues","generated","nextTick","Transform","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","_transform","callback","_flush","useUint8Array","useArrayBuffer","toBuffer","hashBase","ARRAY16","MD5","rotl","fnF","fnG","fnH","fnI","M","md5_js","zr","sl","sr","hr","fn1","fn2","fn3","fn4","fn5","words","br","cr","dr","er","tl","tr","finalSize","_finalSize","_len","accum","assigned","remainder","rem","lowBits","_hash","Sha","init","_w","rotl30","ft","H","Sha1","rotl5","Sha256","maj","sigma0","sigma1","gamma0","Sha224","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","gamma0l","gamma1","gamma1l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","Sha384","algorithm","Algorithm","require$$5","StringDecoder_1","StringDecoder","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","self","utf8CheckExtraBytes","utf8CheckIncomplete","CipherBase","hashMode","_finalOrDigest","_final","__final","_decoder","_encoding","inputEnc","outputEnc","bufferData","outData","_toString","setAutoPadding","getAuthTag","setAuthTag","setAAD","fin","cipherBase","browser","alg","ZEROS","blocksize","_alg","_key","ipad","_ipad","opad","_opad","legacy","md5","Legacy","algos","MAX_ALLOC","precondition","iterations","keylen","defaultEncoding_1","thing","sizes","rmd160","saltLen","getDigest","ipad1","ipad2","run","ZERO_BUF","syncBrowser","password","salt","checkParameters","defaultEncoding","DK","block1","destPos","hLen","U","subtle","toBrowser","checks","getNextTick","queueMicrotask","setImmediate","setTimeout","browserPbkdf2","algo","importKey","deriveBits","promise","resolvePromise","prom","catch","checkNative","sync","pc2table","sTable","permuteTable","off","inL","inR","outL","outR","Cipher","bufferOff","cipher","DESState","DES","_desState","deriveKeys","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","final","_finalEncrypt","_finalDecrypt","_unpad","des","shiftTable","kL","kR","pc1","r28shl","pc2","inp","inOff","outOff","ip","_encrypt","_decrypt","lStart","rStart","keyL","keyR","expand","substitute","permute","rip","CBCState","iv","_cbcInit","_cbcState","superProto","CBC","EDEState","k2","k3","ciphers","EDE","_edeState","ede","modes","instantiate","des3","browserifyDes","modeName","decrypt","_des","bufferXor","encryptStart","xor","_cache","_prev","encryptByte","byteParam","_cipher","encryptBlock","shiftIn","getBlock","incr32_1","encryptBlockRaw","incr32","chunkNum","modeModules","ECB","decryptBlock","CFB","CFB8","CFB1","OFB","CTR","require$$6","GCM","modes_1","asUInt32Array","scrubVec","cryptBlock","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x2","x4","x8","AES","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","m1","scrub","ZEROES","fromArray","GHASH","cache","ghash","_multiply","lsbVi","Vi","Zi","abl","StreamCipher","aes","ck","_ghash","_finID","toPad","ivBits","calcIv","_secCache","_alen","_mode","_authTag","_called","rump","encrypt","tag","xorTest","authCipher","streamCipher","evp_bytestokey","keyBits","ivLen","keyLen","keyStart","ivStart","Splitter","_autopadding","add","PADDING","createCipheriv","suite","MODES","AuthCipher","setTo","padBuff","ebtk","Decipher","_last","createDecipheriv","unpad","autoPadding","createCipher","Cipheriv","createDecipher","deciphers","Decipheriv","listCiphers","getCiphers","aesModes","desModes","BN","number","isBN","red","wordSize","parseHex4Bits","parseHexByte","parseBase","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","limbLen","limbPow","mod","imuln","_iaddn","dest","clone","_expand","_normSign","zeros","groupSizes","groupBases","smallMulTo","ncarry","rword","maxJ","groupSize","groupBase","isZero","modn","idivn","toNumber","toArrayLike","ArrayType","reqLength","andln","iushrn","_countBits","clz32","_zeroBits","bitLength","zeroBits","toTwos","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","uxor","bytesNeeded","bitsLeft","setn","wbit","iadd","isub","comb10MulTo","mid","a0","al0","ah0","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","rbt","rws","iws","rtws","itws","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","ws","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","carryMask","newCarry","ishln","hint","extended","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","outLen","mod3","one","nOne","lpow","inv","wnd","current","currentLen","mont","u","brorand","Rand","generate","rand","Rand_1","_rand","getByte","randomBytes","MillerRabin","mr","_randbelow","min_bytes","bn","_randrange","stop","rone","n1","rn1","getDivisor","generatePrime","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","ONE","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","gen","n2","SEVEN","DH","setPublicKey","pub","_pub","setPrivateKey","priv","_priv","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","checkPrime","__gen","generateKeys","_gen","computeSecret","other","secret","getPrime","front","getGenerator","ReflectOwnKeys","ENCODINGS","binary","DiffieHellmanGroup","createDiffieHellmanGroup","createDiffieHellman","DiffieHellman","genc","arg1","arg2","arg3","isarray","R","Reflect","ReflectApply","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","events","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","existing","newListener","emit","unshift","warned","emitter","warn","onceWrapper","fired","removeListener","wrapFn","_onceWrap","wrapped","bind","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","eventTargetAgnosticAddListener","on","once","addEventListener","wrapListener","removeEventListener","getPrototypeOf","setMaxListeners","getMaxListeners","doError","context","handler","listeners","addListener","prependListener","prependOnceListener","position","originalListener","spliceOne","removeAllListeners","rawListeners","eventNames","errorListener","resolver","addErrorHandlerIfEventEmitter","streamBrowser","objectToString","BufferList","entry","clear","util","custom","emitErrorNT","destroy_1","_readableState","destroyed","_writableState","errorEmitted","pna","_destroy","reading","endEmitted","ending","finalCalled","prefinished","finished","localStorage","_stream_writable","Writable","CorkedRequest","finish","corkReq","pendingcb","onCorkedFinish","corkedRequestsFree","Duplex","asyncWrite","WritableState","realHasInstance","internalUtil","trace","OurUint8Array","nop","stream","isDuplex","objectMode","writableObjectMode","hwm","highWaterMark","writableHwm","writableHighWaterMark","needDrain","decodeStrings","writing","corked","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","bufferedRequestCount","_write","writev","_writev","destroy","Stream","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","getBuffer","hasInstance","object","pipe","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","destroyImpl","_undestroy","objectKeys","_stream_duplex","Readable","readable","allowHalfOpen","onend","onEndNT","_stream_readable","ReadableState","EElistenerCount","debug","debugUtil","debuglog","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","emitReadable_","flow","maybeReadMore_","nReadingNextTick","resume_","fromList","hasStrings","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","pipeOnDrain","increasedAwaitDrain","pause","event","resume","dests","splice","ev","paused","_fromList","_stream_transform","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","_this2","err2","_stream_passthrough","PassThrough","move","_move","for","modrn","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","getr","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","qinv","coefficient","exponent1","m2","exponent2","browserifyRsa","toHex","minAssert","minUtils","getNAF","naf","getJSF","jsf","m8","d1","d2","u1","u2","m14","m24","cachedProperty","computer","parseBytes","intFromLE","BaseCurve","conf","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","curve","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","I","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","decodePoint","pointFromX","encodeCompressed","_encode","compact","getX","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","MontCurve","i4","a24","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","y2","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","fromJSON","pre","endoMul","obj2point","isInfinity","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","zinv","zinv2","ay","pz2","z2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","normalize","aa","bb","diffAdd","da","jumlAdd","EdwardsCurve","twisted","mOneA","dd","oneC","edwards","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","secp256k1","curves","PresetCurve","defineCurve","HmacDRBG","predResist","minEntropy","_reseed","reseedInterval","V","entropy","entropyEnc","nonce","nonceEnc","pers","persEnc","hmacDrbg","seed","_hmac","kmac","reseed","addEnc","temp","KeyPair","ec","_importPrivate","privEnc","_importPublic","pubEnc","fromPublic","fromPrivate","getPublic","reason","getPrivate","derive","verify","Signature","_importDER","recoveryParam","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","slen","toDER","backHalf","EC","nh","keyPair","keyFromPrivate","keyFromPublic","genKeyPair","drbg","ns2","_truncateToN","truncOnly","msgBitLength","bkey","ns1","iter","kp","kpX","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","eddsa","_secret","isPoint","_pubBytes","fromSecret","encodePoint","lastIx","encodingLength","decodeInt","privBytes","sig","getSecret","pubBytes","S","_R","_S","_Rencoded","Rencoded","_Sencoded","Sencoded","encodeInt","toBytes","EDDSA","pointClass","keyFromSecret","hashInt","messagePrefix","s_","makeSignature","SG","normed","xIsOdd","elliptic","Entity","decoders","encoders","define","_createNamed","named","runInThisContext","entity","_initNamed","_getDecoder","asn1","_getEncoder","reporter","Reporter","_reporterState","Reporter_1","ReporterError","rethrow","isError","save","pathLen","restore","enterKey","exitKey","leaveKey","enterObject","leaveObject","now","inherited","elem","wrapResult","captureStackTrace","stack","DecoderBuffer","DecoderBuffer_1","EncoderBuffer","isEmpty","fail","EncoderBuffer_1","tags","methods","Node","_baseState","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","contains","_wrap","stateProps","cstate","prop","child","_useArgs","newKey","_decode","prevObj","present","prevKey","_peekTag","_decodeGeneric","_decodeChoice","_decodeTag","track","_getUse","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","_createEncoderBuffer","_encodeValue","_skipDefault","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","tagClass","tagClassByName","_reverse","tagByName","der","DERDecoder","DERNode","der_1","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","unused","numstr","printstr","values","relative","identifiers","ident","subident","year","mon","day","hour","UTC","PEMDecoder","pem","lines","DEREncoder","PEMEncoder","encodedTag","encodeTag","lenOctets","objid","getFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","dataBuffer","defaultBuffer","Time","asn","utcTime","utctime","generalTime","gentime","AttributeTypeValue","seq","AlgorithmIdentifier","SubjectPublicKeyInfo","bitstr","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","octstr","TBSCertificate","certificate","RSAPrivateKey_1","RSAPublicKey_1","null_","PublicKey_1","PrivateKey","EncryptedPrivateKey","DSAPrivateKey_1","DSAparam","ECParameters","namedCurve","findProc","startRegex","fullRegex","parseKeys","passphrase","subtype","ndata","stripped","okey","decrypted","cipherText","cipherKey","evp","match2","fixProc","tbsCertificate","subjectPublicKeyInfo","PublicKey","RSAPublicKey","subjectPublicKey","subjectPrivateKey","pub_key","kde","kdeparams","iters","aesid","compat","RSAPrivateKey","privateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","parseAsn1","getKey","hlen","hbits","bits2int","bits2octets","createHmac","obits","makeKey","kv","makeR","sign_1","hashType","signType","curveId","ecSign","dsaSign","makeKey_1","checkValue","Sign","algorithms","_hashType","createHash","_tag","_signType","Verify","createSign","createVerify","sigBuffer","ecVerify","unpacked","montp","dsaVerify","padNum","ECDH","aliases","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","format","inenc","mgf","i2ops","withPublic_1","paddedMsg","publicEncrypt","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","oaep","cur","nonZero","pkcs1","withPublic","privateDecrypt","zBuffer","db","dif","privateEncrypt","publicDecrypt","oldBrowser","safeBuffer","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","uint","randombytes","rng","pseudoRandomBytes","prng","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","getDiffieHellman","createECDH","randomFill","rf","randomFillSync","createCredentials","DH_CHECK_P_NOT_SAFE_PRIME","DH_CHECK_P_NOT_PRIME","DH_UNABLE_TO_CHECK_GENERATOR","DH_NOT_SUITABLE_GENERATOR","NPN_ENABLED","ALPN_ENABLED","RSA_PKCS1_PADDING","RSA_SSLV23_PADDING","RSA_NO_PADDING","RSA_PKCS1_OAEP_PADDING","RSA_X931_PADDING","RSA_PKCS1_PSS_PADDING","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID","WAX_DEFAULT_MEDIA_LIST","randomDefaultMediaImage","random","randomNumberFromRange","imageResize","urlWithSize","getURL","local","isIPFS","arrUrls","hashIdFromAssetId","vals","stringHashToNum","useUal","isEnabledDualSignature","isDisabledDualSales","sendActionsForDualSignature","sendActions","createAction","dualSignature","sell","asset_ids","sortedAssetIds","asset_contract","maker_marketplace","is_deferred_listing","sender","recipient","sender_asset_ids","recipient_asset_ids","memo","buy","saleId","asset_ids_to_assert","listing_price_to_assert","settlement_symbol_to_assert","quantity","buyer","intended_delphi_median","taker_marketplace","createAuction","assetId","startingBid","duration","buy_now_price","totalStartingBid","totalBuyOut","starting_bid","buyout_price","bid_increase","acceptBcbrawlersTerm","deferSupportAutoRetrive","permissions","perm_name","isDelegateForAutoRetrive","auth","threshold","weight","waits","requirement","defer","deposit_fee","burnItems","claimDefer","transferDeferred","checkTransaction","auctionBid","bid","auctionId","totalBid","bidder","cancelAuction","cancelSale","offerId","market","isDeferred","offer_id","cancelMultipleSales","salesObj","arrActions","claimAuction","claimAuctionSell","borrowDsll","dsll_id","lendee","cancelDsll","getAtomicConfig","auctionBuyOut","buyOutPrice","makeOffer","marketContract","expired_time_sec","id1","id2","cancelOffer","buyoffer_id","acceptOffer","declineOffer","formatWaxp","BigNumber","shiftedBy","formatUsd","convertToWaxp","bigPrice","bigMedian","bigPrecision","exponentiatedBy","CONVERT_WAXP_USD_PARAMS","convertedPrice","dividedBy","multipliedBy","checkEndTime","endTime","HighlightContainer","border","borderRadius","background","paddingLeft","paddingRight","FooterAcceptPolicy","isAcceptPolicy","onAcceptPolicy","Row","gutter","justify","Col","align","Checkbox","onChange","lg","_t","AudioWrapper","styled","UseHoverToPlay","isPlay","delay","onPause","onPlay","hoverToPlayTimer","useRef","isMouseOver","timer","onMouseOver","onMouseLeave","clearTimeout","HoverToPlayContext","Audio","WhitelistAndVerify","stroke","WhitelistOrVerify","Check","ThreeDot","HoverToPlayAudio","Tooltip","zIndex","placement","alt","AudioIcon","AudioPlayer","layout","autoPlay","customIcons","play","FaPlay","color","forward","FaAngleDoubleRight","rewind","FaAngleDoubleLeft","IoMdPause","BsVolumeUpFill","volumeMute","BsVolumeMute","customProgressBarSection","RHAP_UI","CURRENT_TIME","PROGRESS_BAR","DURATION","VOLUME","timeFormat","customControlsSection","MAIN_CONTROLS","HoverToPlayVideo","renderPreview","LazyLoadVideo","controls","muted","loop","playsInline","poster","AssetCardPreview","getPreview","_asset$video","_asset$audio","AssetsPreview","moreInfo","currentAsset","boxShadow","SalePreview","SaleSummary","_sale$assets","firstAsset","saleSummaries","template_mint","summary","BuyTheSale","onConfirmed","disabled","marginTop","md","CollectionStatus","CollectionWithStatus","marginLeft","WHITELISTED","WhiteListOrVerifyIcon","VERIFIED","WhiteListAndVerifyIcon","AwaitProgressTimeLine","showColor","showStatusOfProgress","Timeline","Item","Progress","percent","showInfo","ContentWrapper","ProcessingBuyModal","visible","finishDescription","centered","AssetDetailContext","RapidSaleBuyable","goToUserInventory","setAssetDetail","salePrice","calculateSalePrice","settlementSymbol","convertToUsd","location","cursor","wait","millisecond","CancellingSaleModal","ADMIN_REMOVED","CancelSaleModal","onSubmit","RapidSaleCancelable","market_contract","isCancelled","doCancelRapidSale","titles","AssetListing","listingItems","isFetching","getListingSales","listingSales","template_id","Skeleton","Input","active","isOwner","lim","p2b","n2b","b2n","n2p","map$1","F","h1","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","Z","Y","O","L","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names","RGB_RE","modHSL","ratio","Color","tkeys","nk","unpack","transparent","nameParse","charAt","exec","rgbParse","hwb2rgb","hsv2rgb","hueParse","functionParse","_rgb","_valid","rgbString","hexString","isShort","hslString","mix","interpolate","rgb1","rgb2","clearer","greyscale","opaquer","lighten","darken","saturate","desaturate","rotate","deg","noop","uid","isNullOrUndef","isObject","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","each","loopable","_elementsEqual","ilen","v0","datasetIndex","klen","isValidKey","_merger","tval","sval","merge","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","part","_splitKey","_getKeyResolver","_capitalize","defined","isFunction","setsEqual","has","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","almostEquals","epsilon","niceNum","roundedRange","niceRange","fraction","isNumber","isNonPrimitive","parseFloat","toRadians","degrees","_decimalPlaces","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","angle","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","_lookupByKey","ti","_rlookupByKey","arrayEvents","unlistenArrayEvents","_chartjs","requestAnimFrame","requestAnimationFrame","throttled","argsToUse","ticking","_toLeftRightCenter","_alignStartEnd","atEdge","elasticIn","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","intlCache","formatNumber","locale","cacheKey","formatter","Intl","NumberFormat","getNumberFormat","formatters","tickValue","ticks","chart","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","Ticks","overrides","descriptors","getScope$1","Defaults","_descriptors","_appliers","animation","backgroundColor","borderColor","datasets","devicePixelRatio","platform","getDevicePixelRatio","elements","font","family","lineHeight","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","includeInvisible","maintainAspectRatio","onHover","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","targetName","scopeObject","targetScopeObject","privateName","appliers","defaults","_scriptable","_indexable","_fallback","easing","resize","show","animations","hide","bottom","display","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","dash","dashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","gc","longest","textWidth","measureText","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","borderWidth","_isPointInArea","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","line","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxDescent","yDecoration","actualBoundingBoxAscent","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","strokeWidth","strokeColor","translation","textBaseline","setRenderOpts","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","objProps","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","inputs","cacheable","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getOwnPropertyDescriptor","getKeysFromAllScopes","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","isScriptable","getValue","delete","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","capControlPoint","pt","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","ownerDocument","defaultView","positions","getPositionedStyle","styles","getRelativePosition","borderBox","boxSizing","paddings","borders","box","touches","offsetX","offsetY","shadowRoot","useOffsetPos","getBoundingClientRect","clientX","clientY","getCanvasPosition","round1","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","property","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","normalizeSegment","_boundSegment","segment","startBound","endBound","getSegment","prevValue","inside","subStart","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","replacer","getSizeForArea","chartArea","Animator","_request","_charts","_running","_lastDate","_notify","anims","numSteps","currentStep","_refresh","running","draw","_active","_total","tick","_getAnims","charts","complete","listen","_duration","cancel","remove","animator","interpolators","boolean","factor","c0","Animation","cfg","currentValue","_fn","_easing","_start","_loop","_target","_prop","_from","_to","_promises","elapsed","promises","rej","resolved","Animations","_chart","_properties","configure","animationOptions","animatedProps","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","static","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","initialize","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_dataCheck","iAxisKey","vAxisKey","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","getMinMax","canStack","otherScale","hidden","createStack","NEGATIVE_INFINITY","otherMin","otherMax","minDefined","maxDefined","getUserBounds","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","_clip","toClip","defaultClip","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","numMeta","numData","_insertElements","_removeElements","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","parseValue","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","startEnd","setInflateAmount","inflateAmount","binarySearch","metaset","spanGaps","lookupMethod","_reversePixels","distanceToDefinedLo","distanceToDefinedHi","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","center","getCenterPoint","distance","getNearestCartesianItems","startAngle","endAngle","getProps","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","atan2","getAngleFromPoint","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","changed","fullSize","setBoxDims","placeBoxes","userPadding","placed","stackWeight","layouts","addBox","_layers","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","isHorizontal","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","buildStacks","setLayoutDims","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","aspectRatio","releaseContext","getMaximumSize","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","nodeListContains","nodeList","createAttachObserver","observer","MutationObserver","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","container","clientWidth","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","$proxies","attach","detach","proxies","bbWidth","bbHeight","margins","maxHeight","containerSize","containerStyle","containerBorder","containerPadding","clientHeight","getContainerSize","isConnected","Element","tooltipPosition","hasValue","newTicks","spacing","majorStart","majorEnd","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","_startPixel","_endPixel","lineValue","getPixelForTick","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","dimension","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","determinedMaxTicks","_tickSize","determineMaxTicks","ticksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","minSize","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","jlen","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","gcLen","garbageCollect","valueAt","idx","getPixelForValue","getValueForPixel","getPixelForDecimal","decimal","getDecimalForPixel","getBasePixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","positionAxisID","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","getLineWidthForValue","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","drawTitle","titleX","titleY","titleArgs","tz","gz","bz","axisID","_maxDigits","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getElement","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","registry","component","camelMethod","PluginService","notify","hook","_createDescriptors","plugin","cancelable","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","initOptions","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","addIfFound","_config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","timeout","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","_dataset","buildOrUpdateControllers","newControllers","isDatasetVisible","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getDatasetArea","getDatasetClipArea","getElementsAtEventForMode","getVisibleDatasetCount","setDatasetVisibility","toggleDataVisibility","getDataVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","setStyle","lineCap","lineJoin","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","pathSegment","lineMethod","stepped","tension","cubicInterpolationMode","getLineMethod","fastPathSegment","prevX","minY","maxY","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","_decimated","usePath2D","Path2D","inRange$1","hitRadius","getBarBounds","bar","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","refRect","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","generateLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","legendItem","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","textDirection","fontColor","lineDash","drawOptions","SQRT2","centerX","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","isListened","hoveredItem","sameItem","plugin_legend","_element","_args","legend","afterEvent","ci","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","positioners","average","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","callbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","colorY","centerY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","_getLabelForValue","relativeLabelSize","minSpacing","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","generateTicks$1","_setMinAndMaxByKey","ChartJS","_addedLabels","added","addedLabels","addIfString","findOrAddLabel","hoverBorderWidth","hoverRadius","mouseX","mouseY","inXRange","inYRange","capBezierPoints","animated","_fullLoop","_path","_points","_segments","_pointsUpdated","_datasetIndex","updateControlPoints","controlPoints","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","splineCurveMonotone","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","segments","segmentOptions","findStartAndEnd","chartContext","baseStyle","addStyle","st","p0","p0DataIndex","p1DataIndex","doSplitByStyles","splitByStyles","solidSegments","_computeSegments","_boundSegments","_interpolate","_getInterpolationMethod","interpolated","segmentMethod","strokePathWithCache","strokePathDirect","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","boundingRects","addRectPath","categoryPercentage","barPercentage","grouped","_index_","_value_","bars","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","currentParsed","iScaleValue","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","$bar","visibleMetas","_arrayUnique","getAllScaleValues","updateMinAndPrev","computeMinSampleSize","stackCount","baseValue","minBarLength","actualBase","floating","barSign","halfGrid","maxBarThickness","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","animationsDisabled","pointCount","_getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","_scaleRangesChanged","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","HistoricalSalePriceChart$1","historicalItems","isChartDataFetching","moment","totalSales","averagePrice","lineTension","LoadingOutlined","onPointerEnterCapture","onPointerLeaveCapture","StatisticItem","Option","Select","TemplateHistoricalPriceChart","totalVolume","setFilterPriceHistory","filterBackDays","getHistoricalPrice","templateId","today","endOf","toDate","startOf","calcTotalVolume","totalPrice","calcAveragePrice","UsePriceHistory","SelectDaysFilter","StatisticPriceItem","HistoricalSalePriceChart","AssetSalePriceHistory","ConnectWalletIcon","RequestLogin","AccountContext","DownOutlinedIcon","UserInfo","balance","rel","minWidth","Dropdown","menu","preventDefault","LoginMenu","Navigator","currentPageTitle","canBackToPreviousPage","onBack","ArrowLeftOutlined","AuctionState","ON_SALE_STATUSES","BlackListAsset","DeListedAsset","NotOnSale","AssetCardPreviewWithDefaultContent","sellTypes","icon","FieldTimeOutlined","DollarCircleOutlined","HourglassOutlined","SellTypes","selectedSaleType","onSelectSaleType","Form","supportCurrencyOptions","RapidSaleForm","form","sameCollectionAssets","isEnableBundleSale","colon","labelCol","labelAlign","initialValue","rules","required","setFieldsValue","placeholder","P2OSaleForm","AuctionSaleForm","SellFee","fees","fee","SellAsset","startSell","useForm","useWatch","bundleItems","resetFields","marginBottom","Switch","SellProgressingModal","AssetQueryType","SellableAsset","doAuction","doRapidSale","doP2O","UseUal","transactionProgress","processingTransaction","roundPrice","trunc","convertPrice","newPrice","Sales","days","hours","buyNowPrice","Auctions","convertToSeconds","doLending","Deferred","medianValue","depositFee","schema","_isAcceptBc$rows","isAcceptBc","getAcceptBcbrawlers","acceptBc","isSupportAutoRetrive","setSellableAssetCardState","useSellableAsset","BidTheAuction","minimumBidIncrease","minimum_bid_increase","calcMinimumAmount","minimumAmount","validator","InputNumber","AuctionBiddable","toLocaleUpperCase","AuctionCancellable","doCancelAuction","ProcessingModal","Text","Typography","ConfirmClaimModal","strong","AuctionClaimable","claimType","AuctionNotCancellable","OnAuction","RequireLoginAuction","P2OBuyable","P2OCancellable","doCancelSale","ConfirmModal","Button","P2OClaimable","P2OPendingTransfer","P2OInprogress","P2OSold","ConfirmTransferModal","P2OTransferable","isTransferred","doTransfer","RequireLoginP2O","DeListedSale","RequireLoginSale","CompositeAssetAction","_ref","selectComponent","useCallback","isBlackList","BLACKLIST","isMyAsset","notOnSale","_item$sales","_item$auctions","isNotSale","_item$auctions2","isOnAuction","_item$auctions3","selectSaleComponent","getSaleType","isMySale","isAuctionEnded","SOLD","canClaimable","claimed_by_buyer","isOnSale","isExpired","end_at","getTime","isMyBuy","AuctionBuyNow","BaseLabel","backgroundLabel","colorLabel","CountdownStyled","Statistic","Countdown","AuctionSaleLabel","CurrencyOptions","DurationOptions","dateValue","OfferForm","onFormFinish","setDuration","datePickerDefaultVal","dayjs","initialValues","durationSelect","durationPicker","span","pattern","optionFilterProp","filterOption","dateValueMapping","DatePicker","disabledDate","showTime","OfferModalBody","nftItemFees","setFees","totalFeePercent","table_key","getSellingFee","fee_recipient","fee_name","MakeOfferModal","doOffer","validateFields","submit","OfferProgressModal","offerState","sellPrice","MakeableOffer","setOfferState","useOffer","onViewAfterOffer","AssetPrice","collection","_item$assets","isSold","isEnd","isRapidSale","canBuyOut","LISTED","isBundle","canMakeOffer","_t2","CarouselSaleWrapper","AssetPreviewMedia","currentAssetIndex","Carousel","afterChange","AvatarWithName","avatar","TitleWithValue","AssetBaseInfo","infos","creatorAvatar","ownerAvatar","accountNames","creator","ownerAccount","creatorAccount","author","borderBottom","Panel","Collapse","CollapsibleSection","isExpand","defaultActiveKey","fakeAsset","is_transferable","is_burnable","collection_data","images","socials","creator_info","collection_fee","issued_supply","max_supply","img_back","mutable_properties","immutable_properties","ease","luck","shine","cardid","rarity","backimg","difficulty","created_at_time","created_at_block","CardWrapper","Card","preview","isScaling","cover","NotOnSaleLabel","AssetCard","renderAction","renderContent","renderMenu","itemHref","isEnableAction","isShowDetail","useHoverToPlay","Provider","ThreeDotIcon","stopPropagation","BlackListAssetCard","DeListedAssetCard","NotOnSaleCard","SellableAssetCard","P2OLabel","endAt","alignItems","RapidSaleLabel","PriceWithSymbol","justifyItems","gap","renderCurrency","SaleCard","focusedAssetIndex","goToSaleDetail","_sale$asset_ids","bundleSale","isBundleSale","DeListedSaleCard","RequireLoginSaleCard","AuctionCard","AuctionCancellableCard","AuctionNotCancellableCard","AuctionBiddableCard","AuctionClaimableCard","OnAuctionCard","RequireLoginAuctionCard","RapidSaleBuyableCard","P2OBuyableCard","P2OCancellableCard","P2OClaimableCard","P2OCard","P2OPendingTransferCard","P2OInprogressCard","P2OSoldCard","RequireLoginP2OCard","P2OTransferableCard","RapidSaleCancelableCard","CompositeAssetCard","AssetList$1","isFullScreen","xxl","AssetCardSkeleton","Image","Loading","pageSize","MoreAssetsFromSchema","fetchAssets","AssetList","NameAndCollection","_typeof","requiredArgs","argument","argStr","defaultOptions","getDefaultOptions","getTimezoneOffsetInMilliseconds","utcDate","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","setUTCFullYear","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","roundingMap","formatDistanceLocale","lessThanXSeconds","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","defaultWidth","formats","formatLong$1","full","long","medium","dateTime","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","localize$1","ordinalNumber","dirtyNumber","rem100","era","narrow","abbreviated","wide","quarter","month","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","buildMatchFn","matchResult","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","rest","matchPattern","parsePattern","parseResult","defaultLocale","formatDistance","token","tokenValue","addSuffix","comparison","formatLong","formatRelative","_date","_baseDate","localize","weekStartsOn","firstWeekContainsDate","MINUTES_IN_MONTH","dirtyDate","dirtyBaseDate","_options$locale","localizeOptions","Boolean","months","seconds","differenceInMilliseconds","getRoundingMethod","roundingMethod","differenceInSeconds","offsetInSeconds","minutes","includeSeconds","difference","differenceInCalendarMonths","setDate","setMonth","isLastMonthNotFull","setHours","endOfDay","setFullYear","endOfMonth","isLastDayOfMonth","differenceInMonths","nearestMonth","monthsSinceStartOfYear","years","capitalizeFirstLetter","ConfirmAcceptModal","_props$offer","_props$offer2","_props$offer3","_props$offer4","_props$offer5","offerInfos","offer","expired_at","offerInfo","ConfirmingCancelOrDeclineModal","upperFirst","ConfirmingOfferModal","ConfirmingModal","UseActionableOffer","useTransactionProgress","startAction","startProcessAction","doAction","isAccepted","processAction","ActionableOfferContext","WrapperActionableOffer","_props$offer$assets","OfferItem","useActionableOffer","Offers","offers","getOffers","Properties","withLabelProperties","_Fragment","defaultItems","StatisticPrice","getStatisticPrice","lowestListingPrice","highestPrice","suggestedPrice","AssetDetail","_selectedItem$assets","selectedItem","refTop","_refTop$current","scrollIntoView","_selectedItem$assets2","_selectedItem$assets3","getCollection","ref","FilterByType","filterTypes","selectedValue","onSelectValue","FilterByBundle","FilterByCurrency","SchemaItem","isSelected","CheckIcon","FilterBySchema","selectedSchema","onSelectSchema","schemas","CollectionItem","FilterByCollection","collection_verified","collection_whitelisted","scopedCollections","selectedCollection","onSelectCollection","fetchCollections","SearchOutlined","Filters","scopeFilterTypes","isEnableFilterByCollectionStatus","_filter$collection_na","_filter$schema_name","useMarketPlaceFilter","fetchData","filters","omit","onChangeFilter","NoData","flexDirection","justifyContent","supportedSortTypes","sory_type","Sort","onChangeSort","SortForAsset","SearchAndSort","filterType","onKeyDown","ListAssets","itemPerPage","handleLoadMore","AccountAvatarDefaultIcon","CopyIcon","UserInventory","participant","goToAssetList","accountCollections","fetchAccountCollections","setUserInventory","UseUserInventory","Pagination","showSizeChanger","hideOnSinglePage","_offer$assets","_offer$assets2","initialFilter","_state$pagination","_pagination$items","_pagination$paginatio","_pagination$paginatio2","_pagination$paginatio3","hasData","Spin","OffersMade","OffersReceived","UserOffers","currentTab","Tabs","MarketPlace","isShowFilter","useNavigator","currentRoute","setNavigator","goToAssetDetail","goToUserOffers","UseNavigator","useWaxAuthen","useAccount","fetchAccount","core_liquid_balance","onlyNumbers","getBalance","UseAccount","useCurrency","fetchRates","rates","rate","UseCurrency","useAssetDetail","UseAssetDetail","WaxMarketPlaceWebComponent","reactToWebComponent","_props$isshowfilter","_props$collections","isshowfilter","itemperpage","ConfigProvider","theme","colorPrimary","fontFamily","ReactDOM","customElements"],"mappings":"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EF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINxC,IAAK,CACHxW,IAAK,EACLgZ,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAE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"}